Files
Hosting-Backoffice/reviews/chatgpt-consolidation-20260518-045303.md

9.3 KiB

1. Zusammenfassung

Claude benennt mehrere valide Architektur-Risiken. Übernommen werden vor allem die Punkte, die direkt sicherheits-, compliance- oder konsistenzrelevant sind:

  • Tenant-Isolation muss technisch erzwungen werden.
  • Secrets dürfen nicht direkt in Fachmodellen gespeichert werden.
  • Superadmin-Zugriffe brauchen Schutzmechanismen.
  • Kritische Statuswechsel brauchen State Machines und Historisierung.
  • Retry/DLQ-Verhalten muss begrenzt und beobachtbar sein.
  • Domänensprache und Modulgrenzen müssen vereinheitlicht werden.

Nicht übernommen wird die Empfehlung „zurück ans Reißbrett“. Stattdessen werden konkrete Projektdateien ergänzt/geändert.


2. Übernommene Punkte

2.1 Tenant-Isolation

Übernehmen:

  • PostgreSQL Row Level Security für tenant-bezogene Tabellen.
  • Tenant-Kontext zentral auf Request-/Job-Ebene.
  • Automatischer Model-Scope zusätzlich zu RLS.
  • Tests gegen Cross-Tenant-Zugriffe.

2.2 Secrets-Management

Übernehmen:

  • Keine API-Keys, Passwörter oder Auth-Codes direkt in Business-Tabellen.
  • Speicherung nur als Secret-Referenz.
  • Verschlüsselung at-rest über Secret-Backend.
  • Rotation und Zugriffsaudit dokumentieren.

2.3 Audit-Log

Übernehmen:

  • Hash-Chain allein reicht nicht als Revisionssicherheit.
  • Audit-Log als append-only behandeln.
  • Export/Archivierung für Compliance ergänzen.
  • Keine Aussage „GoBD-konform“ ohne Verfahrensdokumentation.

2.4 Domain-Management

Übernehmen:

  • Domainmodell um produktionsrelevante Attribute erweitern.
  • Auth-Codes nur als Secret-Referenz.
  • Status für Transfer-Lock, DNSSEC, Whois-Privacy und Expiry ergänzen.

2.5 Kritische Flows

Übernehmen:

  • Vertragsstatus, Zahlungsstatus, Kündigungen und Domain-Transfers nicht als freies CRUD.
  • State Machines einführen.
  • Statusübergänge historisieren.

2.6 Adapter-Resilienz

Übernehmen:

  • Circuit Breaker ergänzen.
  • Health Checks je Adapter.
  • Retry-Limits, Backoff-Caps und DLQ-Verhalten definieren.

2.7 Domänensprache

Übernehmen:

  • Einheitliche Begriffe festlegen.
  • tenant_id, organisation_id, customer_id, kunde nicht vermischen.
  • Fachsprache in Datenmodell, Code und API vereinheitlichen.

2.8 Versionierung von Produkten/Verträgen

Übernehmen:

  • Preise, Produktbedingungen und Vertragsstände versionieren.
  • Rechnungen müssen reproduzierbar bleiben.

2.9 Superadmin

Übernehmen:

  • Superadmin-Zugriffe begrenzen.
  • Break-Glass-Prozess dokumentieren.
  • Kritische Aktionen auditieren.
  • Optional 4-Augen-Freigabe für besonders kritische Aktionen.

3. Abgelehnte oder verschobene Punkte

Abgelehnt

  • „Zurück ans Reißbrett“
    Nicht notwendig. Die Kritikpunkte werden als konkrete Architektur- und Implementierungsänderungen eingearbeitet.

  • Vollständiges Event Sourcing für alle kritischen Flows sofort
    Zu groß für den nächsten Schritt. Stattdessen: State Machines, Statushistorien, Audit-Events.

  • Vollständige Microservice-Aufteilung nach Bounded Contexts
    Wird nicht sofort umgesetzt. Ziel bleibt zunächst ein modularer Monolith mit klaren Modulgrenzen.

Verschoben

  • Externer Timestamp-Service für Audit-Logs
    Später prüfen. Kurzfristig wichtiger: append-only Audit, Export, Archivierung, Berechtigungsschutz.

  • Vollständiges DNS-Record-Management
    Nur umsetzen, wenn das Backoffice tatsächlich DNS-Zonen verwalten soll. Kurzfristig werden Domain-Statusfelder ergänzt.

  • Formale GoBD-Zertifizierung
    Verschoben. Zuerst technische Grundlagen und Verfahrensdokumentation vorbereiten.


4. Neue/geänderte Dateien

Architektur / ADRs

Neu:

  • docs/adr/0020-tenant-isolation-rls.md
  • docs/adr/0021-secrets-management.md
  • docs/adr/0022-audit-log-and-archiving.md
  • docs/adr/0023-state-machines-for-critical-flows.md
  • docs/adr/0024-adapter-resilience-circuit-breaker.md
  • docs/adr/0025-domain-language.md
  • docs/adr/0026-superadmin-break-glass.md
  • docs/adr/0027-product-contract-versioning.md

Ändern:

  • docs/adr/0017-adapter-resilience.md

Security / Tenancy

Neu:

  • app/Support/Tenancy/TenantContext.php
  • app/Http/Middleware/ResolveTenantContext.php
  • app/Models/Concerns/BelongsToTenant.php
  • app/Jobs/Middleware/ResolveTenantForJob.php
  • tests/Feature/Security/TenantIsolationTest.php
  • tests/Feature/Security/TenantContextRequiredTest.php

Neu/ändern:

  • database/migrations/XXXX_enable_rls_for_tenant_tables.sql
  • database/migrations/XXXX_add_tenant_id_indexes.sql

Secrets

Neu:

  • config/secrets.php
  • app/Services/Secrets/SecretStore.php
  • app/Services/Secrets/VaultSecretStore.php
  • app/Services/Secrets/DatabaseEncryptedSecretStore.php
  • app/Services/Secrets/SecretReference.php
  • tests/Feature/Security/SecretStorageTest.php
  • docs/security/secrets-management.md

Ändern:

  • app/Models/RegistrarAccount.php
  • app/Models/Domain.php

Erwartete Änderung:

  • Keine Spalten wie api_key, password, auth_code.
  • Stattdessen Spalten wie secret_reference, auth_code_secret_reference.

Audit / Compliance

Neu:

  • app/Models/AuditLog.php
  • app/Services/Audit/AuditLogger.php
  • app/Services/Audit/AuditArchiveExporter.php
  • database/migrations/XXXX_create_audit_logs_table.php
  • database/migrations/XXXX_restrict_audit_log_mutations.sql
  • tests/Feature/Audit/AuditLogAppendOnlyTest.php
  • docs/compliance/audit-log.md
  • docs/compliance/gobd-verfahrensdokumentation-template.md

Domain-Management

Ändern:

  • app/Models/Domain.php
  • database/migrations/XXXX_extend_domains_table.php

Ergänzen:

  • dnssec_status
  • transfer_lock_enabled
  • whois_privacy_enabled
  • expiry_date
  • expiry_notification_status
  • auth_code_secret_reference
  • registrar_status
  • last_registry_sync_at

Neu:

  • app/Enums/Domain/DnssecStatus.php
  • app/Enums/Domain/RegistrarStatus.php
  • app/Enums/Domain/ExpiryNotificationStatus.php

State Machines / Statushistorie

Neu:

  • app/StateMachines/ContractStateMachine.php
  • app/StateMachines/PaymentStateMachine.php
  • app/StateMachines/CancellationStateMachine.php
  • app/StateMachines/DomainTransferStateMachine.php

Neu:

  • database/migrations/XXXX_create_contract_status_history_table.php
  • database/migrations/XXXX_create_payment_status_history_table.php
  • database/migrations/XXXX_create_domain_transfer_status_history_table.php

Neu:

  • tests/Feature/StateMachines/ContractStateMachineTest.php
  • tests/Feature/StateMachines/PaymentStateMachineTest.php
  • tests/Feature/StateMachines/DomainTransferStateMachineTest.php

Adapter / Retry / DLQ

Neu:

  • config/adapters.php
  • app/Support/Adapters/CircuitBreaker.php
  • app/Support/Adapters/AdapterHealthCheck.php
  • app/Support/Adapters/RetryPolicy.php
  • app/Support/Adapters/DeadLetterHandler.php
  • app/Console/Commands/CheckAdapterHealthCommand.php
  • tests/Feature/Adapters/CircuitBreakerTest.php
  • tests/Feature/Queue/DeadLetterHandlingTest.php

Ändern:

  • docs/adr/0017-adapter-resilience.md

Ergänzen:

  • Max Retry Count
  • Exponential Backoff Cap
  • DLQ nach endgültigem Fehlschlag
  • Alerting-Schwelle
  • Poison-Message-Handling

Domänensprache / Modulgrenzen

Neu:

  • docs/domain/glossary.md
  • docs/domain/module-boundaries.md

Ändern:

  • docs/api/openapi.yaml
  • betroffene Models, DTOs, Requests und Resources

Festlegung:

  • Einheitlich verwenden:
    • tenant für Mandant/Systemgrenze
    • customer für Kunde
    • contract für Vertrag
    • product für Produkt
    • invoice für Rechnung

Produkt- und Vertragsversionierung

Neu:

  • app/Models/ProductVersion.php
  • app/Models/ContractVersion.php
  • database/migrations/XXXX_create_product_versions_table.php
  • database/migrations/XXXX_create_contract_versions_table.php
  • tests/Feature/Billing/ProductVersioningTest.php
  • tests/Feature/Billing/InvoiceReproducibilityTest.php

Ändern:

  • app/Models/Product.php
  • app/Models/Contract.php
  • app/Models/Invoice.php

Superadmin / Break-Glass

Neu:

  • app/Policies/SuperadminPolicy.php
  • app/Services/Security/BreakGlassAccessService.php
  • app/Models/PrivilegedAccessGrant.php
  • database/migrations/XXXX_create_privileged_access_grants_table.php
  • tests/Feature/Security/BreakGlassAccessTest.php
  • docs/security/break-glass.md

Ergänzen:

  • zeitlich begrenzte Rechte
  • Begründungspflicht
  • Audit-Log für jede privilegierte Aktion
  • optional 4-Augen-Freigabe für definierte Aktionen

5. Konkrete nächste Schritte

  1. docs/adr/0020-tenant-isolation-rls.md erstellen und RLS als verbindliche Entscheidung festhalten.
  2. Tenant-Kontext mit TenantContext, Middleware und Model-Concern implementieren.
  3. RLS-Migration für alle tenant-bezogenen Tabellen ergänzen.
  4. Cross-Tenant-Sicherheitstests schreiben und in CI verpflichtend machen.
  5. docs/adr/0021-secrets-management.md erstellen.
  6. Registrar- und Domain-Secrets aus Fachmodellen entfernen und durch Secret-Referenzen ersetzen.
  7. Adapter-ADR 0017 um Circuit Breaker, Health Checks, Retry-Limits und DLQ-Regeln erweitern.
  8. State Machines für Vertrag, Zahlung, Kündigung und Domain-Transfer definieren.
  9. Produkt- und Vertragsversionierung als Tabellen und Tests ergänzen.
  10. docs/domain/glossary.md erstellen und Begriffe im Code vereinheitlichen.
  11. Break-Glass-Zugriffe für Superadmin modellieren und auditieren.
  12. Audit-Log append-only absichern und Archivierungsdokumentation ergänzen.