Gefunden beim Durchgang für #142 (2026-09-26). Nach dessen Regel wurde eine Abweichung zwischen Text und Code nicht dort korrigiert, sondern hier erfasst. Erledigt in 7.1.0-beta.24 (a70d904, Changelog-Korrektur 2074539).
Befund (behoben)
Der Datensatz von log append (tools/chemenu/commands/log_append.py, seit #142/#143 in zwei Failure-Einträge aufgeteilt) nannte als zweite Exit-1-Ursache „--body-file cannot be read“ mit der Reaktion „Nothing was written - fix the path and retry once“ – einen Validierungsfehler (AGENTS.md § Tool error contract, Fall 2).
Der Code rief body_file.read_text(encoding="utf-8") ungeschützt auf. Mit CliRunner gegen --body-file /nonexistent: Exit 1, keine Ausgabe, Ausnahme FileNotFoundError; unter dem echten Wrapper ein Traceback, also Fall 4 („unexpected error“, bei einem nicht-idempotenten Kommando nicht wiederholen). Ein Agent bekam für denselben Fehler zwei widersprüchliche Anweisungen. Nebenbei erstattete der Weg an fail() vorbei den Budget-Slot nicht zurück, obwohl nichts geschrieben wurde.
Umsetzung
Code: Das Lesen von --body-file ist in try/except (OSError, UnicodeDecodeError) gefasst und bricht über fail(f"Cannot read --body-file {body_file}: {exc}") ab. OSError deckt fehlende Datei, Verzeichnis und fehlende Rechte ab, UnicodeDecodeError eine Datei, die kein UTF-8 ist; der Pfad steht explizit in der Zeile, weil die Meldung von UnicodeDecodeError ihn nicht nennt. Das Lesen liegt vor dem open("a") – kb/log.md bleibt in jedem Fehlerfall byte-identisch, was der Test festhält.
Datensatz: Ursache lautet jetzt „--body-file is missing, not a readable file, or not valid UTF-8“, Reaktion unverändert; tools/CONTRACT.md per docs contract --apply regeneriert.
Tests (tools/chemenu/tests/test_log_append.py): parametrisiert über fehlende Datei, Verzeichnis (statt chmod, weil CI als root läuft) und Nicht-UTF-8-Datei – Exit 1, stdout beginnt mit ERROR und enthält den Pfad, LOG_FILE byte-identisch. Dazu der bis dahin fehlende Positivfall: Inhalt von --body-file landet im Eintrag. Der stderr-Hinweis (ON FAILURE) ist generisch in test_util.py abgedeckt und hier nicht wiederholt.
Version: --patch --impact low, Kandidat 7.1.0-beta.23 → beta.24. Den CHANGES.md-Abschnitt habe ich zunächst auf Deutsch geschrieben und in 2074539 auf Englisch umgestellt, wie den Rest des Kandidaten (Präzedenz: 685fc2e für #144); reine CHANGES.md-Commits liegen außerhalb des Version-Gates.
Pull-through: nur der Datensatz. Keine andere Doku, kein docs/-Text und kein Stage-Contract nennt --body-file oder dessen Fehlerverhalten – geprüft per grep über alle *.md außerhalb von kb/.
Verifiziert:pytest in tools/ (1540 passed), docs verify, instructions verify, jeweils vor dem Publish; CI-Runs 409 und 410 auf a70d904 grün, Run 411 auf 2074539 grün.
Bewusst ausgelassen:--body und --body-file gleichzeitig (heute gewinnt still --body-file) – anderes Verhalten, nicht Teil dieses Befunds; bei Bedarf ein eigenes Issue.
Nicht behoben, Nebenbefund: Der Commit a70d904 trägt keine Co-Authored-By/Claude-Session-Trailer. wikitool publish baut die Nachricht selbst (<message>\n\nFiles changed:\n…) und nimmt keinen Trailer an; nachträgliches Amend und Force-Push verbietet Invariante 5.
Akzeptanzkriterien
log append --body-file <fehlend, Verzeichnis oder kein UTF-8> endet mit Exit 1 und einer ERROR-Zeile, die den Pfad nennt, und kb/log.md ist danach byte-identisch zu vorher.
Ein Test hält das für alle drei Fälle fest.
Der Datensatz beschreibt danach genau dieses Verhalten, tools/CONTRACT.md ist regeneriert und docs verify grün.
Gefunden beim Durchgang für #142 (2026-09-26). Nach dessen Regel wurde eine Abweichung zwischen Text und Code nicht dort korrigiert, sondern hier erfasst. **Erledigt in `7.1.0-beta.24`** (`a70d904`, Changelog-Korrektur `2074539`).
## Befund (behoben)
Der Datensatz von `log append` (`tools/chemenu/commands/log_append.py`, seit #142/#143 in zwei `Failure`-Einträge aufgeteilt) nannte als zweite Exit-1-Ursache „`--body-file` cannot be read“ mit der Reaktion „Nothing was written - fix the path and retry once“ – einen Validierungsfehler (AGENTS.md § Tool error contract, Fall 2).
Der Code rief `body_file.read_text(encoding="utf-8")` ungeschützt auf. Mit `CliRunner` gegen `--body-file /nonexistent`: Exit 1, keine Ausgabe, Ausnahme `FileNotFoundError`; unter dem echten Wrapper ein Traceback, also Fall 4 („unexpected error“, bei einem nicht-idempotenten Kommando nicht wiederholen). Ein Agent bekam für denselben Fehler zwei widersprüchliche Anweisungen. Nebenbei erstattete der Weg an `fail()` vorbei den Budget-Slot nicht zurück, obwohl nichts geschrieben wurde.
## Umsetzung
1. **Code**: Das Lesen von `--body-file` ist in `try/except (OSError, UnicodeDecodeError)` gefasst und bricht über `fail(f"Cannot read --body-file {body_file}: {exc}")` ab. `OSError` deckt fehlende Datei, Verzeichnis und fehlende Rechte ab, `UnicodeDecodeError` eine Datei, die kein UTF-8 ist; der Pfad steht explizit in der Zeile, weil die Meldung von `UnicodeDecodeError` ihn nicht nennt. Das Lesen liegt vor dem `open("a")` – `kb/log.md` bleibt in jedem Fehlerfall byte-identisch, was der Test festhält.
2. **Datensatz**: Ursache lautet jetzt „`--body-file` is missing, not a readable file, or not valid UTF-8“, Reaktion unverändert; `tools/CONTRACT.md` per `docs contract --apply` regeneriert.
3. **Tests** (`tools/chemenu/tests/test_log_append.py`): parametrisiert über fehlende Datei, Verzeichnis (statt `chmod`, weil CI als root läuft) und Nicht-UTF-8-Datei – Exit 1, stdout beginnt mit `ERROR ` und enthält den Pfad, `LOG_FILE` byte-identisch. Dazu der bis dahin fehlende Positivfall: Inhalt von `--body-file` landet im Eintrag. Der stderr-Hinweis (ON FAILURE) ist generisch in `test_util.py` abgedeckt und hier nicht wiederholt.
4. **Version**: `--patch --impact low`, Kandidat `7.1.0-beta.23` → `beta.24`. Den `CHANGES.md`-Abschnitt habe ich zunächst auf Deutsch geschrieben und in `2074539` auf Englisch umgestellt, wie den Rest des Kandidaten (Präzedenz: `685fc2e` für #144); reine `CHANGES.md`-Commits liegen außerhalb des Version-Gates.
5. **Pull-through**: nur der Datensatz. Keine andere Doku, kein `docs/`-Text und kein Stage-Contract nennt `--body-file` oder dessen Fehlerverhalten – geprüft per `grep` über alle `*.md` außerhalb von `kb/`.
**Verifiziert:** `pytest` in `tools/` (1540 passed), `docs verify`, `instructions verify`, jeweils vor dem Publish; CI-Runs 409 und 410 auf `a70d904` grün, Run 411 auf `2074539` grün.
**Bewusst ausgelassen:** `--body` und `--body-file` gleichzeitig (heute gewinnt still `--body-file`) – anderes Verhalten, nicht Teil dieses Befunds; bei Bedarf ein eigenes Issue.
**Nicht behoben, Nebenbefund:** Der Commit `a70d904` trägt keine `Co-Authored-By`/`Claude-Session`-Trailer. `wikitool publish` baut die Nachricht selbst (`<message>\n\nFiles changed:\n…`) und nimmt keinen Trailer an; nachträgliches Amend und Force-Push verbietet Invariante 5.
## Akzeptanzkriterien
- [x] `log append --body-file <fehlend, Verzeichnis oder kein UTF-8>` endet mit Exit 1 und einer `ERROR`-Zeile, die den Pfad nennt, und `kb/log.md` ist danach byte-identisch zu vorher.
- [x] Ein Test hält das für alle drei Fälle fest.
- [x] Der Datensatz beschreibt danach genau dieses Verhalten, `tools/CONTRACT.md` ist regeneriert und `docs verify` grün.
Changelog: Befund auf den aktuellen Datensatz (nach #142/#143 aufgeteilt) korrigiert. Plan ergänzt: OSError/UnicodeDecodeError → fail(), präzisierte Ursache im Datensatz, parametrisierter Test (fehlend/Verzeichnis/kein UTF-8) plus Positivfall, --patch-Bump mit --impact low. Kriterium 1 um „Verzeichnis oder kein UTF-8“ und „byte-identisch“ geschärft.
**Changelog:** Befund auf den aktuellen Datensatz (nach #142/#143 aufgeteilt) korrigiert. Plan ergänzt: `OSError`/`UnicodeDecodeError` → `fail()`, präzisierte Ursache im Datensatz, parametrisierter Test (fehlend/Verzeichnis/kein UTF-8) plus Positivfall, `--patch`-Bump mit `--impact low`. Kriterium 1 um „Verzeichnis oder kein UTF-8“ und „byte-identisch“ geschärft.
Changelog: Body auf Endstand: Plan → Umsetzung, alle drei Kriterien abgehakt, Verifikation benannt (pytest 1540, docs verify, instructions verify, CI 409/410/411 grün). Neu: CHANGES.md-Abschnitt nachträglich auf Englisch (2074539); Nebenbefund zu fehlenden Commit-Trailern bei wikitool publish festgehalten.
**Changelog:** Body auf Endstand: Plan → Umsetzung, alle drei Kriterien abgehakt, Verifikation benannt (pytest 1540, `docs verify`, `instructions verify`, CI 409/410/411 grün). Neu: `CHANGES.md`-Abschnitt nachträglich auf Englisch (`2074539`); Nebenbefund zu fehlenden Commit-Trailern bei `wikitool publish` festgehalten.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Gefunden beim Durchgang für #142 (2026-09-26). Nach dessen Regel wurde eine Abweichung zwischen Text und Code nicht dort korrigiert, sondern hier erfasst. Erledigt in
7.1.0-beta.24(a70d904, Changelog-Korrektur2074539).Befund (behoben)
Der Datensatz von
log append(tools/chemenu/commands/log_append.py, seit #142/#143 in zweiFailure-Einträge aufgeteilt) nannte als zweite Exit-1-Ursache „--body-filecannot be read“ mit der Reaktion „Nothing was written - fix the path and retry once“ – einen Validierungsfehler (AGENTS.md § Tool error contract, Fall 2).Der Code rief
body_file.read_text(encoding="utf-8")ungeschützt auf. MitCliRunnergegen--body-file /nonexistent: Exit 1, keine Ausgabe, AusnahmeFileNotFoundError; unter dem echten Wrapper ein Traceback, also Fall 4 („unexpected error“, bei einem nicht-idempotenten Kommando nicht wiederholen). Ein Agent bekam für denselben Fehler zwei widersprüchliche Anweisungen. Nebenbei erstattete der Weg anfail()vorbei den Budget-Slot nicht zurück, obwohl nichts geschrieben wurde.Umsetzung
--body-fileist intry/except (OSError, UnicodeDecodeError)gefasst und bricht überfail(f"Cannot read --body-file {body_file}: {exc}")ab.OSErrordeckt fehlende Datei, Verzeichnis und fehlende Rechte ab,UnicodeDecodeErroreine Datei, die kein UTF-8 ist; der Pfad steht explizit in der Zeile, weil die Meldung vonUnicodeDecodeErrorihn nicht nennt. Das Lesen liegt vor demopen("a")–kb/log.mdbleibt in jedem Fehlerfall byte-identisch, was der Test festhält.--body-fileis missing, not a readable file, or not valid UTF-8“, Reaktion unverändert;tools/CONTRACT.mdperdocs contract --applyregeneriert.tools/chemenu/tests/test_log_append.py): parametrisiert über fehlende Datei, Verzeichnis (stattchmod, weil CI als root läuft) und Nicht-UTF-8-Datei – Exit 1, stdout beginnt mitERRORund enthält den Pfad,LOG_FILEbyte-identisch. Dazu der bis dahin fehlende Positivfall: Inhalt von--body-filelandet im Eintrag. Der stderr-Hinweis (ON FAILURE) ist generisch intest_util.pyabgedeckt und hier nicht wiederholt.--patch --impact low, Kandidat7.1.0-beta.23→beta.24. DenCHANGES.md-Abschnitt habe ich zunächst auf Deutsch geschrieben und in2074539auf Englisch umgestellt, wie den Rest des Kandidaten (Präzedenz:685fc2efür #144); reineCHANGES.md-Commits liegen außerhalb des Version-Gates.docs/-Text und kein Stage-Contract nennt--body-fileoder dessen Fehlerverhalten – geprüft pergrepüber alle*.mdaußerhalb vonkb/.Verifiziert:
pytestintools/(1540 passed),docs verify,instructions verify, jeweils vor dem Publish; CI-Runs 409 und 410 aufa70d904grün, Run 411 auf2074539grün.Bewusst ausgelassen:
--bodyund--body-filegleichzeitig (heute gewinnt still--body-file) – anderes Verhalten, nicht Teil dieses Befunds; bei Bedarf ein eigenes Issue.Nicht behoben, Nebenbefund: Der Commit
a70d904trägt keineCo-Authored-By/Claude-Session-Trailer.wikitool publishbaut die Nachricht selbst (<message>\n\nFiles changed:\n…) und nimmt keinen Trailer an; nachträgliches Amend und Force-Push verbietet Invariante 5.Akzeptanzkriterien
log append --body-file <fehlend, Verzeichnis oder kein UTF-8>endet mit Exit 1 und einerERROR-Zeile, die den Pfad nennt, undkb/log.mdist danach byte-identisch zu vorher.tools/CONTRACT.mdist regeneriert unddocs verifygrün.Changelog: Befund auf den aktuellen Datensatz (nach #142/#143 aufgeteilt) korrigiert. Plan ergänzt:
OSError/UnicodeDecodeError→fail(), präzisierte Ursache im Datensatz, parametrisierter Test (fehlend/Verzeichnis/kein UTF-8) plus Positivfall,--patch-Bump mit--impact low. Kriterium 1 um „Verzeichnis oder kein UTF-8“ und „byte-identisch“ geschärft.Changelog: Body auf Endstand: Plan → Umsetzung, alle drei Kriterien abgehakt, Verifikation benannt (pytest 1540,
docs verify,instructions verify, CI 409/410/411 grün). Neu:CHANGES.md-Abschnitt nachträglich auf Englisch (2074539); Nebenbefund zu fehlenden Commit-Trailern beiwikitool publishfestgehalten.