Ausgelieferte Instructions zitieren Gitea-Issue-Nummern, die es in keiner verteilten Instanz gibt #77
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?
Erledigt mit
a51d7a3(4.8.0-beta.12, MINOR).Was das Problem war
tools/wikitool dist exportlieferte Dateien aus, die im Fliesstext auf Issue-Nummern diesesTrackers verwiesen - "flat since Gitea #67", "
new sourcerefuses without it (Gitea #66)". Ineiner verteilten Instanz zeigte das auf nichts: der Leser konnte den Verweis weder aufloesen
noch als unaufloesbar erkennen, und eine Regel sah damit so aus, als stuetze sie sich auf einen
Beleg, den niemand beibringen kann. Das Board liegt im Ursprungs-Repo, und
instructions/dev/issue-tracking.md- die einzige Datei, die das ueberhaupt sagt - wird vondist exportmit dem Rest voninstructions/dev/weggeschnitten.Gegenprobe zum Eigenanspruch aus
instructions/CONTRACT.md§ "Writing an instruction":"self-contained enough for an agent with no prior context". Eine Issue-Nummer ist genau der
Verweis, den ein Agent ohne Vorkontext nicht aufloesen kann.
Umfang, gemessen statt geschaetzt. Export in ein leeres Verzeichnis,
grep -rn '#[0-9]':43 Treffer in 16 Dateien ausserhalb
tools/**/*.py-raw/CONTRACT.mdallein acht. Dieurspruengliche Befund-Tabelle dieses Issues fuehrte zehn Stellen in fuenf Dateien; der Rest kam
erst beim Messen gegen den echten Export zutage. Dazu ~90 Treffer in
.py, die nachEntscheidung 1 nicht in den Umfang fielen.
Entschieden und umgesetzt
1. Umfang: nur Doku-Prosa,
tools/**/*.pyblieb unberuehrt.Adressat eines Code-Kommentars ist, wer die Zeile editiert - und das passiert ausschliesslich im
Ursprungs-Repo, weil
dist exportinstructions/dev/samtstack-dev-Skill wegschneidet. DieFrontload-Regel, aus der der Befund stammt, bindet Instructions, nicht Quelltext; eine
ausgelieferte
tools/-Kopie ist Laufzeit-Maschinerie, keine Lektuere. Akzeptanzkriterium 4wurde entsprechend auf Doku-Pfade eingegrenzt statt woertlich ueber den ganzen Export gelesen.
2. Beleg-Form: Nummer raus, Datierung in Worte - statt der im urspruenglichen Body
vorgeschlagenen Historien-Markierung.
Aus "flat since Gitea #67" wurde "flat since the addressing scheme dropped type directories",
aus "Pre-#67 files are not moved" wurde "Files promoted under the old type directories are
not moved". Der Satz traegt sich damit selbst: keine repoweite Notation, die definiert und an
genau einer Stelle gehalten werden muesste (Invariante 8), und kein
README.md-Leser mussAGENTS.mdgeladen haben, um sie aufzuloesen. Rueckverfolgbar bleibt es hier uebergit blame-> Commit-Message; die tragen die Nummern ohnehin.
Zwei Stellen, an denen der Zeiger der ganze Wert des Satzes war und in Worten nichts uebrig
geblieben waere, stehen jetzt in einem
<!-- dist:strip-start/end -->-Block:instructions/CONTRACT.md(was ein Test der Kontextfenster-Behauptung kosten wuerde, #72) undEVALS.md(Schliessen der Coverage-Luecken, #51). Bestehende Konvention ausinstructions/CONTRACT.md§instructions/dev/, hier zum zweiten Mal angewandt statt neuerfunden.
3. Die offene
docs verify-Frage: mit Ja beantwortet.check_no_issue_referencesliest nicht den Arbeitsbaum, sondern den Text, dendist_cmd.build_plan()schreiben wuerde - dort lebenROOT_FILES, derinstructions/dev/-Ausschluss und das.template-Rekeying schon, und der Text hat seineMarker-Bloecke bereits verloren. Ein Strip-Block ist damit automatisch exemptiert, ohne dass der
Check ihn kennen muesste.
Der Einwand aus § "What no tool checks" -
wikitoolsoll den Tracker nicht kennen - traegtnicht, und der Abschnitt zieht die Grenze jetzt selbst:
re.compile(r"#\d+")hat keinen Client,keine URL und keinen Begriff vom Zustand eines Issues. Der Check sieht eine Eigenschaft des
Dokuments, nicht des Boards. Gemessen null False Positives ueber den gesamten Export, weil
Markdown-Anker aus Wortzeichen bestehen (
](#gates)matcht nicht).Der erste Fund des Checks war prompt der Satz, den diese Sitzung selbst in
tools/CONTRACT.mdgeschrieben hatte, um die Regel zu erklaeren (ein illustratives "#42").
Akzeptanzkriterien
dist exportausgelieferte.md/.template-Datei enthaelt einen Verweis aufeine Gitea-Issue-Nummer.
source_typekeinen Default hat, warum
raw acceptauf Stem-Eindeutigkeit besteht, warumraw/flachist), stehen im Text selbst.
tools/.coveragercund.gitignoremitgezogen, obwohl der Check sie nicht erfasst.dist export+grep -rn '#[0-9]'liefert null Treffer - nicht nur in.md/.template, sondern im gesamten Export ausserhalb.py.docs verifymeldet den Verstoss, wenn eine Nummer wieder in eine ausgelieferte Dateigelangt; sechs Tests decken beide Richtungen ab.
docs verify,instructions verifyundpytestohne neue Findings.tools/**/*.pyunveraendert (Entscheidung 1).Verifiziert
tools/wikitool docs verifytools/wikitool instructions verifypytest(tools/)dist export+grep -rn '#[0-9]',--exclude='*.py'verify, Nr. 165)setup-instance-Replay, der einzige Check, der lokal nicht lief)release, Nr. 166)v4.7.4. Erwartet:4.8.0-beta.12ist ein Kandidat, undrelease.ymlhandelt nur auf einer suffixfreienVERSIONdocs/-Veralterung geprueft und keine gefunden:docs/version-model.md's Aussage "No checkin
docs verifyor anywhere else confirms that a version part was chosen correctly" bleibt wahr(der neue Check sagt nichts ueber Versionsteile), und
docs/ownership-and-templates.mdbeschreibt, wer eine Datei aendern darf und was ein Upgrade ueberschreiben darf - der Check
schreibt nichts und verschiebt keine Ownership.
docs/pipeline-rationale.mdhat nur dieKlammer verloren, seine Begruendung ist unberuehrt.
Geaendert
tools/chemenu/commands/docs_verify.py(neuer Check plusshipped_prose()),tools/chemenu/tests/test_docs_verify.py(sechs Tests: sauberer Baum, praeparierte Datei,Anker-Nicht-Treffer,
.pyausserhalb des Scans, Strip-Block unsichtbar,verifybricht ab),tools/CONTRACT.md(Kommandotabelle + Fehlerkontrakt-Zeile),tools/README.md,instructions/dev/issue-tracking.md(neuer § Citing an issue in the repo; § What no tool checkszieht die Grenze zwischen "was dieses Repo ueber den Tracker schreibt" und "dem Tracker selbst").
Die 16 Doku-Dateien:
raw/CONTRACT.md,kb/CONTRACT.md,tools/CONTRACT.md,types/type-spec.md,types/source.schema.yaml,kb/sources/COLLECTION.md,kb/concepts/COLLECTION.md,instructions/wiki-ingest/SKILL.md,instructions/evolve-subtypes.md,instructions/bootstrap.md,instructions/kb-profiles.md,instructions/mcp-read-server.md,instructions/CONTRACT.md,README.md,EVALS.md,INSTALL.md,docs/pipeline-rationale.md,.gitignore,tools/.coveragerc.Bewusst nicht gemacht
tools/**/*.py(~90 Stellen) - Entscheidung 1.Option zu. Verworfen zugunsten von Entscheidung 2: sie haette eine repoweite Notation
gebraucht, die genau eine Definitionsstelle haben darf, waehrend
README.mdundINSTALL.mdvon Lesern gesehen werden, die
AGENTS.mdnie laden.kb/CONVENTIONS.mdundkb/<collection>/COLLECTION.md, weil ein Export sie als.templatemitnimmt. Eine Instanz,die dort ihre eigene Ticket-Nummer zitiert, bekommt ein Finding. Das ist kein Fehlalarm - ein
Export dieser Instanz wuerde den Verweis weitergeben - aber es ist neu, und es steht so im
CHANGES.md-Eintrag.Herkunft
Analyse aus #65, Sitzung 2026-09-09, aufgefallen bei der Volltext-Sichtung von
wiki-ingest.Per
grepauf die uebrigen ausgelieferten Instructions ausgeweitet, in der Umsetzungssitzungauf den vollstaendigen Export gemessen. Verwandte Vorgeschichte in die Gegenrichtung: #29
(Issue-Texte trugen veraltete Pfade nach dem Chemenu-Rename).
Changelog: Zeilennummern in der Befund-Tabelle nachgezogen.
663b1c0(#79) hatinstructions/wiki-ingest/SKILL.mdin den Schritten 1 und 6 gekuerzt, die drei dort gelisteten Stellen sind verrutscht:instructions/wiki-ingest/SKILL.mdinstructions/wiki-ingest/SKILL.mdinstructions/wiki-ingest/SKILL.mdDer Wortlaut der dritten Stelle hat sich mitgeaendert: "
new sourcerefuses without them the same way (Gitea #67) - but here there is no catalog slot to fall back on, for the reason step 1 gives". Am Befund aendert das nichts, die Nummer steht weiter im ausgelieferten Text.Die uebrigen vier Dateien der Tabelle (
kb-profiles.md,mcp-read-server.md,bootstrap.md,evolve-subtypes.md) wurden nicht angefasst, ihre Zeilennummern stehen.Sonst unveraendert - Wegweiser/Beleg-Unterscheidung, Akzeptanzkriterien und die offene
docs verify-Frage gelten wie beschrieben.Changelog: Body auf den entschiedenen Stand umgeschrieben.
Neu: die drei Entscheidungen der Umsetzungssitzung (Umfang ohne
tools/**/*.py, Beleg-Form "Nummer raus, Datierung in Worte" statt Historien-Marker,docs verify-Check mit Ja beantwortet). Der Abschnitt "Offene Frage" faellt damit weg - sie ist beantwortet, nicht mehr offen.Korrigiert: der Umfang. Die Befund-Tabelle fuehrte 10 Stellen in 5 Dateien; gemessen am tatsaechlichen
dist exportsind es 43 ausserhalb.py, in 16 Dateien. Die Zeilennummern-Tabelle ist durch eine Datei/Treffer-Tabelle ersetzt - Zeilennummern waren zweimal in zwei Tagen nachzuziehen und sind fuer die Abarbeitung ohnehin kein Fundort, der Grep ist einer.Gestrichen: der separate Hinweis auf
instructions/CONTRACT.mdZ. 218 - die Datei steht jetzt regulaer im Umfang. Der Wegweiser/Beleg-Abschnitt bleibt, aber ohne die Auflage "als Historie markiert" (Entscheidung 2 macht sie gegenstandslos).Akzeptanzkriterien entsprechend neu: Kriterium 4 auf
.md/.templateeingegrenzt, ein Kriterium fuer dendocs verify-Test und eines fuer die Unveraendertheit vontools/**/*.pydazu.Changelog: Abschluss-Rewrite. Body steht auf dem Endstand, geschlossen mit
a51d7a3(4.8.0-beta.12).Neu: die drei Entscheidungen als umgesetzt statt als Vorhaben formuliert, ein Abschnitt "Verifiziert" mit den tatsaechlichen Ergebnissen (CI 210
verifyund 211release, beide gruen), diedocs/-Veralterungspruefung mit ihrem Negativbefund, und ein Abschnitt "Bewusst nicht gemacht".Korrigiert gegenueber dem vorherigen Stand: die CI-Zeile nannte die Laeufe nur als laufend. 210 ist durch, inklusive "The distribution works as a fresh instance" - der
setup-instance-Replay war der einzige Check, der lokal nicht lief. 211 (release) lief ebenfalls gruen und hat korrekt nichts veroeffentlicht: neuester Tag/Release bleibtv4.7.4, weil4.8.0-beta.12ein Kandidat ist.Alle sieben Akzeptanzkriterien abgehakt. Kriterium 4 uebererfuellt: der Export ist nicht nur in
.md/.templatefrei von Issue-Nummern, sondern im gesamten Baum ausserhalb.py-.gitignoreundtools/.coveragercwurden von Hand mitgezogen, obwohl der Check sie nicht erfasst.Nachtragen fuer spaeter, ohne eigenes Issue: der Check liest auch die instanzeigenen
kb/CONVENTIONS.mdundkb/<collection>/COLLECTION.md, weil ein Export sie als.templatemitnimmt. Eine Instanz, die dort ihre eigene Ticket-Nummer zitiert, bekommt ein neues Finding. Steht im Body unter "Bewusst nicht gemacht" und imCHANGES.md-Eintrag.