4.1 KiB
4.1 KiB
model
| model |
|---|
| sonnet |
AP08 – Minimalbericht bei Bedienfehlern (Exit-Code 2)
Meilenstein: M1 Vorgänger: AP06, AP07 ✅ erforderlich Nachfolger: AP10, AP11 Grundlage:
docs/specs/technik-und-architektur.mdv5, §§ „Gültigkeitsentscheidung und Exit-Codes", „Laufzeit- und Betriebsmodell"
Ziel
Auch bei Bedien- oder Zugriffsfehlern (Exit-Code 2) entsteht ein Minimalbericht, der den Fehler nachvollziehbar beschreibt. technik-und-architektur.md verlangt das ausdrücklich: „Auch bei Exit-Code 2 soll, soweit technisch möglich, ein Minimalbericht erzeugt werden."
Voraussetzungen
- AP06 (CLI), AP07 (Ausgabeartefakte)
Scope IN
Bedienfehler-Fälle (alle müssen Exit-Code 2 + Minimalbericht ergeben)
- Kein Argument → nur Konsolenausgabe (Eingabeverzeichnis unbekannt)
- Mehr als ein Argument → nur Konsolenausgabe
- Eingabedatei existiert nicht → Konsolenausgabe + Berichtdatei im übergeordneten Verzeichnis, sofern dieses schreibbar ist
- Eingabepfad ist kein regulärer Dateityp (z.B. Verzeichnis) → nur Konsolenausgabe
- Eingabedatei ist nicht lesbar (Berechtigungen) → Konsolenausgabe + Berichtdatei sofern Zielverzeichnis schreibbar
Minimalbericht-Inhalt
Ein ValidationReport (AP05) via ValidationReport.operationalError(...) mit:
fileName= übergebener Pfad (oder<kein Argument>/<mehrere Argumente>)timestamp= jetzt- Genau ein
Finding:kind = SPEC→ Verdict wirdOPERATIONAL_ERRORseverity = ERRORlayer = ARTIFACTruleId= z.B.OPERATIONAL-MISSING-ARG,OPERATIONAL-FILE-NOT-FOUND,OPERATIONAL-NOT-READABLE,OPERATIONAL-NOT-REGULAR,OPERATIONAL-TOO-MANY-ARGSgermanMessage= kurzer verständlicher deutscher Text
Wichtige Regeln
- Kein Stack-Trace für den Nutzer — technische Details gehören ins Log, nicht in den Bericht
- Wenn Zielverzeichnis nicht schreibbar: nur Konsolenausgabe, kein Fehler-auf-Fehler
- Eine kurze Hinweiszeile auf Konsole ist okay: „Bericht konnte nicht in das Verzeichnis geschrieben werden."
- Der Bedienfehler wird zusätzlich geloggt (
logger.error(...))
Tests
- Unit-Test für alle fünf Fälle: Exit-Code
2+ korrekterruleId-Wert - Negativ-Test: kein Stack-Trace in der Ausgabe
- Test: Fall 3 (Datei nicht vorhanden) → Berichtdatei im übergeordneten Verzeichnis, wenn schreibbar
Scope OUT
- Unterscheidung feingranularer IO-Exceptions (
AccessDeniedException,FileSystemExceptionetc.) — ein einheitlicher Fall „nicht lesbar" reicht - Internationalisierung
- Exit-Codes jenseits von
0/1/2
Schritte
ValidationReport.operationalError(...)prüfen — falls noch nicht vollständig in AP05 implementiert, hier ergänzenCliRunnerum alle fünf Bedienfehler-Fälle erweiternReportFileWriter: imOPERATIONAL_ERROR-Fall weichere IO-Fehlerbehandlung (keinRuntimeException, stattdessen Konsolenhinweis)- Unit-Tests für alle fünf Fälle
mvn clean verifygrün bekommen- Abschlussbericht schreiben
Abnahmekriterien
- Alle fünf Bedienfehler-Fälle erzeugen Exit-Code
2(per Unit-Test belegt) - Fall „kein Argument" → nur Konsolenausgabe, keine Dateiausgabe
- Fall „Datei nicht vorhanden" → Berichtdatei im übergeordneten Verzeichnis, sofern schreibbar
Verdict.OPERATIONAL_ERRORist in mindestens einem Test verifiziert- Kein Stack-Trace in STDERR (Negativ-Test vorhanden)
mvn clean verifygrün- Abschlussbericht unter
docs/arbeitspakete/m1/berichte/AP08-bericht.md
Rest-Risiken und offene Punkte
- Im Fall „Datei nicht vorhanden, Zielverzeichnis aber existiert" ist der Basisname der angegebene Dateiname — der Nutzer findet den Bericht dort, wo er die Datei erwartet hätte.
- Falls
Verdict.OPERATIONAL_ERRORals separater Wert zu Komplikationen führt: Boolean-FlagisOperationalauf dem Report ist zulässiger Ausweg — Entscheidung im Bericht dokumentieren.
Bericht
docs/arbeitspakete/m1/berichte/AP08-bericht.md nach docs/arbeitspakete/m1/templates/ap-bericht.md.