SKILL.md-Sanierung: Checklisten, Kommandolisten, wiki-status-Hard-Rule, wiki-query-Filingpruefung (schliesst #70, #74, #75, #78)
CI / verify (push) Successful in 55s
Release / release (push) Successful in 39s

Files changed:
- CHANGES.md
- VERSION
- instructions/CONTRACT.md
- instructions/wiki-ingest/SKILL.md
- instructions/wiki-lint/SKILL.md
- instructions/wiki-manage/SKILL.md
- instructions/wiki-query/SKILL.md
- instructions/wiki-status/SKILL.md
This commit is contained in:
2026-09-09 17:01:42 +02:00
parent 663b1c046c
commit 11d64e6aa0
8 changed files with 222 additions and 23 deletions
+103 -1
View File
@@ -35,7 +35,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
---
## 4.8.0-beta.10 - 2026-09-09 - instructions/CONTRACT.md: Skill-H1, Referenztiefe und Begruendungsprosa praezisiert (#71, #72, #79)
## 4.8.0-beta.11 - 2026-09-09 - SKILL.md-Sanierung: Checklisten, Kommandolisten, wiki-status-Hard-Rule, wiki-query-Filingpruefung (#70, #74, #75, #78)
**Author:** Torben Nehmer
@@ -51,6 +51,7 @@ dev-checkout concern - readable here, never shipped as something to parse.
- raw accept: Datums-Shard statt Typverzeichnis, fidelity/authority am Drop-Punkt (schliesst #67)
- 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)
<!-- /wikitool:bumps -->
Das Label `status/incoming` gibt es seit heute in Gitea: der Mensch legt einen
@@ -648,6 +649,107 @@ Unterabschnitte), `instructions/wiki-ingest/SKILL.md` (Schritte 1 und 6).
Schließt #71, #72 und #79.
### Vier Befunde in der Skill-Prosa, ein Publish
Der Rest der #65-Analyse, soweit er die fünf `SKILL.md` selbst betrifft. Vier
Issues, fünf Dateien, kein Codeanteil.
**Die Hard Rule von `wiki-status` war falsch (#70).** Sie sagte „read-only.
Never writes, scaffolds, or modifies any file" — und Schritt 2 ruft `lint`,
schreibt also einen Report, was Schritt 2 sogar selbst beschreibt. Ein Agent,
der die Regel wörtlich nimmt, kann den Skill nicht ausführen; einer, der ihn
ausführt, hat die stärkste Aussage des Dokuments gebrochen, bevor er Schritt 5
erreicht. Das ist die teurere Sorte Widerspruch, weil die Hard Rule genau die
Stelle ist, an der ein Konflikt entschieden wird. Sie lautet jetzt wie die von
`wiki-query` — read-only gegenüber Wiki-*Inhalt* — und benennt den einen Write
mitsamt Grund: `reports/` ist gitignored und trägt keine Wiki-Seite. Schritt 5
behauptet nicht mehr, es sei keine Datei geschrieben worden, sondern sagt, was
mit der geschriebenen *nicht* passiert (Semantic Review bleibt leer, nichts
wird ausgetragen — das ist `wiki-lint` Schritt 9). Der Decision Point „Never
publishes — nothing was written" trägt jetzt den wahren Grund: unter `kb/` hat
sich nichts geändert, und der Report kann gar nicht in einen Commit geraten.
**`wiki-ingest` und `wiki-lint` bekommen einen Abhak-Block (#74).** Anthropics
Skill-Doku empfiehlt für „particularly complex workflows" eine Checkliste, die
der Agent in die Antwort kopiert und mitführt. Zwölf Schritte fallen
unzweifelhaft darunter. Der Ausschlag gibt aber nicht die Länge, sondern was
still ausfällt: `## Not Extracted` in Schritt 6, die Coverage-Prüfung in
Schritt 10, die Lint-Kadenz in Schritt 12 — keiner davon erzeugt eine
Fehlermeldung, wenn er ausbleibt.
Die offene Frage des Issues — ob `wiki-lint` denselben Block bekommt — ist mit
ja beantwortet: neun Schritte, davon 3-6 reines Judgment, und ein Lauf, der
leise nur seine mechanische Hälfte gemacht hat, sieht aus wie ein
vollständiger. Damit haben zwei von fünf Skills einen Block und drei nicht, und
genau das wäre ohne festgeschriebenes Kriterium die nächste strukturelle
Ungleichheit im Sinne von #78. `instructions/CONTRACT.md` § Writing an
instruction trägt sie deshalb jetzt: ein Block, wenn **ein** Ablauf acht
Schritte oder mehr hat **und** darin still ausfallende Schritte stehen. Beide
Hälften nötig — ein langer Ablauf aus reinen Tool-Calls meldet seine Lücken
selbst, weil der nächste Call ohne den vorigen scheitert. Der Abschnitt nennt
die drei anderen Skills mit ihren Schrittzahlen, damit niemand aus Symmetrie
einen vierten Block nachrüstet.
**`wiki-query` prüfte nicht, bevor es filete (#75).** Die drei Kriterien
(Synthese über mehrere Seiten, etwas noch nicht Dokumentiertes, wird wieder
gefragt) standen im Filing-Schritt selbst, und der Skill darf mehrere Seiten
je Sitzung anlegen — es gab also keine Stelle, an der *jede* geplante Seite
einzeln gemessen wurde. Neuer Schritt 5 vor dem ersten `new`: Kandidaten
benennen, jeden für sich gegen alle drei halten, ein Stapel wird nie als Stapel
beurteilt. Wer durchfällt, wird nicht angelegt, sondern in der Antwort mit
einem Satz genannt — der Nutzer kann ihn trotzdem verlangen. Der bisherige
Filing-Schritt ist Schritt 6, `log append` Schritt 7, die Hard Rule zieht mit.
Der Mass-Update-Gate-Hinweis bleibt, sagt aber jetzt dazu, dass er keine
Ersatzprüfung ist: das Gate zählt Dateien und weiß nichts über Berechtigung,
und ein Stapel unter der Schwelle ist von ihm nicht freigegeben, nur nicht
angehalten worden. Dazu die `session-setup.md`-Zeile in derselben Form wie in
den drei anderen — Schritt 7 läuft *immer* und der Filing-Pfad zieht `new`,
`xref add` und die Rebuilds nach sich.
**Die Kommandolisten gingen mit den Schritten auseinander (#78).**
`cite add` fehlte in `wiki-ingest` und `wiki-manage`, obwohl beide es
ausdrücklich vorschreiben; `types describe` fehlte in `wiki-ingest`, wo
Schritt 6 die `source_type`-Werte daraus zieht; `xref add` fehlte in
`wiki-lint`, wo Schritt 1 das Umlabeln einer schwachen Kante darauf stützt;
`publish` fehlte in `wiki-lint` und `wiki-query`, wo je ein Decision Point es
beim Namen nennt. In die andere Richtung: `rm` stand in `wiki-lint`s Liste,
ohne dass ein Schritt es begründet — die gefährlichere Richtung der Drift, weil
`rm` Seiten löscht. Dazu `log status` (entscheidet den Trigger, gelaufen wird
es von `wiki-ingest`) und die nie benutzten Flags `lint --markdown` und
`lint --json`. Beide Streichungen stehen jetzt als **Deliberately absent** unter
der Liste, mit Grund — sonst trägt sie jemand aus Vollständigkeit wieder ein.
Nicht als Drift gezählt und bewusst gelistet geblieben: `publish`,
`log append`, `index rebuild` und `sources rebuild-index`, wo ein Skill sie
über `publish-cycle.md` delegiert. Ebenso `xref remove` in `wiki-manage`, das
zum Unlinking-Fall gehört, den der Skill als Ganzes an `page-lifecycle.md`
abgibt; auch das steht jetzt als Satz dort, nicht als stille Annahme.
Der zweite Teil von #78 ist die Symmetrie: `wiki-manage` und `wiki-status`
tragen jetzt einen Beispielblock wie die drei anderen. Fünf Skills mit
demselben Aufbau sollten denselben Aufbau haben — ein fehlender Abschnitt liest
sich sonst als Aussage („hier gibt es keine typischen Fälle"), die niemand
gemeint hat.
Die offene Frage aus #78 — ob `instructions verify` diesen Abgleich künftig
selbst macht — bleibt offen und ist ein eigenes Issue. Der Abgleich ist
mechanisch, aber nicht trivial: die drei Ausnahmen oben (Delegation, benannte
Delegation, „Deliberately absent") müsste ein Prüfer alle kennen, sonst meldet
er dieselben vier Stellen bei jedem Lauf.
**PATCH**, geprüft gegen den Drop-in-Test: eine Instanz kopiert `instructions/`
über sich, nichts wird umbenannt oder entfernt, kein Kommando, kein Flag, kein
maschinengelesenes Format, und der Rückweg funktioniert genauso. Kein
`--breaking`, kein Migrationsdokument.
Geändert: `instructions/wiki-status/SKILL.md`, `instructions/wiki-query/SKILL.md`,
`instructions/wiki-ingest/SKILL.md`, `instructions/wiki-lint/SKILL.md`,
`instructions/wiki-manage/SKILL.md`, `instructions/CONTRACT.md` (§ Writing an
instruction, neuer Unterabschnitt „When a skill carries a copy-in checklist").
`wiki-ingest` bleibt mit 233 Zeilen unter Anthropics 500er-Schwelle.
Schließt #70, #74, #75 und #78.
---
## 4.7.4 - 2026-09-04 - bootstrap.md nennt den session-id-WARN nach frischem Bootstrap explizit als erwartet