Die dokumentierte adr-NNN--Konvention in kb/concepts/COLLECTION.md § "Decisions and ADRs" existierte nur auf Papier — keine Seite folgte dem Format. Stattdessen trugen sieben Seiten concept_type: decision in organischer Prosa ohne die vier vorgesehenen Felder: Delete Rather Than Anonymize, Dual Licensing by File Plan, Issue Label Scheme, KB Stack Versioning, Structural Enforcement over Documented Rule, Denylist over Allowlist, Diff-Reviewable Agent Edits.
Zusaetzlich lief confidence_decay() (tools/chemenu/commands/confidence_decay.py:120) bedingungslos ueber jede kb/-Seite, concept_type: decision eingeschlossen — ein Kategorienfehler: Zeitablauf macht eine Entscheidung nicht falscher. Was eine Entscheidung entwertet, ist Supersession.
Der eigentliche Treiber (2026-09-03)
dist export lieferte keine einzige kb/-Seite aus: find_leaks (tools/chemenu/commands/dist_cmd.py:455) verwarf alles unter kb//raw/, was nicht CONTRACT.md, ein .template oder log.md hiess. Eine frische Instanz bekam den Stack, aber keinen Grund fuer seine Form.
Das — nicht die Decay-Frage und nicht die tote ADR-Konvention — war die Luecke, die einen neuen Ort brauchte. Sie wird nicht dadurch geschlossen, dass sieben Seiten kb/ verlassen.
Entschieden (2026-09-03)
Zwei Kategorien werden getrennt, statt sieben Seiten zu verschieben:
gehoert nach
Herkunft
liefert aus
Beispiel
Warum der Stack so gebaut ist
docs/
stack-dev schreibt es, keine Quelle
ja, verbatim
"Warum Gates in Code stehen"
Was diese Instanz entschieden hat
kb/
Transkript in raw/, belegt
nein, zu Recht
"Issue Label Scheme, entschieden 2026-09-02"
Die sieben Seiten bleiben in kb/
Der frueher hier geplante Umzug nach decisions/ ist verworfen. Zwei geprueft Gruende:
Subtyp-Floor.instructions/dev/corpus-policy.md § Floors verlangt "Every declared subtype has ≥1 page" und nennt die Subtyp-Floors ausdruecklich als gating fuer eine laufende Aenderung. types/concept.md:35 deklariert decision als concept_type-Wert; die sieben sind alle Seiten dieses Subtyps. Ein Umzug bringt ihn auf exakt null.
89 Wikilinks aus kb/ zeigen auf die sieben, dazu tool-eigene Frontmatter-Arrays mit Taxonomie-Labels und Eintraege in der generierten kb/provenance.md. links.py kennt kein Ziel ausserhalb kb/, xref add loest nur gegen Seitentitel innerhalb kb/ auf, und lint_core.py:497 fuehrt broken_links als Fehlerklasse.
Der Decay-Skip ist permanent, nicht interim
Er ist nicht als Bruecke bis zu einer Migration gebaut, sondern als das, was er sachlich ist: eine kategorische Ausnahme. Die Begruendung im Docstring entsprechend — Zeitablauf falsifiziert keine Entscheidung, Supersession schon.
docs/ ist inert
Prosa ohne Frontmatter, ohne Typ, ohne Index, ohne Lint, ohne Decay, ohne Provenance. Kein Skill, kein automatischer Ladepfad — On-demand wie instructions/, aber ohne deren Bindungskraft.
Die eine Regel: docs/ enthaelt keinen normativen Satz. Was binden wuerde, gehoert in einen Contract. Damit ist es kein zweiter Ort fuer eine Regel (Invariante 8 bleibt heil).
Kein Rename: docs verify behaelt seinen Namen
Der frueher hier geplante Rename docs verify → parity verify ist verworfen. Verzeichnis und Verb kollidieren nur, wenn ein Befehl auf das Verzeichnis wirkt — und genau das tut keiner.
kb/concepts/COLLECTION.md § "Decisions and ADRs" → § "Decisions" ersetzt durch die real gelebte Form: Entscheidung = gewoehnliche Concept-Seite, organische Prosa, **Status:** optional (in der Praxis ungenutzt), Supersession per supersedes-Link, kein adr-NNN--Praefix. Der Umzugs-Verweis auf einen "neuen Ort" ist entfallen
kb/CONVENTIONS.md § Naming und instructions/kb-profiles.md (Profil german) korrigiert — beide dokumentierten noch die verworfene adr-NNN--Namensregel
_copy_tree(config.ROOT / "docs", "docs", frozenset()) in dist_cmd.build_plan(); Test test_plan_ships_docs_verbatim ergaenzt (tools/chemenu/tests/test_dist_cmd.py)
Routing-Zeile in AGENTS.md § Routing plus Zeile und erklaerender Absatz in § File naming, mit der Regel, dass docs/ keinen normativen Satz traegt
Klarstellungssatz in tools/CONTRACT.md: docs verify prueft Dokumentations-Paritaet, nicht das docs/-Verzeichnis; docs/ in der dist export-Zeile ergaenzt
Version-Bump MINOR (4.2.0 → 4.3.0) mit Changelog-Eintrag; Decay-Skip und COLLECTION-Sektion sind im selben Bump mitgefahren
docs verify, instructions verify und die volle pytest-Suite (869 tests) grün vor Publish; ueber den Mass-Update Gate (11 Dateien, Token vom Operator freigegeben) veroeffentlicht
Offene Kante, bewusst nicht geschlossen: das docs/-Verzeichnis selbst existiert im Arbeitsbaum noch nicht — git verfolgt keine leeren Verzeichnisse, und eine Datei eigens zum Anlegen des Verzeichnisses zu schreiben waere Inhalt vor seiner Zeit, wo #45 die eigentliche Befuellung macht. Der _copy_tree-Aufruf in dist_cmd.py ist bereits scharf (_copy_tree liefert bei fehlendem source_root still ein leeres Dict, siehe dist_cmd.py:213) und braucht keine Anpassung, sobald #45 das Verzeichnis mit Inhalt anlegt.
Bewusst akzeptierte offene Kanten
Die Grenze "Hintergrund vs. Regel" prueft nichts. Urteilssache — eine Maschine, die Prosa auf Normativitaet prueft, waere teurer als der Fehler.
Ueberschneidung zwischen einer docs/-Seite und einer kb/-Seite zum selben Thema ist zulaessig, solange die eine erklaert und die andere belegt.
Der Umfang von docs/ ist unbegrenzt, wenn niemand ihn deckelt. #45 deckelt ihn auf drei bis vier Startseiten.
Verworfen
decisions/ als eigenes Wurzelverzeichnis (Subtyp-Floor + 89 Links)
Umzug einzelner Seiten nach docs/ (Empfaenger hat die sources:-Transkripte nicht)
#45 (Befuellung, jetzt entsperrt), #39 (Ownership-Modell, gelandet — docs/ liefert verbatim aus, wie kb/CONTRACT.md), #27 (geschlossen mit Verweis hierhin), #36, #28 (Subtyp-Floor, der den Umzug ausschloss), #19 (Vorgeschichte, unveraendert).
Vorgeschichte
Urspruenglicher Befund und Interims-Vorschlag vom 2026-09-02. Ort- und Formatfrage in der Folgesitzung entschieden (Arbeitsname decisions/, organische Prosa). Am 2026-09-03 kam eine zweite Instanz desselben Routing-Musters dazu (docs/ + parity verify-Rename). Dieselbe Sitzung hat den Zuschnitt anschliessend korrigiert: die Implementierungspruefung fand den Subtyp-Floor aus #28, die 89 Wikilinks und den unterschaetzten Rename-Umfang, und stiess auf den eigentlichen Treiber — dist export liefert keinen Hintergrund aus. Eine Folgesitzung, ebenfalls am 2026-09-03, hat den Zuschnitt umgesetzt: Code, Docs und Tests wie oben, Version 4.3.0, veroeffentlicht als Commit 0b8ca74.
## Ausgangsbefund
Die dokumentierte `adr-NNN-`-Konvention in `kb/concepts/COLLECTION.md` § "Decisions and ADRs" existierte nur auf Papier — keine Seite folgte dem Format. Stattdessen trugen sieben Seiten `concept_type: decision` in organischer Prosa ohne die vier vorgesehenen Felder: *Delete Rather Than Anonymize*, *Dual Licensing by File Plan*, *Issue Label Scheme*, *KB Stack Versioning*, *Structural Enforcement over Documented Rule*, *Denylist over Allowlist*, *Diff-Reviewable Agent Edits*.
Zusaetzlich lief `confidence_decay()` (`tools/chemenu/commands/confidence_decay.py:120`) bedingungslos ueber jede `kb/`-Seite, `concept_type: decision` eingeschlossen — ein Kategorienfehler: Zeitablauf macht eine Entscheidung nicht falscher. Was eine Entscheidung entwertet, ist Supersession.
## Der eigentliche Treiber (2026-09-03)
`dist export` lieferte **keine einzige `kb/`-Seite** aus: `find_leaks` (`tools/chemenu/commands/dist_cmd.py:455`) verwarf alles unter `kb/`/`raw/`, was nicht `CONTRACT.md`, ein `.template` oder `log.md` hiess. Eine frische Instanz bekam den Stack, aber keinen Grund fuer seine Form.
Das — nicht die Decay-Frage und nicht die tote ADR-Konvention — war die Luecke, die einen neuen Ort brauchte. Sie wird nicht dadurch geschlossen, dass sieben Seiten `kb/` verlassen.
## Entschieden (2026-09-03)
Zwei Kategorien werden getrennt, statt sieben Seiten zu verschieben:
| | gehoert nach | Herkunft | liefert aus | Beispiel |
|---|---|---|---|---|
| Warum der Stack so gebaut ist | `docs/` | stack-dev schreibt es, keine Quelle | ja, verbatim | "Warum Gates in Code stehen" |
| Was *diese* Instanz entschieden hat | `kb/` | Transkript in `raw/`, belegt | nein, zu Recht | "Issue Label Scheme, entschieden 2026-09-02" |
### Die sieben Seiten bleiben in `kb/`
Der frueher hier geplante Umzug nach `decisions/` ist **verworfen**. Zwei geprueft Gruende:
1. **Subtyp-Floor.** `instructions/dev/corpus-policy.md` § Floors verlangt "Every declared subtype has ≥1 page" und nennt die Subtyp-Floors ausdruecklich als gating fuer eine laufende Aenderung. `types/concept.md:35` deklariert `decision` als `concept_type`-Wert; die sieben sind alle Seiten dieses Subtyps. Ein Umzug bringt ihn auf exakt null.
2. **89 Wikilinks aus `kb/`** zeigen auf die sieben, dazu tool-eigene Frontmatter-Arrays mit Taxonomie-Labels und Eintraege in der generierten `kb/provenance.md`. `links.py` kennt kein Ziel ausserhalb `kb/`, `xref add` loest nur gegen Seitentitel innerhalb `kb/` auf, und `lint_core.py:497` fuehrt `broken_links` als Fehlerklasse.
### Der Decay-Skip ist permanent, nicht interim
Er ist nicht als Bruecke bis zu einer Migration gebaut, sondern als das, was er sachlich ist: eine kategorische Ausnahme. Die Begruendung im Docstring entsprechend — Zeitablauf falsifiziert keine Entscheidung, Supersession schon.
### `docs/` ist inert
Prosa ohne Frontmatter, ohne Typ, ohne Index, ohne Lint, ohne Decay, ohne Provenance. Kein Skill, kein automatischer Ladepfad — On-demand wie `instructions/`, aber ohne deren Bindungskraft.
**Die eine Regel: `docs/` enthaelt keinen normativen Satz.** Was binden wuerde, gehoert in einen Contract. Damit ist es kein zweiter Ort fuer eine Regel (Invariante 8 bleibt heil).
### Kein Rename: `docs verify` behaelt seinen Namen
Der frueher hier geplante Rename `docs verify` → `parity verify` ist **verworfen**. Verzeichnis und Verb kollidieren nur, wenn ein Befehl auf das Verzeichnis wirkt — und genau das tut keiner.
## Umgesetzt (2026-09-03, 4.3.0, Commit `0b8ca74`)
- [x] `confidence_decay()` ueberspringt `concept_type: decision` strukturell; kategorische Begruendung im Docstring. Regressionstest `test_decay_skips_decision_pages` ergaenzt (`tools/chemenu/tests/test_confidence_decay.py`)
- [x] `kb/concepts/COLLECTION.md` § "Decisions and ADRs" → § "Decisions" ersetzt durch die real gelebte Form: Entscheidung = gewoehnliche Concept-Seite, organische Prosa, `**Status:**` optional (in der Praxis ungenutzt), Supersession per `supersedes`-Link, kein `adr-NNN-`-Praefix. Der Umzugs-Verweis auf einen "neuen Ort" ist entfallen
- [x] `kb/CONVENTIONS.md` § Naming und `instructions/kb-profiles.md` (Profil `german`) korrigiert — beide dokumentierten noch die verworfene `adr-NNN-`-Namensregel
- [x] `_copy_tree(config.ROOT / "docs", "docs", frozenset())` in `dist_cmd.build_plan()`; Test `test_plan_ships_docs_verbatim` ergaenzt (`tools/chemenu/tests/test_dist_cmd.py`)
- [x] Routing-Zeile in `AGENTS.md` § Routing plus Zeile und erklaerender Absatz in § File naming, mit der Regel, dass `docs/` keinen normativen Satz traegt
- [x] Klarstellungssatz in `tools/CONTRACT.md`: `docs verify` prueft Dokumentations-Paritaet, nicht das `docs/`-Verzeichnis; `docs/` in der `dist export`-Zeile ergaenzt
- [x] Version-Bump MINOR (4.2.0 → 4.3.0) mit Changelog-Eintrag; Decay-Skip und COLLECTION-Sektion sind im selben Bump mitgefahren
- [x] `docs verify`, `instructions verify` und die volle `pytest`-Suite (869 tests) grün vor Publish; ueber den Mass-Update Gate (11 Dateien, Token vom Operator freigegeben) veroeffentlicht
- [ ] `docs/` befuellen → **#45** (eigenes Issue, `status/blocked` auf dieses, jetzt entsperrt)
**Offene Kante, bewusst nicht geschlossen:** das `docs/`-Verzeichnis selbst existiert im Arbeitsbaum noch nicht — git verfolgt keine leeren Verzeichnisse, und eine Datei eigens zum Anlegen des Verzeichnisses zu schreiben waere Inhalt vor seiner Zeit, wo #45 die eigentliche Befuellung macht. Der `_copy_tree`-Aufruf in `dist_cmd.py` ist bereits scharf (`_copy_tree` liefert bei fehlendem `source_root` still ein leeres Dict, siehe `dist_cmd.py:213`) und braucht keine Anpassung, sobald #45 das Verzeichnis mit Inhalt anlegt.
## Bewusst akzeptierte offene Kanten
- Die Grenze "Hintergrund vs. Regel" prueft nichts. Urteilssache — eine Maschine, die Prosa auf Normativitaet prueft, waere teurer als der Fehler.
- Ueberschneidung zwischen einer `docs/`-Seite und einer `kb/`-Seite zum selben Thema ist zulaessig, solange die eine erklaert und die andere belegt.
- Der Umfang von `docs/` ist unbegrenzt, wenn niemand ihn deckelt. #45 deckelt ihn auf drei bis vier Startseiten.
## Verworfen
- `decisions/` als eigenes Wurzelverzeichnis (Subtyp-Floor + 89 Links)
- Umzug einzelner Seiten nach `docs/` (Empfaenger hat die `sources:`-Transkripte nicht)
- `docs verify` → `parity verify` (Kollision entfaellt, Blast Radius ~39 Dateien, Begruendung widerlegt)
## Verwandt
#45 (Befuellung, jetzt entsperrt), #39 (Ownership-Modell, gelandet — `docs/` liefert verbatim aus, wie `kb/CONTRACT.md`), #27 (geschlossen mit Verweis hierhin), #36, #28 (Subtyp-Floor, der den Umzug ausschloss), #19 (Vorgeschichte, unveraendert).
## Vorgeschichte
Urspruenglicher Befund und Interims-Vorschlag vom 2026-09-02. Ort- und Formatfrage in der Folgesitzung entschieden (Arbeitsname `decisions/`, organische Prosa). Am 2026-09-03 kam eine zweite Instanz desselben Routing-Musters dazu (`docs/` + `parity verify`-Rename). Dieselbe Sitzung hat den Zuschnitt anschliessend korrigiert: die Implementierungspruefung fand den Subtyp-Floor aus #28, die 89 Wikilinks und den unterschaetzten Rename-Umfang, und stiess auf den eigentlichen Treiber — `dist export` liefert keinen Hintergrund aus. Eine Folgesitzung, ebenfalls am 2026-09-03, hat den Zuschnitt umgesetzt: Code, Docs und Tests wie oben, Version 4.3.0, veroeffentlicht als Commit `0b8ca74`.
Changelog: Body umstrukturiert. Frage 1 (Ort) entschieden: außerhalb kb/, dauerhaft im Repo, Stack-Content, Arbeitsname decisions/. Frage 2 (Format) entschieden: organische Prosa statt adr-NNN-, weil das schon real gelebte Praxis ist. Interims-Fix bleibt als Brücke bis zur Migration. Neuer Punkt ergänzt: Auslieferung sollte dem .template-Muster aus #39 folgen, sobald #39 gelandet ist. Akzeptanzkriterien entsprechend ersetzt durch "Verbleibende Arbeit".
**Changelog:** Body umstrukturiert. Frage 1 (Ort) entschieden: außerhalb `kb/`, dauerhaft im Repo, Stack-Content, Arbeitsname `decisions/`. Frage 2 (Format) entschieden: organische Prosa statt `adr-NNN-`, weil das schon real gelebte Praxis ist. Interims-Fix bleibt als Brücke bis zur Migration. Neuer Punkt ergänzt: Auslieferung sollte dem `.template`-Muster aus #39 folgen, sobald #39 gelandet ist. Akzeptanzkriterien entsprechend ersetzt durch "Verbleibende Arbeit".
Update 2026-09-03:#39 (3.0.0) und #40 (4.0.0/4.1.0) sind gelandet. Der Punkt "Verhältnis zum Ownership-Modell aus #39 klären" in den Verbleibenden Arbeiten ist damit nicht mehr blockiert - das .template-Splitting-Muster (kb/CONTRACT.md verbatim vs. kb/CONVENTIONS.md/kb/*/COLLECTION.md als Instanz-Template) existiert jetzt real und kann direkt als Vorbild für die Auslieferung der Entscheidungsseiten übernommen werden, statt gegen eine sich noch bewegende Grundlage zu bauen. Nächster Schritt in der vereinbarten Reihenfolge: nach #28, vor #42.
**Update 2026-09-03:** #39 (3.0.0) und #40 (4.0.0/4.1.0) sind gelandet. Der Punkt "Verhältnis zum Ownership-Modell aus #39 klären" in den Verbleibenden Arbeiten ist damit nicht mehr blockiert - das `.template`-Splitting-Muster (`kb/CONTRACT.md` verbatim vs. `kb/CONVENTIONS.md`/`kb/*/COLLECTION.md` als Instanz-Template) existiert jetzt real und kann direkt als Vorbild für die Auslieferung der Entscheidungsseiten übernommen werden, statt gegen eine sich noch bewegende Grundlage zu bauen. Nächster Schritt in der vereinbarten Reihenfolge: nach #28, vor #42.
Changelog: Body ergänzt um eine zweite Instanz desselben Routing-Musters (docs/-Verzeichnis + docs verify → parity verify-Rename), die sich den offenen Punkt „Verzeichnisname und Routing-Eintrag in AGENTS.md“ mit decisions/ teilt. Details siehe Body § „Zweite Instanz desselben Musters (2026-09-03)“.
**Changelog:** Body ergänzt um eine zweite Instanz desselben Routing-Musters (`docs/`-Verzeichnis + `docs verify` → `parity verify`-Rename), die sich den offenen Punkt „Verzeichnisname und Routing-Eintrag in `AGENTS.md`“ mit `decisions/` teilt. Details siehe Body § „Zweite Instanz desselben Musters (2026-09-03)“.
torben
changed title from Kein dauerhafter Ort für Architekturentscheidungen: die adr-NNN--Konvention ist tot, confidence decay passt nicht auf Decision-Seiten to Stack-Hintergrund braucht einen ausgelieferten Ort: docs/ als inertes Verzeichnis, Decision-Seiten bleiben in kb/2026-09-03 15:46:16 +00:00
Changelog: Zuschnitt nach einer Implementierungspruefung korrigiert, Body und Titel neu geschrieben.
Verworfen: der Umzug der sieben Decision-Seiten nach decisions/ (verletzt den Subtyp-Floor aus #28 — concept_type: decision ginge auf null — und bricht 89 Wikilinks plus tool-eigene Frontmatter-Arrays, fuer die es kein Ziel ausserhalb kb/ gibt), und der Rename docs verify → parity verify (Kollision entfaellt, weil das Tooling docs/ nie anfasst; Blast Radius war ~39 Dateien statt der im Body genannten 3 Stellen, und die MINOR-Begruendung "kein externer Consumer" wird von .gitea/workflows/*.yml und INSTALL.md widerlegt).
Neu: der eigentliche Treiber ist benannt — dist export liefert null kb/-Seiten aus, eine frische Instanz bekommt keinen Hintergrund. docs/ schliesst das additiv, inert, mit der einen Regel "kein normativer Satz". Der Decay-Skip ist von Interims-Bruecke auf permanente kategorische Ausnahme umgestellt.
Abgespalten: #45 fuer das Befuellen von docs/, status/blocked auf dieses Issue.
**Changelog:** Zuschnitt nach einer Implementierungspruefung korrigiert, Body und Titel neu geschrieben.
Verworfen: der Umzug der sieben Decision-Seiten nach `decisions/` (verletzt den Subtyp-Floor aus #28 — `concept_type: decision` ginge auf null — und bricht 89 Wikilinks plus tool-eigene Frontmatter-Arrays, fuer die es kein Ziel ausserhalb `kb/` gibt), und der Rename `docs verify` → `parity verify` (Kollision entfaellt, weil das Tooling `docs/` nie anfasst; Blast Radius war ~39 Dateien statt der im Body genannten 3 Stellen, und die MINOR-Begruendung "kein externer Consumer" wird von `.gitea/workflows/*.yml` und `INSTALL.md` widerlegt).
Neu: der eigentliche Treiber ist benannt — `dist export` liefert null `kb/`-Seiten aus, eine frische Instanz bekommt keinen Hintergrund. `docs/` schliesst das additiv, inert, mit der einen Regel "kein normativer Satz". Der Decay-Skip ist von Interims-Bruecke auf permanente kategorische Ausnahme umgestellt.
Abgespalten: **#45** fuer das Befuellen von `docs/`, `status/blocked` auf dieses Issue.
Labels: `area/kb` → `area/distribution`, `size/M` → `size/S`.
Changelog: Umgesetzt und geschlossen. docs/-Export, Decay-Skip fuer concept_type: decision, COLLECTION.md- und CONVENTIONS.md-Korrektur, Routing-Eintraege in AGENTS.md/tools/CONTRACT.md, alles unter 4.3.0 (Commit 0b8ca74). docs/ selbst bleibt bis #45 unpopuliert - git verfolgt keine leeren Verzeichnisse, _copy_tree braucht keine weitere Aenderung dafuer.
**Changelog:** Umgesetzt und geschlossen. `docs/`-Export, Decay-Skip fuer `concept_type: decision`, COLLECTION.md- und CONVENTIONS.md-Korrektur, Routing-Eintraege in `AGENTS.md`/`tools/CONTRACT.md`, alles unter 4.3.0 (Commit `0b8ca74`). `docs/` selbst bleibt bis #45 unpopuliert - git verfolgt keine leeren Verzeichnisse, `_copy_tree` braucht keine weitere Aenderung dafuer.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ausgangsbefund
Die dokumentierte
adr-NNN--Konvention inkb/concepts/COLLECTION.md§ "Decisions and ADRs" existierte nur auf Papier — keine Seite folgte dem Format. Stattdessen trugen sieben Seitenconcept_type: decisionin organischer Prosa ohne die vier vorgesehenen Felder: Delete Rather Than Anonymize, Dual Licensing by File Plan, Issue Label Scheme, KB Stack Versioning, Structural Enforcement over Documented Rule, Denylist over Allowlist, Diff-Reviewable Agent Edits.Zusaetzlich lief
confidence_decay()(tools/chemenu/commands/confidence_decay.py:120) bedingungslos ueber jedekb/-Seite,concept_type: decisioneingeschlossen — ein Kategorienfehler: Zeitablauf macht eine Entscheidung nicht falscher. Was eine Entscheidung entwertet, ist Supersession.Der eigentliche Treiber (2026-09-03)
dist exportlieferte keine einzigekb/-Seite aus:find_leaks(tools/chemenu/commands/dist_cmd.py:455) verwarf alles unterkb//raw/, was nichtCONTRACT.md, ein.templateoderlog.mdhiess. Eine frische Instanz bekam den Stack, aber keinen Grund fuer seine Form.Das — nicht die Decay-Frage und nicht die tote ADR-Konvention — war die Luecke, die einen neuen Ort brauchte. Sie wird nicht dadurch geschlossen, dass sieben Seiten
kb/verlassen.Entschieden (2026-09-03)
Zwei Kategorien werden getrennt, statt sieben Seiten zu verschieben:
docs/kb/raw/, belegtDie sieben Seiten bleiben in
kb/Der frueher hier geplante Umzug nach
decisions/ist verworfen. Zwei geprueft Gruende:instructions/dev/corpus-policy.md§ Floors verlangt "Every declared subtype has ≥1 page" und nennt die Subtyp-Floors ausdruecklich als gating fuer eine laufende Aenderung.types/concept.md:35deklariertdecisionalsconcept_type-Wert; die sieben sind alle Seiten dieses Subtyps. Ein Umzug bringt ihn auf exakt null.kb/zeigen auf die sieben, dazu tool-eigene Frontmatter-Arrays mit Taxonomie-Labels und Eintraege in der generiertenkb/provenance.md.links.pykennt kein Ziel ausserhalbkb/,xref addloest nur gegen Seitentitel innerhalbkb/auf, undlint_core.py:497fuehrtbroken_linksals Fehlerklasse.Der Decay-Skip ist permanent, nicht interim
Er ist nicht als Bruecke bis zu einer Migration gebaut, sondern als das, was er sachlich ist: eine kategorische Ausnahme. Die Begruendung im Docstring entsprechend — Zeitablauf falsifiziert keine Entscheidung, Supersession schon.
docs/ist inertProsa ohne Frontmatter, ohne Typ, ohne Index, ohne Lint, ohne Decay, ohne Provenance. Kein Skill, kein automatischer Ladepfad — On-demand wie
instructions/, aber ohne deren Bindungskraft.Die eine Regel:
docs/enthaelt keinen normativen Satz. Was binden wuerde, gehoert in einen Contract. Damit ist es kein zweiter Ort fuer eine Regel (Invariante 8 bleibt heil).Kein Rename:
docs verifybehaelt seinen NamenDer frueher hier geplante Rename
docs verify→parity verifyist verworfen. Verzeichnis und Verb kollidieren nur, wenn ein Befehl auf das Verzeichnis wirkt — und genau das tut keiner.Umgesetzt (2026-09-03, 4.3.0, Commit
0b8ca74)confidence_decay()ueberspringtconcept_type: decisionstrukturell; kategorische Begruendung im Docstring. Regressionstesttest_decay_skips_decision_pagesergaenzt (tools/chemenu/tests/test_confidence_decay.py)kb/concepts/COLLECTION.md§ "Decisions and ADRs" → § "Decisions" ersetzt durch die real gelebte Form: Entscheidung = gewoehnliche Concept-Seite, organische Prosa,**Status:**optional (in der Praxis ungenutzt), Supersession persupersedes-Link, keinadr-NNN--Praefix. Der Umzugs-Verweis auf einen "neuen Ort" ist entfallenkb/CONVENTIONS.md§ Naming undinstructions/kb-profiles.md(Profilgerman) korrigiert — beide dokumentierten noch die verworfeneadr-NNN--Namensregel_copy_tree(config.ROOT / "docs", "docs", frozenset())indist_cmd.build_plan(); Testtest_plan_ships_docs_verbatimergaenzt (tools/chemenu/tests/test_dist_cmd.py)AGENTS.md§ Routing plus Zeile und erklaerender Absatz in § File naming, mit der Regel, dassdocs/keinen normativen Satz traegttools/CONTRACT.md:docs verifyprueft Dokumentations-Paritaet, nicht dasdocs/-Verzeichnis;docs/in derdist export-Zeile ergaenztdocs verify,instructions verifyund die vollepytest-Suite (869 tests) grün vor Publish; ueber den Mass-Update Gate (11 Dateien, Token vom Operator freigegeben) veroeffentlichtdocs/befuellen → #45 (eigenes Issue,status/blockedauf dieses, jetzt entsperrt)Offene Kante, bewusst nicht geschlossen: das
docs/-Verzeichnis selbst existiert im Arbeitsbaum noch nicht — git verfolgt keine leeren Verzeichnisse, und eine Datei eigens zum Anlegen des Verzeichnisses zu schreiben waere Inhalt vor seiner Zeit, wo #45 die eigentliche Befuellung macht. Der_copy_tree-Aufruf indist_cmd.pyist bereits scharf (_copy_treeliefert bei fehlendemsource_rootstill ein leeres Dict, siehedist_cmd.py:213) und braucht keine Anpassung, sobald #45 das Verzeichnis mit Inhalt anlegt.Bewusst akzeptierte offene Kanten
docs/-Seite und einerkb/-Seite zum selben Thema ist zulaessig, solange die eine erklaert und die andere belegt.docs/ist unbegrenzt, wenn niemand ihn deckelt. #45 deckelt ihn auf drei bis vier Startseiten.Verworfen
decisions/als eigenes Wurzelverzeichnis (Subtyp-Floor + 89 Links)docs/(Empfaenger hat diesources:-Transkripte nicht)docs verify→parity verify(Kollision entfaellt, Blast Radius ~39 Dateien, Begruendung widerlegt)Verwandt
#45 (Befuellung, jetzt entsperrt), #39 (Ownership-Modell, gelandet —
docs/liefert verbatim aus, wiekb/CONTRACT.md), #27 (geschlossen mit Verweis hierhin), #36, #28 (Subtyp-Floor, der den Umzug ausschloss), #19 (Vorgeschichte, unveraendert).Vorgeschichte
Urspruenglicher Befund und Interims-Vorschlag vom 2026-09-02. Ort- und Formatfrage in der Folgesitzung entschieden (Arbeitsname
decisions/, organische Prosa). Am 2026-09-03 kam eine zweite Instanz desselben Routing-Musters dazu (docs/+parity verify-Rename). Dieselbe Sitzung hat den Zuschnitt anschliessend korrigiert: die Implementierungspruefung fand den Subtyp-Floor aus #28, die 89 Wikilinks und den unterschaetzten Rename-Umfang, und stiess auf den eigentlichen Treiber —dist exportliefert keinen Hintergrund aus. Eine Folgesitzung, ebenfalls am 2026-09-03, hat den Zuschnitt umgesetzt: Code, Docs und Tests wie oben, Version 4.3.0, veroeffentlicht als Commit0b8ca74.Changelog: Body umstrukturiert. Frage 1 (Ort) entschieden: außerhalb
kb/, dauerhaft im Repo, Stack-Content, Arbeitsnamedecisions/. Frage 2 (Format) entschieden: organische Prosa stattadr-NNN-, weil das schon real gelebte Praxis ist. Interims-Fix bleibt als Brücke bis zur Migration. Neuer Punkt ergänzt: Auslieferung sollte dem.template-Muster aus #39 folgen, sobald #39 gelandet ist. Akzeptanzkriterien entsprechend ersetzt durch "Verbleibende Arbeit".torben referenced this issue2026-09-03 04:33:45 +00:00
Update 2026-09-03: #39 (3.0.0) und #40 (4.0.0/4.1.0) sind gelandet. Der Punkt "Verhältnis zum Ownership-Modell aus #39 klären" in den Verbleibenden Arbeiten ist damit nicht mehr blockiert - das
.template-Splitting-Muster (kb/CONTRACT.mdverbatim vs.kb/CONVENTIONS.md/kb/*/COLLECTION.mdals Instanz-Template) existiert jetzt real und kann direkt als Vorbild für die Auslieferung der Entscheidungsseiten übernommen werden, statt gegen eine sich noch bewegende Grundlage zu bauen. Nächster Schritt in der vereinbarten Reihenfolge: nach #28, vor #42.Changelog: Body ergänzt um eine zweite Instanz desselben Routing-Musters (
docs/-Verzeichnis +docs verify→parity verify-Rename), die sich den offenen Punkt „Verzeichnisname und Routing-Eintrag inAGENTS.md“ mitdecisions/teilt. Details siehe Body § „Zweite Instanz desselben Musters (2026-09-03)“.Kein dauerhafter Ort für Architekturentscheidungen: die adr-NNN--Konvention ist tot, confidence decay passt nicht auf Decision-Seitento Stack-Hintergrund braucht einen ausgelieferten Ort: docs/ als inertes Verzeichnis, Decision-Seiten bleiben in kb/Changelog: Zuschnitt nach einer Implementierungspruefung korrigiert, Body und Titel neu geschrieben.
Verworfen: der Umzug der sieben Decision-Seiten nach
decisions/(verletzt den Subtyp-Floor aus #28 —concept_type: decisionginge auf null — und bricht 89 Wikilinks plus tool-eigene Frontmatter-Arrays, fuer die es kein Ziel ausserhalbkb/gibt), und der Renamedocs verify→parity verify(Kollision entfaellt, weil das Toolingdocs/nie anfasst; Blast Radius war ~39 Dateien statt der im Body genannten 3 Stellen, und die MINOR-Begruendung "kein externer Consumer" wird von.gitea/workflows/*.ymlundINSTALL.mdwiderlegt).Neu: der eigentliche Treiber ist benannt —
dist exportliefert nullkb/-Seiten aus, eine frische Instanz bekommt keinen Hintergrund.docs/schliesst das additiv, inert, mit der einen Regel "kein normativer Satz". Der Decay-Skip ist von Interims-Bruecke auf permanente kategorische Ausnahme umgestellt.Abgespalten: #45 fuer das Befuellen von
docs/,status/blockedauf dieses Issue.Labels:
area/kb→area/distribution,size/M→size/S.Changelog: Umgesetzt und geschlossen.
docs/-Export, Decay-Skip fuerconcept_type: decision, COLLECTION.md- und CONVENTIONS.md-Korrektur, Routing-Eintraege inAGENTS.md/tools/CONTRACT.md, alles unter 4.3.0 (Commit0b8ca74).docs/selbst bleibt bis #45 unpopuliert - git verfolgt keine leeren Verzeichnisse,_copy_treebraucht keine weitere Aenderung dafuer.