← Übersicht

F04 Rechnungs-State korruptions- und parallelitätssicher machen

Rechnungs-State korruptions- und parallelitätssicher machen

Finding: F04 Priorität: P0 Status: IN UMSETZUNG Stand: 2026-07-16

Problembeschreibung

  • Ungültiges/unlesbares JSON wird als leer behandelt (JsonInvoiceStateAdapter.php:31).
  • Fester .tmp und Schreib-LOCK schützen nicht den Read-Modify-Write-Zyklus (JsonInvoiceStateAdapter.php:54).
  • Parallele Läufe können überschreiben, doppelt posten oder Revisionen verlieren.

Ziel

Korruption und Parallelität führen fail-closed zu einem reparierbaren Zustand, nie zum erneuten Vollimport.

Aufgabe

  1. Transaktionale DB-Persistenz oder vollständiges Prozesslocking umsetzen.
  2. Invaliden State als STATE_CORRUPT abbrechen.
  3. Schema-Version, atomare Migration, Revision/CAS sowie Kill-/Paralleltests ergänzen.

Scope

  • In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
  • Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

Harte Spezifikation

  • MUST: invalides JSON ist nie leerer State.
  • MUST: genau ein Lauf mutiert einen Schlüssel.
  • MUST: Save fsync-atomar oder transaktional.
  • MUST: Revision monoton.

Harte Quality Gateways

  • 20 Parallelworker ohne Lost Update.
  • Truncated JSON stoppt vor Netzwerk.
  • Kill während Save lässt alte oder neue vollständige Revision.
  • Restore erzeugt keinen POST.
  • Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

Code Blast

  • Direkt: State-Adapter/Port, InvoiceState/Record, Ingest, CLI.
  • Daten: JSON-Migration oder neue DB-Tabelle.

Code-Impact-Analyse

  • Parallelstart kann bewusst abgelehnt werden.
  • Bestands-JSON benötigt kontrollierten Einmalimport.

Risikoanalyse

| Risiko | Eintritt | Schaden | |---|---|---| | Korruption als Erstlauf | hoch | kritisch | | Lost Update | hoch | kritisch |

Strategie zur Risikonullierung

  1. Prevent: Eindeutigkeit/Revision.
  2. Detect: Schema/Checksum.
  3. Contain: fail-closed.
  4. Recover: Backup/Import.

Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.

Supervisionsfortschritt 2026-07-16

  • Korruptes JSON fail-closed, eindeutige Tempdatei und exklusiver Lock ueber kompletten Read-Modify-Remote-Write-Zyklus; Recovery-/Locktests gruen.

Supervisionsfortschritt 2026-07-16 (Parallelitaets-Gateway)

  • [JsonInvoiceStateParallelismTest](/code/199) belegt mit 20 echten Fork-Workern exakt 20 eindeutige Records ohne Lost Update.
  • Gesamtgateway: 67 PHPUnit-Tests/240 Assertions, PHPStan Level 8, 9 Node-Tests und LOC gruen.
  • Kill-/Restore- und monotone Revisionspruefung bleiben offen; F04 wird deshalb nicht vorzeitig abgeschlossen.

Frühere Versionen

VersionZeitpunktOperation
59 2026-07-16 20:24:26.041793+02 UPDATE
35 2026-07-16 19:53:19.687045+02 UPDATE