# Sprint 16.1 – maskierter Release-/Preview-Bericht

Zeitpunkt: 2026-07-29

## Release
- Autorisierter/deployter SHA: `9786857c814a29015987681e2416acb23275f9e5`
- `HEAD == origin/main`: ja
- Deployment-Worktree: sauber
- Backend, Frontend, Proxy und Market-Valuation-Timer: aktiv
- Backend-/Proxy-/Importseiten-Checks: HTTP 200

## Legacy-FK-Reparatur
- Preflight auf Restore: exakt 3 Findings, ausschliesslich Legacy-Orphans in `broker_import_execution_plans.transaction_id`.
- Referenzierte Parent-Transaktionen: 0/3 vorhanden.
- Alle 3 Pläne: `execution_status='imported'`.
- `transaction_id`: nullable.
- Deterministische Identitätsprobe: 0 exakte Treffer über alle geprüften Identitäten.
- Atomare Änderungen: exakt 3 Referenzen auf NULL; 3 Auditzeilen mit `legacy_orphan_transaction_reference_neutralized`.
- Geänderte Tabellen: nur `broker_import_execution_plans` und `audit_log`.
- Transaktionen: 68 vor / 68 nach; Digest unverändert.
- Planinhalt ausser `transaction_id`: unverändert.
- No-op-Wiederholung: 0 Änderungen.
- FK-Check: 0 Findings; Integrity: `ok`.
- Backup/Restore logisch gleich; private Artefakte `0600`.
- Produktions-Connection-Factory erzwingt `PRAGMA foreign_keys=ON`; Wartungs-/Migrationspfade wurden auditiert, kein Hardening-PR erforderlich.

## UAT
- Desktop 1440×900 und CSS-/Touch-Mobile 390×844: Importseite erreichbar, kein horizontaler Overflow, keine JS-/Konsolenfehler.
- Dateiauswahl und bestätigte Quellzuordnung sichtbar.
- Deployed Bundle enthält Readiness-Anzeigen und gruppierte Händlerentscheidungen.
- Smart-Inbox GET erfolgreich; produktiver Bestand: 0 Household-Import-Batches.

## Realdatei-Preview – alt vs. Sprint 16.1
| Kennzahl | Alt (`a5e8dd0…`) | Sprint 16.1 |
|---|---:|---:|
| Dateien | 4 | 4 |
| Zeilen | 1.787 | 1.787 |
| Kandidaten | 1.786 | 1.786 |
| Duplicates | 1 | 1 |
| Review | 1.301 | 550 |
| Vorschläge | 423 | 1.275 |
| offene Zeilenentscheidungen | 1.291 | 439 |
| sichere Transferpaare | 16 | 16 |
| Sonderfälle | 72 | 72 |
| unmatched neutrale Transfers | 16 | 16 |
| Kreditkartenausgleiche | 16 | 16 |
| Migros verknüpft | 37 | 35 |
| Migros unverknüpft | 39 | 41 |

Erwartete Writes bei einem späteren autorisierten Confirm: 1 Batch, 4 Dateien, 1.786 Kandidaten, 1.230 Transaktionen, 16 Transferpaare, 35 Migros-Links.

## Neue Review-/Readiness-Lage
- Ordinary monetary rows: 1.662
- Covered: 1.223 / 73,59 %; Gate: mindestens 95 %
- Händlercluster: 166 insgesamt = 24 Gruppen mit ≥2 Zeilen + 142 Singletons
- 24 Gruppen bündeln 297 Zeilen; 20 Gruppen erlauben eine gemeinsame Kategorieentscheidung, 4 sind bewusst guardrailed.
- Verbleibende Entscheidungseinheiten: 166 (24 Gruppen + 142 Einzelfälle)
- Einzelne Reviewfälle nach Quelle: AKB 93, VISA 30, Raiffeisen 19
- Einzelne Reviewfälle nach Semantik: 91 Ausgaben, 51 Einnahmen
- Für 95 % Coverage fehlen 356 weitere abgedeckte ordinary rows.
- Um zusätzlich das 3-%-Gate zu erfüllen, müssen Einzelfälle von 142 auf höchstens 49 sinken (93 weniger).
- `technically_confirmable=true`
- `business_ready_for_confirm=false`
- Bestanden: Konten-/Vorzeichen-Semantik, Kartenausgleich nicht als Einkommen, Migros-Doppelzählung, kritische Mapping-/Saldenabweichungen, Händlercluster-Grenze.
- Nicht bestanden: Coverage, absolute Einzelfallgrenze, Einzelfallquote.

## Sichere Kategorisierungen (`proposal_ready`)
- Essen & Haushalt: 662
- Elektronische Medien: 157
- Hobbys & Selfcare: 117
- Gesundheit: 104
- Auto Melanie: 99
- Kleider und Schuhe: 33
- Ferien/Reisen: 26
- Kinder/Familie: 5
- Haustiere: 7
- Versicherungen Wohnen: 2
- Steuern: 1

## Read-only-Nachweis / Stop-Gate
- Preview-DB-Diff: keine geänderte Tabelle.
- Source-Datei-Hashes: unverändert.
- FK vor/nach Preview: 0/0; Integrity vor/nach: `ok`/`ok`.
- Household-Import-Batches vor/nach: 0/0.
- Confirm aufgerufen: nein.
- Realimport: nein.
- Der Preview-Bestand der vier Realdateien erscheint erst nach einem separat autorisierten produktiven Confirm als real importierte Buchungen im Portal.

Private Einzelzeilen-, Cluster- und Rohpreview-Nachweise verbleiben lokal unter `/home/agent/jarvis_runtime/finance-system/sprint16.1-uat/` mit Modus `0600`.
