{
  "schemaVersion": 1,
  "generatedBy": "tools/canonical/generate-public-truth.mjs",
  "canonicalSource": "src/config/security/securityFactCanonR35.ts",
  "canonVersion": "R3.5-1.0",
  "sourceRelease": "OPERIO R3.2 · cf896bbdbe4a4a7992d845fa1fa16d458cdc59d6",
  "checkedAt": "2026-08-13",
  "externalLegalReview": "NOT_PERFORMED",
  "facts": [
    {
      "factId": "SEC.AUTH.PASSKEY",
      "category": "authentication",
      "state": "IMPLEMENTED",
      "label": "Passkey-Anmeldung",
      "statement": "Persönliche Zugänge melden sich passwortlos mit WebAuthn/Passkey an.",
      "boundary": "Geräteschutz und Bildschirmsperre bleiben Aufgabe des Betriebs."
    },
    {
      "factId": "SEC.AUTH.DEVICE_BINDING",
      "category": "device binding",
      "state": "IMPLEMENTED",
      "label": "Gerätebindung",
      "statement": "Passkey-Berechtigungsnachweise und persönliche Sitzungen werden einem registrierten Gerät zugeordnet.",
      "boundary": "Die Zuordnung ersetzt weder Geräteschutz noch Betriebssystem-Updates auf dem Endgerät."
    },
    {
      "factId": "SEC.AUTH.RECOVERY",
      "category": "account recovery",
      "state": "IMPLEMENTED",
      "label": "Kontenweite Wiederherstellung",
      "statement": "Die Wiederherstellung ist E-Mail-gebunden, kontenweit und bindet jedes neue Gerät mit einem neuen WebAuthn-Nachweis.",
      "boundary": "Kein SMS-, OTP-, Passwort- oder Tenant-Eingabeverfahren; Mailnachweis 20 Minuten, Recovery-Grant 30 Minuten."
    },
    {
      "factId": "SEC.AUTH.REVOCATION",
      "category": "session security",
      "state": "IMPLEMENTED",
      "label": "Widerruf alter Zugänge",
      "statement": "Nach erfolgreicher Recovery werden alte Sitzungen, Geräte und WebAuthn-Berechtigungsnachweise widerrufen.",
      "boundary": "Alte Geräte erhalten kein automatisches neues Vertrauen."
    },
    {
      "factId": "SEC.AUTH.LOGOUT",
      "category": "logout and invalidation",
      "state": "IMPLEMENTED",
      "label": "Abmeldung und Sitzungsablauf",
      "statement": "Sitzungen können serverseitig widerrufen werden und enden zusätzlich nach den festgelegten Inaktivitäts- und Maximallaufzeiten.",
      "boundary": "Eine Abmeldung beendet nicht die Verantwortung für ein entsperrtes oder gemeinsam genutztes Endgerät."
    },
    {
      "factId": "SEC.AUTH.ROLES",
      "category": "roles and permissions",
      "state": "IMPLEMENTED",
      "label": "Rollen und Berechtigungen",
      "statement": "Rollen, Module und Objektbezug werden serverseitig geprüft.",
      "boundary": "Der Betrieb bleibt für fachliche Zuständigkeiten verantwortlich."
    },
    {
      "factId": "SEC.TENANT.ISOLATION",
      "category": "tenant isolation",
      "state": "IMPLEMENTED",
      "label": "Mandantentrennung",
      "statement": "Betrieb, Rolle und Objekt werden bei geschützten Zugriffen gemeinsam geprüft.",
      "boundary": "Keine pauschale Garantie gegen jeden denkbaren Angriff."
    },
    {
      "factId": "SEC.REQUEST.CSRF",
      "category": "request protection",
      "state": "IMPLEMENTED",
      "label": "Anfrageschutz",
      "statement": "Zustandsändernde Browseranfragen sind durch serverseitige CSRF-Prüfungen geschützt.",
      "boundary": "Wirksamkeit setzt die vorgesehene Browser- und Sitzungsnutzung voraus."
    },
    {
      "factId": "SEC.REQUEST.RATE_LIMIT",
      "category": "abuse protection",
      "state": "IMPLEMENTED",
      "label": "Begrenzung missbräuchlicher Anfragen",
      "statement": "Sicherheitsrelevante Anmeldewege besitzen technische Rate-Limits.",
      "boundary": "Rate-Limits sind kein absoluter Schutz gegen jeden Missbrauch."
    },
    {
      "factId": "SEC.TRANSPORT.TLS",
      "category": "transport",
      "state": "IMPLEMENTED",
      "label": "Verschlüsselte Übertragung",
      "statement": "Öffentliche Produktzugriffe erfolgen über HTTPS.",
      "boundary": "Keine Behauptung einer Ende-zu-Ende-Verschlüsselung."
    },
    {
      "factId": "SEC.EVIDENCE.INTEGRITY",
      "category": "document integrity",
      "state": "IMPLEMENTED",
      "label": "Nachweis-Integrität",
      "statement": "Ausgewählte Dokument- und Nachweiswege prüfen Größe, Hash und Herkunft.",
      "boundary": "Ein Hash ersetzt keine fachliche oder rechtliche Freigabe."
    },
    {
      "factId": "SEC.AUDIT.LOGGING",
      "category": "security and audit logging",
      "state": "IMPLEMENTED",
      "label": "Sicherheits- und Auditprotokollierung",
      "statement": "Ausgewählte sicherheits- und zugriffsrelevante Vorgänge werden als strukturierte Auditereignisse protokolliert.",
      "boundary": "Protokollierung ist ereignisbezogen und keine lückenlose Überwachung sämtlicher Nutzerhandlungen."
    },
    {
      "factId": "SEC.EXPORT.EXCLUSIONS",
      "category": "export boundary",
      "state": "IMPLEMENTED",
      "label": "Sicherheitsgrenzen beim Export",
      "statement": "Datenexporte schließen Sitzungs-, Recovery-, WebAuthn-, Geräte- und Provider-Geheimnisse ausdrücklich aus.",
      "boundary": "Der fachliche Exportumfang richtet sich nach dem vorgesehenen Exportvertrag; er ist kein vollständiger Systemabzug."
    },
    {
      "factId": "SEC.OFFLINE.BOUNDARY",
      "category": "offline local data",
      "state": "PARTIAL",
      "label": "Begrenztes lokales Puffern",
      "statement": "Bereits begonnene Eingaben können bei kurzem Verbindungsabbruch tenant- und nutzergebunden zwischengespeichert und erneut übertragen werden.",
      "boundary": "Kein vollständiger Dauer-Offlinebetrieb; keine Behauptung verschlüsselter lokaler Speicherung."
    },
    {
      "factId": "SEC.BACKUP.ROTATION",
      "category": "backup",
      "state": "IMPLEMENTED",
      "label": "Backup-Rotation",
      "statement": "Backups folgen einer dokumentierten Rotation von bis zu 90 Tagen.",
      "boundary": "Eine bestehende Backup-Verschlüsselung ist nicht belegt und wird nicht behauptet."
    },
    {
      "factId": "SEC.RESTORE.RECONCILIATION",
      "category": "restore",
      "state": "IMPLEMENTED",
      "label": "Restore-Abgleich",
      "statement": "Nach einem Restore werden Löschzustände erneut abgeglichen.",
      "boundary": "Restore ersetzt keine fachliche Datenprüfung."
    },
    {
      "factId": "SEC.LEGAL_HOLD",
      "category": "retention",
      "state": "IMPLEMENTED",
      "label": "Kontrollierter Legal Hold",
      "statement": "Ein dokumentierter operatorgebundener Legal Hold kann eine Löschung kontrolliert blockieren.",
      "boundary": "Legal Hold ist keine automatische Rechtsberatung."
    },
    {
      "factId": "SEC.PROVIDER.BOUNDARY",
      "category": "provider/runtime",
      "state": "IMPLEMENTED",
      "label": "Transparente externe Datenwege",
      "statement": "Hosting ist Hetzner zugeordnet; Domain, DNS und E-Mail goneo. Stripe und externe KI-Anbieter sind aktuell nicht aktiv.",
      "boundary": "Eine spätere Aktivierung erfordert neue technische und rechtliche Qualifikation."
    },
    {
      "factId": "SEC.ASSISTO.LOCAL",
      "category": "external AI",
      "state": "IMPLEMENTED",
      "label": "ASSISTO ohne externes Modell",
      "statement": "ASSISTO arbeitet aktuell lokal-deterministisch; Kundendaten werden nicht an ein externes KI-Modell übertragen.",
      "boundary": "Keine autonome rechtlich bindende Entscheidung und keine stillen kanonischen Geschäftsdatenänderungen."
    },
    {
      "factId": "SEC.TRACKING.NONE",
      "category": "tracking/storage",
      "state": "IMPLEMENTED",
      "label": "Keine Analyse- oder Werbetracker",
      "statement": "Das dokumentierte Produktmodell nutzt keine Analyse- oder Werbetracker und nur technisch erforderliche Speicherung.",
      "boundary": "Gilt für den qualifizierten aktuellen Stand."
    }
  ],
  "explicitlyNotVerified": [
    {
      "factId": "SEC.BACKUP.ENCRYPTION",
      "state": "NOT_VERIFIED",
      "boundary": "Darf nicht als aktive Schutzmaßnahme beworben werden."
    }
  ]
}
