• v3.0.0 502971d147

    v3.0.0
    CI / verify (push) Successful in 53s
    Release / release (push) Successful in 38s
    Stable

    torben released this 2026-09-02 13:05:10 +00:00 | 91 commits to main since this release

    3.0.0 - 2026-09-02 - Autorenkonventionen nach Eigentum geschnitten: kb/CONVENTIONS.md, deklarierte Collections

    Author: Torben Nehmer

    Breaking Change: kb/CONTRACT.md ist um alles gekuerzt, was eine Instanz selbst entscheidet; das steht jetzt in einer neuen, instanzeigenen kb/CONVENTIONS.md, aus der der Compiler die drei toolgefuehrten Abschnittsnamen liest. Eine bestehende Instanz muss diese Datei anlegen, auf jedem kb/*/COLLECTION.md profile: und required_by_stack: deklarieren und kb/CONTRACT.md aus dem Release nachziehen - sonst FAILt doctor und docs verify bricht. Ablauf: instructions/migrations/3.0.0-authoring-conventions.md

    kb/CONTRACT.md war eine Datei mit zwei Autoritäten. Der eine Teil ist code-erzwungen und in
    jeder Instanz gleich; der andere - § Language komplett, das Beziehungslabel-Vokabular, die
    Tonfall-Beispiele samt deutscher Buzzword-Liste, die Confidence-Rubrik, das ADR-Präfix - ist
    Konvention, die jede Instanz für sich entscheidet, und wurde trotzdem als bindender Contract
    verbatim ausgeliefert. Wer bei Schritt 5 von setup-instance.md "Englisch" antwortete, hatte
    danach kb/CONTRACT.md, vier Type-Specs und tools/chemenu/sections.py lokal geändert -
    und private-instance.mds Decision Point sagt für so einen Merge-Konflikt: Upstream-Seite
    nehmen. Für diese Instanz hieß das: KB-Sprache zurück auf Deutsch.

    Der Schnitt läuft jetzt danach, wer den Satz ändern darf. kb/CONTRACT.md behält, was
    wikitool erzwingt; neu daneben liegt kb/CONVENTIONS.md, die genauso bindet und der
    Instanz gehört. Unterschied ist Eigentum, nicht Autorität - deshalb liefert die Distribution nur
    kb/CONVENTIONS.md.template, exakt der USER.md/SOUL.md-Split ein Verzeichnis tiefer. Dazu
    instructions/kb-profiles.md: der Katalog erprobter Profile, ausdrücklich Palette und kein
    Enum
    . Übernommen wird der Text in die Instanzdatei, nie ein Verweis auf den Katalog - ein
    Verweis wäre wieder genau die Konstruktion, die dieser Release beendet.

    sections.py hält keine Überschrift mehr. RELATIONSHIPS = "Beziehungen" war die Stelle,
    an der die Konvention in Code übergelaufen war: solange sie dort stand, konnte kein Template die
    Sprache umstellen. Neu ist tools/chemenu/conventions.py, das die drei Namen aus
    kb/CONVENTIONS.md liest; sections.py löst sie per PEP 562 bei jedem Zugriff auf, wie
    config seine Pfade - ein Modulkonstante hätte den Wert an den Baum gebunden, in dem der Prozess
    gestartet ist. Aus demselben Grund ist provenance.CITE_BLOCK_HEADING ein __getattr__ und
    render_cite_block(heading=None) löst innerhalb des Aufrufs auf. Der Alias-Mechanismus, den das
    Modul schon hatte, ist der Migrationspfad: erkannt wird die kanonische Form plus die
    deklarierten section_aliases: plus das, was dieser Stack vor der Konventionsdatei geschrieben
    hat. Ohne Datei antwortet dieser Fallback - richtig für jeden Korpus, der ihn erreichen kann,
    denn der wurde unter genau diesen Namen geschrieben; doctor ist die laute Hälfte davon.

    Die vier Page-Type-Specs schreiben ## {section.relationships} statt einer Überschrift.
    Neue Template-Variablen {section.relationships} / {section.see_also} / {section.footnotes},
    gefüllt aus der Instanzdeklaration. Damit ändert eine anderssprachige Instanz keine Datei unter
    tools/ oder types/
    mehr - was Schritt 5 von setup-instance.md von fünf Editierstellen
    über drei Schichten auf eine Entscheidung reduziert.

    COLLECTION.md bekommt Frontmatter. Bisher wurde eine Collection rein an der Dateipräsenz
    erkannt; die Deklaration brauchte einen Träger, sonst wäre der Ortsschnitt nur durch einen
    Prosaschnitt ersetzt worden. profile: nennt den übernommenen Katalogeintrag (Freitext - eine
    selbst angelegte Collection hat dort keinen), required_by_stack: sagt, ob wikitool die
    Collection namentlich auflöst. Das zweite ist nicht die Wahl der Instanz: docs verify
    prüft es beidseitig gegen kb_collections.STACK_REQUIRED_COLLECTIONS. Heute steht dort genau
    sources - sources coverage, die [^cite-id]-Auflösung und kb/provenance.md hängen an dem
    Namen, entities an keinem.

    Das zweite Leck der Merge-Prozedur ist zu. git checkout HEAD -- kb raw holte alles unter
    beiden Stages auf den Vor-Merge-Stand - auch kb/CONTRACT.md und raw/CONTRACT.md. Änderte der
    Upstream einen davon, warf die Prozedur das Update still weg, und die Kontrollzeile meldete dabei
    leer, bestätigte den Fehler also, statt ihn zu fangen. private-instance.md nimmt die
    Upstream-Seite jetzt für die drei Maschinerie-Pfade unter den Content-Stages zurück
    (kb/CONTRACT.md, kb/CONVENTIONS.md.template, raw/CONTRACT.md) und schließt sie aus der
    Kontrollzeile aus. Dieselbe Altlast in der Tarball-Richtung: INSTALL.md Schritt 3 fasste kb/
    gar nicht an und zog kb/CONTRACT.md damit nie nach - jetzt ausdrücklich benannt.

    Verworfen, gemessen: sources/ aus kb/ herausziehen. Der Graph ist einwurzelig
    (kb_scan.iter_kb_pages macht ein rglob über kb/, darauf sitzen Link-Graph, Orphan-Check,
    index rebuild und search), und Source-Seiten sind darin der dichteste Knotentyp. Ein Hoist
    machte jede Graph-Operation dauerhaft zweiwurzelig, um ein Verzeichnis umzubenennen. Vor allem
    aber kann der Ort Eigentum ohnehin nicht kodieren, sobald Collections offen sind: eine selbst
    angelegte liegt im selben kb/ wie die Defaults. Eigentum ist eine deklarierte Eigenschaft -
    daher das Frontmatter oben. Gitea #39 trägt die Ablehnung im Volltext.

    Warum das MAJOR ist. Die Rückwärtshälfte des Drop-in-Tests hält - 2.5.0 ignoriert beide neuen
    Deklarationen folgenlos. Die Vorwärtshälfte nicht: nach dem Kopieren der Maschinerie FAILt
    doctor auf der fehlenden kb/CONVENTIONS.md, docs verify bricht auf den undeklarierten
    Collections, und kb/CONTRACT.md muss aus dem Release nachgezogen werden. Ein Shim war die
    Alternative (doctor nur WARN, Pflichtfelder tolerant) und wurde verworfen: er hätte genau den
    Zustand normalisiert, in dem eine Instanz glaubt, sie habe entschieden, während in Wahrheit der
    Fallback antwortet - für eine englische Instanz hieße das ## Beziehungen in englischen Seiten.
    Die Handarbeit ist eine Datei und zwei Frontmatter-Zeilen je Collection; keine einzige kb/-Seite
    ändert sich, weshalb migrate done 3.0.0 --pages 0 ehrlich und kein Platzhalter ist.

    Downloads