docs: tools/CONTRACT.md als Nachschlage-Dokument strukturiert, AGENTS.md-Routing angepasst (schliesst #92)
CI / verify (push) Successful in 52s
Release / release (push) Successful in 36s

Files changed:
- AGENTS.md
- CHANGES.md
- VERSION
- tools/CONTRACT.md
- tools/chemenu/tests/test_docs_verify.py
This commit is contained in:
2026-09-11 12:51:04 +02:00
parent 203084477f
commit 95ab40827a
5 changed files with 284 additions and 18 deletions
+48 -1
View File
@@ -35,7 +35,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
---
## 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)
## 5.0.0-beta.14 - 2026-09-11 - tools/CONTRACT.md als Nachschlage-Dokument strukturiert: ###-Gruppen in beiden Tabellen, spiegelnde Reihenfolge, Lead-in-Regel
**Author:** Torben Nehmer
@@ -66,6 +66,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
- 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)
- tools/CONTRACT.md als Nachschlage-Dokument strukturiert: ###-Gruppen in beiden Tabellen, spiegelnde Reihenfolge, Lead-in-Regel
<!-- /wikitool:bumps -->
@@ -1261,6 +1262,52 @@ Abschnittstrennung, fehlende/umbenannte Überschrift, § Error contracts in beid
Verifiziert: `tools/wikitool docs verify`, `tools/wikitool instructions verify`, volle
`pytest`-Suite (1193 passed). Schließt #91.
**`tools/CONTRACT.md` ist jetzt ein Dokument zum Nachschlagen statt zum Durchlesen (#92).**
Mit 70 KB war es das größte Dokument im Repo - größer als `AGENTS.md`, `kb/CONTRACT.md` und
`raw/CONTRACT.md` zusammen -, und 89 % davon lagen in den zwei Kommandotabellen. Gleichzeitig
war es für gezielten Abruf bereits ideal gebaut, ohne dass es irgendwo stand: eine Zeile ist
ein Kommando, physisch einzeilig, also liefert ein einziges ``grep '^| `<kommando>' `` beide
Hälften seines Vertrags - was es tut und wie es fehlschlägt - und sonst nichts. `AGENTS.md`
routete stattdessen mit "Full command reference" dorthin, was sich als Vollread liest.
Drei Änderungen: die Datei trägt die Nachschlage-Regel samt `grep`-Zeile jetzt als Lead-in vor
dem Inhaltsverzeichnis (genau einmal, Invariante 8 - `AGENTS.md`s Routing-Zelle beschreibt nur
noch die Form und wiederholt die Zeile nicht); beide Tabellen sind in vierzehn `###`-Gruppen
gegliedert, wodurch `docs toc` erstmals Anker unterhalb `##` erzeugt (vorher existierte im
ganzen Repo genau ein Anker-Link in diese Datei); und § Error contracts steht nun in derselben
Gruppen- und Zeilenreihenfolge wie § Commands, sodass die zwei Hälften eines Vertrags parallel
liegen - vorher saß etwa `links show` einmal zwischen `xref link-source` und `cite id`, einmal
zwischen `version release` und `migrate list`. Nebenbei repariert: die `dist export`-Zeile war
über vier physische Zeilen umgebrochen und damit kein gültiger GFM-Tabellen-Datensatz mehr.
Die Umstellung lief per Skript mit einer Behauptung über die Multimenge der Erst-Zellen vor und
nach dem Schreiben, nicht per Augenschein - bei 117 Zeilen ist "keine verloren" nichts, was ein
Review zusieht. Dass `###` die Abschnittsgrenze aus #91 nicht bricht, ist jetzt ein eigener
Test: `section_text`s Lookahead `(?=^#{1,2}[ \t]|\Z)` verlangt nach ein bis zwei `#` ein
Space/Tab, was bei `###` fehlschlägt - ohne diese Eigenschaft wäre § Commands an seiner ersten
Gruppe abgeschnitten und jedes spätere Kommando als undokumentiert gemeldet worden.
Bewusst nicht angefasst: die siebzehn Tabellenzellen über 900 Zeichen. Der naheliegende Schritt
wäre, ihren Begründungsanteil nach `docs/` zu schieben; die Gegenprobe an der größten Zelle
(`publish`, 3.375 Zeichen) zeigt, dass die Kandidaten dafür - warum ein Token Dateiliste *und*
Inhalte digestiert, warum die Publish-Remote-Gate kein Flag hat - für eine handelnde Session
normativ verwertbar sind und nicht Hintergrund. Sie wegzukürzen hätte die Zelle verkleinert und
die Handlungsfähigkeit gesenkt. Die Zellen sind lang, weil die Verträge dicht sind.
PATCH, kein neues Boundary-Crossing: reine Dokumentstruktur, kein Format, keine Funktion, keine
Hand-Arbeit bei Update oder Downgrade. Eine private Instanz mit eigenem `tools/CONTRACT.md`
bekommt beim Merge Konflikte in den beiden Tabellen, weil deren Zeilen umsortiert wurden - das
ist ein Merge-Konflikt in einer stack-eigenen Datei, den `upstream merge` ohnehin zugunsten der
Upstream-Seite auflöst, kein Kompatibilitätsbruch.
Geändert: `tools/CONTRACT.md` (Lead-in, `###`-Gruppen in beiden Tabellen, gespiegelte
Reihenfolge, TOC via `docs toc --apply`), `AGENTS.md` (Routing-Zelle für `tools/`),
`tools/chemenu/tests/test_docs_verify.py` (zwei Tests: Abschnitt läuft über eigene
Unterüberschriften hinweg, gruppierte Tabellen bleiben in beiden Richtungen geprüft).
Verifiziert: `tools/wikitool docs verify`, `tools/wikitool instructions verify`, volle
`pytest`-Suite (1195 passed). Typischer Zugriff: Median 229 statt 17.500 Tokens.
Schließt #92.
---
## 4.7.4 - 2026-09-04 - bootstrap.md nennt den session-id-WARN nach frischem Bootstrap explizit als erwartet