# M5 - Arbeitspakete

## Geltungsbereich

Dieses Dokument beschreibt ausschließlich die Arbeitspakete für den definierten Meilenstein **M5 – KI-Integration, Prompt-Bezug und validierter Benennungsvorschlag**.

Die Meilensteine **M1**, **M2**, **M3** und **M4** 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 **M6+**.
- Kein Umbau bestehender M1–M4-Strukturen ohne direkten M5-Bezug.
- Neue Typen, Ports, Statuswerte, Migrationen und Adapter so schneiden, dass sie aus einem einzelnen Arbeitspaket heraus **klar benennbar, testbar und reviewbar** sind.
- M5 darf bestehende M4-Persistenz **gezielt evolvieren**, aber nicht stillschweigend neu erfinden.
- Jeder positive M5-Zwischenstand muss bereits so modelliert sein, dass **M6 darauf ohne Statusbruch** aufsetzen kann.
- M5 endet fachlich mit einem **persistierten, validierten Benennungsvorschlag**; **nicht** mit einer Zielkopie.

## Explizit nicht Bestandteil von M5

- physische Zielkopie in den Zielordner
- finales Dateinamensformat `YYYY-MM-DD - Titel.pdf` als technische Ausgabeoperation
- Dublettenbehandlung `(1)`, `(2)` im Zielordner
- Windows-Zeichenbereinigung für den finalen Zieldateinamen
- Zielpfad- und Zieldateinamenspersistenz
- atomisches Schreiben oder temporäre Zieldateien
- vollständige End-to-End-Erfolgssemantik des späteren Produktiv-Endstands aus M6
- Logging-Feinschliff des Endstands aus M7
- vollständige laufübergreifende Retry-Logik späterer Meilensteine für alle Fehlerarten jenseits des in M5 konkret benötigten Umfangs
- manuelle Nachbearbeitung oder Benutzerinteraktion

## Verbindliche M5-Regeln für **alle** Arbeitspakete

### 1. Status- und Übergangssemantik zwischen M4, M5 und M6

Die in M4 verwendete positive Zwischenbedeutung von `SUCCESS` reicht ab M5 **nicht mehr aus**, weil M5 einen validierten Benennungsvorschlag erzeugt, M6 aber erst die Zielkopie schreibt.

Daher gilt ab M5 verbindlich:

- `SUCCESS` ist ab M5 **für den echten Enderfolg nach M6 reserviert**.
- M5 führt die beiden **nicht-terminalen positiven Statuswerte** ein:
  - `READY_FOR_AI` = Dokument ist fachlich bis einschließlich M3 vorbereitet, aber es liegt noch **kein** gültiger M5-Benennungsvorschlag vor.
  - `PROPOSAL_READY` = ein gültiger M5-Benennungsvorschlag ist persistent vorhanden; das Dokument ist **für M5 abgeschlossen**, aber **noch nicht** im Sinne von M6 erfolgreich kopiert.
- Bereits vorhandene **M4-Altbestände** mit positivem Status `SUCCESS`, aber **ohne** M5-Benennungsvorschlag, müssen in M5 **kontrolliert in `READY_FOR_AI` überführt** werden.
- Die bestehenden negativen bzw. Skip-Statuswerte bleiben erhalten:
  - `FAILED_RETRYABLE`
  - `FAILED_FINAL`
  - `SKIPPED_ALREADY_PROCESSED`
  - `SKIPPED_FINAL_FAILURE`
- Für M5-spezifische Wiederholungsläufe gilt:
  - `PROPOSAL_READY` wird **nicht erneut per KI verarbeitet**,
  - `SUCCESS` wird **nicht erneut verarbeitet**,
  - `FAILED_FINAL` wird **nicht erneut verarbeitet**,
  - `READY_FOR_AI` und `FAILED_RETRYABLE` bleiben verarbeitbar.
- Für M6 gilt bereits als verbindliche Übergaberegel:
  - `PROPOSAL_READY` ist **kein terminaler Gesamterfolg**, sondern der fachlich korrekte Eingangszustand für Dateinamensbildung und Zielkopie.

### 2. Externer Prompt-Bezug

- Der Prompt ist in M5 **nicht** im Code fest verdrahtet.
- Die Anwendung lädt den fachlich verwendeten Prompt aus einer **externen Datei**.
- Der für einen KI-Versuch verwendete Prompt muss über einen **stabilen Prompt-Identifikator** nachvollziehbar sein, mindestens über den Prompt-Dateinamen oder einen gleichwertig stabilen Identifikator.

### 3. Deterministische KI-Anfragezusammensetzung

M5 führt **kein frei erfundenes Templating-System** ein.

Stattdessen gilt:

- Die Application erzeugt für den KI-Port eine **vollständig deterministische Anfrage-Repräsentation**.
- Diese Repräsentation besteht mindestens aus:
  - Prompt-Inhalt,
  - Prompt-Identifikator,
  - begrenztem Dokumenttext,
  - tatsächlich gesendeter Zeichenzahl,
  - der verbindlichen JSON-only-Erwartung für `date`, `title`, `reasoning`.
- Die Zusammensetzung von Prompt und Dokumenttext erfolgt über einen **festen, dokumentierten technischen Aufbau**, damit KI 2 dies ohne Interpretationsspielraum umsetzen kann.
- Provider-spezifische Features für strukturiertes Output dürfen **optional intern** verwendet werden, sind aber **nicht** Voraussetzung des M5-Designs.

### 4. KI-Konfiguration und effektiver API-Key

Für M5 müssen die bereits im Zielbild vorgesehenen KI-relevanten Konfigurationswerte technisch nutzbar und verdrahtet sein, insbesondere:

- `api.baseUrl`
- `api.model`
- `api.timeoutSeconds`
- `max.text.characters`
- `prompt.template.file`

Der API-Key bleibt Konfiguration; die bestehende Prioritätsregel **Umgebungsvariable vor Properties** bleibt verbindlich.

Zusätzlich gilt für M5:

- der **effektive** API-Key muss nicht nur aufgelöst, sondern auch **tatsächlich im HTTP-Adapter verwendet** werden,
- die Verwendung muss automatisiert testbar nachgewiesen sein.

### 5. Begrenzung des an die KI gesendeten Inhalts

- Die maximale Zeichenzahl des an die KI gegebenen Dokumentinhalts ist konfigurierbar.
- Die Begrenzung muss **vor dem KI-Aufruf** technisch angewendet werden.
- Die tatsächlich an die KI gesendete Zeichenzahl muss verfügbar und persistierbar sein.
- Die Begrenzung verändert **nicht** den extrahierten Originaltext im M3-/M4-Sinne, sondern nur den **für M5 verwendeten KI-Eingabetext**.

### 6. Vollständige M5-Regel für Titel und Datum

M5 muss die fachliche Regel **operational vollständig** umsetzen, ohne unzuverlässige Heuristik-Experimente einzuführen.

Daher gilt kombinatorisch:

- Der **Prompt-Vertrag** bindet die KI verbindlich an die nicht rein technisch prüfbaren Erwartungen:
  - Titel auf Deutsch,
  - verständlich,
  - hinreichend eindeutig,
  - Eigennamen unverändert.
- Die **Application-Validierung** prüft zusätzlich alle in M5 **objektiv prüfbaren** Regeln:
  - `title` vorhanden,
  - `reasoning` vorhanden,
  - Basistitel max. 20 Zeichen,
  - keine unzulässigen Sonderzeichen außer Leerzeichen,
  - keine generischen Platzhaltertitel,
  - vorhandenes `date` ist als `YYYY-MM-DD` interpretierbar.
- M5 führt **keine** spekulative Sprachdetektion, keine unsichere Eigennamen-Normalisierung und keine weichen Heuristiken für „Verständlichkeit“ ein, die fachlich eher neue Fehler erzeugen würden.

### 7. Technischer Antwortvertrag der KI

Die KI-Antwort muss in M5 als **genau ein parsebares JSON-Objekt** verarbeitet werden.

Zweckmäßiges Schema im M5-Sinn:

```json
{
  "date": "2026-02-11",
  "title": "Stromabrechnung",
  "reasoning": "..."
}
```

Dabei gilt:

- `title` ist verpflichtend,
- `reasoning` ist verpflichtend,
- `date` ist optional,
- zusätzliche Felder dürfen technisch toleriert werden, sind aber für M5 fachlich irrelevant,
- zusätzlicher Freitext außerhalb des JSON-Objekts macht die Antwort **technisch unbrauchbar**.

### 8. Technisch unbrauchbare vs. fachlich unbrauchbare KI-Ergebnisse

Für M5 ist diese Unterscheidung verbindlich:

**Technisch unbrauchbare KI-Ergebnisse** sind insbesondere:
- KI nicht erreichbar,
- Timeout,
- technisch fehlgeschlagener HTTP-Aufruf,
- nicht parsebare KI-Antwort,
- technisch unvollständige Antwort ohne verpflichtende Strukturbestandteile,
- zusätzlicher Text außerhalb des erwarteten einzelnen JSON-Objekts.

Diese Fälle sind im M5-Sinn **dokumentbezogene technische Fehler**.

**Fachlich unbrauchbare KI-Ergebnisse** sind insbesondere:
- unbrauchbarer oder generischer Titel,
- Titel verletzt die technisch prüfbaren Titelregeln des Zielbilds,
- die KI liefert ein `date`, dieses ist aber nicht interpretierbar oder unbrauchbar.

Diese Fälle sind im M5-Sinn **deterministische Inhaltsfehler**.

### 9. Datumsauflösung und Datumsquelle

- Liefert die KI ein gültiges `date`, wird dieses als aufgelöstes Datum verwendet.
- Liefert die KI **kein** `date`, setzt die Anwendung den Fallback über die technische Uhr (`ClockPort`) auf das aktuelle Datum.
- Liefert die KI ein `date`, dieses ist aber unbrauchbar, ist das **kein** Fallback-Fall, sondern ein fachlicher Fehlerfall.
- Die Datumsquelle muss im M5-Stand nachvollziehbar und persistierbar sein.

### 10. M5-Benennungsvorschlag und führende Quelle für M6

Der M5-Benennungsvorschlag besteht mindestens aus:

- aufgelöstem Datum,
- Datumsquelle,
- validiertem Basistitel,
- KI-Begründung (`reasoning`).

**Nicht** Bestandteil des M5-Benennungsvorschlags sind:

- finaler vollständiger Dateiname,
- Dubletten-Suffix,
- Zielpfad,
- physische Zielkopie.

Für die Übergabe an M6 gilt verbindlich:

- die **führende Quelle** des gültigen M5-Benennungsvorschlags ist der **neueste Versuchshistorieneintrag mit Ergebnisstatus `PROPOSAL_READY`**,
- M5 führt **keine parallele zweite Wahrheitsquelle** für Datum/Titel/Reasoning im Dokument-Stammsatz ein,
- der Dokument-Stammsatz enthält in M5 weiterhin den Gesamtstatus und die Zähler, nicht aber redundante M6-Zieldaten.

### 11. Erweiterung der Versuchshistorie in M5

Die bereits in M4 vorhandene Versuchshistorie wird in M5 gezielt erweitert. Für jeden dokumentbezogenen, identifizierten M5-Versuch müssen mindestens speicherbar sein:

- Modellname,
- Prompt-Identifikator oder Prompt-Dateiname,
- verarbeitete Seitenzahl,
- an die KI gesendete Zeichenzahl,
- KI-Rohantwort,
- KI-Reasoning,
- aufgelöstes Datum,
- Datumsquelle,
- validierter Titel.

Nicht Bestandteil der M5-Versuchshistorie sind Zielpfad oder finaler Zieldateiname.

### 12. Fehlersemantik und Zählerfortschreibung in M5

M5 erweitert die in M4 bereits vorhandene Fehlersemantik:

- dokumentbezogene **technische** KI-Fehler nach erfolgreicher Fingerprint-Ermittlung bleiben retryable und laufen über den **Transientfehlerzähler**,
- fachlich **deterministische** KI-Ergebnisfehler laufen über den **Inhaltsfehlerzähler**,
- die bestehende M4-Regel „erster deterministischer Inhaltsfehler retryable, zweiter final“ bleibt erhalten und gilt auch für M5-deterministische Inhaltsfehler,
- Skip-Fälle aus M4 bleiben unverändert erhalten,
- Vor-Fingerprint-Fehler bleiben weiterhin **nicht historisierte** Laufereignisse.

### 13. Kein Vorgriff auf M6

M5 endet fachlich mit einem **persistierten, validierten Benennungsvorschlag**. M5 führt **keine** Zielkopie aus und erzeugt **keinen** finalen Zieldateinamen als technische Dateisystemoperation.

---

## AP-001 M5-Kernobjekte, Statusmodell und KI-/Prompt-Port-Verträge präzisieren

### Voraussetzung
Keine. Dieses Arbeitspaket ist der M5-Startpunkt.

### Ziel
Die M5-relevanten Typen, positiven Zwischenstatus, KI-/Prompt-Verträge und Ergebnissemantiken werden eindeutig eingeführt, damit spätere Arbeitspakete ohne Interpretationsspielraum implementiert werden können.

### Muss umgesetzt werden
- Neue M5-relevante Kernobjekte bzw. Application-nahe Typen anlegen, insbesondere für:
  - externen Prompt-Bezug,
  - Prompt-Identifikator,
  - deterministische KI-Anfrage-Repräsentation,
  - KI-Rohantwort,
  - parsebares KI-Antwortmodell,
  - validierten Benennungsvorschlag,
  - Datumsquelle,
  - KI-bezogene Nachvollziehbarkeitsdaten pro Versuch,
  - technische vs. fachliche KI-Fehlerklassifikation.
- Das Statusmodell gezielt um die nicht-terminalen positiven Zwischenstatus erweitern:
  - `READY_FOR_AI`
  - `PROPOSAL_READY`
- Die Semantik dieser Statuswerte in JavaDoc und ggf. `package-info` so dokumentieren, dass klar ist:
  - `READY_FOR_AI` ist **M5-verarbeitbar**,
  - `PROPOSAL_READY` ist **für M5 abgeschlossen**, aber **für M6 weiterverarbeitbar**,
  - `SUCCESS` bleibt ab M5 dem echten M6-Enderfolg vorbehalten.
- Outbound-Ports definieren für:
  - Laden des externen Prompts,
  - KI-Aufruf über eine OpenAI-kompatible Schnittstelle.
- Port-Verträge so schneiden, dass **weder `Path`/`File` noch HTTP-/JSON-Bibliothekstypen** in Domain oder Application durchsickern.
- Rückgabemodelle so anlegen, dass spätere Arbeitspakete ohne Zusatzannahmen unterscheiden können zwischen:
  - technisch erfolgreichem KI-Aufruf mit Rohantwort,
  - technischem KI-Fehler,
  - parsebarer Antwort,
  - technisch unbrauchbarer Antwort,
  - fachlich validiertem Benennungsvorschlag,
  - fachlich unbrauchbarem Benennungsvorschlag.
- M5-spezifische Semantik von `date`, `title` und `reasoning` in JavaDoc eindeutig beschreiben.
- Explizit dokumentieren, dass M5 **keinen finalen Zieldateinamen** und **keine Zielkopie** erzeugt.
- Explizit dokumentieren, dass die führende Quelle für M6 **der neueste Versuch mit `PROPOSAL_READY`** ist.

### Explizit nicht Teil
- Prompt-Datei laden
- HTTP-Adapter
- KI-JSON-Parsing
- fachliche Titel- und Datumsvalidierung
- Persistenzanpassungen
- Batch-Integration

### Fertig wenn
- die M5-relevanten Typen und Port-Verträge vorhanden sind,
- technische und fachliche M5-Ergebnisarten klar unterscheidbar modelliert sind,
- die positiven Zwischenstatus ohne Widerspruch zu M6 definiert sind,
- Domain und Application frei von Infrastrukturtypen bleiben,
- der Build weiterhin fehlerfrei ist.

---

## AP-002 Externen Prompt laden, stabil identifizieren und deterministische KI-Anfrage zusammensetzen

### Voraussetzung
AP-001 ist abgeschlossen.

### Ziel
Der fachlich verwendete Prompt wird aus einer externen Datei geladen, stabil identifizierbar gemacht und gemeinsam mit dem Dokumenttext in eine eindeutig definierte, deterministische KI-Anfrage-Repräsentation überführt.

### Muss umgesetzt werden
- Adapter-Out für das Laden der externen Prompt-Datei implementieren.
- Aus dem geladenen Prompt einen **stabilen Prompt-Identifikator** ableiten, mindestens über den Prompt-Dateinamen oder einen gleichwertig stabilen Identifikator.
- Sicherstellen, dass leerer oder technisch unbrauchbarer Prompt nicht als gültige M5-Eingabe weitergereicht wird.
- Einen **fest dokumentierten technischen Aufbau** der KI-Anfrage-Repräsentation implementieren, der mindestens enthält:
  - Prompt-Inhalt,
  - Prompt-Identifikator,
  - Dokumenttext als eigener Block,
  - die JSON-only-Erwartung für `date`, `title`, `reasoning`.
- Die Zusammensetzung so schneiden, dass KI 2 **ohne implizite Entscheidung** weiß, in welcher Reihenfolge Prompt und Dokumenttext zusammengeführt werden.
- Den Mechanismus so schneiden, dass **kein frei erfundenes Templating-System** eingeführt werden muss.
- JavaDoc für Prompt-Bezug, Identifikator, deterministische Zusammensetzung, JSON-only-Vertrag und M5-Nicht-Ziele ergänzen.

### Explizit nicht Teil
- HTTP-Aufruf zur KI
- Textbegrenzung
- KI-Antwortvalidierung
- Batch-Integration
- Persistenz der Prompt-Metadaten

### Fertig wenn
- der Prompt aus einer externen Datei technisch ladbar ist,
- ein stabiler Prompt-Identifikator bereitsteht,
- die KI-Anfrage-Repräsentation deterministisch aufgebaut wird,
- kein freies Ad-hoc-Templating eingeführt wurde,
- der Stand weiterhin fehlerfrei buildbar ist.

---

## AP-003 OpenAI-kompatiblen KI-HTTP-Adapter mit wirksamer Konfiguration und kontrolliertem technischem Fehlerverhalten implementieren

### Voraussetzung
AP-001 und AP-002 sind abgeschlossen.

### Ziel
Ein technisch gekapselter Adapter kann einen M5-KI-Aufruf gegen eine OpenAI-kompatible HTTP-Schnittstelle ausführen, den **effektiven** API-Key tatsächlich verwenden und eine Rohantwort oder einen kontrollierten technischen Fehler liefern.

### Muss umgesetzt werden
- OpenAI-kompatiblen HTTP-Adapter im Adapter-Out implementieren.
- Basis-URL, Modellname, Timeout und API-Zugriff aus der vorhandenen Konfiguration technisch nutzbar machen.
- Den Adapter so schneiden, dass Domain und Application nur mit dem **abstrakten KI-Port** arbeiten.
- Eine technische Rohantwort liefern, die in späteren Arbeitspaketen geparst und validiert werden kann.
- Kontrolliertes Fehlerverhalten mindestens für folgende Fälle umsetzen:
  - Timeout,
  - nicht erreichbarer Endpunkt,
  - technisch fehlgeschlagener HTTP-Aufruf,
  - sonstige technische Kommunikationsfehler.
- Sicherstellen, dass der **effektive API-Key** gemäß bestehender Prioritätsregel im Adapter **real verwendet** wird.
- Sicherstellen, dass keine HTTP-, Authentifizierungs- oder JSON-Implementierungsdetails in Domain oder Application durchsickern.
- JavaDoc für OpenAI-Kompatibilität, technische Fehlergrenzen, Konfigurationsnutzung und M5-Nicht-Ziele ergänzen.

### Explizit nicht Teil
- fachliche Validierung der KI-Antwort
- Persistenz
- Batch-Orchestrierung
- Textbegrenzung
- Datums-Fallback
- finaler Benennungsvorschlag

### Fertig wenn
- der KI-Port technisch implementiert ist,
- Konfiguration für Basis-URL, Modellname, Timeout und effektiven API-Key wirksam verwendet wird,
- Rohantwort und technische Fehler kontrolliert über den Port geliefert werden,
- der Build weiterhin fehlerfrei ist.

---

## AP-004 Textbegrenzung, KI-JSON-Parsing, vollständige M5-Validierung und Datumsauflösung umsetzen

### Voraussetzung
AP-001 bis AP-003 sind abgeschlossen.

### Ziel
Die Anwendung kann einen begrenzten Dokumenttext für den KI-Aufruf vorbereiten, die KI-Rohantwort als JSON interpretieren und daraus entweder einen validierten Benennungsvorschlag oder einen eindeutig klassifizierten Fehler ableiten.

### Muss umgesetzt werden
- Konfigurierbare Begrenzung des an die KI zu sendenden Dokumenttexts umsetzen.
- Sicherstellen, dass die Begrenzung **vor dem KI-Aufruf** angewendet wird.
- Tatsächlich gesendete Zeichenzahl technisch erfassen und für spätere Persistenz bereitstellen.
- Parsing der KI-Rohantwort als **genau ein JSON-Objekt** implementieren.
- Technische Antwortvalidierung umsetzen:
  - `title` vorhanden und nicht leer,
  - `reasoning` vorhanden und nicht leer,
  - `date` optional,
  - zusätzlicher Freitext außerhalb des JSON-Objekts führt zu technischer Ungültigkeit.
- Fachliche M5-Validierung für die **objektiv prüfbaren** Titel- und Datumsregeln umsetzen, insbesondere:
  - Basistitel max. 20 Zeichen,
  - keine unzulässigen Sonderzeichen außer Leerzeichen,
  - keine generischen Platzhaltertitel,
  - ein vorhandenes `date` muss als `YYYY-MM-DD` interpretierbar sein.
- Den nicht rein technisch prüfbaren Teil der fachlichen Titelregel explizit über den **Prompt-Vertrag** absichern und dies im Code/JavaDoc sauber dokumentieren:
  - Deutsch,
  - verständlich,
  - hinreichend eindeutig,
  - Eigennamen unverändert.
- Explizit umsetzen:
  - fehlendes `date` → Fallback über `ClockPort`,
  - vorhandenes, aber unbrauchbares `date` → fachlicher Fehler,
  - parsebare, aber fachlich unbrauchbare Titel → fachlicher Fehler.
- Einen validierten M5-Benennungsvorschlag bereitstellen, der mindestens enthält:
  - aufgelöstes Datum,
  - Datumsquelle,
  - validierten Titel,
  - KI-Reasoning.
- JavaDoc für Begrenzungsregel, Antwortvalidierung, Datums-Fallback und operative Vollständigkeit der Titelregel ergänzen.

### Explizit nicht Teil
- HTTP-Adapter
- SQLite-Schemaerweiterung
- Batch-Integration
- Status- und Zählerfortschreibung
- finale Dateinamensbildung
- Zielkopie

### Fertig wenn
- Dokumenttext begrenzt werden kann,
- parsebare und unparsebare KI-Antworten sauber unterscheidbar sind,
- fehlendes Datum korrekt auf den Clock-Fallback läuft,
- fachlich unbrauchbare Titel und Datumswerte sauber erkannt werden,
- ein validierter M5-Benennungsvorschlag technisch verfügbar ist,
- der Build weiterhin fehlerfrei ist.

---

## AP-005 SQLite-Schema von M4 nach M5 evolvieren, Altbestände migrieren und Versuchshistorie um M5-Nachvollziehbarkeit erweitern

### Voraussetzung
AP-001 bis AP-004 sind abgeschlossen.

### Ziel
Die bestehende M4-Persistenz wird kontrolliert auf den M5-Stand erweitert, inklusive der **idempotenten Migration positiver M4-Altbestände** und der Erweiterung der Versuchshistorie um die M5-Nachvollziehbarkeit.

### Muss umgesetzt werden
- Das bestehende SQLite-Schema **evolvieren**, nicht neu erfinden.
- Die Schema-Initialisierung so erweitern, dass ein vorhandenes M4-Schema kontrolliert auf den M5-Stand gebracht werden kann.
- Die Versuchshistorie um die für M5 benötigten Felder erweitern, insbesondere für:
  - Modellname,
  - Prompt-Identifikator oder Prompt-Dateiname,
  - verarbeitete Seitenzahl,
  - an die KI gesendete Zeichenzahl,
  - KI-Rohantwort,
  - KI-Reasoning,
  - aufgelöstes Datum,
  - Datumsquelle,
  - validierten Titel.
- Die Persistenz so erweitern, dass die neuen nicht-terminalen positiven Statuswerte fachlich konsistent speicherbar sind:
  - `READY_FOR_AI`
  - `PROPOSAL_READY`
- Eine **idempotente M4→M5-Altbestandsmigration** vorsehen, die mindestens sicherstellt:
  - M4-Dokumente mit positivem Altstatus `SUCCESS`, aber ohne M5-Benennungsvorschlag, werden kontrolliert nach `READY_FOR_AI` überführt,
  - diese Migration ist mehrfach ausführbar, ohne Daten zu beschädigen,
  - bestehende negative und terminale Fehlerzustände bleiben unangetastet.
- Sicherstellen, dass:
  - bestehende M4-Daten weiterhin lesbar bleiben,
  - die M5-Erweiterung idempotent initialisierbar ist,
  - keine M6+-Felder für Zielpfad oder finalen Zieldateinamen angelegt werden.
- Repository-Mapping der Versuchshistorie auf die neuen M5-Felder erweitern.
- Falls für Tests oder Use-Case-Integration nötig, passende Lesefähigkeiten ergänzen, ohne spätere Reporting-Funktionalität vorwegzunehmen.
- JavaDoc für Schemaevolution, Altbestandsmigration, Rückwärtsverträglichkeit und M5-Nachvollziehbarkeit ergänzen.

### Explizit nicht Teil
- Batch-Use-Case-Integration
- KI-Aufruf
- Status- und Zählerentscheidungen im laufenden Batch
- Zielpfad- oder Dateinamenspersistenz
- M6-Dateisystemfunktionalität

### Fertig wenn
- das M4-Schema kontrolliert auf M5 erweitert werden kann,
- M4-Altbestände mit positivem Zwischenstatus idempotent auf die M5-Semantik überführt werden,
- die neuen M5-Felder in der Versuchshistorie technisch schreib- und lesbar sind,
- bestehende M4-Daten nicht unbrauchbar werden,
- keine M6+-Persistenzfelder eingeführt wurden,
- der Stand fehlerfrei buildbar bleibt.

---

## AP-006 M5-Entscheidungslogik und Batch-Integration für KI-Aufruf, Fehlerklassifikation, Statusfortschreibung und persistierten Benennungsvorschlag umsetzen

### Voraussetzung
AP-001 bis AP-005 sind abgeschlossen.

### Ziel
Der bestehende M4-Lauf wird zu einem echten M5-Lauf erweitert, der nach erfolgreicher M3-Vorprüfung per KI einen validierten Benennungsvorschlag erzeugt, KI-bezogene Versuchsdaten persistiert und die positive Statussemantik so fortschreibt, dass M6 ohne Statusbruch anknüpfen kann.

### Muss umgesetzt werden
- Den bestehenden Batch-Use-Case so erweitern, dass pro geeignetem Dokument nach M4-Identifikation und nach bestandener M3-Vorprüfung zusätzlich gilt:
  1. Prompt laden,
  2. Dokumenttext begrenzen,
  3. deterministische KI-Anfrage erzeugen,
  4. KI-Aufruf durchführen,
  5. KI-Rohantwort technisch verarbeiten,
  6. Benennungsvorschlag validieren,
  7. Versuchshistorie mit M5-Nachvollziehbarkeit fortschreiben,
  8. Status und Zähler im vorhandenen Rahmen konsistent fortschreiben.
- Sicherstellen, dass **kein KI-Aufruf** erfolgt bei:
  - Vor-Fingerprint-Fehlern,
  - terminalen Skip-Fällen aus M4,
  - M3-Inhaltsfehlern,
  - sonstigen Fällen, die den Dokumentlauf bereits vor der KI sauber beendet haben.
- Die positiven Dokumentzustände explizit wie folgt behandeln:
  - M4-Altbestand `SUCCESS` ohne M5-Benennungsvorschlag wird **nicht** als terminal erfolgreich übersprungen, sondern gilt nach Migration bzw. Normalisierung als `READY_FOR_AI`,
  - gültiger M5-Benennungsvorschlag führt zu `PROPOSAL_READY`, **nicht** zu `SUCCESS`,
  - bestehendes `PROPOSAL_READY` führt in M5 zu **keinem erneuten KI-Aufruf**.
- M5-Fehlerfälle explizit wie folgt in den bestehenden Status- und Zählerrahmen überführen:
  - technischer KI-Fehler oder technisch unbrauchbare KI-Antwort → dokumentbezogener technischer Fehler, retryable, **Transientfehlerzähler +1**,
  - parsebare, aber fachlich unbrauchbare KI-Antwort → deterministischer Inhaltsfehler, **Inhaltsfehlerzähler** nach bestehender Regel fortschreiben,
  - gültiger Benennungsvorschlag → `PROPOSAL_READY`, Fehlerzähler unverändert.
- Sicherstellen, dass bei dokumentbezogenen KI-Fehlern der Batch-Lauf für andere Dokumente kontrolliert weiterläuft.
- Für identifizierte Dokumente sicherstellen, dass Versuchshistorie und Stammsatz konsistent fortgeschrieben werden und kein teilpersistierter Zustand zurückbleibt.
- Sicherstellen, dass die führende Quelle für M6 **der neueste Versuch mit `PROPOSAL_READY`** bleibt und nicht implizit aus anderen Daten rekonstruiert werden muss.
- Sicherstellen, dass KI-Rohantwort standardmäßig **in SQLite**, aber nicht als M6-/M7-Funktionalität fehlmodelliert wird.
- JavaDoc für M5-Laufreihenfolge, KI-Grenze, Fehlerklassifikation, positive Statusfortschreibung und Persistenzkonsistenz ergänzen.

### Explizit nicht Teil
- physische Zielkopie
- finale Dateinamensbildung
- Dublettenbehandlung
- Zielpfad- und Zieldateinamenspersistenz
- M6- oder M7-Feinschliff

### Fertig wenn
- der Batch-Lauf für geeignete Dokumente tatsächlich einen KI-basierten Benennungsvorschlag erzeugt,
- M4-Altbestände mit positivem Zwischenstatus korrekt in die M5-Verarbeitung überführt werden,
- gültige M5-Ergebnisse als `PROPOSAL_READY` und **nicht** als `SUCCESS` persistiert werden,
- M5-spezifische technische und fachliche KI-Fehler sauber unterschieden werden,
- der validierte Benennungsvorschlag persistiert wird,
- KI-Aufrufe nur an den fachlich zulässigen Stellen erfolgen,
- der Lauf trotz dokumentbezogener KI-Fehler kontrolliert weiterarbeitet,
- weiterhin keine M6+-Funktionalität enthalten ist.

---

## AP-007 Bootstrap- und CLI-Anpassungen für M5-Konfiguration, Startvalidierung, Schemaevolution und vollständige Verdrahtung durchführen

### Voraussetzung
AP-001 bis AP-006 sind abgeschlossen.

### Ziel
Der Programmeinstieg ist sauber an den M5-Lauf angepasst; die KI-relevante Konfiguration wird validiert, die M5-Schemaevolution einschließlich Altbestandsmigration wird beim Start wirksam, alle M5-Bausteine sind verdrahtet und harte Startfehler führen weiterhin kontrolliert zu Exit-Code 1.

### Muss umgesetzt werden
- Bootstrap-Verdrahtung auf die neuen M5-Ports, Adapter, Validierungs- und Persistenzbausteine erweitern.
- M5-relevante Konfiguration ergänzen bzw. verdrahten, insbesondere für:
  - `api.baseUrl`
  - `api.model`
  - `api.timeoutSeconds`
  - `max.text.characters`
  - `prompt.template.file`
- Startvalidierung so ergänzen, dass mindestens geprüft wird:
  - Prompt-Datei ist vorhanden und technisch lesbar,
  - `max.text.characters` ist gültig und technisch nutzbar,
  - Timeout ist gültig,
  - KI-Basis-URL und Modellname sind vorhanden,
  - ein effektiver API-Key gemäß bestehender Prioritätsregel verfügbar ist.
- Die bestehende M4-Schema-Initialisierung mit der M5-Schemaevolution und der M4→M5-Altbestandsmigration sauber kombinieren.
- Sicherstellen, dass harte Start-, Verdrahtungs-, Konfigurations- oder Initialisierungsfehler weiterhin zu **Exit-Code 1** führen.
- Sicherstellen, dass dokumentbezogene KI-Fehler **nicht** als Startfehler fehlmodelliert werden.
- JavaDoc und `package-info` für aktualisierte Verdrahtung, Konfiguration, Schemaevolution und Modulgrenzen ergänzen.

### Explizit nicht Teil
- Logging-Feinschliff des Endstands
- M6-Dateisystemverdrahtung
- Zielkopie
- Dublettenlogik
- spätere Betriebsoptimierungen

### Fertig wenn
- das Programm im M5-Stand vollständig startbar ist,
- alle M5-Bausteine korrekt verdrahtet sind,
- die M5-Startvalidierung greift,
- die M5-Schemaevolution einschließlich Altbestandsmigration beim Start wirksam wird,
- harte Startfehler weiterhin kontrolliert zu Exit-Code 1 führen,
- der Build fehlerfrei bleibt.

---

## AP-008 Tests für Prompt-Bezug, KI-Adapter, Validierung, Altbestandsmigration, Statussemantik, Schemaevolution und M5-Ablauf vervollständigen

### Voraussetzung
AP-001 bis AP-007 sind abgeschlossen.

### Ziel
Der vollständige M5-Zielzustand wird automatisiert abgesichert und als konsistenter Übergabestand nachgewiesen.

### Muss umgesetzt werden
- Unit-Tests für den externen Prompt-Bezug implementieren, insbesondere für:
  - Prompt-Datei wird geladen,
  - leerer oder technisch ungültiger Prompt wird abgelehnt,
  - stabiler Prompt-Identifikator wird geliefert,
  - deterministische Zusammensetzung der KI-Anfrage bleibt reproduzierbar.
- Tests für Textbegrenzung und tatsächlich gesendete Zeichenzahl implementieren.
- Tests für KI-JSON-Parsing und technische Antwortvalidierung implementieren, insbesondere für:
  - gültiges JSON,
  - ungültiges JSON,
  - fehlendes `title`,
  - fehlendes `reasoning`,
  - optionales `date`,
  - zusätzlicher Text außerhalb des JSON-Objekts.
- Tests für fachliche M5-Validierung implementieren, insbesondere für:
  - gültigen Titel,
  - generischen Titel,
  - Titel mit unzulässigen Sonderzeichen,
  - Titel über 20 Zeichen,
  - gültiges KI-Datum,
  - fehlendes Datum mit Clock-Fallback,
  - unbrauchbares vorhandenes Datum.
- Adapter-Tests für den KI-Port ergänzen, insbesondere für:
  - erfolgreiche Rohantwort,
  - Timeout,
  - technisch fehlgeschlagenen HTTP-Aufruf,
  - Verwendung des **effektiven API-Keys** im tatsächlichen HTTP-Request,
  - Vorrang der Umgebungsvariable vor `api.key` aus Properties im real genutzten Adapterpfad.
- Repository- und Schema-Tests gegen SQLite ergänzen, insbesondere für:
  - Evolution eines M4-Schemas auf M5,
  - Persistenz und Auslesen der neuen M5-Versuchshistorienfelder,
  - Rückwärtsverträglichkeit bestehender M4-Daten,
  - idempotente Migration von M4-Altbeständen `SUCCESS` nach `READY_FOR_AI`.
- Integrationstests für den M5-Ablauf ergänzen, insbesondere:
  - gültiger M5-Happy-Path mit persistiertem Benennungsvorschlag endet in `PROPOSAL_READY`, **nicht** in `SUCCESS`,
  - technisch unbrauchbare KI-Antwort führt zu retryablem technischem Fehler,
  - fachlich unbrauchbare KI-Antwort führt zu deterministischem Inhaltsfehler,
  - bei fehlendem `date` wird der Clock-Fallback verwendet,
  - bei M3-Inhaltsfehlern erfolgt kein KI-Aufruf,
  - bestehendes `PROPOSAL_READY` wird im M5-Wiederholungslauf nicht erneut per KI verarbeitet,
  - M4-Altbestände mit positivem Zwischenstatus werden im M5-Lauf nicht fälschlich als final erfolgreich übersprungen,
  - die führende Quelle für M6 ist der neueste Versuch mit `PROPOSAL_READY`,
  - es erfolgt weiterhin **keine Zielkopie**.
- Tests für Bootstrap- und Startverhalten ergänzen, insbesondere:
  - ungültige M5-Konfiguration führt zu Exit-Code 1,
  - M5-Schemaevolution einschließlich Altbestandsmigration wird beim Start wirksam,
  - dokumentbezogene KI-Fehler führen **nicht** zu Exit-Code 1.
- Den M5-Stand abschließend auf Konsistenz, Architekturtreue und Nicht-Vorgriff auf M6+ prüfen.

### Explizit nicht Teil
- Tests für Zielkopie
- Tests für Dublettenbehandlung im Zielordner
- Tests für finalen Zieldateinamen
- Tests für M6-/M7-Endverhalten

### Fertig wenn
- die Test-Suite für den M5-Umfang grün ist,
- die wichtigsten M5-Randfälle automatisiert abgesichert sind,
- die positive Statussemantik M4→M5→M6 ohne Lücke nachgewiesen ist,
- der definierte M5-Zielzustand vollständig erreicht ist,
- ein fehlerfreier, übergabefähiger Stand vorliegt.

---

## Abschlussbewertung

Die Arbeitspakete decken den vollständigen M5-Zielumfang aus den verbindlichen Spezifikationen ab und schließen zusätzlich die zuvor offene **Status- und Übergangssemantik zwischen M4, M5 und M6** sauber:

- externer Prompt-Bezug
- deterministische KI-Anfrage-Zusammensetzung
- OpenAI-kompatibler KI-Aufruf
- konfigurierbarer KI-Zugriff einschließlich wirksam genutztem effektivem API-Key
- Begrenzung des an die KI gesendeten Inhalts
- technische und fachliche Validierung der KI-Antwort
- Datums-Fallback durch die Anwendung
- persistierter, validierter Benennungsvorschlag
- Erweiterung der Versuchshistorie um M5-Nachvollziehbarkeit
- idempotente M4→M5-Altbestandsmigration
- positive Zwischenstatus `READY_FOR_AI` und `PROPOSAL_READY` als saubere Brücke zu M6
- Tests für Prompt, KI-Adapter, Validierung, Datumsauflösung, Schemaevolution, Altbestandsmigration und M5-Ablauf

Gleichzeitig bleiben die Grenzen zu M1–M4 sowie zu M6+ gewahrt. Insbesondere werden **keine** Zielkopie, **keine** Dublettenbehandlung im Zielordner und **keine** finale Dateinamensbildung vorweggenommen.
