kb/CONVENTIONS.md.template traegt keine TOC-Region: frische Instanz und CI scheitern an docs verify #106
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 (behoben in
6.0.1)kb/CONVENTIONS.md.templatewar 105 Zeilen lang und trug keine<!-- wikitool:toc -->-Region.Die TOC-Pflicht gilt fuer jede Referenzdatei ueber 100 Zeilen (
tools/chemenu/toc.py,THRESHOLD = 100), undkb/CONVENTIONS.mdsteht intoc.target_files(). Eine Instanz, die dasTemplate nach
instructions/setup-instance.mdadoptierte, bekam damit einekb/CONVENTIONS.mdohne Region - und fiel am
tools/wikitool docs verifyin Schritt 13 derselben Anleitung(
instructions/setup-instance.md:264) um:Das war kein CI-Artefakt: der dokumentierte Installationsweg einer frisch ausgelieferten Instanz
endete in einem roten
docs verify. Ausgeliefert war der Defekt in6.0.0, behoben in6.0.1.Ursache
toc.target_files()berechnete den Dateisatz ueber die adoptierten Namen -kb/CONVENTIONS.md,kb/*/COLLECTION.md,instructions/**.md,types/*.md,docs/*.md. Eine.template-Datei endet auf.md.templateund fiel damit aus jedem dieser Walks heraus:docs toc --applyhat das Template nie angefasst,docs verifyes nie gelesen. Geprueft wurdeerst die adoptierte Kopie, die es im Ursprungs-Repo gar nicht gibt.
Solange das Template unter 100 Zeilen blieb, war das folgenlos.
f350999(2026-09-15,"Control-Plane-Sprache universell") hat es von 99 auf 105 Zeilen wachsen lassen - genau ueber die
Schwelle:
c64479ff350999Seither war
ci.ymlauf jedem Push rot (Runs 279, 281, 282, 284, 285, 287, 289). Dass es wieFlackern aussah, lag an der Paarung: jeder Push erzeugt zusaetzlich einen
release.yml-Lauf, undder ist gruen. Die gruen/rot-Paare pro Commit sind zwei verschiedene Workflows, keine
Wiederholungslaeufe - diese Fehllesung hat den roten Zustand fuenf Pushes lang ueberlebt.
Entscheidung und Umsetzung
Umgesetzt wie vorgeschlagen: eine in Scope stehende Datei nimmt ihr
<name>.templatemithinein, wenn eines existiert (
toc.target_files()). Das Template ist dasselbe Dokument einenSchritt frueher in seinem Leben; wer es auslaesst, laesst die adoptierte Kopie den Fehler erben.
Der Scope bleibt berechnet statt handgepflegt, also sind
types/*.md.templateundkb/*/COLLECTION.md.templateautomatisch mit abgedeckt, sobald eines ueber die Schwelle waechst.Verworfen, wie im urspruenglichen Vorschlag:
docs toc --applyim CI-Replay nach der Adoption - repariert den Testpfad und laesst denechten Nutzerpfad kaputt.
Die offene Frage ist beantwortet: die Platzhalter des Templates (
{language}) kollidieren nicht -die Ueberschriften sind Klartext,
docs toc --applyerzeugt eine korrekte Region.Grenzuebertritt geprueft und verneint. Das Template ist stack-eigen
(
ownership.is_stack_owned: jede.templateunter einer Content-Stage), steht nicht inUPGRADE_PRESERVED_PATHS, unddist upgradeschreibt es damit mit - eine Instanz bekommt dasreparierte Template durch den Upgrade selbst, ohne Handarbeit. Der Rueckweg funktioniert ebenso,
weil die alte Maschinerie das Template gar nicht prueft. Handarbeit faellt nur an, wo eine Instanz
ihr stack-eigenes Template lokal veraendert hat;
dist upgrademeldet genau das alsblockedundverlangt
--keep-local. Daher--patch, kein--breaking.Nebenbei aufgeraeumt:
docs_verify.TEMPLATE_SUFFIXwar eine zweite Schreibung derselben Konstanteund kommt jetzt aus
toc(kein Zyklus -docs_verifyimportierttocohnehin).ownership.pybehaelt seine eigene bewusst: andere Frage, engerer Scope.
Akzeptanzkriterien
dist export+ Adoption der Templates laeufttools/wikitool docs verifyin derfrischen Instanz ohne Befund durch. Verifiziert per vollstaendigem
setup-instance.md-Replay gegen einen frischen Export:doctor,docs verify(59 Referenzdateien),
instructions verifyundlint --fail-on-errorgruen.docs toc --applyhaeltkb/CONVENTIONS.md.templateim Ursprungs-Repo aktuell; die Regionist vom Werkzeug geschrieben, nicht von Hand.
docs verifyprueft dort jetzt 57 statt 56Referenzdateien.
test_a_shipped_template_over_the_threshold_without_a_region_is_reported- ein.templateueber der Schwelle ohne Region ist ein Befund. Dazu
test_target_files_takes_the_shipped_template_of_a_file_in_scopeundtest_target_files_takes_a_template_only_for_a_file_already_in_scope(einUSER.md.templateohne Referenzdatei daneben bleibt draussen). 1275 Tests gruen.
ci.ymlist aufmainwieder gruen: Run 292 auff3c8074, alle neun Schritteerfolgreich, einschliesslich "The distribution works as a fresh instance" - der Schritt, der
seit Run 279 rot war.
6.0.1,--patch --impact high) und Changeset geschrieben;tools/CONTRACT.mdsdocs toc-Zeile undinstructions/dev/doc-pull-through.mdSchritt 3nennen die
.template-Form jetzt im Dateisatz. Diedocs verify-Zeile leitet ihren Scopevon
docs tocab und brauchte keine Aenderung.Herkunft
Gefunden beim Nachsehen der CI direkt nach dem
6.0.0-Release (Tagv6.0.0, Commit5d26698).Der
release.yml-Lauf war gruen, das Release korrekt getaggt - der Defekt sass im ausgeliefertenArtefakt, nicht im Release-Vorgang. Behoben in Commit
f3c8074, freigegeben als6.0.1.Kein
docs/-Dokument hat seine Begruendung verloren:ownership-and-templates.mdbeschreibt dieOwnership-Frage, und die bleibt unveraendert - ein
.templatewar schon vorher stack-eigen, eswurde nur nichts darin gepflegt.
Changelog: Body auf den Endstand geschrieben. Loesungsvorschlag ist jetzt die getroffene Entscheidung (
toc.target_files()nimmt das.templateeiner in Scope stehenden Datei mit), die offene Frage zu den{language}-Platzhaltern ist beantwortet (keine Kollision), die Grenzuebertritt-Pruefung mit ihrer Begruendung ergaenzt (--patch, weildist upgradedas stack-eigene Template selbst mitschreibt). Alle fuenf Akzeptanzkriterien abgehakt und mit dem benannt, was sie belegt - Run 292 fuer die gruene CI, dersetup-instance.md-Replay fuer die frische Instanz. Behoben inf3c8074, freigegeben als6.0.1.