1
0
Files
pdf-umbenenner/docs/workpackages/M4 - Arbeitspakete.md
2026-04-02 19:04:55 +02:00

517 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# M4 - Arbeitspakete
## Geltungsbereich
Dieses Dokument beschreibt ausschließlich die Arbeitspakete für den definierten Meilenstein **M4 Fingerprint, SQLite-Persistenz und Idempotenz**.
Die Meilensteine **M1**, **M2** und **M3** werden als vollständig umgesetzt vorausgesetzt.
Die Arbeitspakete sind bewusst so geschnitten, dass:
- **KI 1** daraus je Arbeitspaket einen klaren Einzel-Prompt ableiten kann,
- **KI 2** genau dieses eine Arbeitspaket in **einem Durchgang** vollständig umsetzen kann,
- nach **jedem** Arbeitspaket wieder ein **fehlerfreier, buildbarer Stand** vorliegt.
Die Reihenfolge der Arbeitspakete ist verbindlich.
## Zusätzliche Schnittregeln für die KI-Bearbeitung
- Pro Arbeitspaket nur die **minimal notwendigen Querschnitte** durch Domain, Application, Adapter und Bootstrap ändern.
- Keine Annahmen treffen, die nicht durch dieses Dokument oder die verbindlichen Spezifikationen gedeckt sind.
- Kein Vorgriff auf **M5+**.
- Kein Umbau bestehender M1M3-Strukturen ohne direkten M4-Bezug.
- Neue Typen, Ports und Adapter so schneiden, dass sie aus einem einzelnen Arbeitspaket heraus **klar benennbar, testbar und reviewbar** sind.
## Explizit nicht Bestandteil von M4
- KI-Anbindung
- Prompt-Laden oder Prompt-Verarbeitung
- Validierung von KI-Antworten
- Dateinamensbildung
- Zielkopie in den Zielordner
- Windows-Zeichenbereinigung für Zieldateinamen
- physische Dublettenbehandlung im Zielordner
- M5+-Persistenzfelder wie Modellname, Prompt-Identifikator, KI-Rohantwort, KI-Reasoning, Datumsquelle, finaler Titel oder finaler Zieldateiname
- vollständige laufübergreifende Retry-Logik späterer Meilensteine für KI- und Zielkopie-Fehler
- Logging-Feinschliff des Endstands
## Verbindliche M4-Regeln für **alle** Arbeitspakete
### 1. Identifikation
- Die Identifikation eines Dokuments erfolgt in M4 **ausschließlich über den SHA-256-Fingerprint des Dateiinhalts**.
- Dateiname und Pfad dienen **nicht** als Identifikator.
- Gleicher Inhalt unter anderem Dateinamen oder anderem Pfad ist **dasselbe Dokument**.
- Geänderter Inhalt ist **ein neuer fachlicher Vorgang**.
### 2. Persistenzmodell
M4 führt die Persistenz verbindlich in **zwei Ebenen**:
1. **Dokument-Stammsatz** pro Fingerprint
2. **Versuchshistorie** mit einem Datensatz pro historisiertem dokumentbezogenem Verarbeitungsversuch
### 3. Minimale Pflichtdaten im Dokument-Stammsatz für M4
Im Dokument-Stammsatz müssen in M4 mindestens speicherbar sein:
- interne ID
- Fingerprint
- letzter bekannter Quellpfad
- letzter bekannter Quelldateiname
- aktueller Gesamtstatus
- Anzahl bisheriger Inhaltsfehler
- Anzahl bisheriger transienter Fehler
- letzter Fehlerzeitpunkt
- letzter Erfolgzeitpunkt
- Erstellungszeitpunkt
- Änderungszeitpunkt
**Nicht** Bestandteil von M4-Stammsatzfeldern sind Zielpfad, Zieldateiname oder KI-bezogene Felder.
### 4. Minimale Pflichtdaten der Versuchshistorie für M4
Für jeden in M4 zu historisierenden Versuch müssen mindestens speicherbar sein:
- Versuchs-ID
- Fingerprint-Referenz
- Lauf-ID
- Versuchsnummer
- Startzeitpunkt
- Endzeitpunkt
- Ergebnisstatus
- Fehlerklasse
- Fehlermeldung bzw. Begründung
- Retryable-Flag
### 5. Statusmodell für M4
Für M4 müssen folgende Statuswerte fachlich klar verwendbar sein:
- `SUCCESS`
- `FAILED_RETRYABLE`
- `FAILED_FINAL`
- `SKIPPED_ALREADY_PROCESSED`
- `SKIPPED_FINAL_FAILURE`
Ein technischer Zwischenstatus `PROCESSING` ist zusätzlich zulässig, aber für M4 nicht verpflichtend.
### 6. Verbindliche M4-Minimalregeln für Status und Zähler
Für M4 gelten **genau** diese Minimalregeln:
- Bereits erfolgreich verarbeitete Dokumente werden in späteren Läufen übersprungen.
- Bereits final fehlgeschlagene Dokumente werden in späteren Läufen übersprungen.
- Ein **deterministischer Inhaltsfehler aus M3**
- beim **ersten** historisierten Auftreten führt zu `FAILED_RETRYABLE`, erhöht den **Inhaltsfehlerzähler** auf 1 und setzt `retryable = true`,
- beim **zweiten** historisierten Auftreten in einem späteren Lauf führt zu `FAILED_FINAL`, erhöht den **Inhaltsfehlerzähler** auf 2 und setzt `retryable = false`.
- In M4 sind die deterministischen Inhaltsfehler ausschließlich die bereits aus M3 bekannten Fälle:
- kein brauchbarer Text
- Seitenlimit überschritten
- Dokumentbezogene **technische** Fehler nach erfolgreicher Fingerprint-Ermittlung bleiben in M4 `FAILED_RETRYABLE`, erhöhen den **Transientfehlerzähler** und setzen `retryable = true`.
- Skip-Ereignisse ändern **keinen** Fehlerzähler.
### 7. Historisierung in M4
- Jeder **identifizierte** dokumentbezogene Verarbeitungsversuch wird separat historisiert.
- Die Versuchsnummer beginnt pro Fingerprint bei **1** und steigt pro historisiertem Versuch monoton um **1**.
- Auch Skip-Fälle werden historisiert:
- `SKIPPED_ALREADY_PROCESSED`
- `SKIPPED_FINAL_FAILURE`
- Ein in M4 historisierter Versuch setzt einen **erfolgreich ermittelten Fingerprint** voraus.
- Technische Fehler **vor** erfolgreicher Fingerprint-Ermittlung sind in M4 **keine** SQLite-historisierten Versuche; sie werden nur kontrolliert als dokumentbezogene Laufereignisse behandelt.
### 8. Reihenfolge pro Dokument in M4
Die Verarbeitung eines einzelnen Kandidaten erfolgt in M4 verbindlich in dieser Reihenfolge:
1. Fingerprint berechnen
2. Dokument-Stammsatz laden
3. bei `SUCCESS` Skip-Entscheidung treffen und Skip-Versuch historisieren
4. bei `FAILED_FINAL` Skip-Entscheidung treffen und Skip-Versuch historisieren
5. sonst bestehenden M3-Ablauf ausführen
6. M3-Ergebnis in M4-Status, Zähler und Retryable-Flag überführen
7. Versuch historisieren
8. Dokument-Stammsatz fortschreiben
### 9. Konsistenz pro identifiziertem Dokument
- Für jeden identifizierten dokumentbezogenen Versuch müssen **Versuchshistorie und Stammsatz konsistent** fortgeschrieben werden.
- Teilaktualisierungen zwischen Historie und Stammsatz sind zu vermeiden.
- Wenn die Persistenz eines dokumentbezogenen Versuchs technisch scheitert, darf **kein inkonsistenter Teilzustand** zurückbleiben.
### 10. Schema-Initialisierung
- Die Initialisierung des SQLite-Schemas erfolgt in M4 **beim Programmstart**, bevor der Batch-Lauf mit der Dokumentverarbeitung beginnt.
- Eine nur implizite oder ausschließlich lazy Initialisierung während des laufenden Dokumentdurchsatzes ist **nicht** Ziel von M4.
---
## AP-001 M4-Kernobjekte, Statussemantik und Port-Verträge präzisieren
### Voraussetzung
Keine. Dieses Arbeitspaket ist der M4-Startpunkt.
### Ziel
Die M4-relevanten Typen, Statusbedeutungen und Port-Verträge werden eindeutig eingeführt, damit spätere Arbeitspakete ohne Interpretationsspielraum implementiert werden können.
### Muss umgesetzt werden
- Neue M4-relevante Kernobjekte bzw. Application-nahe Typen anlegen, insbesondere für:
- Dokument-Fingerprint
- Dokument-Stammsatz
- Verarbeitungsversuch
- Fehlerzählerstände
- dokumentbezogene Persistenzentscheidung bzw. Lookup-Ergebnis
- technische Fehlerklassifikation für dokumentbezogene M4-Verarbeitung
- Statusmodell so vervollständigen oder schärfen, dass die verbindlichen M4-Statuswerte fachlich eindeutig abbildbar sind.
- Eindeutige Semantik für folgende Fälle im Typmodell bzw. in JavaDoc festlegen:
- unbekanntes Dokument
- bekanntes, noch nicht terminales Dokument
- bereits erfolgreiches Dokument
- bereits final fehlgeschlagenes Dokument
- historisierbarer dokumentbezogener Versuch
- nicht historisierbarer Vor-Fingerprint-Fehler
- Outbound-Ports definieren für:
- Erzeugung eines Fingerprints für genau einen Verarbeitungskandidaten
- Lesen und Schreiben des Dokument-Stammsatzes
- Schreiben und Lesen der Versuchshistorie
- technische Initialisierung des SQLite-Schemas
- Port-Verträge so schneiden, dass **weder `Path`/`File` noch JDBC-/SQLite-Typen** in Domain oder Application durchsickern.
- Port-Rückgaben so modellieren, dass spätere Arbeitspakete ohne zusätzliche Annahmen unterscheiden können:
- Dokument unbekannt
- Dokument bekannt und aktiv weiter zu verarbeiten
- Dokument terminal erfolgreich
- Dokument terminal final fehlgeschlagen
- technischer Persistenzfehler
- JavaDoc und `package-info` für:
- Statusbedeutungen
- Zählersemantik
- Historisierungsgrenzen
- Architekturgrenzen
ergänzen.
### Explizit nicht Teil
- SHA-256-Implementierung
- SQLite-Implementierung
- konkrete SQL-Tabellen
- Batch-Integration
- Repository-Code
### Fertig wenn
- die M4-relevanten Typen und Port-Verträge vorhanden sind,
- die M4-Statussemantik eindeutig dokumentiert ist,
- Historisierung vs. Vor-Fingerprint-Fehler klar abgegrenzt ist,
- Domain und Application frei von Infrastrukturtypen bleiben,
- der Build weiterhin fehlerfrei ist.
---
## AP-002 SHA-256-Fingerprint-Adapter für Verarbeitungskandidaten implementieren
### Voraussetzung
AP-001 ist abgeschlossen.
### Ziel
Für jeden Verarbeitungskandidaten kann ein stabiler, deterministischer SHA-256-Fingerprint erzeugt werden; technische Probleme werden kontrolliert in den Port-Vertrag überführt.
### Muss umgesetzt werden
- Fingerprint-Port technisch im Adapter-Out implementieren.
- SHA-256-basierte Fingerprint-Erzeugung für genau einen Verarbeitungskandidaten umsetzen.
- Sicherstellen, dass der Fingerprint ausschließlich aus dem **Dateiinhalt** abgeleitet wird.
- Kontrolliertes technisches Fehlerverhalten für mindestens folgende Fälle abbilden:
- Datei nicht lesbar
- Datei zwischen Kandidatenermittlung und Fingerprint-Erzeugung nicht mehr vorhanden
- sonstige technische IO-Probleme
- Sicherstellen, dass Dateisystem- und Hashing-Details ausschließlich im Adapter-Out verbleiben.
- JavaDoc für Determinismus, Fehlerverhalten und M4-Grenze ergänzen, dass Vor-Fingerprint-Fehler **nicht** als SQLite-historisierte Versuche gelten.
### Explizit nicht Teil
- SQLite-Persistenz
- Batch-Orchestrierung
- Versuchshistorie
- Skip-Logik
- Zählerfortschreibung
### Fertig wenn
- für denselben Dateiinhalt stabil derselbe SHA-256-Fingerprint erzeugt wird,
- Fingerprint und Fehler kontrolliert über den Port geliefert werden,
- keine Hashing- oder Dateisystemdetails in Domain oder Application durchsickern,
- der Build weiterhin fehlerfrei ist.
---
## AP-003 SQLite-Schema, Start-Initialisierung und Persistenzbasis im Adapter-Out einführen
### Voraussetzung
AP-001 und AP-002 sind abgeschlossen.
### Ziel
Die SQLite-basierte Persistenzgrundlage für M4 wird technisch sauber eingeführt und beim Programmstart kontrolliert initialisiert.
### Muss umgesetzt werden
- SQLite-Dateizugriff im Adapter-Out technisch einführen.
- Technischen Initialisierungsbaustein für SQLite-Schema anlegen und über den dafür vorgesehenen Port anbinden.
- M4-Schema explizit in **zwei Ebenen** anlegen:
- Dokument-Stammsatz
- Versuchshistorie
- Tabellen, Primärschlüssel, Fremdschlüssel, Unique-Regeln und sinnvolle Indizes für den M4-Stand definieren.
- Dokument-Stammsatz so anlegen, dass die in diesem Dokument festgelegten M4-Pflichtfelder speicherbar sind.
- Versuchshistorie so anlegen, dass die in diesem Dokument festgelegten M4-Pflichtfelder speicherbar sind.
- Sicherstellen, dass:
- Versuchsnummer pro Fingerprint eindeutig ist,
- Skip-Versuche speicherbar sind,
- keine M5+-Spalten angelegt werden.
- Die Schema-Initialisierung so vorbereiten, dass sie **beim Programmstart** explizit aufgerufen werden kann.
- JavaDoc für Schema-Zweck, Zwei-Ebenen-Modell und Initialisierungszeitpunkt ergänzen.
### Explizit nicht Teil
- Repository-Fachlogik
- Use-Case-Integration
- Statusübergänge im Batch-Lauf
- KI-bezogene Persistenzfelder
- Zielpfad- oder Dateinamenspersistenz
### Fertig wenn
- die SQLite-Datei und das M4-Schema technisch anlegbar sind,
- beide Persistenzebenen den M4-Pflichtumfang abbilden,
- die Start-Initialisierung technisch vorbereitet ist,
- keine M5+-Felder im Schema enthalten sind,
- der Stand fehlerfrei buildbar bleibt.
---
## AP-004 Repository für Dokument-Stammsatz mit vollständigem M4-Minimalumfang implementieren
### Voraussetzung
AP-003 ist abgeschlossen.
### Ziel
Der Dokument-Stammsatz kann pro Fingerprint zuverlässig gelesen, angelegt und fortgeschrieben werden, ohne fachliche Entscheidungslogik in den Adapter-Out zu verlagern.
### Muss umgesetzt werden
- Repository-Adapter für den Dokument-Stammsatz implementieren.
- Folgende technischen Fähigkeiten bereitstellen:
- Suche eines Stammsatzes über Fingerprint
- Neuanlage eines Stammsatzes für bisher unbekannte Dokumente
- Fortschreibung von:
- letztem bekanntem Quellpfad
- letztem bekanntem Quelldateinamen
- Gesamtstatus
- Inhaltsfehlerzähler
- Transientfehlerzähler
- letztem Fehlerzeitpunkt
- letztem Erfolgzeitpunkt
- Änderungszeitpunkt
- Sicherstellen, dass die Repository-Operationen **keine** fachlichen Entscheidungen über Retry-Regeln oder Skip-Logik treffen.
- Mapping zwischen Application-Typen und SQLite-Struktur explizit und nachvollziehbar halten.
- Upsert-/Neuanlageverhalten für den M4-Einzelprozess reproduzierbar modellieren.
- JavaDoc für Verantwortlichkeit und Mapping ergänzen.
### Explizit nicht Teil
- Versuchshistorie
- Batch-Skip-Logik
- Versuchsnummernvergabe
- konkrete Statusentscheidungen im Use-Case
- KI- oder Zielkopie-bezogene Persistenz
### Fertig wenn
- der Dokument-Stammsatz pro Fingerprint zuverlässig gelesen und geschrieben werden kann,
- alle M4-Pflichtfelder des Stammsatzes technisch fortschreibbar sind,
- fachliche Entscheidungen nicht in das Repository abgerutscht sind,
- der Build weiterhin fehlerfrei ist.
---
## AP-005 Repository für Versuchshistorie mit monotoner Versuchsnummer implementieren
### Voraussetzung
AP-003 ist abgeschlossen.
### Ziel
Jeder historisierbare dokumentbezogene M4-Versuch kann separat und nachvollziehbar persistiert werden.
### Muss umgesetzt werden
- Repository-Adapter für die Versuchshistorie implementieren.
- Schreiben genau eines Versuchseintrags pro historisiertem dokumentbezogenem M4-Versuch umsetzen.
- Lesefähigkeiten bereitstellen, soweit sie für M4-Use-Case und Tests benötigt werden.
- Versuchsnummern pro Fingerprint reproduzierbar ableiten oder fortschreiben.
- Sicherstellen, dass die Versuchsnummer:
- bei **1** beginnt,
- pro Fingerprint monoton steigt,
- auch bei Skip-Versuchen mitgezählt wird.
- M4-relevante Historisierungsdaten persistieren:
- Fingerprint-Referenz
- Lauf-ID
- Versuchsnummer
- Startzeitpunkt
- Endzeitpunkt
- Ergebnisstatus
- Fehlerklasse
- Fehlermeldung bzw. Begründung
- Retryable-Flag
- Sicherstellen, dass nur **identifizierte** Dokumente historisiert werden.
- JavaDoc für Historisierungszweck, Versuchsnummernlogik und M4-Grenzen ergänzen.
### Explizit nicht Teil
- Dokument-Stammsatz
- fachliche Zählerlogik
- Batch-Orchestrierung
- KI-Rohantwort, Modellname oder Prompt-Identifikator
- Zielname, Zielpfad oder Zielkopie
### Fertig wenn
- pro historisiertem dokumentbezogenem Verarbeitungsvorgang ein separater Versuchseintrag gespeichert werden kann,
- die Versuchsnummern pro Fingerprint reproduzierbar und monoton sind,
- Skip-Versuche historisierbar sind,
- Vor-Fingerprint-Fehler nicht fälschlich historisiert werden,
- der Stand fehlerfrei buildbar bleibt.
---
## AP-006 M4-Entscheidungslogik und Batch-Integration für Idempotenz, Zähler und konsistente Persistenz umsetzen
### Voraussetzung
AP-001 bis AP-005 sind abgeschlossen.
### Ziel
Der bestehende M3-Verarbeitungslauf wird zu einem echten M4-Lauf erweitert, der Dokumente über Fingerprint wiedererkennt, Status und Zähler korrekt fortschreibt, Skip-Fälle historisiert und dabei keinen inkonsistenten Persistenzzustand hinterlässt.
### Muss umgesetzt werden
- Den bestehenden Batch-Use-Case so erweitern, dass pro Verarbeitungskandidat verbindlich diese Reihenfolge gilt:
1. Fingerprint erzeugen
2. Dokument-Stammsatz laden
3. terminale Fälle entscheiden
4. gegebenenfalls bestehenden M3-Ablauf ausführen
5. Ergebnis in M4-Status, Zähler und Retryable-Flag überführen
6. Versuch historisieren
7. Dokument-Stammsatz fortschreiben
- Folgende M4-Regeln explizit umsetzen:
- vorhandener Gesamtstatus `SUCCESS` → Dokument wird nicht erneut fachlich verarbeitet, sondern mit `SKIPPED_ALREADY_PROCESSED` historisiert
- vorhandener Gesamtstatus `FAILED_FINAL` → Dokument wird nicht erneut fachlich verarbeitet, sondern mit `SKIPPED_FINAL_FAILURE` historisiert
- unbekanntes oder noch nicht terminales Dokument wird regulär weiterverarbeitet
- M3-Ergebnisse exakt wie folgt in M4 überführen:
- M3 erfolgreich abgeschlossen → `SUCCESS`, keine Fehlerzähler erhöhen, `retryable = false`
- M3-Inhaltsfehler „kein brauchbarer Text“ oder „Seitenlimit überschritten“ beim ersten historisierten Auftreten → `FAILED_RETRYABLE`, Inhaltsfehlerzähler +1, `retryable = true`
- derselbe Dokumenttyp eines bereits identifizierten Dokuments mit erneutem deterministischen Inhaltsfehler in einem späteren Lauf → `FAILED_FINAL`, Inhaltsfehlerzähler +1, `retryable = false`
- dokumentbezogener technischer Fehler nach erfolgreicher Fingerprint-Ermittlung → `FAILED_RETRYABLE`, Transientfehlerzähler +1, `retryable = true`
- Skip-Fälle so behandeln, dass:
- ein eigener Versuchseintrag geschrieben wird,
- kein Fehlerzähler verändert wird,
- der Gesamtstatus des Stammsatzes terminal bestehen bleibt.
- Vor-Fingerprint-Fehler ausdrücklich **nicht** als SQLite-Versuch historisieren.
- Für identifizierte Dokumente sicherstellen, dass **Historie und Stammsatz konsistent** fortgeschrieben werden und keine inkonsistenten Teilzustände entstehen.
- Falls eine dokumentbezogene Persistenzoperation technisch scheitert:
- darf kein teilaktualisierter Zustand zurückbleiben,
- bleibt der Batch-Lauf für andere Dokumente kontrolliert weiter lauffähig,
- wird kein M5+-Verhalten vorweggenommen.
- JavaDoc für Idempotenz, Zählerfortschreibung, Skip-Semantik und Persistenzkonsistenz ergänzen.
### Explizit nicht Teil
- KI-Aufruf
- Dateinamensbildung
- Zielkopie
- M5+-Retry-Regeln für KI- oder Zielkopiefehler
- M5+-Persistenzfelder
- spätere Reporting- oder Auswertungslogik
### Fertig wenn
- der Batch-Lauf identische Inhalte über Fingerprint wiedererkennt,
- `SUCCESS`- und `FAILED_FINAL`-Dokumente in späteren Läufen historisiert übersprungen werden,
- die Minimalregel „erster deterministischer Inhaltsfehler retryable, zweiter final“ explizit umgesetzt ist,
- technische dokumentbezogene Fehler nach Fingerprint als retryable behandelt werden,
- Historie und Stammsatz pro identifiziertem Dokument konsistent fortgeschrieben werden,
- weiterhin keine M5+-Funktionalität enthalten ist.
---
## AP-007 Bootstrap- und CLI-Anpassungen für SQLite-Konfiguration, Start-Initialisierung und M4-Verdrahtung durchführen
### Voraussetzung
AP-001 bis AP-006 sind abgeschlossen.
### Ziel
Der Programmeinstieg ist sauber an den M4-Lauf angepasst; die Persistenz wird beim Start initialisiert und die neuen M4-Bausteine sind vollständig verdrahtet.
### Muss umgesetzt werden
- Bootstrap-Verdrahtung auf die neuen M4-Ports, Adapter und Persistenzbausteine erweitern.
- M4-relevante Konfiguration ergänzen bzw. verdrahten, insbesondere für:
- `sqlite.file`
- Startvalidierung so ergänzen, dass mindestens geprüft wird:
- SQLite-Dateipfad ist vorhanden oder technisch anlegbar
- Persistenzkonfiguration ist nutzbar
- Technische Schema-Initialisierung **beim Programmstart** ausführen, bevor der eigentliche Dokumentlauf beginnt.
- CLI-/Batch-Startpfad auf den realen M4-Ablauf ausrichten.
- Sicherstellen, dass harte Start-, Verdrahtungs- oder Initialisierungsfehler weiterhin zu **Exit-Code 1** führen.
- Sicherstellen, dass dokumentbezogene Fehler im späteren Lauf **nicht** als Startfehler fehlmodelliert werden.
- M1M3-Grundverhalten erhalten und sauber mit den M4-Bausteinen kombinieren.
- JavaDoc und `package-info` für aktualisierte Verdrahtung, Konfiguration und Modulgrenzen ergänzen.
### Explizit nicht Teil
- neue Exit-Code-Semantik späterer Meilensteine
- KI-Verdrahtung
- Zielordner- oder Dateinamensverdrahtung
- Logging-Feinschliff
### Fertig wenn
- das Programm im M4-Stand vollständig startbar ist,
- das SQLite-Schema beim Start kontrolliert initialisiert wird,
- die neuen Adapter korrekt verdrahtet sind,
- harte Persistenz-Startfehler kontrolliert zu Exit-Code 1 führen,
- der Build fehlerfrei bleibt.
---
## AP-008 Tests für Fingerprint, SQLite-Repositories, M4-Statusfortschreibung, Historie und Skip-Logik vervollständigen
### Voraussetzung
AP-001 bis AP-007 sind abgeschlossen.
### Ziel
Der vollständige M4-Zielzustand wird automatisiert abgesichert und als konsistenter Übergabestand nachgewiesen.
### Muss umgesetzt werden
- Unit-Tests für die SHA-256-Fingerprint-Erzeugung implementieren.
- Repository-Tests gegen SQLite implementieren, insbesondere für:
- Schema-Initialisierung
- Anlegen und Lesen eines Dokument-Stammsatzes
- Fortschreiben aller M4-Pflichtfelder des Stammsatzes
- Anlegen und Lesen von Versuchshistorie
- stabile Versuchsnummern pro Fingerprint
- Tests für M4-Statusfortschreibung und Zähler ergänzen, insbesondere:
- unbekanntes Dokument mit erfolgreichem M4-Ende wird als `SUCCESS` persistiert
- erster deterministischer Inhaltsfehler führt zu `FAILED_RETRYABLE`
- zweiter deterministischer Inhaltsfehler in einem späteren Lauf führt zu `FAILED_FINAL`
- technischer dokumentbezogener Fehler nach erfolgreicher Fingerprint-Ermittlung erhöht den Transientfehlerzähler und bleibt `FAILED_RETRYABLE`
- Skip-Fälle verändern keine Fehlerzähler
- Tests für Idempotenz- und Skip-Logik ergänzen, insbesondere:
- bereits erfolgreiches Dokument wird historisiert übersprungen
- final fehlgeschlagenes Dokument wird historisiert übersprungen
- gleicher Inhalt unter anderem Dateinamen wird über denselben Fingerprint erkannt
- Tests ergänzen, die belegen:
- pro identifiziertem dokumentbezogenem Verarbeitungsvorgang entsteht genau **ein** Historieneintrag
- Skip-Ereignisse werden historisiert
- Vor-Fingerprint-Fehler nicht in SQLite-Historie auftauchen
- Tests für Bootstrap- und Startverhalten ergänzen, insbesondere:
- Schema-Initialisierung beim Start
- harter Persistenz-Startfehler führt zu Exit-Code 1
- Den M4-Stand abschließend auf Konsistenz, Architekturtreue und Nicht-Vorgriff auf M5+ prüfen.
### Explizit nicht Teil
- Tests für KI, Prompt-Laden oder KI-JSON
- Tests für Zielkopie oder Dateinamensbildung
- Tests für M5+-Persistenzfelder
- Tests für vollständige Retry-Logik späterer Meilensteine
### Fertig wenn
- die Test-Suite für den M4-Umfang grün ist,
- die wichtigsten M4-Randfälle automatisiert abgesichert sind,
- der definierte M4-Zielzustand vollständig erreicht ist,
- ein fehlerfreier, übergabefähiger Stand vorliegt.
---
## Abschlussbewertung
Die Arbeitspakete decken den vollständigen M4-Zielumfang aus den verbindlichen Spezifikationen ab:
- Fingerprint über SHA-256
- SQLite-Persistenz in zwei Ebenen
- Dokument-Stammsatz mit M4-Minimalumfang
- Versuchshistorie pro identifiziertem dokumentbezogenem Versuch
- Idempotenz über Fingerprint
- Skip-Regeln für bereits erfolgreiche und final fehlgeschlagene Dokumente
- explizite Minimalregel für deterministische Inhaltsfehler in M4
- Tests für Fingerprint, Persistenz, Statusfortschreibung, Historie und Skip-Logik
Gleichzeitig bleiben die Grenzen zu M1M3 sowie zu M5+ gewahrt. Insbesondere werden **keine** KI-Funktionalitäten, **keine** Dateinamensbildung und **keine** Zielkopie vorweggenommen.