stack: docs verify prueft § Commands und § Error contracts in tools/CONTRACT.md getrennt, 10 fehlende Fehlerkontrakt-Zeilen nachgetragen (schliesst #91)
CI / verify (push) Successful in 55s
Release / release (push) Successful in 35s

Files changed:
- CHANGES.md
- VERSION
- tools/CONTRACT.md
- tools/chemenu/commands/docs_verify.py
- tools/chemenu/tests/test_docs_verify.py
This commit is contained in:
2026-09-11 12:19:56 +02:00
parent 441a8151ab
commit 203084477f
5 changed files with 266 additions and 31 deletions
+45 -1
View File
@@ -35,7 +35,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
---
## 5.0.0-beta.12 - 2026-09-11 - AGENTS.md-Changelog-Absatz korrigiert: Contract-Prosa ist Sitzungsarbeit, doc-pull-through-Instruction ergaenzt
## 5.0.0-beta.13 - 2026-09-11 - docs verify prueft die Kommando- und Fehlerkontrakttabelle in tools/CONTRACT.md getrennt, 10 fehlende Fehlerkontrakt-Zeilen nachgetragen (schliesst #91)
**Author:** Torben Nehmer
@@ -65,6 +65,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
- tools/CONTRACT.md: raw accept Doku auf Datums-Shard und Capture-Felder nachgezogen (schliesst #89)
- MCP submit-Tool: Quarantäne-Schreibpfad mit Upload Review Gate (schliesst #32)
- AGENTS.md-Changelog-Absatz korrigiert: Contract-Prosa ist Sitzungsarbeit, doc-pull-through-Instruction ergaenzt
- docs verify prueft die Kommando- und Fehlerkontrakttabelle in tools/CONTRACT.md getrennt, 10 fehlende Fehlerkontrakt-Zeilen nachgetragen (schliesst #91)
<!-- /wikitool:bumps -->
@@ -1217,6 +1218,49 @@ Geändert: `AGENTS.md`, `tools/chemenu/commands/docs_verify.py`,
`tools/wikitool instructions verify` (nach `instructions sync`), volle `pytest`-Suite (1185
passed). Schließt #90.
**`docs verify` prüfte § Commands und § Error contracts in `tools/CONTRACT.md` als einen Topf
(#91).** `TABLE_CELL_RE` sammelte das erste gebacktickte Wort jeder Tabellenzeile über das ganze
Dokument, ohne Abschnittsgrenze - eine aus § Commands gelöschte Zeile fiel nicht auf, solange
derselbe Name noch in § Error contracts stand, und § Error contracts wurde gegen nichts
erzwungen. Gemessen am Baum vor diesem Fix (55 registrierte Kommandos): § Commands war
vollständig, § Error contracts fehlten zehn Zeilen - `budget reset`, `instructions list`,
`instructions verify`, `log append`, `migrate status`, `sources rebuild-index`, `sources trace`,
`types describe`, `upload show`, `version notes` - und `docs verify` blieb grün.
`check_cli_readme()` liest die beiden Tabellen jetzt über ihre `##`-Überschrift ab (neue
`section_text()`), unabhängig voneinander und je Tabelle in beide Richtungen; fehlt eine der
beiden Überschriften, meldet die Funktion das explizit statt stillschweigend auf "ganzes
Dokument" zurückzufallen. Ursache der zehn Lücken war überwiegend eine zweite, bisher unsichtbare
Untugend: mehrere Kommandos teilten sich in § Error contracts eine Zeile der Form "`a` / `b`" -
nur das erste Backtick-Wort einer Zeile zählte je als "dokumentiert", der Rest der Gruppe war für
den (ungeprüften) Check unsichtbar. Behoben, indem jede betroffene Gruppe in eigene Zeilen mit
eigenem, gegen den Code nachgesehenem Inhalt aufgeteilt wurde - dabei fielen nebenbei drei
sachlich falsche Zeilen auf: `sources coverage`, `types list`, `instructions list` und `budget
status` schlagen nie fehl, die alte gemeinsame Zeile behauptete das Gegenteil, weil sie das
Verhalten des jeweils benachbarten Kommandos mit übernahm. Eine echte Formatierungslücke kam
dazu: `log append`s Zeile stand im Quelltext ohne Zeilenumbruch hinter der von `index rebuild` /
`sources rebuild-index` verschmolzen - für Menschen als Tabelle kaum lesbar und für die
zeilenanfang-verankerte Regex unsichtbar.
**MINOR, kein neues Boundary-Crossing:** additiv und in beide Richtungen drop-in - eine
bestehende Instanz kopiert `docs_verify.py` und `tools/CONTRACT.md` über sich, ohne Hand-Arbeit
oder Migration. Eine Ausnahme ist es wert, genannt zu werden: eine private Instanz mit einem
lokal abweichenden `tools/CONTRACT.md` (`instructions/private-instance.md`) kann nach diesem
Update zum ersten Mal an der strengeren Prüfung scheitern, wenn ihr eigener Baum dieselbe
Fehlerkontrakt-Lücke trägt oder ihre Kommandotabelle anders benannte `##`-Überschriften
verwendet. Das ist kein Boundary-Crossing - kein Dateiformat ändert sich, keine bestehende
Funktion verschwindet -, sondern derselbe bereits akzeptierte Fall, den jede Verschärfung von
`docs verify` seit jeher mit sich bringt: der Fix legt eine bereits vorhandene
Dokumentationslücke bloß, statt eine neue Anforderung einzuführen. Der Kandidat trägt seine
`--breaking`-Zeile bereits aus einem früheren Bump; diese Änderung fügt keine neue hinzu.
Geändert: `tools/chemenu/commands/docs_verify.py` (`section_text`, `check_cli_readme`),
`tools/CONTRACT.md` (die `docs verify`-Zeile sowie zehn aufgeteilte bzw. nachgetragene
Fehlerkontrakt-Zeilen), `tools/chemenu/tests/test_docs_verify.py` (neue Tests für
Abschnittstrennung, fehlende/umbenannte Überschrift, § Error contracts in beiden Richtungen).
Verifiziert: `tools/wikitool docs verify`, `tools/wikitool instructions verify`, volle
`pytest`-Suite (1193 passed). Schließt #91.
---
## 4.7.4 - 2026-09-04 - bootstrap.md nennt den session-id-WARN nach frischem Bootstrap explizit als erwartet