Abgeschlossen 2026-10-03. Gebaut und veröffentlicht als d8cb494 (8.0.0-beta.31, --minor in den 8.0.0-Kandidaten), verifiziert durch die CI-Läufe 517 und 518, beide success; lokal davor pytest 2164 passed / 3 skipped (normal und auf leerer Maschine identisch), docs verify, instructions verify. Veröffentlicht nach Freigabe der Mass-Update Gate (25 Dateien).
Abschlussprüfung (stack-close): Drei Dokumente zählten das Seitenmaterial unter types/ noch als ## Template-Block und layout:-Titel allein auf — types/type-spec.md (§ Who owns a type-spec, Prosa und Sprachtabelle), types/type-guidance.md (§ Conventions), docs/language-boundaries.md —, dazu ein Kommentar in dist_cmd. Nachgezogen als dd565d2 (8.0.0-beta.32, --patch), verifiziert durch CI-Läufe 519 und 520, beide success. INSTALL.md gegen die geänderten setup-instance.md/upgrade-instance.md gelesen: beschreibt die Übernahme von Type-Specs nicht, keine Abweichung, kein Folge-Issue. Die Abschlussprüfung lief auf Opus mit reduziertem Effort.
Problem
Eine Type-Spec trug genau einen## Template-Block für alle Werte ihres subtype_field.
Wo ein Subtyp eine andere Seitenform braucht, scaffoldete tools/wikitool new die falsche, und
Autoren bauten die Seite danach von Hand um. Der Korpus belegte das an zwei Typen:
entity_type: person — die gemeinsame Vorlage in types/entity.md listet unter ## KerndatenVersion, Sprache/Technik und Repository, für eine Person (oder
Organisation, die laut types/entity.guidance.md ebenfalls person ist) sinnlos. kb/entities/people/Vannevar Bush.md füllt ## Kerndaten deshalb mit
Geboren/Gestorben/Nationalität, Andrej Karpathy.md ersetzt es durch ## Kernbeiträge.
concept_type: decision — 2 der 7 Seiten unter kb/concepts/decisions/ haben die
Basisvorlage aus types/concept.md (Kernpunkte / Wann zu verwenden / Wann NICHT) von Hand
durch die ADR-Form Kontext / Entscheidung / Konsequenzen / Status ersetzt.
Vor diesem Paket gab es keinen Mechanismus dafür: TypeResolver.extract_template nahm den
ersten ```markdown-Block im Body der Type-Spec, einziger Aufrufer war tools/chemenu/commands/new_page.py. Bestehende Seiten wurden durch dieses Paket nicht umgebaut.
Herkunft: Das Issue entstand 2026-09-18 für den damaligen Subtyp entity_type: project.
Dieser Anlass war erledigt — #122 hat den Wert in codebase umbenannt, #123 hat dem Vorhaben
einen eigenen Typ types/project.md mit eigener Vorlage gegeben (#119 D17).
Nebenbefund, gleiche Dateien:types/entity.md (description:) und types/entity.guidance.md sprachen noch von „projects" bzw. „a software project" — veraltet
seit #122. In diesem Paket auf „codebases"/„a codebase" korrigiert.
Entscheidungen
E1 — Weiterführen. Betreiber 2026-10-03. Die Mechanik ist allgemein, der Bedarf an zwei
Typen belegt.
E2 — Mechanismus: eine flache Datei je Subtyp-Vorlage, types/<typ>.<subtyp-wert>.md.
Betreiber 2026-10-03 („getrennte Template-Files je Ausprägung … übersichtlicher, leichter zu
handhaben, das File muss nicht zerpflückt werden"; flach statt Unterverzeichnis: „Mache entity.person.md").
Die Datei ist das Scaffold: reines Markdown, kein Frontmatter, kein Fence. Ihr Name ist
die einzige Deklaration — keine zweite Stelle nennt denselben Subtyp.
Die Basisvorlage bleibt der ## Template-Block in der Type-Spec. Damit scaffoldet jede
bereits adoptierte Type-Spec jeder Instanz unverändert.
Fortsetzung des Schnitts, den types/<name>.guidance.md schon gemacht hat
(docs/ownership-and-templates.md § „Where the file boundary used to strain"): eine Datei je
Publikum. Eine Subtyp-Vorlage ist reines Seitenmaterial in der KB-Sprache.
Verworfen:layout.<subtyp>.template: mit Vorlagentext als YAML-Blockstring
(Seitentext im Frontmatter, Quoting-Fallen, zwei Formen für dieselbe Sache); derselbe Schlüssel
als Zeiger auf einen Body-Abschnitt (wiederholt die Überschrift, zwei Stellen laufen
auseinander); Body-Abschnitte ## Template: <wert> (zerpflückt die Type-Spec, mischt weiter
zwei Publika in einer Datei); types/<typ>/<wert>.md im Unterverzeichnis (Betreiber: flach).
Eigener Typ je Subtyp war nie eine Option für person (#119 D20).
E3 — Umfang: Mechanik + zwei Beispielvorlagen + eine Interview-Instruction. Betreiber
2026-10-03 („1–2 Beispiele mitliefern und eine manual: true-Instruction mit einem Interview,
das nach nötigen Subvorlagen schaut und beim Anlegen hilft").
E4 — Kein Migrationsdokument. Keine Seite ändert sich, jede adoptierte Type-Spec
funktioniert unverändert. Eine bestehende Instanz bekommt die Beispiele über den normalen Weg: dist upgrade legt types/entity.person.md.template neben sie, dist adopt übernimmt es. Ein obligation: offered-Dokument wie 6.0.0-type-guidance-split.md ist nicht nötig, weil keine
adoptierte Datei geändert werden muss — die neue Vorlage ist eine eigene Datei.
Umsetzungsentscheidungen (stack-build)
Im Bau getroffen, innerhalb von E2; keine davon öffnete das Design neu.
U1 — Eine Namensregel für alle Aufrufer.type_resolver.split_subtype_template_name(name)
entscheidet allein nach der Form <stem>.<wert>.md (Wert ≠ guidance, ein Segment ohne Punkt),
ob eine Datei eine Subtyp-Vorlage ist. toc, dist_cmd._owned_type_stem und docs verify
fragen alle diese Funktion — eine fehlerhafte Vorlage wird also überall gleich eingeordnet, und docs verify meldet sie.
U2 — Dritte Prüfung in docs verify: eine Subtyp-Vorlage mit Frontmatter ist ein Fehler.
Folgt aus E2 („kein Frontmatter"): new liest die Datei als Klartext, ein Frontmatter-Block
landete als Text in jeder Seite.
U3 — new validiert das Frontmatter, bevor es die Vorlage wählt. Der Subtypwert benennt
eine Datei unter types/, also hat er das Schema-Enum passiert, bevor er so benutzt wird.
Zusätzlich lehnt TypeResolver.subtype_template_path jeden Wert ab, der kein Dateinamen-Segment
sein kann.
U4 — types describe zeigt Subtyp-Vorlagen nicht. Nicht verlangt und nicht gebaut; types/type-spec.md § Anatomy sagt, dass nur new sie liest. Wird es gebraucht, ist das ein
eigenes Issue.
U5 — README.md mitgezogen (Baum unter types/, Zeile „Templates" unter IT-Specific
Features), zusätzlich zur Doku-Liste unten.
Spezifikation (umgesetzt)
Auflösung
Eine Datei unter types/ ist eine Subtyp-Vorlage, wenn ihr Name <stem>.<rest>.md ist
und <rest> nicht guidance ist (U1). Ob types/<stem>.md eine Type-Spec mit subtype_field ist, prüft docs verify. <stem> endet am ersten Punkt (Typnamen erfüllen ^[a-z][a-z0-9-]*$, enthalten also nie einen).
new nimmt types/<stem>.<wert>.md, wobei <wert> der Wert des subtype_field im gebauten
Frontmatter ist, wenn die Datei existiert; sonst den ## Template-Block wie bisher (gleiche
Extraktionsregel, unverändert). Umgesetzt als TypeResolver.page_template(spec, wert).
Ganze Ersetzung, kein Mischen. Die Subtyp-Vorlage ersetzt die Basis vollständig. Dieselben
Template-Variablen und Filter (types/type-spec.md § Template variables).
guidance ist reserviert.types/<stem>.guidance.md ist immer die Guidance-Datei; der
Subtypwert guidance kann keine Datei-Vorlage haben. types/type-spec.md sagt das.
Eine Subtyp-Vorlage hat kein Frontmatter und wird deshalb von TypeResolver.list_type_specs() nicht als Type-Spec gezählt.
Prüfung (docs verify, check_subtype_templates)
Fehler, mit Datei und Wert im Text:
types/<stem>.<rest>.md, <rest> ≠ guidance, und types/<stem>.md ist keine Type-Spec oder hat kein subtype_field (verwaiste Vorlage).
<rest> ist kein Wert, den das Schema für das subtype_field zulässt (Tippfehler → tote
Vorlage). Ohne Enum keine Prüfung.
Die Datei trägt Frontmatter (U2).
TOC
Subtyp-Vorlagen sind vom TOC-Scope (toc.target_files) ausgenommen, unabhängig von ihrer Länge.
Invariante: keine Datei, die new als Scaffold liest, enthält je einen wikitool:toc-Marker.
Eigentum und Auslieferung
Subtyp-Vorlagen sind Seitenmaterial einer root: kb-Type-Spec, gehören also der Instanz und
werden wie ihre Type-Spec nur als .template ausgeliefert.
Stelle
Änderung
dist_cmd._owned_type_stem
erkennt <stem>.<rest>.md (≠ .guidance.md) als zum Typ <stem> gehörig
dist_cmd._plan_types
benennt sie damit in types/<stem>.<rest>.md.template um
dist_cmd.find_leaks
meldet eine solche Datei ohne .template im Export als Leck
dist_cmd.adoptable_templates
schon abgedeckt (types/*.template, flach) — im Test bestätigt
instructions/upgrade-instance.md Schritt 5
nennt die neue Form: übernehmen mit dist adopt oder liegen lassen; beides gültig
Invariante für die Auslieferung: kein Export enthält eine Subtyp-Vorlage unter ihrem
unsuffixierten Namen, und kein dist upgrade schreibt je auf eine adoptierte Subtyp-Vorlage
(dist upgrade schreibt nur, was der neue Stamp listet; Test über _write_candidates).
Beispielvorlagen (deutsch, Seitenmaterial)
types/entity.person.md: Titel · **Typ:** · Beschreibung · Kerndaten (Rolle, Zugehörigkeit,
Wirkungszeitraum — je „falls zutreffend") · Beiträge · Historie.
manual: true — von keinem Skill und nicht aus AGENTS.md verlinkt; erwähnt aus instructions/evolve-subtypes.md (neuer Schritt 5), instructions/setup-instance.md
(Schritt 4.1, als spätere Frage), instructions/upgrade-instance.md (Schritt 5) und types/type-spec.md. Englisch. Ablauf: Typen/Werte auflisten → Seiten je Wert gegen ihre
Vorlage halten → ≥3-Seiten-Schwelle → ausgeliefertes .template als Ausgangspunkt anbieten →
je Kandidat dem Nutzer vorlegen → schreiben bzw. dist adopt, dann docs verify → bestehende
Seiten nicht umbauen.
Akzeptanzkriterien
Alle erfüllt mit d8cb494, verifiziert durch CI-Läufe 517 und 518; die Doku-Nachträge der
Abschlussprüfung mit dd565d2, CI-Läufe 519 und 520.
tools/wikitool new entity --name X --set entity_type=person erzeugt eine Seite ohne Version, Sprache/Technik und Repository, deren Body types/entity.person.md
entspricht (Variablen ersetzt). — test_new_person_scaffolds_the_person_template
tools/wikitool new concept --name X --set concept_type=decision erzeugt eine Seite, deren
Body types/concept.decision.md entspricht. — test_new_decision_scaffolds_the_decision_template
Jeder Subtyp ohne eigene Vorlagendatei, und jeder Typ ohne subtype_field, erzeugt
byte-identisches Scaffold wie vor der Änderung — geprüft für alle Typen unter types/.
— test_every_shipped_type_scaffolds_its_base_template_where_no_subtype_file_exists
TypeResolver.list_type_specs() liefert dieselbe Menge wie vor der Änderung.
— test_list_type_specs_counts_no_subtype_template
docs verify schlägt fehl für eine verwaiste Subtyp-Vorlage und für eine mit einem Wert
außerhalb des Enums; der Fehlertext nennt Datei und Wert. types/<stem>.guidance.md löst
keinen der beiden aus. — test_docs_verify.py (4 Tests)
Eine Subtyp-Vorlage über 100 Zeilen bekommt keine TOC-Region, und docs verify verlangt
keine. — test_target_files_leaves_out_subtype_templates
dist export-Plan: types/entity.person.md.template und types/concept.decision.md.template sind enthalten, die unsuffixierten Namen nicht; find_leaks meldet eine untergeschobene unsuffixierte Subtyp-Vorlage.
— test_this_repos_export_plan_carries_both_example_subtype_templates, test_subtype_template_ships_only_as_template_and_upgrade_never_writes_it, test_find_leaks_catches_one_instance_own_data[types/entity.person.md]
dist adopt ohne Pfad bietet die .template an und übernimmt sie byte-identisch.
— test_adopt_without_a_path_copies_every_collection_and_type_template
pytest deckt alle obigen Fälle ab.
instructions/subtype-templates.md existiert mit manual: true, ist von keinem Skill und
nicht aus AGENTS.md verlinkt, wird aus evolve-subtypes.md und setup-instance.md
erwähnt und nennt die ≥3-Seiten-Schwelle; instructions verify grün.
types/entity.md und types/entity.guidance.md sprechen nicht mehr von „projects".
Doku nachgezogen: AGENTS.md § File naming (Zeile types/<name>.<subtype>.md), types/type-spec.md (§ Anatomy, § Template variables, § Who owns a type-spec samt
Sprachtabelle), types/type-guidance.md, instructions/upgrade-instance.md Schritt 5, docs/ownership-and-templates.md § „The consequence in practice", docs/language-boundaries.md, cli_contract-Datensätze von new, docs verify, docs toc, dist export, dist adopt (und damit tools/CONTRACT.md), README.md (U5).
tools/wikitool docs verify und tools/wikitool instructions verify grün.
Versionsteil
Gelandet im offenen Kandidaten 8.0.0: --minor → 8.0.0-beta.31 (max-wins hielt den
Kandidaten bei 8.0.0; kein zweites --breaking), Abschluss-Nachtrag --patch → 8.0.0-beta.32. Kein Migrationsdokument (E4). Damit vor dem Release von 8.0.0 gelandet, wie
vorausgesetzt.
Für sich genommen gegen instructions/dev/version-parts.md:
Vorwärts: neue Maschinerie über eine Instanz kopiert → keine Subtyp-Vorlagendatei vorhanden
(sie kommen nur als .template), jede Type-Spec scaffoldet byte-identisch. Kein Handgriff.
Rückwärts: eine Instanz, die types/entity.person.md adoptiert hat, setzt die alte Maschine
zurück → alte new ignoriert die Datei (Basisvorlage). Ob ein alter docs verify die Datei
ablehnt, wurde nicht geprüft — innerhalb des 8.0.0-Kandidaten ohne Folge, weil keine Instanz
eine Vorversion dieses Kandidaten erhält.
Sprache
Subtyp-Vorlagen sind Seitenmaterial, also in der KB-Sprache (kb/CONVENTIONS.mdlanguage:,
hier deutsch); Dateinamen und Subtypwerte sind Identifier. Die neue Instruction und alle
Ergänzungen an Contracts, AGENTS.md und docs/ sind Control Plane, also englisch.
Keine. #119 ist abgeschlossen; #118 (Beteiligungs-Label) ist unabhängig.
## Stand
**Abgeschlossen 2026-10-03.** Gebaut und veröffentlicht als `d8cb494` (`8.0.0-beta.31`, `--minor` in den 8.0.0-Kandidaten), verifiziert durch die CI-Läufe [517](https://gitea.nehmer.net/torben/chemenu/actions/runs/517) und [518](https://gitea.nehmer.net/torben/chemenu/actions/runs/518), beide `success`; lokal davor `pytest` 2164 passed / 3 skipped (normal und auf leerer Maschine identisch), `docs verify`, `instructions verify`. Veröffentlicht nach Freigabe der Mass-Update Gate (25 Dateien).
**Abschlussprüfung (stack-close):** Drei Dokumente zählten das Seitenmaterial unter `types/` noch als `## Template`-Block und `layout:`-Titel allein auf — `types/type-spec.md` (§ Who owns a type-spec, Prosa und Sprachtabelle), `types/type-guidance.md` (§ Conventions), `docs/language-boundaries.md` —, dazu ein Kommentar in `dist_cmd`. Nachgezogen als `dd565d2` (`8.0.0-beta.32`, `--patch`), verifiziert durch CI-Läufe [519](https://gitea.nehmer.net/torben/chemenu/actions/runs/519) und [520](https://gitea.nehmer.net/torben/chemenu/actions/runs/520), beide `success`. `INSTALL.md` gegen die geänderten `setup-instance.md`/`upgrade-instance.md` gelesen: beschreibt die Übernahme von Type-Specs nicht, keine Abweichung, kein Folge-Issue. Die Abschlussprüfung lief auf Opus mit reduziertem Effort.
## Problem
Eine Type-Spec trug genau **einen** `## Template`-Block für alle Werte ihres `subtype_field`.
Wo ein Subtyp eine andere Seitenform braucht, scaffoldete `tools/wikitool new` die falsche, und
Autoren bauten die Seite danach von Hand um. Der Korpus belegte das an zwei Typen:
- **`entity_type: person`** — die gemeinsame Vorlage in `types/entity.md` listet unter
`## Kerndaten` `Version`, `Sprache/Technik` und `Repository`, für eine Person (oder
Organisation, die laut `types/entity.guidance.md` ebenfalls `person` ist) sinnlos.
`kb/entities/people/Vannevar Bush.md` füllt `## Kerndaten` deshalb mit
Geboren/Gestorben/Nationalität, `Andrej Karpathy.md` ersetzt es durch `## Kernbeiträge`.
- **`concept_type: decision`** — 2 der 7 Seiten unter `kb/concepts/decisions/` haben die
Basisvorlage aus `types/concept.md` (Kernpunkte / Wann zu verwenden / Wann NICHT) von Hand
durch die ADR-Form Kontext / Entscheidung / Konsequenzen / Status ersetzt.
Vor diesem Paket gab es keinen Mechanismus dafür: `TypeResolver.extract_template` nahm den
ersten ```` ```markdown ````-Block im Body der Type-Spec, einziger Aufrufer war
`tools/chemenu/commands/new_page.py`. Bestehende Seiten wurden durch dieses Paket nicht umgebaut.
**Herkunft:** Das Issue entstand 2026-09-18 für den damaligen Subtyp `entity_type: project`.
Dieser Anlass war erledigt — #122 hat den Wert in `codebase` umbenannt, #123 hat dem Vorhaben
einen eigenen Typ `types/project.md` mit eigener Vorlage gegeben (#119 D17).
**Nebenbefund, gleiche Dateien:** `types/entity.md` (`description:`) und
`types/entity.guidance.md` sprachen noch von „projects" bzw. „a software project" — veraltet
seit #122. In diesem Paket auf „codebases"/„a codebase" korrigiert.
## Entscheidungen
**E1 — Weiterführen.** Betreiber 2026-10-03. Die Mechanik ist allgemein, der Bedarf an zwei
Typen belegt.
**E2 — Mechanismus: eine flache Datei je Subtyp-Vorlage, `types/<typ>.<subtyp-wert>.md`.**
Betreiber 2026-10-03 („getrennte Template-Files je Ausprägung … übersichtlicher, leichter zu
handhaben, das File muss nicht zerpflückt werden"; flach statt Unterverzeichnis: „Mache
`entity.person.md`").
- Die Datei **ist** das Scaffold: reines Markdown, kein Frontmatter, kein Fence. Ihr Name ist
die einzige Deklaration — keine zweite Stelle nennt denselben Subtyp.
- Die Basisvorlage bleibt der `## Template`-Block in der Type-Spec. Damit scaffoldet jede
bereits adoptierte Type-Spec jeder Instanz unverändert.
- Fortsetzung des Schnitts, den `types/<name>.guidance.md` schon gemacht hat
(`docs/ownership-and-templates.md` § „Where the file boundary used to strain"): eine Datei je
Publikum. Eine Subtyp-Vorlage ist reines Seitenmaterial in der KB-Sprache.
- **Verworfen:** `layout.<subtyp>.template:` mit Vorlagentext als YAML-Blockstring
(Seitentext im Frontmatter, Quoting-Fallen, zwei Formen für dieselbe Sache); derselbe Schlüssel
als Zeiger auf einen Body-Abschnitt (wiederholt die Überschrift, zwei Stellen laufen
auseinander); Body-Abschnitte `## Template: <wert>` (zerpflückt die Type-Spec, mischt weiter
zwei Publika in einer Datei); `types/<typ>/<wert>.md` im Unterverzeichnis (Betreiber: flach).
Eigener Typ je Subtyp war nie eine Option für `person` (#119 D20).
**E3 — Umfang: Mechanik + zwei Beispielvorlagen + eine Interview-Instruction.** Betreiber
2026-10-03 („1–2 Beispiele mitliefern und eine `manual: true`-Instruction mit einem Interview,
das nach nötigen Subvorlagen schaut und beim Anlegen hilft").
**E4 — Kein Migrationsdokument.** Keine Seite ändert sich, jede adoptierte Type-Spec
funktioniert unverändert. Eine bestehende Instanz bekommt die Beispiele über den normalen Weg:
`dist upgrade` legt `types/entity.person.md.template` neben sie, `dist adopt` übernimmt es. Ein
`obligation: offered`-Dokument wie `6.0.0-type-guidance-split.md` ist nicht nötig, weil keine
adoptierte Datei geändert werden muss — die neue Vorlage ist eine eigene Datei.
## Umsetzungsentscheidungen (stack-build)
Im Bau getroffen, innerhalb von E2; keine davon öffnete das Design neu.
- **U1 — Eine Namensregel für alle Aufrufer.** `type_resolver.split_subtype_template_name(name)`
entscheidet allein nach der Form `<stem>.<wert>.md` (Wert ≠ `guidance`, ein Segment ohne Punkt),
ob eine Datei eine Subtyp-Vorlage ist. `toc`, `dist_cmd._owned_type_stem` und `docs verify`
fragen alle diese Funktion — eine fehlerhafte Vorlage wird also überall gleich eingeordnet, und
`docs verify` meldet sie.
- **U2 — Dritte Prüfung in `docs verify`: eine Subtyp-Vorlage mit Frontmatter ist ein Fehler.**
Folgt aus E2 („kein Frontmatter"): `new` liest die Datei als Klartext, ein Frontmatter-Block
landete als Text in jeder Seite.
- **U3 — `new` validiert das Frontmatter, bevor es die Vorlage wählt.** Der Subtypwert benennt
eine Datei unter `types/`, also hat er das Schema-Enum passiert, bevor er so benutzt wird.
Zusätzlich lehnt `TypeResolver.subtype_template_path` jeden Wert ab, der kein Dateinamen-Segment
sein kann.
- **U4 — `types describe` zeigt Subtyp-Vorlagen nicht.** Nicht verlangt und nicht gebaut;
`types/type-spec.md` § Anatomy sagt, dass nur `new` sie liest. Wird es gebraucht, ist das ein
eigenes Issue.
- **U5 — `README.md` mitgezogen** (Baum unter `types/`, Zeile „Templates" unter IT-Specific
Features), zusätzlich zur Doku-Liste unten.
## Spezifikation (umgesetzt)
### Auflösung
- Eine Datei unter `types/` ist eine **Subtyp-Vorlage**, wenn ihr Name `<stem>.<rest>.md` ist
und `<rest>` nicht `guidance` ist (U1). Ob `types/<stem>.md` eine Type-Spec mit
`subtype_field` ist, prüft `docs verify`. `<stem>` endet am ersten Punkt (Typnamen erfüllen
`^[a-z][a-z0-9-]*$`, enthalten also nie einen).
- `new` nimmt `types/<stem>.<wert>.md`, wobei `<wert>` der Wert des `subtype_field` im gebauten
Frontmatter ist, wenn die Datei existiert; sonst den `## Template`-Block wie bisher (gleiche
Extraktionsregel, unverändert). Umgesetzt als `TypeResolver.page_template(spec, wert)`.
- **Ganze Ersetzung, kein Mischen.** Die Subtyp-Vorlage ersetzt die Basis vollständig. Dieselben
Template-Variablen und Filter (`types/type-spec.md` § Template variables).
- **`guidance` ist reserviert.** `types/<stem>.guidance.md` ist immer die Guidance-Datei; der
Subtypwert `guidance` kann keine Datei-Vorlage haben. `types/type-spec.md` sagt das.
- Eine Subtyp-Vorlage hat kein Frontmatter und wird deshalb von
`TypeResolver.list_type_specs()` nicht als Type-Spec gezählt.
### Prüfung (`docs verify`, `check_subtype_templates`)
Fehler, mit Datei und Wert im Text:
- `types/<stem>.<rest>.md`, `<rest>` ≠ `guidance`, und `types/<stem>.md` ist keine Type-Spec
**oder** hat kein `subtype_field` (verwaiste Vorlage).
- `<rest>` ist kein Wert, den das Schema für das `subtype_field` zulässt (Tippfehler → tote
Vorlage). Ohne Enum keine Prüfung.
- Die Datei trägt Frontmatter (U2).
### TOC
Subtyp-Vorlagen sind vom TOC-Scope (`toc.target_files`) ausgenommen, unabhängig von ihrer Länge.
Invariante: keine Datei, die `new` als Scaffold liest, enthält je einen `wikitool:toc`-Marker.
### Eigentum und Auslieferung
Subtyp-Vorlagen sind Seitenmaterial einer `root: kb`-Type-Spec, gehören also der Instanz und
werden wie ihre Type-Spec nur als `.template` ausgeliefert.
| Stelle | Änderung |
|---|---|
| `dist_cmd._owned_type_stem` | erkennt `<stem>.<rest>.md` (≠ `.guidance.md`) als zum Typ `<stem>` gehörig |
| `dist_cmd._plan_types` | benennt sie damit in `types/<stem>.<rest>.md.template` um |
| `dist_cmd.find_leaks` | meldet eine solche Datei ohne `.template` im Export als Leck |
| `dist_cmd.adoptable_templates` | schon abgedeckt (`types/*.template`, flach) — im Test bestätigt |
| `instructions/upgrade-instance.md` Schritt 5 | nennt die neue Form: übernehmen mit `dist adopt` oder liegen lassen; beides gültig |
Invariante für die Auslieferung: **kein Export enthält eine Subtyp-Vorlage unter ihrem
unsuffixierten Namen, und kein `dist upgrade` schreibt je auf eine adoptierte Subtyp-Vorlage**
(`dist upgrade` schreibt nur, was der neue Stamp listet; Test über `_write_candidates`).
### Beispielvorlagen (deutsch, Seitenmaterial)
- `types/entity.person.md`: Titel · `**Typ:**` · Beschreibung · Kerndaten (Rolle, Zugehörigkeit,
Wirkungszeitraum — je „falls zutreffend") · Beiträge · Historie.
- `types/concept.decision.md`: Titel · `**Typ:**` · Definition · Kontext · Entscheidung ·
Alternativen · Konsequenzen · Status.
- Beide tragen keine tool-eigene Region.
### Interview-Instruction `instructions/subtype-templates.md`
`manual: true` — von keinem Skill und nicht aus `AGENTS.md` verlinkt; erwähnt aus
`instructions/evolve-subtypes.md` (neuer Schritt 5), `instructions/setup-instance.md`
(Schritt 4.1, als spätere Frage), `instructions/upgrade-instance.md` (Schritt 5) und
`types/type-spec.md`. Englisch. Ablauf: Typen/Werte auflisten → Seiten je Wert gegen ihre
Vorlage halten → ≥3-Seiten-Schwelle → ausgeliefertes `.template` als Ausgangspunkt anbieten →
je Kandidat dem Nutzer vorlegen → schreiben bzw. `dist adopt`, dann `docs verify` → bestehende
Seiten nicht umbauen.
## Akzeptanzkriterien
Alle erfüllt mit `d8cb494`, verifiziert durch CI-Läufe 517 und 518; die Doku-Nachträge der
Abschlussprüfung mit `dd565d2`, CI-Läufe 519 und 520.
- [x] `tools/wikitool new entity --name X --set entity_type=person` erzeugt eine Seite ohne
`Version`, `Sprache/Technik` und `Repository`, deren Body `types/entity.person.md`
entspricht (Variablen ersetzt). — `test_new_person_scaffolds_the_person_template`
- [x] `tools/wikitool new concept --name X --set concept_type=decision` erzeugt eine Seite, deren
Body `types/concept.decision.md` entspricht. — `test_new_decision_scaffolds_the_decision_template`
- [x] **Jeder Subtyp ohne eigene Vorlagendatei, und jeder Typ ohne `subtype_field`, erzeugt
byte-identisches Scaffold wie vor der Änderung** — geprüft für alle Typen unter `types/`.
— `test_every_shipped_type_scaffolds_its_base_template_where_no_subtype_file_exists`
- [x] `TypeResolver.list_type_specs()` liefert dieselbe Menge wie vor der Änderung.
— `test_list_type_specs_counts_no_subtype_template`
- [x] `docs verify` schlägt fehl für eine verwaiste Subtyp-Vorlage und für eine mit einem Wert
außerhalb des Enums; der Fehlertext nennt Datei und Wert. `types/<stem>.guidance.md` löst
keinen der beiden aus. — `test_docs_verify.py` (4 Tests)
- [x] Eine Subtyp-Vorlage über 100 Zeilen bekommt keine TOC-Region, und `docs verify` verlangt
keine. — `test_target_files_leaves_out_subtype_templates`
- [x] `dist export`-Plan: `types/entity.person.md.template` und
`types/concept.decision.md.template` sind enthalten, die unsuffixierten Namen nicht;
`find_leaks` meldet eine untergeschobene unsuffixierte Subtyp-Vorlage.
— `test_this_repos_export_plan_carries_both_example_subtype_templates`,
`test_subtype_template_ships_only_as_template_and_upgrade_never_writes_it`,
`test_find_leaks_catches_one_instance_own_data[types/entity.person.md]`
- [x] `dist adopt` ohne Pfad bietet die `.template` an und übernimmt sie byte-identisch.
— `test_adopt_without_a_path_copies_every_collection_and_type_template`
- [x] `pytest` deckt alle obigen Fälle ab.
- [x] `instructions/subtype-templates.md` existiert mit `manual: true`, ist von keinem Skill und
nicht aus `AGENTS.md` verlinkt, wird aus `evolve-subtypes.md` und `setup-instance.md`
erwähnt und nennt die ≥3-Seiten-Schwelle; `instructions verify` grün.
- [x] `types/entity.md` und `types/entity.guidance.md` sprechen nicht mehr von „projects".
- [x] Doku nachgezogen: `AGENTS.md` § File naming (Zeile `types/<name>.<subtype>.md`),
`types/type-spec.md` (§ Anatomy, § Template variables, § Who owns a type-spec samt
Sprachtabelle), `types/type-guidance.md`, `instructions/upgrade-instance.md` Schritt 5,
`docs/ownership-and-templates.md` § „The consequence in practice",
`docs/language-boundaries.md`, `cli_contract`-Datensätze von `new`, `docs verify`,
`docs toc`, `dist export`, `dist adopt` (und damit `tools/CONTRACT.md`), `README.md` (U5).
- [x] `tools/wikitool docs verify` und `tools/wikitool instructions verify` grün.
## Versionsteil
Gelandet im offenen Kandidaten **`8.0.0`**: `--minor` → `8.0.0-beta.31` (max-wins hielt den
Kandidaten bei 8.0.0; kein zweites `--breaking`), Abschluss-Nachtrag `--patch` →
`8.0.0-beta.32`. Kein Migrationsdokument (E4). Damit vor dem Release von 8.0.0 gelandet, wie
vorausgesetzt.
Für sich genommen gegen `instructions/dev/version-parts.md`:
- *Vorwärts:* neue Maschinerie über eine Instanz kopiert → keine Subtyp-Vorlagendatei vorhanden
(sie kommen nur als `.template`), jede Type-Spec scaffoldet byte-identisch. Kein Handgriff.
- *Rückwärts:* eine Instanz, die `types/entity.person.md` adoptiert hat, setzt die alte Maschine
zurück → alte `new` ignoriert die Datei (Basisvorlage). Ob ein alter `docs verify` die Datei
ablehnt, wurde nicht geprüft — innerhalb des 8.0.0-Kandidaten ohne Folge, weil keine Instanz
eine Vorversion dieses Kandidaten erhält.
## Sprache
Subtyp-Vorlagen sind Seitenmaterial, also in der KB-Sprache (`kb/CONVENTIONS.md` `language:`,
hier deutsch); Dateinamen und Subtypwerte sind Identifier. Die neue Instruction und alle
Ergänzungen an Contracts, `AGENTS.md` und `docs/` sind Control Plane, also englisch.
## Berührte Dateien
- `tools/chemenu/type_resolver.py` (`split_subtype_template_name`, `subtype_template_path`,
`page_template`)
- `tools/chemenu/commands/new_page.py` (Subtypwert durchreichen, Datensatz)
- `tools/chemenu/commands/docs_verify.py` (`check_subtype_templates`, Datensätze `docs verify`
und `docs toc`)
- `tools/chemenu/toc.py` (Subtyp-Vorlagen aus dem Scope)
- `tools/chemenu/commands/dist_cmd.py` (`_owned_type_stem`, Doku `_plan_types`, `find_leaks`,
Datensätze `dist export`/`dist adopt`)
- `types/entity.person.md`, `types/concept.decision.md` (neu)
- `types/entity.md` (`description:`), `types/entity.guidance.md`, `types/type-spec.md`,
`types/type-guidance.md`
- `instructions/subtype-templates.md` (neu), `instructions/evolve-subtypes.md`,
`instructions/setup-instance.md`, `instructions/upgrade-instance.md`
- `AGENTS.md` § File naming, `docs/ownership-and-templates.md`, `docs/language-boundaries.md`,
`README.md`
- `tools/CONTRACT.md` (generiert)
- Tests: `test_type_resolver.py`, `test_new_page.py`, `test_docs_verify.py`, `test_toc.py`,
`test_dist_cmd.py`
- `CHANGES.md` über `version bump`
## Abhängigkeit
Keine. #119 ist abgeschlossen; #118 (Beteiligungs-Label) ist unabhängig.
torben
changed title from Seitenvorlage je Subtyp: `wikitool new` scaffoldet für ein Projekt dieselbe Vorlage wie für eine Person to Seitenvorlage je Subtyp: `wikitool new` scaffoldet für eine Person dieselbe Vorlage wie für eine Codebasis2026-10-03 09:44:54 +00:00
Changelog: Prämisse gegen den Baum korrigiert - project ist seit #122/#123 kein Entity-Subtyp mehr, die Projektvorlage existiert als eigener Typ; Titel und Akzeptanzkriterien auf person umgestellt. Mechanismus neu bewertet: A in A1 (Frontmatter, wäre --major) und A2 (Body-Abschnitte ## Template: <wert>, --minor) geteilt, Empfehlung A2. Drei offene Betreiberfragen F1-F3. Nebenbefund: veraltetes „projects" in types/entity.md/entity.guidance.md aufgenommen.
**Changelog:** Prämisse gegen den Baum korrigiert - `project` ist seit #122/#123 kein Entity-Subtyp mehr, die Projektvorlage existiert als eigener Typ; Titel und Akzeptanzkriterien auf `person` umgestellt. Mechanismus neu bewertet: A in A1 (Frontmatter, wäre `--major`) und A2 (Body-Abschnitte `## Template: <wert>`, `--minor`) geteilt, Empfehlung A2. Drei offene Betreiberfragen F1-F3. Nebenbefund: veraltetes „projects" in `types/entity.md`/`entity.guidance.md` aufgenommen.
Changelog: F1 entschieden (weiterführen). F3 neu gefasst nach Betreibervorgabe: zwei Beispielvorlagen (person, concept_type: decision, beide am Korpus belegt), Interview-Instruction subtype-templates.md (manual: true, ≥3-Seiten-Schwelle), angebotenes Upgrade 8.0.0-subtype-templates.md. Versionsabschnitt korrigiert: Kandidat 8.0.0 ist bereits major, das --major-Argument gegen A1 entfällt; F2 bleibt offen als reine Formfrage.
**Changelog:** F1 entschieden (weiterführen). F3 neu gefasst nach Betreibervorgabe: zwei Beispielvorlagen (`person`, `concept_type: decision`, beide am Korpus belegt), Interview-Instruction `subtype-templates.md` (`manual: true`, ≥3-Seiten-Schwelle), angebotenes Upgrade `8.0.0-subtype-templates.md`. Versionsabschnitt korrigiert: Kandidat 8.0.0 ist bereits major, das `--major`-Argument gegen A1 entfällt; F2 bleibt offen als reine Formfrage.
Changelog: F2 entschieden (Betreiber): eine flache Datei je Subtyp-Vorlage, types/<typ>.<wert>.md; A1 (Frontmatter), A2 (Body-Abschnitte) und Unterverzeichnis verworfen. Neu aus der Prüfung gegen den Baum: guidance als Subtypwert reserviert, Subtyp-Vorlagen aus dem TOC-Scope von toc.py (sonst landet eine TOC-Region im Scaffold), Auslieferung als .template über dist_cmd._owned_type_stem/_plan_types/find_leaks. Angebotenes Migrationsdokument gestrichen (E4) - dist upgrade/dist adopt tragen die Beispiele. Versionsteil: --minor in den offenen 8.0.0-Kandidaten. Relabel: kind/decision → kind/build (alle Fragen entschieden), size/M → size/L (Auslieferungsseite, AGENTS.md, vier Instructions).
**Changelog:** F2 entschieden (Betreiber): eine flache Datei je Subtyp-Vorlage, `types/<typ>.<wert>.md`; A1 (Frontmatter), A2 (Body-Abschnitte) und Unterverzeichnis verworfen. Neu aus der Prüfung gegen den Baum: `guidance` als Subtypwert reserviert, Subtyp-Vorlagen aus dem TOC-Scope von `toc.py` (sonst landet eine TOC-Region im Scaffold), Auslieferung als `.template` über `dist_cmd._owned_type_stem`/`_plan_types`/`find_leaks`. Angebotenes Migrationsdokument gestrichen (E4) - `dist upgrade`/`dist adopt` tragen die Beispiele. Versionsteil: `--minor` in den offenen 8.0.0-Kandidaten. Relabel: `kind/decision` → `kind/build` (alle Fragen entschieden), `size/M` → `size/L` (Auslieferungsseite, `AGENTS.md`, vier Instructions).
Changelog: Gebaut und veröffentlicht als d8cb494 (8.0.0-beta.31, --minor), CI-Läufe 517/518 grün; alle Akzeptanzkriterien abgehakt, je mit dem Test, der sie prüft. Neu: § Umsetzungsentscheidungen U1–U5 – eine gemeinsame Namensregel (split_subtype_template_name), dritte docs verify-Prüfung auf Frontmatter, Validierung vor der Vorlagenwahl, types describe bewusst unverändert, README.md mitgezogen. Spezifikation auf die gebauten Funktionsnamen nachgezogen; „Stand" ersetzt den Bau-Hinweis.
**Changelog:** Gebaut und veröffentlicht als `d8cb494` (`8.0.0-beta.31`, `--minor`), CI-Läufe 517/518 grün; alle Akzeptanzkriterien abgehakt, je mit dem Test, der sie prüft. Neu: § Umsetzungsentscheidungen U1–U5 – eine gemeinsame Namensregel (`split_subtype_template_name`), dritte `docs verify`-Prüfung auf Frontmatter, Validierung vor der Vorlagenwahl, `types describe` bewusst unverändert, `README.md` mitgezogen. Spezifikation auf die gebauten Funktionsnamen nachgezogen; „Stand" ersetzt den Bau-Hinweis.
Changelog: Abschlussprüfung: types/type-spec.md, types/type-guidance.md und docs/language-boundaries.md nannten Subtyp-Vorlagen nicht als Seitenmaterial – nachgezogen als dd565d2 (8.0.0-beta.32), CI 519/520 grün. INSTALL.md gegen die geänderten Installations-Instructions gelesen, keine Abweichung. Body in den Endzustand gebracht (Stand, Versionsteil als gelandet, Doku-Liste ergänzt); Issue geschlossen.
**Changelog:** Abschlussprüfung: `types/type-spec.md`, `types/type-guidance.md` und `docs/language-boundaries.md` nannten Subtyp-Vorlagen nicht als Seitenmaterial – nachgezogen als `dd565d2` (`8.0.0-beta.32`), CI 519/520 grün. `INSTALL.md` gegen die geänderten Installations-Instructions gelesen, keine Abweichung. Body in den Endzustand gebracht (Stand, Versionsteil als gelandet, Doku-Liste ergänzt); Issue geschlossen.
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.
Stand
Abgeschlossen 2026-10-03. Gebaut und veröffentlicht als
d8cb494(8.0.0-beta.31,--minorin den 8.0.0-Kandidaten), verifiziert durch die CI-Läufe 517 und 518, beidesuccess; lokal davorpytest2164 passed / 3 skipped (normal und auf leerer Maschine identisch),docs verify,instructions verify. Veröffentlicht nach Freigabe der Mass-Update Gate (25 Dateien).Abschlussprüfung (stack-close): Drei Dokumente zählten das Seitenmaterial unter
types/noch als## Template-Block undlayout:-Titel allein auf —types/type-spec.md(§ Who owns a type-spec, Prosa und Sprachtabelle),types/type-guidance.md(§ Conventions),docs/language-boundaries.md—, dazu ein Kommentar indist_cmd. Nachgezogen alsdd565d2(8.0.0-beta.32,--patch), verifiziert durch CI-Läufe 519 und 520, beidesuccess.INSTALL.mdgegen die geändertensetup-instance.md/upgrade-instance.mdgelesen: beschreibt die Übernahme von Type-Specs nicht, keine Abweichung, kein Folge-Issue. Die Abschlussprüfung lief auf Opus mit reduziertem Effort.Problem
Eine Type-Spec trug genau einen
## Template-Block für alle Werte ihressubtype_field.Wo ein Subtyp eine andere Seitenform braucht, scaffoldete
tools/wikitool newdie falsche, undAutoren bauten die Seite danach von Hand um. Der Korpus belegte das an zwei Typen:
entity_type: person— die gemeinsame Vorlage intypes/entity.mdlistet unter## KerndatenVersion,Sprache/TechnikundRepository, für eine Person (oderOrganisation, die laut
types/entity.guidance.mdebenfallspersonist) sinnlos.kb/entities/people/Vannevar Bush.mdfüllt## Kerndatendeshalb mitGeboren/Gestorben/Nationalität,
Andrej Karpathy.mdersetzt es durch## Kernbeiträge.concept_type: decision— 2 der 7 Seiten unterkb/concepts/decisions/haben dieBasisvorlage aus
types/concept.md(Kernpunkte / Wann zu verwenden / Wann NICHT) von Handdurch die ADR-Form Kontext / Entscheidung / Konsequenzen / Status ersetzt.
Vor diesem Paket gab es keinen Mechanismus dafür:
TypeResolver.extract_templatenahm denersten
```markdown-Block im Body der Type-Spec, einziger Aufrufer wartools/chemenu/commands/new_page.py. Bestehende Seiten wurden durch dieses Paket nicht umgebaut.Herkunft: Das Issue entstand 2026-09-18 für den damaligen Subtyp
entity_type: project.Dieser Anlass war erledigt — #122 hat den Wert in
codebaseumbenannt, #123 hat dem Vorhabeneinen eigenen Typ
types/project.mdmit eigener Vorlage gegeben (#119 D17).Nebenbefund, gleiche Dateien:
types/entity.md(description:) undtypes/entity.guidance.mdsprachen noch von „projects" bzw. „a software project" — veraltetseit #122. In diesem Paket auf „codebases"/„a codebase" korrigiert.
Entscheidungen
E1 — Weiterführen. Betreiber 2026-10-03. Die Mechanik ist allgemein, der Bedarf an zwei
Typen belegt.
E2 — Mechanismus: eine flache Datei je Subtyp-Vorlage,
types/<typ>.<subtyp-wert>.md.Betreiber 2026-10-03 („getrennte Template-Files je Ausprägung … übersichtlicher, leichter zu
handhaben, das File muss nicht zerpflückt werden"; flach statt Unterverzeichnis: „Mache
entity.person.md").die einzige Deklaration — keine zweite Stelle nennt denselben Subtyp.
## Template-Block in der Type-Spec. Damit scaffoldet jedebereits adoptierte Type-Spec jeder Instanz unverändert.
types/<name>.guidance.mdschon gemacht hat(
docs/ownership-and-templates.md§ „Where the file boundary used to strain"): eine Datei jePublikum. Eine Subtyp-Vorlage ist reines Seitenmaterial in der KB-Sprache.
layout.<subtyp>.template:mit Vorlagentext als YAML-Blockstring(Seitentext im Frontmatter, Quoting-Fallen, zwei Formen für dieselbe Sache); derselbe Schlüssel
als Zeiger auf einen Body-Abschnitt (wiederholt die Überschrift, zwei Stellen laufen
auseinander); Body-Abschnitte
## Template: <wert>(zerpflückt die Type-Spec, mischt weiterzwei Publika in einer Datei);
types/<typ>/<wert>.mdim Unterverzeichnis (Betreiber: flach).Eigener Typ je Subtyp war nie eine Option für
person(#119 D20).E3 — Umfang: Mechanik + zwei Beispielvorlagen + eine Interview-Instruction. Betreiber
2026-10-03 („1–2 Beispiele mitliefern und eine
manual: true-Instruction mit einem Interview,das nach nötigen Subvorlagen schaut und beim Anlegen hilft").
E4 — Kein Migrationsdokument. Keine Seite ändert sich, jede adoptierte Type-Spec
funktioniert unverändert. Eine bestehende Instanz bekommt die Beispiele über den normalen Weg:
dist upgradelegttypes/entity.person.md.templateneben sie,dist adoptübernimmt es. Einobligation: offered-Dokument wie6.0.0-type-guidance-split.mdist nicht nötig, weil keineadoptierte Datei geändert werden muss — die neue Vorlage ist eine eigene Datei.
Umsetzungsentscheidungen (stack-build)
Im Bau getroffen, innerhalb von E2; keine davon öffnete das Design neu.
type_resolver.split_subtype_template_name(name)entscheidet allein nach der Form
<stem>.<wert>.md(Wert ≠guidance, ein Segment ohne Punkt),ob eine Datei eine Subtyp-Vorlage ist.
toc,dist_cmd._owned_type_stemunddocs verifyfragen alle diese Funktion — eine fehlerhafte Vorlage wird also überall gleich eingeordnet, und
docs verifymeldet sie.docs verify: eine Subtyp-Vorlage mit Frontmatter ist ein Fehler.Folgt aus E2 („kein Frontmatter"):
newliest die Datei als Klartext, ein Frontmatter-Blocklandete als Text in jeder Seite.
newvalidiert das Frontmatter, bevor es die Vorlage wählt. Der Subtypwert benennteine Datei unter
types/, also hat er das Schema-Enum passiert, bevor er so benutzt wird.Zusätzlich lehnt
TypeResolver.subtype_template_pathjeden Wert ab, der kein Dateinamen-Segmentsein kann.
types describezeigt Subtyp-Vorlagen nicht. Nicht verlangt und nicht gebaut;types/type-spec.md§ Anatomy sagt, dass nurnewsie liest. Wird es gebraucht, ist das eineigenes Issue.
README.mdmitgezogen (Baum untertypes/, Zeile „Templates" unter IT-SpecificFeatures), zusätzlich zur Doku-Liste unten.
Spezifikation (umgesetzt)
Auflösung
types/ist eine Subtyp-Vorlage, wenn ihr Name<stem>.<rest>.mdistund
<rest>nichtguidanceist (U1). Obtypes/<stem>.mdeine Type-Spec mitsubtype_fieldist, prüftdocs verify.<stem>endet am ersten Punkt (Typnamen erfüllen^[a-z][a-z0-9-]*$, enthalten also nie einen).newnimmttypes/<stem>.<wert>.md, wobei<wert>der Wert dessubtype_fieldim gebautenFrontmatter ist, wenn die Datei existiert; sonst den
## Template-Block wie bisher (gleicheExtraktionsregel, unverändert). Umgesetzt als
TypeResolver.page_template(spec, wert).Template-Variablen und Filter (
types/type-spec.md§ Template variables).guidanceist reserviert.types/<stem>.guidance.mdist immer die Guidance-Datei; derSubtypwert
guidancekann keine Datei-Vorlage haben.types/type-spec.mdsagt das.TypeResolver.list_type_specs()nicht als Type-Spec gezählt.Prüfung (
docs verify,check_subtype_templates)Fehler, mit Datei und Wert im Text:
types/<stem>.<rest>.md,<rest>≠guidance, undtypes/<stem>.mdist keine Type-Specoder hat kein
subtype_field(verwaiste Vorlage).<rest>ist kein Wert, den das Schema für dassubtype_fieldzulässt (Tippfehler → toteVorlage). Ohne Enum keine Prüfung.
TOC
Subtyp-Vorlagen sind vom TOC-Scope (
toc.target_files) ausgenommen, unabhängig von ihrer Länge.Invariante: keine Datei, die
newals Scaffold liest, enthält je einenwikitool:toc-Marker.Eigentum und Auslieferung
Subtyp-Vorlagen sind Seitenmaterial einer
root: kb-Type-Spec, gehören also der Instanz undwerden wie ihre Type-Spec nur als
.templateausgeliefert.dist_cmd._owned_type_stem<stem>.<rest>.md(≠.guidance.md) als zum Typ<stem>gehörigdist_cmd._plan_typestypes/<stem>.<rest>.md.templateumdist_cmd.find_leaks.templateim Export als Leckdist_cmd.adoptable_templatestypes/*.template, flach) — im Test bestätigtinstructions/upgrade-instance.mdSchritt 5dist adoptoder liegen lassen; beides gültigInvariante für die Auslieferung: kein Export enthält eine Subtyp-Vorlage unter ihrem
unsuffixierten Namen, und kein
dist upgradeschreibt je auf eine adoptierte Subtyp-Vorlage(
dist upgradeschreibt nur, was der neue Stamp listet; Test über_write_candidates).Beispielvorlagen (deutsch, Seitenmaterial)
types/entity.person.md: Titel ·**Typ:**· Beschreibung · Kerndaten (Rolle, Zugehörigkeit,Wirkungszeitraum — je „falls zutreffend") · Beiträge · Historie.
types/concept.decision.md: Titel ·**Typ:**· Definition · Kontext · Entscheidung ·Alternativen · Konsequenzen · Status.
Interview-Instruction
instructions/subtype-templates.mdmanual: true— von keinem Skill und nicht ausAGENTS.mdverlinkt; erwähnt ausinstructions/evolve-subtypes.md(neuer Schritt 5),instructions/setup-instance.md(Schritt 4.1, als spätere Frage),
instructions/upgrade-instance.md(Schritt 5) undtypes/type-spec.md. Englisch. Ablauf: Typen/Werte auflisten → Seiten je Wert gegen ihreVorlage halten → ≥3-Seiten-Schwelle → ausgeliefertes
.templateals Ausgangspunkt anbieten →je Kandidat dem Nutzer vorlegen → schreiben bzw.
dist adopt, danndocs verify→ bestehendeSeiten nicht umbauen.
Akzeptanzkriterien
Alle erfüllt mit
d8cb494, verifiziert durch CI-Läufe 517 und 518; die Doku-Nachträge derAbschlussprüfung mit
dd565d2, CI-Läufe 519 und 520.tools/wikitool new entity --name X --set entity_type=personerzeugt eine Seite ohneVersion,Sprache/TechnikundRepository, deren Bodytypes/entity.person.mdentspricht (Variablen ersetzt). —
test_new_person_scaffolds_the_person_templatetools/wikitool new concept --name X --set concept_type=decisionerzeugt eine Seite, derenBody
types/concept.decision.mdentspricht. —test_new_decision_scaffolds_the_decision_templatesubtype_field, erzeugtbyte-identisches Scaffold wie vor der Änderung — geprüft für alle Typen unter
types/.—
test_every_shipped_type_scaffolds_its_base_template_where_no_subtype_file_existsTypeResolver.list_type_specs()liefert dieselbe Menge wie vor der Änderung.—
test_list_type_specs_counts_no_subtype_templatedocs verifyschlägt fehl für eine verwaiste Subtyp-Vorlage und für eine mit einem Wertaußerhalb des Enums; der Fehlertext nennt Datei und Wert.
types/<stem>.guidance.mdlöstkeinen der beiden aus. —
test_docs_verify.py(4 Tests)docs verifyverlangtkeine. —
test_target_files_leaves_out_subtype_templatesdist export-Plan:types/entity.person.md.templateundtypes/concept.decision.md.templatesind enthalten, die unsuffixierten Namen nicht;find_leaksmeldet eine untergeschobene unsuffixierte Subtyp-Vorlage.—
test_this_repos_export_plan_carries_both_example_subtype_templates,test_subtype_template_ships_only_as_template_and_upgrade_never_writes_it,test_find_leaks_catches_one_instance_own_data[types/entity.person.md]dist adoptohne Pfad bietet die.templatean und übernimmt sie byte-identisch.—
test_adopt_without_a_path_copies_every_collection_and_type_templatepytestdeckt alle obigen Fälle ab.instructions/subtype-templates.mdexistiert mitmanual: true, ist von keinem Skill undnicht aus
AGENTS.mdverlinkt, wird ausevolve-subtypes.mdundsetup-instance.mderwähnt und nennt die ≥3-Seiten-Schwelle;
instructions verifygrün.types/entity.mdundtypes/entity.guidance.mdsprechen nicht mehr von „projects".AGENTS.md§ File naming (Zeiletypes/<name>.<subtype>.md),types/type-spec.md(§ Anatomy, § Template variables, § Who owns a type-spec samtSprachtabelle),
types/type-guidance.md,instructions/upgrade-instance.mdSchritt 5,docs/ownership-and-templates.md§ „The consequence in practice",docs/language-boundaries.md,cli_contract-Datensätze vonnew,docs verify,docs toc,dist export,dist adopt(und damittools/CONTRACT.md),README.md(U5).tools/wikitool docs verifyundtools/wikitool instructions verifygrün.Versionsteil
Gelandet im offenen Kandidaten
8.0.0:--minor→8.0.0-beta.31(max-wins hielt denKandidaten bei 8.0.0; kein zweites
--breaking), Abschluss-Nachtrag--patch→8.0.0-beta.32. Kein Migrationsdokument (E4). Damit vor dem Release von 8.0.0 gelandet, wievorausgesetzt.
Für sich genommen gegen
instructions/dev/version-parts.md:(sie kommen nur als
.template), jede Type-Spec scaffoldet byte-identisch. Kein Handgriff.types/entity.person.mdadoptiert hat, setzt die alte Maschinezurück → alte
newignoriert die Datei (Basisvorlage). Ob ein alterdocs verifydie Dateiablehnt, wurde nicht geprüft — innerhalb des 8.0.0-Kandidaten ohne Folge, weil keine Instanz
eine Vorversion dieses Kandidaten erhält.
Sprache
Subtyp-Vorlagen sind Seitenmaterial, also in der KB-Sprache (
kb/CONVENTIONS.mdlanguage:,hier deutsch); Dateinamen und Subtypwerte sind Identifier. Die neue Instruction und alle
Ergänzungen an Contracts,
AGENTS.mdunddocs/sind Control Plane, also englisch.Berührte Dateien
tools/chemenu/type_resolver.py(split_subtype_template_name,subtype_template_path,page_template)tools/chemenu/commands/new_page.py(Subtypwert durchreichen, Datensatz)tools/chemenu/commands/docs_verify.py(check_subtype_templates, Datensätzedocs verifyund
docs toc)tools/chemenu/toc.py(Subtyp-Vorlagen aus dem Scope)tools/chemenu/commands/dist_cmd.py(_owned_type_stem, Doku_plan_types,find_leaks,Datensätze
dist export/dist adopt)types/entity.person.md,types/concept.decision.md(neu)types/entity.md(description:),types/entity.guidance.md,types/type-spec.md,types/type-guidance.mdinstructions/subtype-templates.md(neu),instructions/evolve-subtypes.md,instructions/setup-instance.md,instructions/upgrade-instance.mdAGENTS.md§ File naming,docs/ownership-and-templates.md,docs/language-boundaries.md,README.mdtools/CONTRACT.md(generiert)test_type_resolver.py,test_new_page.py,test_docs_verify.py,test_toc.py,test_dist_cmd.pyCHANGES.mdüberversion bumpAbhängigkeit
Keine. #119 ist abgeschlossen; #118 (Beteiligungs-Label) ist unabhängig.
Seitenvorlage je Subtyp: `wikitool new` scaffoldet für ein Projekt dieselbe Vorlage wie für eine Personto Seitenvorlage je Subtyp: `wikitool new` scaffoldet für eine Person dieselbe Vorlage wie für eine CodebasisChangelog: Prämisse gegen den Baum korrigiert -
projectist seit #122/#123 kein Entity-Subtyp mehr, die Projektvorlage existiert als eigener Typ; Titel und Akzeptanzkriterien aufpersonumgestellt. Mechanismus neu bewertet: A in A1 (Frontmatter, wäre--major) und A2 (Body-Abschnitte## Template: <wert>,--minor) geteilt, Empfehlung A2. Drei offene Betreiberfragen F1-F3. Nebenbefund: veraltetes „projects" intypes/entity.md/entity.guidance.mdaufgenommen.Changelog: F1 entschieden (weiterführen). F3 neu gefasst nach Betreibervorgabe: zwei Beispielvorlagen (
person,concept_type: decision, beide am Korpus belegt), Interview-Instructionsubtype-templates.md(manual: true, ≥3-Seiten-Schwelle), angebotenes Upgrade8.0.0-subtype-templates.md. Versionsabschnitt korrigiert: Kandidat 8.0.0 ist bereits major, das--major-Argument gegen A1 entfällt; F2 bleibt offen als reine Formfrage.Changelog: F2 entschieden (Betreiber): eine flache Datei je Subtyp-Vorlage,
types/<typ>.<wert>.md; A1 (Frontmatter), A2 (Body-Abschnitte) und Unterverzeichnis verworfen. Neu aus der Prüfung gegen den Baum:guidanceals Subtypwert reserviert, Subtyp-Vorlagen aus dem TOC-Scope vontoc.py(sonst landet eine TOC-Region im Scaffold), Auslieferung als.templateüberdist_cmd._owned_type_stem/_plan_types/find_leaks. Angebotenes Migrationsdokument gestrichen (E4) -dist upgrade/dist adopttragen die Beispiele. Versionsteil:--minorin den offenen 8.0.0-Kandidaten. Relabel:kind/decision→kind/build(alle Fragen entschieden),size/M→size/L(Auslieferungsseite,AGENTS.md, vier Instructions).Changelog: Gebaut und veröffentlicht als
d8cb494(8.0.0-beta.31,--minor), CI-Läufe 517/518 grün; alle Akzeptanzkriterien abgehakt, je mit dem Test, der sie prüft. Neu: § Umsetzungsentscheidungen U1–U5 – eine gemeinsame Namensregel (split_subtype_template_name), drittedocs verify-Prüfung auf Frontmatter, Validierung vor der Vorlagenwahl,types describebewusst unverändert,README.mdmitgezogen. Spezifikation auf die gebauten Funktionsnamen nachgezogen; „Stand" ersetzt den Bau-Hinweis.Changelog: Abschlussprüfung:
types/type-spec.md,types/type-guidance.mdunddocs/language-boundaries.mdnannten Subtyp-Vorlagen nicht als Seitenmaterial – nachgezogen alsdd565d2(8.0.0-beta.32), CI 519/520 grün.INSTALL.mdgegen die geänderten Installations-Instructions gelesen, keine Abweichung. Body in den Endzustand gebracht (Stand, Versionsteil als gelandet, Doku-Liste ergänzt); Issue geschlossen.torben referenced this issue2026-10-03 20:19:48 +00:00
torben referenced this issue2026-10-03 20:32:23 +00:00