tools/CONTRACT.md: Nachschlage-Dokument statt Vollread - Kontextkosten senken #92
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Befund
tools/CONTRACT.mdwar mit 70.005 Bytes / 286 Zeilen / ~17.500 Tokens das mit Abstand größte Dokument im Repo - größer alsAGENTS.md+kb/CONTRACT.md+raw/CONTRACT.mdzusammen (50 KB).dist exportliefert es an jede Instanz aus. 89 % lagen in den zwei Kommandotabellen (§ Commands 41.815 B, § Error contracts 20.352 B; alle acht übrigen Abschnitte zusammen 7.838 B).Die Datei war für gezielten Abruf bereits hervorragend gebaut und wurde trotzdem als Ganzes gelesen: eine Zeile = ein Kommando = physisch einzeilig, also liefert
grep -n '^| `raw accept'genau beide Zeilen dieses Kommandos und nichts sonst. Nur stand das nirgends -AGENTS.mdZ186 routete mit "Full command reference", was sich als Vollread-Aufforderung liest.Zweitbefund: keine Anker unterhalb
##. Im ganzen Repo existierte genau ein Anker-Link in die Datei (README.md:308→#maintenance-schedule); die übrigen 19 Verweise zeigten auf die Datei als Ganzes.Drittbefund: die beiden Tabellen standen in unterschiedlicher Reihenfolge (
links showeinmal zwischenxref link-sourceundcite id, einmal zwischenversion releaseundmigrate list;sources coverage/trace,budgetundevalebenso), sodass die zwei Hälften eines Vertrags nicht parallel lesbar waren.Akzeptanzkriterien
grep-Zeile nennt - genau einmal (Invariante 8).AGENTS.mds Routing-Zelle fürtools/beschreibt jetzt die Form ("one row per command in each of two tables - a file to look a row up in rather than read through, as its own opening paragraph says") statt "Full command reference", ohne diegrep-Zeile zu wiederholen.###-Untergruppen gegliedert, jede mit eigenem Tabellenkopf.docs toc --applyerzeugt daraus erstmals Anker unterhalb##(dedupliziert als#pages/#pages-1).*(any command)*-Zeile) unverändert.###brichtdocs_verify.section_text()nicht - Lookahead(?=^#{1,2}[ \t]|\Z)verlangt nach 1-2#ein Space/Tab. Zwei neue Tests:test_a_section_runs_on_past_its_own_subheadingsundtest_grouped_tables_are_still_checked_in_both_directions.tools/wikitool docs toc --applyerzeugt, nicht von Hand.pytest(1195 passed),docs verify,instructions verifygrün.5.0.0-beta.13→5.0.0-beta.14(--patch, max-wins gegen den bereits MAJOR-eskalierten Kandidaten), Changelog-Prosa geschrieben.Beim Umsetzen zusätzlich gefunden und behoben
Die
dist export-Zeile in § Commands war über vier physische Zeilen umgebrochen und damit kein gültiger GFM-Tabellen-Datensatz mehr - sie renderte gebrochen.docs verifyhatte das nicht gesehen, weilTABLE_CELL_REnur die erste Zeile braucht. Beim Umsortieren wurden die Fortsetzungszeilen zusammengeführt (1.860 Zeichen, jetzt eine Zeile).Ergebnis
raw accept)Bewusst nicht umgesetzt
Die 17 Tabellenzellen über 900 Zeichen wurden nicht entzerrt. Der ursprüngliche Vorschlag war, ihren Begründungsanteil nach
docs/zu verschieben. Die Gegenprobe an der größten Zelle (publish, 3.375 Zeichen) hat den Vorschlag widerlegt: die Kandidaten dafür - "a third outcome distinct from success (0) and a validation error (1)", "so a clearance carries neither to a different file list nor to edited contents", "each is recomputable from the tree, so approving it decides nothing", "the way past it is the user adding the URL to that file, and an agent editing it to get past a refusal is opening a gate on its own initiative" - sind für eine handelnde Session normativ verwertbar, nicht Hintergrund. Die Zelle zu kürzen hätte die Handlungsfähigkeit gesenkt, unddocs/trägt lautAGENTS.md§ File naming ohnehin keinen normativen Satz. Sobald der Zugriff zeilenweise erfolgt, ist die Zellenlänge außerdem kein Kontextproblem mehr: das teuerste Kommando kostet 1.105 statt 17.500 Tokens. Die Zellen sind lang, weil die Verträge dicht sind.Die im Anlegen notierte offene Frage - ob "Read-only and exempt from the Iteration Budget Gate" über ~10 Zellen hinweg konsolidiert gehört - ist damit ebenfalls beantwortet und wird nicht weiterverfolgt: eine hochgezogene Gruppen-Präambel stünde nicht mehr in der Zeile, die ein
grepliefert, und würde genau die Eigenschaft zerstören, die dieses Paket ausbaut.Verifiziert
Commit
95ab408aufmain.tools/wikitool docs verify(55 Kommandos dokumentiert, TOCs auf 38 Referenzdateien aktuell),tools/wikitool instructions verify(22 Instructions, 7 Skills), vollepytest-Suite 1195 passed. Keindocs/-Rationale und keine Menschendoku wurde stale: alle 19 übrigen Verweise auf die Datei sind Wegweiser auf die Datei als Ganzes und bleiben korrekt,README.md:377undinstructions/dev/doc-pull-through.md:36beschreiben weiterhin zutreffend, was drinsteht.Modell-Handover
Analyse, Design, Versionsteil-Entscheidung und die Verwerfung des Punkts "Monsterzellen entzerren" auf Sonnet 5, Effort
high. Mechanische Mitte (Umstellungsskript, Tests, Bump) und diese Schlussphase ebenfalls Sonnet 5 /high- die ganze Sitzung auf einem Modell, der Switch wurde an beiden Übergängen angeboten und nicht gezogen.Changelog: Alle acht Akzeptanzkriterien abgehakt und geschlossen (Commit
95ab408,5.0.0-beta.14). Neu im Body: der gefundene GFM-Bruch in derdist export-Zeile, die Ergebnistabelle (Median 229 statt 17.500 Tokens pro Zugriff) und die Verifikation. Der Abschnitt „Bewusst nicht Teil dieses Pakets" ist zu „Bewusst nicht umgesetzt" geworden - die Gegenprobe an derpublish-Zelle hat den Vorschlag widerlegt, statt ihn nur zu vertagen; die offene Frage zur Konsolidierung der „Read-only"-Wiederholung ist mit derselben Begründung verworfen und nicht als Folge-Issue abgelegt.