-
v6.0.0 Stable
released this
2026-09-15 19:38:53 +00:00 | 0 commits to main since this release6.0.0 - 2026-09-15 - search: Pfad und Titel vollstaendig, Trunkierung sichtbar
Author: Torben Nehmer
Breaking Change:
- docs verify loest ab dieser Version jeden relativen Markdown-Link in den Referenzdateien auf und meldet ein totes Ziel als Fehler - auch in kb/CONVENTIONS.md und kb//COLLECTION.md, die eine Instanz selbst besitzt und die ein Drop-in-Copy der Maschinerie nicht ersetzt. Eine Instanz, deren eigene Konventions- oder Collection-Datei einen relativen Link mit falscher ../-Tiefe oder auf eine inzwischen geloeschte Datei traegt, sieht docs verify nach dem Update fehlschlagen, wo es vorher durchlief. Reparatur: den in der Meldung genannten Datei:Zeile-Link korrigieren - kein Werkzeuglauf, keine Inhaltsmigration.
- docs verify prueft die TOC-Region ab dieser Version auch auf types/.md und docs/.md. Eine Instanz, die die Page-Type-Spec-Templates adoptiert hat, traegt types/source.md und types/concept.md ohne Region und sieht docs verify nach dem Update fehlschlagen, wo es vorher durchlief; dasselbe gilt fuer eine selbst angelegte oder lokal geaenderte docs/-Seite ueber 100 Zeilen. Reparatur: tools/wikitool docs toc --apply - ein Werkzeuglauf, keine Inhaltsmigration.
Migration: none required - Keine kb/-Seite aendert ihre Form. Der Grenzuebertritt ist ein strengerer Check auf instanz-eigener Prosa, keine Schema- oder Frontmatteraenderung.
High impact
- SKILL.md: relative Links durch repo-root-relative Pfade ersetzt, docs verify/instructions verify pruefen Linkziele
- docs verify: der Linkziel-Check erreicht auch die instanz-eigenen kb/CONVENTIONS.md und COLLECTION.md - daher Grenzuebertritt
- TOC-Scope auf types/ und docs/ erweitert, Sprachregeln zentralisiert, --breaking akkumuliert
- types/: Seiten-Type-Spec-Anleitungsprosa in stackeigene guidance-Datei ausgelagert
Medium impact
- docs verify: ein nur als .template ausgeliefertes Linkziel gilt als aufgeloest
- Control-Plane-Sprache universell: Achse ist das Publikum, kein Instanz-Schalter
- types/type-spec.schema.yaml enforced against real type-spec frontmatter
- search: Pfad und Titel vollstaendig, Trunkierung sichtbar
Low impact
- gates.md/session-setup.md: die Budget-Ausnahme von version regrade haengt an der Aufrufform
- types/type-spec.md: Ownership und Sprache getrennt benannt (Nachzug zu #99)
Ausgangspunkt war ein realer Bruch:
instructions synckopiert jedeSKILL.mdin eine andere
Verzeichnistiefe, und 52 von 58 relativen Links darin zeigten in der publizierten Kopie ins Leere,
unbemerkt, weil kein Check je ein Linkziel gelesen hat. Die Reparatur - repo-root-relative Pfade
statt../-Links - zieht zwei neue mechanische Checks nach sich (instructions verifyverbietet
relative Links inSKILL.md,docs verifyloest Linkziele in allen Referenzdateien auf), und der
zweite Check erreicht auch instanz-eigene Prosa (kb/CONVENTIONS.md,COLLECTION.md), die ein
Drop-in-Copy nicht ersetzt - der Grenzuebertritt, der diesen Kandidaten auf6.0.0eskaliert hat.
Denselben Linkziel-Check bekommt die TOC-Pflicht gleich mit auftypes/unddocs/erweitert, und
die Sprachregeln fuer die Control-Plane sind zu einer einzigen, publikumsbasierten Regel in
AGENTS.mdzentralisiert statt eines Instanz-Schalters. Daneben, unabhaengig vom Linkproblem: die
Seiten-Type-Spec-Anleitungsprosa ist in eine stackeigene Guidance-Datei ausgelagert,
type-spec.schema.yamlwird jetzt gegen echte Type-Spec-Frontmatter durchgesetzt, undsearch
zeigt Pfad und Titel eines Treffers vollstaendig statt trunkiert.gates.md/session-setup.md: die Budget-Ausnahme von version regrade haengt an der Aufrufform
Doku-Nachzug zu
5.1.0. Beide Dateien beschrieben die Budget-Ausnahme als feste Liste pro
Kommandoname ("fixed allowlist");version regradeist die erste Ausnahme, die nur in einer
Aufrufform liest - bar listet sie, mit Positionen schreibt sieCHANGES.md. Die Liste selbst
bleibt an ihrem einen Ort (tools/CONTRACT.md), beide Stellen benennen jetzt aber, dass dort ein
Eintrag pro Aufruf statt pro Namen gilt. Aufgefallen in der Schlussphase derselben Arbeit, deshalb
ein eigener Patch-Bump: der Pfadinstructions/liegt im Version-Gate der CI.SKILL.md: relative Links durch repo-root-relative Pfade ersetzt, docs verify/instructions verify pruefen Linkziele
instructions synckopiert jedeSKILL.mdbyteidentisch in.agents/skills/und
.claude/skills/- eine andere Verzeichnistiefe als die Quelle, ohne deren Nachbardateien. 52 von
58 relativen Markdown-Links in den sieben Skills zeigten deshalb in der publizierten Kopie ins
Leere, unbemerkt, weil kein Check je ein Linkziel gelesen hat (Gitea-Meldung: einsession-setup.md-Read
schlug in einer ausgelieferten Instanz fehl). Alle 58 Links sind jetzt repo-root-relative
Klartextpfade (instructions/session-setup.mdstatt[session-setup.md](../session-setup.md)) -
sie ueberleben die Kopie unveraendert, weil sie nicht von der Position der lesenden Datei abhaengen.
instructions/CONTRACT.md§ "A skill's outbound reference is a plain path, not a link" traegt die
Regel.Zwei neue mechanische Checks verhindern das Wiederauftreten:
instructions verifyverbietet jeden
relativen Markdown-Link in einerSKILL.md(check_skill_reference_paths),docs verifyloest
jeden relativen Link in den flachen Instructions und Contracts gegen den Arbeitsbaum auf
(check_reference_targets, ueber denselben Dateisatz wiedocs toc). Nebenbei behoben:
instructions/dev/doc-pull-through.mdhatte zwei Links mit falscher../-Tiefe, unabhaengig vom
Skill-Copy-Problem.docs verify: der Linkziel-Check erreicht auch die instanz-eigenen kb/CONVENTIONS.md und COLLECTION.md - daher Grenzuebertritt
Nachtraegliche Neueinstufung des Bumps darueber, kein zusaetzlicher Code.
check_reference_targets
laeuft ueber den Dateisatz vondocs toc, und fuenf Dateien darin gehoeren der Instanz statt dem
Stack:kb/CONVENTIONS.mdund die vierkb/<collection>/COLLECTION.md. Ein Drop-in-Copy von
tools/,types/,instructions/undAGENTS.mdersetzt sie nicht - ein toter relativer Link
darin laesstdocs verifynach dem Update fehlschlagen, wo es vorher durchlief. Genau die Form,
dietools/README.md§ Adding a command Schritt 5 als MAJOR-Zeile benennt ("a stricter check that
newly fails on shipped content an instance already had"), undinstructions/dev/version-parts.md
entscheidet den Zweifelsfall zugunsten des Grenzuebertritts.Gemessen bricht heute nichts: die zweite bekannte Instanz traegt 25 relative Links in diesen fuenf
Dateien, davon null tote; dieses Repo ebenso. Die Einstufung folgt der Reichweite des Checks, nicht
einem beobachteten Schaden - der Preis einer unnoetigen MAJOR ist eine Release-Notiz, der Preis
einer MINOR, die doch bricht, ist eine Instanz mit fehlschlagendem Update-Pfad unter einer
Versionsnummer, die Drop-in versprochen hat. Aufgefallen ist es in der Schlussphase beim Lesen der
eigenen Regel intools/README.md, nicht durch einen Check - wasdocs/version-model.mdueber
genau diese Stelle sagt ("a person looking at the diff ... not a validator"), hat sich hier
wiederholt.docs verify: ein nur als .template ausgeliefertes Linkziel gilt als aufgeloest
Defektbehebung am Check aus den beiden Bumps darueber, gefunden unmittelbar nach deren Publish.
check_reference_targetsmeldete auf einem frisch exportierten Baum 13 tote Links -kb/CONTRACT.md
neunmal, dazugerman-terminology.md,kb-profiles.mdundlink-taxonomy.md- und zwar dafuer,
dass der Export tut, was er soll.kb/CONVENTIONS.mdund die vierkb/<name>/COLLECTION.mdsind
instanz-eigen: die Distribution traegt<name>.template, und die Instanz uebernimmt sie erst im
Personalisierungsschritt voninstructions/setup-instance.mddurch Umbenennen. Zwischen
dist exportund diesem Schritt existiert die fertige Datei berechtigterweise nicht, waehrend die
stack-eigenen Dateien sie unter ihrem kuenftigen Namen verlinken - korrekt, denn so wird sie heissen.Ein Linkziel gilt jetzt auch dann als aufgeloest, wenn daneben
<ziel>.templateliegt. Die
Ausnahme ist eng: fehlt beides, bleibt es ein Befund. Damit beschreibt der Check nicht laenger
"noch nicht personalisiert" als "kaputter Link" - diesen Zustand meldetdoctorunter
conventionspraezise und zustaendig.CI war davon nie rot: der Replay in
.gitea/workflows/ci.ymluebernimmt die Templates, bevor er
docs verifyaufruft, und der dokumentierte Weg insetup-instance.mdstellt die Personalisierung
(Schritt 5/6) ebenfalls vor die Verifikation (Schritt 13). Getroffen haette es jeden, der nach dem
Export einmal zur Kontrolledocs verifyaufruft. Aufgefallen ist es, weil die Verifikation des
vorherigen Publishes den Arbeitsbaum geprueft hatte und nicht den exportierten - ausgerechnet bei
einer Aenderung, deren ganzer Gegenstand Kopien in anderer Verzeichnistiefe sind.TOC-Scope auf types/ und docs/ erweitert, Sprachregeln zentralisiert, --breaking akkumuliert
Drei Straenge, ausgeloest von einer Beobachtung: manche agentengeladene Referenzdatei trug keine
TOC, und manche Instruction war teilweise deutsch.TOC-Scope. Die Pflicht aus
5.0.0galt fuerAGENTS.md, die Stage-Contracts,
kb/CONVENTIONS.md, jedeCOLLECTION.mdund die flacheinstructions/**.md-Form.docs/und die
Seiten-Type-Specs fielen ohne genannten Grund heraus - waehrendSKILL.mdund die Menschendoku
ihren Ausschlussgrund im Docstring stehen hatten, was die beiden anderen Luecken wie Absicht
aussehen liess.docs/ist dabei genau der Fall, fuer den die Schwelle existiert:
AGENTS.md§ File naming fuehrt es als agentengeladen per Link, also am zweiten Hop. Beide sind
jetzt drin; vier Dateien haben eine Region bekommen.SKILL.mdbleibt die eine Ausnahme, und
zwar belegt statt behauptet: die vendorte Guidance setzt den SKILL.md-Body auf die Ladeebene, die
beim Triggern ganz gelesen wird, und richtet ihren eigenen TOC-Rat an die gebuendelten
Referenzdateien daneben. Ein Type-Spec wird zwar auch ganz geladen, aber eben auch als Datei
gelesen - deshalb traegt es eine Region, undtypes describestrippt sie aus seiner Ausgabe, weil
dort der ganze Body ohnehin mitkommt.Sprache. Die Regel gab es schon ("the control plane stays English"), sie stand nur in
kb/CONVENTIONS.md- einer Datei, die der Instanz gehoert und die sie umschreiben darf, waehrend
die Regel stackeigene Dateien bindet. Sie ist nachAGENTS.md§ File naming gezogen, zusammen mit
einer zweiten, die vorher gar nicht geschrieben stand: ein Agent spricht die KB-Sprache der
Instanz. Der Wert dafuer lebt weiter inkb/CONVENTIONS.mdslanguage:;SOUL.mds eigene
Sprache:-Zeile war damit eine Dublette und ist weg.instructions/setup-instance.md- 297 Zeilen,
die einzige vollstaendig deutsche Instruction, verbatim an jede Instanz ausgeliefert - ist
uebersetzt, samtdescription:. Die zwei deutschen Blockquotes in den Dev-Skills sind es auch; sie
lesen sich jetzt als englisches Modell der Nachricht, die der Agent in der KB-Sprache ausspricht.Dieselbe Regel gilt fuer alles, was als Template ausgeliefert wird - eine Instanz adoptiert es,
bevor sie ihre Sprache ueberhaupt gewaehlt hat.USER.md.template,SOUL.md.templateund
ENVIRONMENT.md.templatewaren vollstaendig deutsch und sind uebersetzt;kb/sources/und
kb/concepts/COLLECTION.mdwaren es in Teilen und ziehen jetzt mitkb/entities/und
kb/comparisons/gleich, die es laengst waren. Bei den vier Seiten-Type-Specs laeuft der Schnitt
mitten durch die Datei, und zwar entlang derselben Prosa/Identifier-Grenze, diekb/CONTRACT.md
schon innerhalb einer Seite zieht: die Anleitungsprosa ist Anweisung an einen Agenten und damit
Control Plane, der## Template-Block und dielayout:-Titel sind Seitentext und bleiben in der
KB-Sprache -wikitool new entityscaffoldet also weiter deutsche Ueberschriften.
kb/CONVENTIONS.mdbehauptete bis hierher, die Type-Specs folgten als Ganzes der KB-Sprache; der
Satz ist auf den tatsaechlichen Schnitt nachgezogen.
Mechanisch geprueft wird nichts davon: ein Stoppwort-Scan schluege auf dem zitierten Vokabular in
kb-profiles.mdundlink-taxonomy.mdfalsch an. Stattdessen nennen
instructions/CONTRACT.md§ "Writing an instruction" undstack-devdie Regel an der Stelle, an
der sie befolgt oder verloren wird.--breakingakkumuliert. Bis hierher ersetzte ein zweites--breakingdie Zeile des
Kandidaten - der Eintrag versprach dann einen Bruch und lieferte zwei. Genau dieser Kandidat ist der
Fall: sein Linkziel-Uebertritt ausbeta.1und der TOC-Uebertritt von hier sind zwei Dinge, auf die
ein Betreiber getrennt reagieren muss. Eine Begruendung bleibt flach auf der Markerzeile, ab der
zweiten werden es Bullets; eine vor dieser Aenderung geschriebene Einzelzeile liest sich unveraendert
als Ein-Element-Liste zurueck, also musste kein bestehender Eintrag angefasst werden.--migration:
bleibt bewusst eine Einzelzeile - sie beantwortet eine Ja/Nein-Frage ueber den Kandidaten als Ganzes,
und--migration-requiredist ihr Ruecknahmepfad. Fuer eine falsche Breaking-Begruendung gibt es
keinen; der Kandidat ist bis zum Release dev-lokal.Nebenbefund, den die Scope-Erweiterung sofort aufgedeckt hat:
docs/version-model.mdverlinkte nach
instructions/dev/version-parts.md, dasdist exportwegschneidet - im Ursprungs-Repo gruen, in
jeder ausgelieferten Instanz ein toter Link. Jetzt ein Klartextpfad mit dem Satz, warum er keiner
ist.types/type-spec.md: Ownership und Sprache getrennt benannt (Nachzug zu #99)
types/type-spec.mdsagte weiterhin, Prosa,## Template-Body und Sprache eines
Seiten-Type-Specs gehoerten der Instanz, die bei anderer KB-Sprache "einfach die Datei
uebersetzt" - genau das Gegenteil des Schnitts, den der Bump davor ausgeliefert hat. Aufgefallen
in der Schlussphase, beim Nachdenken darueber, welche Sprachregel fuer einen instanz-eigenen
neuen Seitentyp gilt.Der Abschnitt trennt die zwei Fragen jetzt: Ownership sagt, wer eine Zeile aendern darf, die
Sprache folgt davon unabhaengig dem Publikum der Zeile - Anleitungsprosa an einen Agenten ist
Control Plane und englisch,## Template-Body undlayout:-Titel sind Seitentext in der
KB-Sprache, Feldnamen und Enum-Werte sind Identifier und werden nie uebersetzt. Als Tabelle, weil
der Schnitt mitten durch eine Datei laeuft und eine Aufzaehlung im Fliesstext ihn genau deshalb
nicht haelt. Der Satz bindet ausdruecklich auch einen Type-Spec, den eine Instanz sich selbst
schreibt: der ist zwar durchgaengig instanzeigen, aber seine Anleitungshaelfte hat trotzdem einen
Agenten als Leser.Control-Plane-Sprache universell: Achse ist das Publikum, kein Instanz-Schalter
Die Sprachregel in
AGENTS.mdruhte auf einer Begruendung, die schmaler war als sie selbst:
"Every file in the table above belongs to the stack and ships to instances that share none of
this instance's language choices, so:". Das traegt nur fuer ausgeliefertes Material und laesst
offen, was fuer ein Control-Plane-Dokument gilt, das eine Instanz nur fuer sich selbst schreibt -
eine eigene Instruction, ein selbst angelegter Seitentyp (types/nimmt einen ohne Code-Aenderung
auf), ein weiterer Stage-Contract. Genau dort fallen Ownership und Publikum auseinander: die Datei
ist durchgaengig instanzeigen, ihre Anleitungshaelfte hat trotzdem einen Agenten als Leser.Der Vorsatz nennt jetzt die tatsaechliche Achse - die For-Spalte der Tabelle darueber, also wer
die Zeile liest, und weder wem die Datei gehoert noch ob sie den Checkout je verlaesst. Regel 1
sagt ausdruecklich, dass sie auch fuer ein nie ausgeliefertes Control-Plane-Dokument gilt und dass
es nebenkb/CONVENTIONS.mdslanguage:bewusst keinen zweiten Sprachwert gibt.
kb/CONVENTIONS.mdund ihr.templatesagen dasselbe von ihrer Seite aus: die
Control-Plane-Sprache ist keine Einstellung, die diese Datei zurueckhaelt - es ist gar keine.Die Begruendung dazu steht als neue
docs/-Seite
(docs/language-boundaries.md), weil sie sonst in einem Jahr neu
verhandelt wird: warum Englisch (der Stack redet fast nur ueber Identifier, und die sind
englisch), warum kein Parameter (die Kosten traegt jede Datei, den Nutzen haette ein Dokument, das
ohnehin nur ein Agent liest), und was die Entscheidung wieder aufmachen wuerde. Die Seite haelt
zugleich fest, welches Argument falsch war: "Sprache folgt der Ownership" hat funktioniert,
solange nur ausgeliefertes Material betrachtet wurde, und faellt am instanz-eigenen Typ.Nebenbei zwei Befunde derselben Ecke behoben. Der Docstring von
dist_cmd.instance_owned_type_stems()behauptete weiter, "its prose, its template and its
language are the instance's business" - Stand vor dem TOC-/Sprach-Bump oben. Und die
Aufzaehlung derdocs/-Seiten inAGENTS.mdsagte "Four pages exist today", waehrend das
Verzeichnis fuenf trug:docs/model-and-effort-selection.mdfehlte, und zwar absichtlich, weil
ein Link dorthin die Claude-Code-eigene Entscheidung in die anderen drei Harnesses laden wuerde.
Der Satz zaehlt jetzt, was von hier aus verlinkt ist, und benennt die sechste Seite samt Grund.types/: Seiten-Type-Spec-Anleitungsprosa in stackeigene guidance-Datei ausgelagert
Ein
root: kbType-Spec (entity,concept,source,comparison) hatte zwei Publika in
einer Datei: Anleitungsprosa fuer den Agenten (When to use/When NOT to use/Authoring guidance),
und Seitenmaterial (## Template-Block,layout:-Titel). Ownership gilt pro Datei, also wurde
die ganze Datei beim Setup als.templateadoptiert und danach nie wieder angefasst - eine
Instanz, die ihre Type-Specs frueh adoptiert hat, las bis in alle Zukunft die Anleitung vom Tag
ihrer Erzeugung, weildist upgradedas.templateneben die adoptierte Datei schrieb, nie die
Datei selbst (docs/ownership-and-templates.md§ "Where the file boundary strains").Der urspruengliche Vorschlag drehte den Schnitt um (Type-Spec stackeigen, Seitenmaterial heraus)
und wurde beim Pruefen gegensetup-instance.mdundevolve-subtypes.mdverworfen: die
Frontmatter-Konfiguration (layout:, Enum-Werte,base_dir) ist instanzeigener Inhalt, keine
Stack-Maschinerie - beide Instructions weisen die Instanz an, Enum undlayout:-Eintrag in
derselben Aenderung zu setzen. Stattdessen bleibt der Type-Spec instanzeigen, und nur die
maschinenabgeleitete Anleitungsprosa zieht in eine neue, stackeigenetypes/<name>.guidance.md,
verknuepft ueber ein optionalesguidance:-Frontmatterfeld (neuer, nicht instanziierbarer Typ
type-guidance, wielint-reportohnebase_dir:).tools/wikitool types describe <name>
komponiert beide Haelften weiterhin zu einer Antwort - ein Agent muss nie wissen, dass ein Typ aus
zwei Dateien besteht.type_resolver.extract_template()liest das Template unveraendert allein
austypes/<name>.md; kein zweiter Ladepfad fuerwikitool new.dist_cmd._plan_types()/find_leaks()teilten sich vorhername.split(".", 1)[0]als
Stamm-Berechnung - beides haetteentity.guidance.mdfaelschlich als instanzeigenen Stamm
"entity" erkannt (die eine haette sie zum.templategemacht, die andere sie als Leak gemeldet).
Neuer gemeinsamer Prädikat_owned_type_stem()prueft die exakte Endung (<stem>.mdoder
<stem>.schema.yaml), nicht den ersten Punkt.Grenzuebertritt-Frage bewusst geprueft und verneint: Drop-in in beide Richtungen (ein Type-Spec
ohneguidance:verhaelt sich unveraendert, eine alte Maschinerie liesttypes/<name>.mdwie
zuvor und die Guidance-Datei ist fuer sie inert), also--minorstatt--major. Die einmalige
Adoption in einer bestehenden Instanz ist alsinstructions/migrations/6.0.0-type-guidance-split.md
dokumentiert -obligation: offered, der erste Gebrauch dieses seit 4.0.0 existierenden, bis jetzt
unbenutzten Mechanismus fuer ein instanzeigenes, upgradebares Machinery-File.Verifiziert:
tools/wikitool docs verify/instructions verifygruen, 1261 Tests gruen (8 neu:
get_guidance, das Template bleibt auftypes/<name>.mdallein geladen, die Guidance-Datei
schifft verbatim neben einem.template-adoptierten Type-Spec statt als weiteres.template,
eindist upgradeschreibt verbesserte Guidance-Prosa in eine adoptierte Instanz obwohl deren
Type-Spec selbst nie im Stamp stand,types describekomponiert beide Haelften in JSON und
Textausgabe getrennt nachweisbar).types/type-spec.schema.yaml enforced against real type-spec frontmatter
Bei der Vorbereitung der Aenderung oben fiel auf:
types/type-spec.schema.yamltraegt
additionalProperties: false, kannte aberroot:undcapture_fields:nicht, obwohl
types/instruction.mdbzw.types/source.mdbeide Felder tragen undtype_resolver.get_root()/
get_capture_fields()sie lesen. Gegen das Schema validiert waeren beide Type-Specs ungueltig
gewesen. Dass es niemandem auffiel, war der eigentliche Befund: Type-Spec-Frontmatter wurde
nirgends gegen sein eigenes Schema validiert -resolver.validate_frontmatter()lief nur ueber
kb/-Seiten, neu erzeugte Seiten und Instruktionsdateien, nie ueber die Type-Specs selbst.
TypeResolver._validate_type_spec(), der einzige Weg, den der Selbstbezugtype: types/type-spec.md
nimmt, prueft ausschliesslich, obtype/name/descriptionvorhanden sind.Beide fehlenden Felder ergaenzt (
root:als Enumkb/repo,capture_fields:als Liste wie
page_ref_fields:), dazuguidance:(seit der Aenderung oben real benutzt, aber noch nie im
Schema).docs verifybekommt eine neue Pruefung: jede Datei untertypes/mit
type: types/type-spec.mdvalidiert jetzt gegentypes/type-spec.schema.yaml
(check_type_spec_frontmatter(), wiederverwendetresolver.list_type_specs()statt eines zweiten
Parse-Durchlaufs).types/type-spec.md§ Validation Contract und die beidendocs verify-Zeilen
intools/CONTRACT.mdnennen das jetzt.Daneben ein zweiter, unabhaengiger Befund derselben Aufraeumrunde behoben:
instructions/dev/doc-pull-through.mdverwies fuerdocs/-Seiten weiter auf "AGENTS.md § File
naming lists all four" - der Zaehler in AGENTS.md selbst war beim vorigen Bump schon auf fuenf
(plus eine sechste, nur vonCLAUDE.mdaus verlinkte) korrigiert worden, diese eine verbliebene
Stelle nicht.Grenzuebertritt-Frage geprueft und verneint: additiv in beide Richtungen - eine bestehende Instanz
validiert bereits (0 Befunde gegen den realen Baum), und ein Type-Spec ohne die drei neuen Felder
bleibt unveraendert gueltig.--patch, kein--breaking, keine neue Migration noetig.Verifiziert:
tools/wikitool docs verify/instructions verifygruen, 1263 Tests gruen (2 neu:
alle Type-Specs dieses Repos validieren gegen ihr eigenes Schema; ein Type-Spec mit einem dem
Schema unbekannten Feld wird gemeldet, mit Dateiname und Feldname in der Meldung).search: Pfad und Titel vollstaendig, Trunkierung sichtbar
Gemeldet wurde eine Sitzung, die nach
wikitool searchzusaetzlichgrep -rlueberkb/
laufen liess. Der Grep war redundant -searchist einrg-Lauf ueberkb/und kann keine
Seite verfehlen, die ein Grep findet -, aber die Ausgabe gab ihr drei Gruende dafuer, und die
sind der eigentliche Befund.Die Tabelle nannte keinen Pfad, obwohl
wiki-queryverlangt, nur die Seiten zu lesen, auf
die die Suche zeigt. Sie kappte ausserdem den Titel auf 34 Zeichen - im gemeldeten
Transkript vier von fuenf Treffern -, und der Titel ist nach Invariante 2 der einzige
Identifier einer Seite und das Argument, dastouch,xref addundcite addnehmen. Die
Sitzung hatte also weder etwas zum Oeffnen noch etwas zum Weiterreichen;grep -rllieferte
genau beides.Drittens war
N result(s).die gekappte Zahl:run_searchgab nur die beschnittene Liste
zurueck, also konnte kein Adapter die Gesamtzahl melden, und20 result(s).auf einer Anfrage
mit 182 Treffern war von einem vollstaendigen Ergebnis nicht zu unterscheiden. Eine
Vollstaendigkeitsaussage, zu der die Ausgabe nicht berechtigt war - der staerkste denkbare
Anlass, ihr zu misstrauen.Die Zeile hat jetzt die Form
score | kind/subtype | titel | pfad | summary, ohne
Spaltenauffuellung. Titel und Pfad werden nie gekappt; die Summary ist das einzige verlustige
Feld und steht deshalb am Ende, wo ein|in Prosa beim Trennen mitmaxsplit=4folgenlos
bleibt (ein|im Titel schliesst die Wikilink-Syntax ohnehin aus). JSON als Default-Ausgabe
wurde erwogen und verworfen: ein Treffer ist flach, JSON kostet dafuer ein Vielfaches an Tokens,
undsearchexistiert dafuer, Retrieval billig zu machen - der Fehler war ein fehlendes Feld,
kein Parse-Problem. Wer Struktur braucht, hat--json,api.searchund MCP.run_searchgibt jetzt einSearchResultmit Treffern, Gesamtzahl und Limit zurueck. Die
Tabelle schreibt50 of 182 result(s) - raise --limit (0 for all) or narrow the query., das
JSON traegttotal/truncated/limitnebencount, dessen Bedeutung unveraendert bleibt
(len(results)), undapi.searchsowie der MCP-search-Tool tragen dieselben Felder. Das
Default-Limit steigt von 20 auf 50 und liegt als eine KonstanteDEFAULT_LIMITstatt als drei
Literale in drei Adaptern: gekappt wurden bisher vor allem die strukturellen Sweeps
(--field '!sources'), die alphabetisch und nicht nach Relevanz sortiert sind, wo die Kappung
also eine beliebige Scheibe der Antwort wegwirft statt ihres schwaechsten Endes. Sichtbar zu
sein ist es, was ein endliches Default ueberhaupt erst unbedenklich macht.AGENTS.md§ Routing traegt die Regel an genau einer Stelle -searchist erschoepfend, ein
eigener Grep ueberkb/fuegt nur die generierten Dateien hinzu, die Invariante 1 ohnehin
verbietet;tools/CONTRACT.mdtraegt daneben nur den Mechanismus.Grenzuebertritt-Frage geprueft und verneint: kein Flag entfernt oder umbenannt, keine
Umgebungsvariable, keine maschinengelesene Datei in ihrer Form veraendert, JSON rein additiv.
Die Tabelle liest ein Agent, kein Skript, und ihre Aenderung verlangt keiner Instanz Handarbeit
ab.Verifiziert:
docs verify/instructions verifygruen, 1272 Tests gruen (9 neu: Pfad vorhanden;
Titel und Pfad ungekappt bei langem Titel; eine Trefferzeile zerfaellt trotz|in der Prosa in
ihre fuenf Felder; ein gekapptes Ergebnis nennt die Gesamtzahl, ein ungekapptes behauptet
nichts;--limit 0gilt nie als gekappt; die Gesamtzahl ueberlebt das Limit inrun_search;
api.searchmeldet dasselbe; alle drei Adapter teilen ein Default-Limit - der MCP-Golden-Test
haelt die neuen Felder zwischen CLI und Server zusammen).
This note is a snapshot of the
CHANGES.mdentry as it stood when the tag was cut, and
is never edited afterwards. The maintained version of this text - including any later
correction - is the entry for this version inCHANGES.mdin the repository.Downloads