← Code-Übersicht

0016_supervision_progress.sql

Pfad: migrations/0016_supervision_progress.sql

Ext: sql

Größe: 4084 Bytes

Geändert: 2026-07-16 17:53:07+02

WITH fortschritt(slug, status_text, status_tag, evidenz) AS (
    VALUES
    ('task-migrationssicherheit-und-datenbankdrift', 'ERLEDIGT', 'erledigt',
     E'Fresh-DB 0001-0015 erfolgreich; Wiederholung leer; 11 von 11 semantischen Tabellenfingerprints identisch; 0 absolute Artefaktpfade.'),
    ('task-phpstan-und-code-rules-konformitaet', 'ERLEDIGT', 'erledigt',
     E'PHPStan Level 8 meldet 0 Fehler; keine Produktionsdatei ueberschreitet 150 nichtkommentierte LOC; keine Baseline oder Ignore-Regel.'),
    ('task-rechnungs-posting-exactly-once', 'IN UMSETZUNG', 'in-umsetzung',
     E'Remote-Abgleich vor Create und checksum-idempotenter File-Upload implementiert; Recovery-Test nach State-Fehler erzeugt genau 1 Remote-Voucher. Externer Lexware-E2E steht wegen Connect-Timeout 28 aus.'),
    ('task-rechnungs-identitaet-und-duplikate', 'IN UMSETZUNG', 'in-umsetzung',
     E'URL-unabhaengiger Schluessel, PDF-SHA-256 und kanonische Identitaet aktiv; Test mit geaenderter URL bleibt bei 1 Posting. Finaler Realbeleg steht aus.'),
    ('task-rechnungs-extraktion-fachliche-korrektheit', 'IN UMSETZUNG', 'in-umsetzung',
     E'Exakte Dezimalarithmetik, positive Betraege, Net/Gross-Steuerableitung, Raster-OCR-Fallback und strukturierte Adresse implementiert. Golden-Parser gruen; reales Wetell-PDF derzeit nicht vorhanden.'),
    ('task-rechnungs-state-integritaet-und-parallelitaet', 'IN UMSETZUNG', 'in-umsetzung',
     E'Korruptes JSON fail-closed, eindeutige Tempdatei und exklusiver Lock ueber kompletten Read-Modify-Remote-Write-Zyklus; Recovery-/Locktests gruen.'),
    ('task-lexware-api-vertrag-und-kontaktabgleich', 'IN UMSETZUNG', 'in-umsetzung',
     E'api.lexware.io, Contacts-Roles/Company/Address, purchaseinvoice/voucherlist/voucher-files und Adressmatch implementiert; Contracttests gruen. Externer Safe-GET endet aktuell mit cURL 28.'),
    ('task-wetell-download-integritaet-und-ssrf', 'IN UMSETZUNG', 'in-umsetzung',
     E'HTTPS-Host-Allowlist, Redirectpruefung, PDF-Magic/EOF/Groesse, kein lokaler filePath und Hash-Kollisionsschutz implementiert; Policytests gruen. Realdownload steht aus.'),
    ('task-playwright-service-haertung-und-lifecycle', 'IN UMSETZUNG', 'in-umsetzung',
     E'Eine Browserinstanz pro Dienst, Context pro Job, Pflichtsecret, Loopback, TLS-Validierung, 64-KiB-Body, 2 Jobs und 5-MB-PDF-Limit; 9 Node-Tests gruen; ephemere Instanz ready=true.'),
    ('task-wetell-adapter-session-und-fallback', 'IN UMSETZUNG', 'in-umsetzung',
     E'Fallback bindet Login, Discovery und Download an denselben aktiven Adapter; PHP-Contracttests gruen. Reale Anmeldung steht mangels wetell.json aus.'),
    ('task-rechnungstests-und-fehlerinjektion', 'IN UMSETZUNG', 'in-umsetzung',
     E'PHPUnit 54 Tests/124 Assertions gruen; Lock, URL-Duplikat, State-Fehlerinjektion, Parser, Storage, Lexware und Logger abgedeckt. Externer E2E fehlt.'),
    ('task-fehlerklassifikation-logging-und-datenschutz', 'IN UMSETZUNG', 'in-umsetzung',
     E'Phasenbasierte Fehlercodes, korrelierte JSONL-Logs, rekursive Redaction und fail-closed Schreiben implementiert; Logger-Tests ohne Notice gruen. Betriebsalarmierung steht aus.'),
    ('task-betriebsreife-deployment-und-abhaengigkeiten', 'IN UMSETZUNG', 'in-umsetzung',
     E'Playwright 1.61.1 und Node 22 gepinnt, npm-ci-Vertrag und gehaertete systemd-Unit validiert. Installierter Dienst und Real-Login stehen aus.'),
    ('task-versionskontrolle-und-reproduzierbare-quality-toolchain', 'IN UMSETZUNG', 'in-umsetzung',
     E'Git main initialisiert; Composer-Lock mit PHPUnit 11.5.55/PHPStan 2.1.33 und npm-Lock reproduzierbar. Erstcommit/Release erst nach final gruenem E2E.')
)
UPDATE dokumentation AS d
SET body = regexp_replace(
        d.body,
        '\*\*Status:\*\* (OFFEN|IN UMSETZUNG)',
        '**Status:** ' || f.status_text
    ) || E'\n\n## Supervisionsfortschritt 2026-07-16\n- ' || f.evidenz || E'\n',
    tags = array_append(
        array_remove(array_remove(array_remove(d.tags, 'offen'), 'in-umsetzung'), 'erledigt'),
        f.status_tag
    )
FROM fortschritt AS f
WHERE d.slug = f.slug;