diff --git a/package.json b/package.json index ee1074d..bbf955d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/audit-webui", - "version": "0.1.18", + "version": "0.1.19", "private": true, "type": "module", "main": "webui/src/index.ts", diff --git a/pyproject.toml b/pyproject.toml index 1043004..4969395 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-audit" -version = "0.1.18" +version = "0.1.19" description = "GovOPlaN audit platform module." readme = "README.md" requires-python = ">=3.12" diff --git a/src/govoplan_audit/backend/manifest.py b/src/govoplan_audit/backend/manifest.py index 3427580..81edf9d 100644 --- a/src/govoplan_audit/backend/manifest.py +++ b/src/govoplan_audit/backend/manifest.py @@ -74,7 +74,7 @@ def _dsar_provider(_context: ModuleContext) -> AuditDsarProvider: manifest = ModuleManifest( id="audit", name="Audit", - version="0.1.18", + version="0.1.19", permissions=AUDIT_PERMISSIONS, role_templates=AUDIT_ROLE_TEMPLATES, required_capabilities=( @@ -113,6 +113,20 @@ manifest = ModuleManifest( documentation_types=("admin", "user"), audience=("data_subject", "auditor", "security_officer", "operator"), related_modules=("core", "access", "policy", "ops"), + translations={ + "de": { + "title": "Datenschutzanfragen für Audit", + "summary": "Minimierte, betroffenenbezogene Rechenschaftsnachweise in Auskunftspakete aufnehmen und dabei die unveränderliche Aufbewahrung wahren.", + "body": ( + "Audit korreliert genaue Konto-, Mitgliedschafts-, Identitäts- oder Benutzerkennungen ausschließlich im aktiven Mandanten. " + "Beigetragen werden Akteursdaten aus Audit-Einträgen, strukturierte Akteursumschläge von Plattformereignissen, Zuordnungen manueller Wiederholungen und Anforderungszuordnungen von Nachweispaketen. " + "Die Projektion erhält Handlung, Objekt, Ereignis, Trace, Quelle, Richtlinie, Status, Zeitangaben und Prüfverweise, die zur Erklärung der Beteiligung der betroffenen Person erforderlich sind. " + "Beliebige Audit-Details, Ereignisnutzdaten, institutioneller Kontext, Zustellschlüssel und -fehler, Wiederholungsgründe, Anfragenutzdaten, erzeugte Paketnutzdaten und Zugangsdaten bleiben ausgeschlossen. " + "Optionale genaue Datensatzverweise grenzen Ergebnisse ein, ersetzen aber niemals die Bestätigung der Akteurszuordnung. Systemweite und mandantenübergreifende Nachweise werden nicht in Mandantenanfragen aufgenommen. " + "Alle Löschaktionen von Audit sind reine Aufbewahrungsentscheidungen und nicht ausführbar, weil die Datensätze unveränderliche Rechenschaftsnachweise unter Aufbewahrung und rechtlicher Sperre sind." + ), + } + }, metadata={ "help_contexts": [ "audit.admin.tenant", @@ -139,6 +153,16 @@ manifest = ModuleManifest( body="Audit views are permission- and tenant-scoped. Entries are evidence, not editable business records. Sensitive payloads may be redacted while stable resource, actor, outcome, request, run, and trace references remain available for investigation.", documentation_types=("user",), audience=("auditor", "tenant_admin", "operator"), + translations={ + "de": { + "title": "Berechtigte Audit-Nachweise lesen", + "summary": "Der Audit-Verlauf erklärt, wer eine gesteuerte Handlung wann ausgeführt hat und welche Ressourcen- und Trace-Zusammenhänge beteiligt waren.", + "body": ( + "Audit-Ansichten sind nach Berechtigung und Mandant begrenzt. Einträge sind Nachweise und keine bearbeitbaren Fachdaten. " + "Sensible Nutzdaten können geschwärzt sein, während stabile Verweise auf Ressource, Akteur, Ergebnis, Anfrage, Lauf und Trace für Untersuchungen verfügbar bleiben." + ), + } + }, metadata={ "kind": "reference", "help_contexts": [ @@ -157,6 +181,17 @@ manifest = ModuleManifest( documentation_types=("admin",), audience=("auditor", "security_officer", "operator"), related_modules=("policy", "ops"), + translations={ + "de": { + "title": "Audit-Aufzeichnung, Aufbewahrung und Ereigniszustellung betreiben", + "summary": "Audit verwaltet dauerhafte Audit-Datensätze, Aufbewahrungsvorgänge und die transaktionale Plattformereignis-Outbox.", + "body": ( + "Module zeichnen begrenzte Audit-Fakten über die Audit-Fähigkeit auf. Gesteuerte Plattformereignisse werden zusammen mit Wiederholungs- und Zustellmetadaten in die Outbox übernommen, sodass ein ausgefallener Verbraucher die ursprüngliche Transaktion nicht auslöscht. " + "Die Worker-Zustellung wird nach Mandantenberechtigung getrennt; ein nicht verfügbarer Verbraucher behält seine dauerhafte Zustellung und erfasst ein Ergebnis, das einen betrieblichen Eingriff verlangt, statt das Ereignis zu bestätigen. " + "Aufbewahrung und destruktive Ausmusterung müssen die konfigurierten Nachweis- und Wiederherstellungsgarantien erhalten." + ), + } + }, metadata={ "kind": "reference", "help_contexts": [ @@ -180,6 +215,18 @@ manifest = ModuleManifest( ), ), related_modules=("policy", "files"), + translations={ + "de": { + "title": "Audit-Nachweise exportieren und unabhängig prüfen", + "summary": "Berechtigte Prüfer können begrenzte, geschwärzte Nachweispakete mit kanonischen Hashes und optionalen vertrauenswürdigen Signaturen exportieren.", + "body": ( + "Mandantenexporte erfordern audit:evidence:export und bleiben mandantenbezogen; systemweite oder unbeschränkte Exporte erfordern audit:system_evidence:export. " + "Jedes Paket enthält versionierte Audit-Datensatz-DTOs, Trace- sowie Richtlinien- und Quellenherkunft, externe Nachweisverweise anderer Module, Schwärzungserklärungen und kanonische Hashes, jedoch niemals vollständige Nachrichten, Empfängerlisten, Geheimnisse, Zugangsdaten oder Dateiinhalte. " + "Erzeugung und Download werden auditiert. Verwenden Sie govoplan-audit-verify mit optionalen vertrauenswürdigen öffentlichen Ed25519-Schlüsseln und externen Nachweisdateien, um gültige, unvollständige, nicht prüfbare, nicht unterstützte und manipulierte Nachweise ohne Datenbankzugriff zu unterscheiden. " + "Module liefern externe Verweise als serialisierte, mit Core EvidenceReference kompatible Fakten oder über die Exportanfrage; sie importieren keine Audit-Interna." + ), + } + }, metadata={ "kind": "workflow", "help_contexts": [ diff --git a/tests/test_audit_module_contract.py b/tests/test_audit_module_contract.py index 637527b..b8483ed 100644 --- a/tests/test_audit_module_contract.py +++ b/tests/test_audit_module_contract.py @@ -40,6 +40,14 @@ class AuditModuleContractTests(unittest.TestCase): operations = topics["audit.recording-retention-and-outbox"] self.assertIn("audit.retention", operations.metadata["help_contexts"]) + def test_public_documentation_has_complete_german_baseline(self) -> None: + for topic in get_manifest().documentation: + german = topic.translations.get("de", {}) + self.assertTrue( + all(german.get(field) for field in ("title", "summary", "body")), + topic.id, + ) + def test_evidence_export_permissions_are_module_owned_and_scope_separated(self) -> None: manifest = get_manifest() permissions = {item.scope: item for item in manifest.permissions} diff --git a/webui/package.json b/webui/package.json index d8e8331..307a52f 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/audit-webui", - "version": "0.1.18", + "version": "0.1.19", "private": true, "type": "module", "main": "src/index.ts",