- 20260915090000_betrieb_client_id_per_tenant (Aufräumpunkt f, L8 offener Punkt 6): globale
Unique-Indizes auf client_id (material_usages, work_sessions, time_entries, activity_notes,
photos, voice_notes, reports, signatures) → @@unique([tenantId, clientId]). Offline-IDs sind nur
je Mandant eindeutig; ein Replay derselben ID in einem anderen Mandanten scheiterte bisher mit
internem Fehler. Keine neuen Tabellen.
- 20260915091000_betrieb_ai_token_limit (Aufräumpunkt k): tenant_settings.ai_monthly_token_limit
(NULL = Plattform-Vorgabe AI_MONTHLY_TOKEN_LIMIT, 0 = unbegrenzt). Keine neue Tabelle.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Migration audit_request_context: ip_address, user_agent an audit_logs (Spec §26)
- writeAuditLog/writePlatformAudit erfassen IP (X-Forwarded-For) und User-Agent
aus dem Request; außerhalb eines Requests (Worker/Skripte) null
- Audit-Viewer liest die neuen Spalten statt Heuristik aus before/after
- deliverMail nutzt Anzeigename und Reply-To aus TenantSettings (Spec §33.2);
Absenderadresse bleibt Plattform-Domain (SPF/DKIM), Header-Injection bereinigt
Gate: tsc, lint, build, 24/24 Tests grün.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>