docs: ausgelieferte Doku zitiert keine Issue-Nummern mehr, docs verify prueft es (schliesst #77)
Files changed: - .gitignore - CHANGES.md - EVALS.md - INSTALL.md - README.md - VERSION - docs/pipeline-rationale.md - instructions/CONTRACT.md - instructions/bootstrap.md - instructions/dev/issue-tracking.md - instructions/evolve-subtypes.md - instructions/kb-profiles.md - instructions/mcp-read-server.md - instructions/wiki-ingest/SKILL.md - kb/CONTRACT.md - kb/concepts/COLLECTION.md - kb/sources/COLLECTION.md - raw/CONTRACT.md - tools/.coveragerc - tools/CONTRACT.md - tools/README.md - tools/chemenu/commands/docs_verify.py - tools/chemenu/tests/test_docs_verify.py - types/source.schema.yaml - types/type-spec.md
This commit is contained in:
+89
-1
@@ -35,7 +35,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
|
||||
|
||||
---
|
||||
|
||||
## 4.8.0-beta.11 - 2026-09-09 - SKILL.md-Sanierung: Checklisten, Kommandolisten, wiki-status-Hard-Rule, wiki-query-Filingpruefung (#70, #74, #75, #78)
|
||||
## 4.8.0-beta.12 - 2026-09-09 - Ausgelieferte Doku zitiert keine Issue-Nummern mehr, docs verify prueft es (schliesst #77)
|
||||
|
||||
**Author:** Torben Nehmer
|
||||
|
||||
@@ -52,6 +52,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
|
||||
- source_type ist Instanzsache: Profilkatalog, Setup-Frage, evolve-subtypes-Instruction (#68)
|
||||
- instructions/CONTRACT.md: Skill-H1, Referenztiefe und Begruendungsprosa praezisiert (#71, #72, #79)
|
||||
- SKILL.md-Sanierung: Checklisten, Kommandolisten, wiki-status-Hard-Rule, wiki-query-Filingpruefung (#70, #74, #75, #78)
|
||||
- Ausgelieferte Doku zitiert keine Issue-Nummern mehr, docs verify prueft es (schliesst #77)
|
||||
<!-- /wikitool:bumps -->
|
||||
|
||||
Das Label `status/incoming` gibt es seit heute in Gitea: der Mensch legt einen
|
||||
@@ -752,6 +753,93 @@ instruction, neuer Unterabschnitt „When a skill carries a copy-in checklist").
|
||||
|
||||
Schließt #70, #74, #75 und #78.
|
||||
|
||||
**Issue-Nummern in ausgelieferter Doku** (#77): `dist export` lieferte
|
||||
Dateien aus, die im Fließtext auf Issue-Nummern dieses Trackers verwiesen —
|
||||
„flat since Gitea #67", „`new source` refuses without it (Gitea #66)". In einer
|
||||
verteilten Instanz zeigt das auf nichts. Der Leser kann den Verweis weder
|
||||
auflösen noch als unauflösbar erkennen, und eine Regel sieht damit so aus, als
|
||||
stütze 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 überhaupt sagt — wird von `dist export` mit dem Rest von
|
||||
`instructions/dev/` weggeschnitten. Gegenprobe zum eigenen Anspruch aus
|
||||
`instructions/CONTRACT.md` § „Writing an instruction": „self-contained enough
|
||||
for an agent with no prior context".
|
||||
|
||||
Gemessen statt geschätzt: ein Export in ein leeres Verzeichnis, `grep -rn
|
||||
'#[0-9]'`, ergab **43 Treffer in 16 Dateien** außerhalb von `tools/**/*.py` —
|
||||
`raw/CONTRACT.md` allein acht. Das Issue hatte zehn gelistet.
|
||||
|
||||
Aufgelöst wurde nicht durch eine Markierung, sondern durch Umformulierung:
|
||||
**die Nummer fällt weg, die Datierung geht in Worte.** Aus „flat since Gitea
|
||||
#67" wird „flat since the addressing scheme dropped type directories", aus
|
||||
„**Pre-#67 files are not moved**" wird „**Files promoted under the old type
|
||||
directories are not moved**". Der Satz trägt sich damit selbst — es gibt keine
|
||||
repoweite Notation zu definieren und an genau einer Stelle zu halten
|
||||
(Invariante 8), und kein Leser von `README.md` muss `AGENTS.md` geladen haben,
|
||||
um sie aufzulösen. Rückverfolgbar bleibt es hier über `git blame` → Commit-
|
||||
Message; die tragen die Nummern ohnehin.
|
||||
|
||||
Zwei Stellen, an denen der Zeiger *der ganze Wert* des Satzes war und in Worten
|
||||
nichts übrig geblieben wäre, stehen jetzt in einem
|
||||
`<!-- dist:strip-start/end -->`-Block: in `instructions/CONTRACT.md` (was ein
|
||||
Test der Kontextfenster-Behauptung kosten würde) und in `EVALS.md` (wo die
|
||||
Coverage-Lücken geschlossen werden). Im Dev-Repo sichtbar, im Export weg — die
|
||||
bestehende Konvention aus `instructions/CONTRACT.md` § `instructions/dev/`, hier
|
||||
zum zweiten Mal angewandt statt neu erfunden.
|
||||
|
||||
**`docs verify` prüft es jetzt** — die offene Frage des Issues, mit Ja
|
||||
beantwortet. `check_no_issue_references` liest nicht den Arbeitsbaum, sondern
|
||||
den Text, den `dist_cmd.build_plan()` schreiben würde: dort leben `ROOT_FILES`,
|
||||
der `instructions/dev/`-Ausschluss und das `.template`-Rekeying schon, und der
|
||||
Text hat seine Marker-Blöcke bereits verloren. Deshalb ist ein Strip-Block
|
||||
automatisch exemptiert, ohne dass der Check ihn kennen müsste.
|
||||
|
||||
Der Einwand aus `instructions/dev/issue-tracking.md` § „What no tool checks" —
|
||||
`wikitool` soll den Tracker nicht kennen — trägt hier nicht, und das ist die
|
||||
Grenze, die der Abschnitt jetzt selbst zieht: `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 über den gesamten Export, weil Markdown-Anker aus Wortzeichen
|
||||
bestehen (`](#gates)` matcht nicht). Der erste Fund war prompt der Satz, den
|
||||
diese Sitzung selbst in `tools/CONTRACT.md` geschrieben hatte, um die Regel zu
|
||||
erklären.
|
||||
|
||||
**`tools/**/*.py` bleibt bewusst außen vor**, mit ~90 Treffern in Docstrings und
|
||||
Kommentaren. Ein Code-Kommentar adressiert, wer die Zeile editiert, und das
|
||||
passiert ausschließlich im Ursprungs-Repo: `dist export` schneidet den
|
||||
`stack-dev`-Skill mit `instructions/dev/` weg. Ein ausgeliefertes `tools/` ist
|
||||
Laufzeit-Maschinerie, keine Lektüre. `.gitignore` und `tools/.coveragerc` sind
|
||||
aus demselben Grund nicht im Check — von Hand mitgezogen wurden sie trotzdem,
|
||||
sodass der Export heute in *keiner* Datei außerhalb `.py` eine Nummer trägt.
|
||||
|
||||
**MINOR**, geprüft gegen den Drop-in-Test: kein Kommando, kein Flag, kein
|
||||
Dateiformat, keine Umbenennung; der Rückweg funktioniert unverändert, die alte
|
||||
Version führt den Check schlicht nicht aus. Kein `--breaking`, kein
|
||||
Migrationsdokument. Eine Konsequenz ist zu kennen: der Check liest auch die
|
||||
instanzeigenen `kb/CONVENTIONS.md` und `kb/<collection>/COLLECTION.md`, weil ein
|
||||
Export sie als `.template` mitnimmt. Eine Instanz, die dort ihre eigene
|
||||
Ticket-Nummer zitiert, bekommt beim nächsten `docs verify` ein Finding. Das ist
|
||||
kein Fehlalarm — ein Export dieser Instanz würde den Verweis weitergeben —
|
||||
aber es ist neu.
|
||||
|
||||
Geändert: `tools/chemenu/commands/docs_verify.py` (neuer Check plus
|
||||
`shipped_prose()`), `tools/chemenu/tests/test_docs_verify.py` (sechs Tests:
|
||||
sauberer Baum, präparierte Datei, Anker-Nicht-Treffer, `.py` außerhalb des
|
||||
Scans, Strip-Block unsichtbar, `verify` bricht ab), `tools/CONTRACT.md`
|
||||
(Kommandotabelle und Fehlerkontrakt-Zeile), `tools/README.md`,
|
||||
`instructions/dev/issue-tracking.md` (neuer § Citing an issue in the repo, und
|
||||
§ What no tool checks zieht die Grenze zwischen „was dieses Repo über den
|
||||
Tracker schreibt" und „dem Tracker selbst"), sowie 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`.
|
||||
|
||||
Schließt #77.
|
||||
|
||||
---
|
||||
|
||||
## 4.7.4 - 2026-09-04 - bootstrap.md nennt den session-id-WARN nach frischem Bootstrap explizit als erwartet
|
||||
|
||||
Reference in New Issue
Block a user