source_type ist Instanzsache: Profilkatalog, Setup-Frage und eine manual:-Instruction zum Weiterentwickeln - Paket C #68

Closed
opened 2026-09-08 17:32:39 +00:00 by torben · 3 comments
Owner

Aus der Architekturdiskussion vom 2026-09-08. Paket C von vier: A ist #66, B ist #67, D ist #69.

Erledigt und geschlossen am 2026-09-09. Zwei Publishes, ein Kandidat (4.8.0-beta.9):

# Was Commit
1/2 Profilkatalog, Setup-Frage, evolve-subtypes-Instruction, COLLECTION.md 6b300aa
2/2 INSTALL.md nennt die neue Setup-Frage (Menschendoku-Nachzug) 7bc5da6

Der Befund, aus dem das Paket entstand

source_type beschreibt diese Instanz, nicht den Stack. Die sieben Werte (transcript, analysis, article, document, notes, tracker, unclassified) kommen aus einer Wissensbasis. Gegen drei hypothetische Zielinstanzen gestellt, hat die Achse fast nichts Gemeinsames:

Instanz plausibles source_type-Enum
Privat-Projekte (diese hier) transcript, analysis, article, document, notes, tracker
Handball-Verein und -Verband satzung, protokoll, korrespondenz, spielbericht, verbandsmitteilung
Produktentwicklung spec, meeting, kundenanforderung, marktstudie, postmortem
Pen-&-Paper-Gamemaster regelwerk, abenteuermodul, sessionlog, handout, weltenbau

Zum Vergleich: fidelity und authority (#67) sind in allen vier Zeilen dieselben Werte. Das ist die Trennlinie — was aus dem Substrat oder dem Konsumenten folgt, bleibt Stack-Vokabular; eine Inhaltstaxonomie ist ein Default, den eine Instanz übernimmt oder ersetzt.

Architektonisch war das längst wahr: types/source.md trägt root: kb, dist_cmd._plan_types() liefert es samt .schema.yaml nur als .template aus, Schritt 5 von setup-instance.md kopiert es in die Instanz. Was fehlte, war, dass irgendjemand die Frage stellt. instructions/kb-profiles.md riet im entities-Abschnitt ausdrücklich „Adapt the area list first: it is the part most likely to be wrong for another domain" — und sagte im sources-Abschnitt über source_type kein Wort.

Zweiter Befund, aus #66 mitgenommen: dort steht „Leeren keine benannte Operation war (#68 holt das nach)". Das unclassified-Fach hatte seit #66 einen beratenden lint-Befund, aber keine Prozedur, die es wieder leert.

Die sieben Entscheidungen (Vorbereitung 2026-09-09)

Alle sieben in der Vorbereitungssitzung getroffen, alle sieben unverändert umgesetzt. Vier davon korrigieren den ursprünglichen Body, der gegen den Baum nicht mehr stimmte.

D1 — Dateiname instructions/evolve-subtypes.md. Muss von link-taxonomy.md klar unterscheidbar sein, und instructions_cmd.manual_forbidden_references() prüft per Dateinamen-Substring gegen AGENTS.md/CLAUDE.md/jede SKILL.md — ein generischer Name wäre auch mechanisch riskant gewesen.

D2 — Geltungsbereich: jede Subtype-Achse, source_type ausgearbeitet. entity.md, concept.md und source.md tragen alle subtype_field: und layout:; comparison keins von beidem und fällt heraus. Eine zweite, fast gleichlautende Instruction für entity_type wäre die Kopie, die Invariante 8 verbietet. Instanz-spezifisch bleibt nur die Drain-Hälfte: ein unclassified-Fach hat allein sources.

D3 — Die ≥3-Aufnahmeschwelle steht ausschließlich in der neuen Instruction. Sie existierte nirgends im Baum, nur als Absicht in #66 („die ≥3-Regel aus #68"). Der Floor in corpus-policy.md sagt etwas anderes (≥ 1 Seite pro bereits deklariertem Wert) und bleibt, wo er ist — aufgenommen wird bei 3, gehalten wird ab 1, kein Widerspruch.

D4 — Die neue Instruction verweist nicht auf corpus-policy.md. Der ursprüngliche Body sah genau diesen Link vor; er ist unzulässig, weil instructions/dev/ von dist export gepruned wird und instructions verifys Boundary-Check jede Referenz von außerhalb nach innen meldet. Die Untrennbarkeitsregel ist stattdessen aus sich selbst begründet (der notes-Fall aus #66). Ein Entwurf der Umsetzung enthielt den Verweis trotzdem — auf version-parts.md, in Schritt 4 — und wurde vor dem ersten verify wieder entfernt; die Entscheidung hat also im Lauf tatsächlich gegriffen, statt nur dokumentiert dazustehen.

D5 — Der ursprüngliche Punkt 4 war bereits erledigt. corpus-policy.md trägt die unclassified-Floor-Ausnahme seit #66, mit Begründung und Invarianten-3-Bezug. Punkt und Kriterium gestrichen statt offen gelassen.

D6 — Die Setup-Frage ist neuer Unterschritt 5 in Schritt 5, hinter dem Terminologie-Schritt. Sie hängt nicht an der Sprachentscheidung: Enum-Werte sind Identifier und folgen keiner KB-Sprache (kb/CONTRACT.md § Language and identifiers) — übersetzt wird nur der title: einer layout:-Zeile.

D7 — Kein instructions sync. Es ändert sich keine SKILL.md; eine flache Instruction wird nicht publiziert. instructions verify ist hier der eigentliche Check.

Was gebaut wurde

instructions/kb-profiles.md. Der sources-Abschnitt behandelt source_type jetzt wie entities seine Area-Liste: als das, was zuerst anzupassen ist, mit zwei ausformulierten Domänenprofilen (Handball-Verein, Pen-&-Paper) als Anschauung. Dazu die Anleitung, was „übernehmen" konkret heißt — Werteliste ins Enum von types/source.schema.yaml, je Wert eine layout:-Zeile in types/source.md — und die Auflage, den sichtbaren Auffangwert in jedem übernommenen Vorschlag zu behalten, weil ein Subtype-Feld ohne ihn still den default:-getriebenen Sammelpunkt aus #66 wiederherstellt. Als Gegenbeispiel im selben Abschnitt: fidelity und authority stehen nicht zur Wahl.

instructions/setup-instance.md. Neuer Unterschritt 5 in Schritt 5: nach dem Anwendungsgebiet fragen, source_type-Vorschlag ableiten, Enum und layout: in derselben Bearbeitung setzen — eins ohne das andere lässt einen Wert ohne Zielverzeichnis zurück. Mit der Ansage, dass der Betreiber zu diesem Zeitpunkt null Quellen hat und seine Taxonomie rät, bevor er Material gesehen hat: das Ergebnis ist ein Startpunkt, keine Festlegung, und evolve-subtypes.md ist der Weg, ihn später zu korrigieren.

instructions/evolve-subtypes.md, manual: true. Benennt die Schleife, die werkzeugseitig vollständig existierte: Fach sehen (lint, search --field) → Kandidaten lesen → Wert samt layout: ergänzen → touch --set / move --reconcileindex rebuild / migrate verify. Über alle drei Subtype-Achsen (D2). Zwei Regeln im Body:

  • Wert und Sweep sind untrennbar — ein deklarierter Wert, den keine Seite trägt, ist eine Kategorie, die beim nächsten Mal zum Raten zwischen ihr und dem Auffangfach einlädt; genau so absorbierte der alte notes-Default 22 von 29 Source-Seiten.
  • Aufnahmeschwelle ≥ 3 Seiten — ein Wert wird zugelassen, nachdem er sich an echtem Material bewährt hat, nie in Erwartung. spec und image sind die Gegenbeispiele (beide vorab aufgenommen, beide ein Jahr bei null, beide in #66 gestrichen); eine kleinere Zahl ist nur eine ausdrücklich benannte Ausnahme des Betreibers (tracker bei zwei Seiten), nie ein Grund, die Schwelle selbst zu senken.

Dazu die Abgrenzung nach oben: Umbenennen oder Streichen eines Wertes bewegt Seiten und ist eine Korpus-Migration (migrate-corpus.md), kein Fall dieser Schleife. Und nach unten: das Drainen läuft ohne die ≥3-Schwelle, weil eine Seite im Auffangfach ihr Ziel bereits hat.

kb/sources/COLLECTION.md. Die unclassified/-Zeile nennt evolve-subtypes.md als Weg, das Fach zu leeren oder das Enum zu erweitern.

Menschendoku (7bc5da6). INSTALL.md zählt auf, wonach setup-instance.md den Betreiber fragt — und dieses Paket hat dort eine Frage hinzugefügt, ohne die die Aufzählung unvollständig gewesen wäre. Neuer Aufzählungspunkt Anwendungsgebiet, mit dem Startpunkt-Vorbehalt, dem Verweis auf evolve-subtypes.md und der Abgrenzung gegen fidelity/authority.

Ein Nebenbefund am Scaffolding

tools/wikitool new instruction schreibt obligation: required ins Frontmatter, weil types/instruction.schema.yaml dafür ein default: trägt. Das Feld gehört fachlich aber nur zu einem Migrationsdokument unter instructions/migrations/ (es steuert migrate status), und keine der beiden bestehenden Manual-Instructions — kb-profiles.md, german-terminology.md — trägt es. Hier von Hand entfernt. Nichts prüft das: weder docs verify noch instructions verify fragt, ob ein obligation: außerhalb von migrations/ steht. Ob das ein Schema-Fehler ist (Default gehört weg, migrate_cmd liest ohnehin required als Fallback) oder gewollt, ist nicht in diesem Paket entschieden worden — es ist derselbe Mechanismus, den #66 bei default: notes als Ursache identifiziert hat, eine Ebene höher.

Versionsteil

MINOR, geprüft gegen instructions/dev/version-parts.md. Forward: eine Instanz kopiert instructions/ und types/ über sich; nichts umbenannt, nichts entfernt, kein Kommando, kein Flag, kein maschinengelesenes Format. Backward: die alte Fassung findet eine zusätzliche Instruction-Datei vor und ignoriert sie. Kein --breaking, kein Migrationsdokument.

Kandidat 4.8.0-beta.84.8.0-beta.9, derselbe Eintrag in place eskaliert. Der Nachzug 7bc5da6 ist reine Prosa (INSTALL.md) und bumpt nicht — CI's Versions-Gate ist auf Verhaltensänderungen beschränkt.

Verifiziert

  • pytest 1076 grün, docs verify grün (CHANGES.md documents version 4.8.0-beta.9), instructions verify grün: 21 instruction(s) and 7 skill(s) valid, 14 published copy/copies match their sourceevolve-subtypes.md weder als tot noch als unzulässig verlinkt gemeldet, was beide Hälften der manual:-Regel gleichzeitig belegt.
  • Push nach origin/main gegengelesen statt der Tool-Meldung geglaubt: git rev-parse HEAD origin/main identisch auf 6b300aa, kein Divergenz-Marker.
  • Kein Korpus angefasst außer der einen Zeile in kb/sources/COLLECTION.md: kein work/-Lauf, kein Mass-Update-Gate, kein index rebuild nötig.
  • CI auf 6b300aa (dem substanziellen Commit): Run 202 (ci.yml) success, Run 203 (release.yml) success ohne Release-Schnitt — neuester Release ist unverändert v4.7.4, genau das Verhalten, das version-parts.md § Kandidatenmodell für ein -beta.N beschreibt. Run 204 auf dem Prosa-Nachzug 7bc5da6 lief beim Schließen noch; er ändert kein Verhalten, und der lokale Vollcheck war für ihn grün.

Akzeptanzkriterien

  • instructions/kb-profiles.md behandelt source_type im sources-Abschnitt mit zwei ausformulierten Domänenprofilen und benennt es als das, was zuerst anzupassen ist.
  • kb-profiles.md sagt, dass fidelity und authority nicht zur Wahl stehen.
  • instructions/setup-instance.md Schritt 5 fragt nach dem Anwendungsgebiet, leitet einen source_type-Vorschlag ab, setzt Enum und layout: gemeinsam, behält unclassified und sagt, dass das Ergebnis ein Startpunkt ist.
  • instructions/evolve-subtypes.md existiert, trägt manual: true, und führt beide Hälften: Fach leeren und Vokabular erweitern.
  • Ihr Body enthält beide Regeln (Untrennbarkeit, Aufnahmeschwelle ≥ 3 mit Ausnahmeklausel) und grenzt gegen migrate-corpus.md ab.
  • Sie enthält keinen Verweis auf instructions/dev/ (D4) — ein Entwurf hatte einen, er wurde vor dem ersten verify entfernt.
  • Sie ist aus kb/sources/COLLECTION.md, kb-profiles.md und setup-instance.md erwähnt und aus keiner SKILL.md, keiner AGENTS.md und keiner CLAUDE.md verlinkt; per instructions verify belegt.
  • docs verify, instructions verify und pytest grün.
  • Changelog: Bump --minor auf 4.8.0-beta.9, Prosa im bestehenden Kandidateneintrag, ohne --breaking, ohne Migrationsdokument.
  • corpus-policy.md nimmt unclassified vom Subtype-Floor aus — bereits in #66 erledigt (D5).
  • Nachgetragen, im ursprünglichen Body nicht gefordert: INSTALL.md nennt die neue Setup-Frage. Ohne das hätte die Aufzählung dessen, wonach das Setup fragt, eine Frage unterschlagen.

docs/-Veralterung geprüft

Keine der vier Seiten ist durch dieses Paket veraltet. ownership-and-templates.md führt die root: kb-Type-Specs bereits als .template-gestützt und instanzeigen — dieses Paket wendet die Eigentümerlinie an, statt sie zu verschieben, und ist damit ein Beleg für die Seite, keine Korrektur an ihr. pipeline-rationale.md, version-model.md und why-gates-are-code.md berührt es nicht. README.md bleibt ebenfalls korrekt: seine Zeile zu setup-instance.md ist eine bewusst unvollständige Kurzfassung („git init, author identity, an optional remote, and the first commit") und nennt weder Konventionen noch Personalization, wird durch eine weitere Frage also nicht falsch — anders als INSTALL.md, das die Fragen einzeln aufzählt und deshalb nachgezogen wurde.

Modelle je Phase

Design, Versionsteil und Boundary-Beurteilung (D1–D7, Vorbereitungssitzung): Opus. Mechanischer Mittelteil (die vier Dateien, Bump, Changelog-Prosa): ebenfalls Opus — der Wechsel auf Sonnet wurde am Ende der Vorbereitung angeboten und nicht vollzogen, weil die Umsetzung direkt in derselben Sitzung startete. Abschlussphase (stack-close, dieser Body, die docs/-Prüfung, der INSTALL.md-Nachzug): Opus. Alle drei Phasen auf demselben Modell; die mittlere teurer als nötig, die beiden ungeprüften Phasen auf dem Modell, das sie verlangen. Zweites Paket in Folge mit demselben Muster (#66 auch) — der angebotene Wechsel scheitert reproduzierbar daran, dass Vorbereitung und Umsetzung dieselbe Sitzung sind, was #50 als Befund bereits offen hat.

Was daraus offen weiterläuft

  • #69 (Paket D, Reproduktionslauf) ist das letzte offene Paket der Vierergruppe; #66, #67 und #68 sind geschlossen.
  • Der obligation:-Nebenbefund oben ist bewusst nicht zu einem Issue gemacht worden, sondern hier notiert: er ist ein Ein-Zeilen-Verdacht am Schema, kein Arbeitspaket, und gehört nach instructions/dev/issue-tracking.md § Incoming stubs erst ausgearbeitet, wenn ihn jemand aufgreift.
  • Die erste echte Anwendung von evolve-subtypes.md steht aus: unclassified steht auf dieser Instanz bei 0 Seiten, es gibt also nichts zu drainen. Die Instruction ist damit geschrieben, aber nicht an echtem Material gelaufen.
Aus der Architekturdiskussion vom 2026-09-08. **Paket C** von vier: A ist #66, B ist #67, D ist #69. **Erledigt und geschlossen am 2026-09-09.** Zwei Publishes, ein Kandidat (`4.8.0-beta.9`): | # | Was | Commit | |---|---|---| | 1/2 | Profilkatalog, Setup-Frage, `evolve-subtypes`-Instruction, `COLLECTION.md` | `6b300aa` | | 2/2 | `INSTALL.md` nennt die neue Setup-Frage (Menschendoku-Nachzug) | `7bc5da6` | ## Der Befund, aus dem das Paket entstand **`source_type` beschreibt diese Instanz, nicht den Stack.** Die sieben Werte (`transcript`, `analysis`, `article`, `document`, `notes`, `tracker`, `unclassified`) kommen aus *einer* Wissensbasis. Gegen drei hypothetische Zielinstanzen gestellt, hat die Achse fast nichts Gemeinsames: | Instanz | plausibles `source_type`-Enum | |---|---| | Privat-Projekte (diese hier) | transcript, analysis, article, document, notes, tracker | | Handball-Verein und -Verband | satzung, protokoll, korrespondenz, spielbericht, verbandsmitteilung | | Produktentwicklung | spec, meeting, kundenanforderung, marktstudie, postmortem | | Pen-&-Paper-Gamemaster | regelwerk, abenteuermodul, sessionlog, handout, weltenbau | Zum Vergleich: `fidelity` und `authority` (#67) sind in allen vier Zeilen dieselben Werte. **Das ist die Trennlinie** — was aus dem Substrat oder dem Konsumenten folgt, bleibt Stack-Vokabular; eine Inhaltstaxonomie ist ein Default, den eine Instanz übernimmt oder ersetzt. Architektonisch war das längst wahr: `types/source.md` trägt `root: kb`, `dist_cmd._plan_types()` liefert es samt `.schema.yaml` nur als `.template` aus, Schritt 5 von `setup-instance.md` kopiert es in die Instanz. Was fehlte, war, dass irgendjemand die Frage **stellt**. `instructions/kb-profiles.md` riet im `entities`-Abschnitt ausdrücklich „Adapt the area list first: it is the part most likely to be wrong for another domain" — und sagte im `sources`-Abschnitt über `source_type` **kein Wort**. Zweiter Befund, aus #66 mitgenommen: dort steht „Leeren keine benannte Operation war (#68 holt das nach)". Das `unclassified`-Fach hatte seit #66 einen beratenden `lint`-Befund, aber keine Prozedur, die es wieder leert. ## Die sieben Entscheidungen (Vorbereitung 2026-09-09) Alle sieben in der Vorbereitungssitzung getroffen, alle sieben unverändert umgesetzt. Vier davon korrigieren den ursprünglichen Body, der gegen den Baum nicht mehr stimmte. **D1 — Dateiname `instructions/evolve-subtypes.md`.** Muss von `link-taxonomy.md` klar unterscheidbar sein, und `instructions_cmd.manual_forbidden_references()` prüft per **Dateinamen-Substring** gegen AGENTS.md/CLAUDE.md/jede `SKILL.md` — ein generischer Name wäre auch mechanisch riskant gewesen. **D2 — Geltungsbereich: jede Subtype-Achse, `source_type` ausgearbeitet.** `entity.md`, `concept.md` und `source.md` tragen alle `subtype_field:` **und** `layout:`; `comparison` keins von beidem und fällt heraus. Eine zweite, fast gleichlautende Instruction für `entity_type` wäre die Kopie, die Invariante 8 verbietet. Instanz-spezifisch bleibt nur die Drain-Hälfte: ein `unclassified`-Fach hat allein `sources`. **D3 — Die ≥3-Aufnahmeschwelle steht ausschließlich in der neuen Instruction.** Sie existierte nirgends im Baum, nur als Absicht in #66 („die ≥3-Regel aus #68"). Der Floor in `corpus-policy.md` sagt etwas anderes (≥ 1 Seite pro *bereits deklariertem* Wert) und bleibt, wo er ist — aufgenommen wird bei 3, gehalten wird ab 1, kein Widerspruch. **D4 — Die neue Instruction verweist *nicht* auf `corpus-policy.md`.** Der ursprüngliche Body sah genau diesen Link vor; er ist unzulässig, weil `instructions/dev/` von `dist export` gepruned wird und `instructions verify`s Boundary-Check jede Referenz von außerhalb nach innen meldet. Die Untrennbarkeitsregel ist stattdessen aus sich selbst begründet (der `notes`-Fall aus #66). **Ein Entwurf der Umsetzung enthielt den Verweis trotzdem** — auf `version-parts.md`, in Schritt 4 — und wurde vor dem ersten `verify` wieder entfernt; die Entscheidung hat also im Lauf tatsächlich gegriffen, statt nur dokumentiert dazustehen. **D5 — Der ursprüngliche Punkt 4 war bereits erledigt.** `corpus-policy.md` trägt die `unclassified`-Floor-Ausnahme seit #66, mit Begründung und Invarianten-3-Bezug. Punkt und Kriterium gestrichen statt offen gelassen. **D6 — Die Setup-Frage ist neuer Unterschritt 5 in Schritt 5,** hinter dem Terminologie-Schritt. Sie hängt nicht an der Sprachentscheidung: Enum-Werte sind Identifier und folgen keiner KB-Sprache (`kb/CONTRACT.md` § Language and identifiers) — übersetzt wird nur der `title:` einer `layout:`-Zeile. **D7 — Kein `instructions sync`.** Es ändert sich keine `SKILL.md`; eine flache Instruction wird nicht publiziert. `instructions verify` ist hier der eigentliche Check. ## Was gebaut wurde **`instructions/kb-profiles.md`.** Der `sources`-Abschnitt behandelt `source_type` jetzt wie `entities` seine Area-Liste: als das, was zuerst anzupassen ist, mit zwei ausformulierten Domänenprofilen (Handball-Verein, Pen-&-Paper) als Anschauung. Dazu die Anleitung, was „übernehmen" konkret heißt — Werteliste ins Enum von `types/source.schema.yaml`, je Wert eine `layout:`-Zeile in `types/source.md` — und die Auflage, den sichtbaren Auffangwert in jedem übernommenen Vorschlag zu behalten, weil ein Subtype-Feld ohne ihn still den `default:`-getriebenen Sammelpunkt aus #66 wiederherstellt. Als Gegenbeispiel im selben Abschnitt: `fidelity` und `authority` stehen **nicht** zur Wahl. **`instructions/setup-instance.md`.** Neuer Unterschritt 5 in Schritt 5: nach dem Anwendungsgebiet fragen, `source_type`-Vorschlag ableiten, Enum und `layout:` in derselben Bearbeitung setzen — eins ohne das andere lässt einen Wert ohne Zielverzeichnis zurück. Mit der Ansage, dass der Betreiber zu diesem Zeitpunkt **null Quellen** hat und seine Taxonomie rät, bevor er Material gesehen hat: das Ergebnis ist ein Startpunkt, keine Festlegung, und `evolve-subtypes.md` ist der Weg, ihn später zu korrigieren. **`instructions/evolve-subtypes.md`, `manual: true`.** Benennt die Schleife, die werkzeugseitig vollständig existierte: Fach sehen (`lint`, `search --field`) → Kandidaten lesen → Wert samt `layout:` ergänzen → `touch --set` / `move --reconcile` → `index rebuild` / `migrate verify`. Über alle drei Subtype-Achsen (D2). Zwei Regeln im Body: - **Wert und Sweep sind untrennbar** — ein deklarierter Wert, den keine Seite trägt, ist eine Kategorie, die beim nächsten Mal zum Raten zwischen ihr und dem Auffangfach einlädt; genau so absorbierte der alte `notes`-Default 22 von 29 Source-Seiten. - **Aufnahmeschwelle ≥ 3 Seiten** — ein Wert wird zugelassen, *nachdem* er sich an echtem Material bewährt hat, nie in Erwartung. `spec` und `image` sind die Gegenbeispiele (beide vorab aufgenommen, beide ein Jahr bei null, beide in #66 gestrichen); eine kleinere Zahl ist nur eine ausdrücklich benannte Ausnahme des Betreibers (`tracker` bei zwei Seiten), nie ein Grund, die Schwelle selbst zu senken. Dazu die Abgrenzung nach oben: Umbenennen oder Streichen eines Wertes bewegt Seiten und ist eine Korpus-Migration (`migrate-corpus.md`), kein Fall dieser Schleife. Und nach unten: das Drainen läuft ohne die ≥3-Schwelle, weil eine Seite im Auffangfach ihr Ziel bereits hat. **`kb/sources/COLLECTION.md`.** Die `unclassified/`-Zeile nennt `evolve-subtypes.md` als Weg, das Fach zu leeren oder das Enum zu erweitern. **Menschendoku (`7bc5da6`).** `INSTALL.md` zählt auf, wonach `setup-instance.md` den Betreiber fragt — und dieses Paket hat dort eine Frage hinzugefügt, ohne die die Aufzählung unvollständig gewesen wäre. Neuer Aufzählungspunkt **Anwendungsgebiet**, mit dem Startpunkt-Vorbehalt, dem Verweis auf `evolve-subtypes.md` und der Abgrenzung gegen `fidelity`/`authority`. ## Ein Nebenbefund am Scaffolding `tools/wikitool new instruction` schreibt `obligation: required` ins Frontmatter, weil `types/instruction.schema.yaml` dafür ein `default:` trägt. Das Feld gehört fachlich aber nur zu einem Migrationsdokument unter `instructions/migrations/` (es steuert `migrate status`), und keine der beiden bestehenden Manual-Instructions — `kb-profiles.md`, `german-terminology.md` — trägt es. Hier von Hand entfernt. Nichts prüft das: weder `docs verify` noch `instructions verify` fragt, ob ein `obligation:` außerhalb von `migrations/` steht. Ob das ein Schema-Fehler ist (Default gehört weg, `migrate_cmd` liest ohnehin `required` als Fallback) oder gewollt, ist nicht in diesem Paket entschieden worden — es ist derselbe Mechanismus, den #66 bei `default: notes` als Ursache identifiziert hat, eine Ebene höher. ## Versionsteil **MINOR**, geprüft gegen `instructions/dev/version-parts.md`. *Forward:* eine Instanz kopiert `instructions/` und `types/` über sich; nichts umbenannt, nichts entfernt, kein Kommando, kein Flag, kein maschinengelesenes Format. *Backward:* die alte Fassung findet eine zusätzliche Instruction-Datei vor und ignoriert sie. Kein `--breaking`, kein Migrationsdokument. Kandidat `4.8.0-beta.8` → `4.8.0-beta.9`, derselbe Eintrag in place eskaliert. Der Nachzug `7bc5da6` ist reine Prosa (`INSTALL.md`) und bumpt nicht — CI's Versions-Gate ist auf Verhaltensänderungen beschränkt. ## Verifiziert - `pytest` 1076 grün, `docs verify` grün (`CHANGES.md documents version 4.8.0-beta.9`), `instructions verify` grün: `21 instruction(s) and 7 skill(s) valid, 14 published copy/copies match their source` — `evolve-subtypes.md` weder als tot noch als unzulässig verlinkt gemeldet, was beide Hälften der `manual:`-Regel gleichzeitig belegt. - Push nach `origin/main` gegengelesen statt der Tool-Meldung geglaubt: `git rev-parse HEAD origin/main` identisch auf `6b300aa`, kein Divergenz-Marker. - Kein Korpus angefasst außer der einen Zeile in `kb/sources/COLLECTION.md`: kein `work/`-Lauf, kein Mass-Update-Gate, kein `index rebuild` nötig. - CI auf `6b300aa` (dem substanziellen Commit): Run **202** (`ci.yml`) **success**, Run **203** (`release.yml`) **success ohne Release-Schnitt** — neuester Release ist unverändert `v4.7.4`, genau das Verhalten, das `version-parts.md` § Kandidatenmodell für ein `-beta.N` beschreibt. Run **204** auf dem Prosa-Nachzug `7bc5da6` lief beim Schließen noch; er ändert kein Verhalten, und der lokale Vollcheck war für ihn grün. ## Akzeptanzkriterien - [x] `instructions/kb-profiles.md` behandelt `source_type` im `sources`-Abschnitt mit zwei ausformulierten Domänenprofilen und benennt es als das, was zuerst anzupassen ist. - [x] `kb-profiles.md` sagt, dass `fidelity` und `authority` **nicht** zur Wahl stehen. - [x] `instructions/setup-instance.md` Schritt 5 fragt nach dem Anwendungsgebiet, leitet einen `source_type`-Vorschlag ab, setzt Enum und `layout:` gemeinsam, behält `unclassified` und sagt, dass das Ergebnis ein Startpunkt ist. - [x] `instructions/evolve-subtypes.md` existiert, trägt `manual: true`, und führt beide Hälften: Fach leeren und Vokabular erweitern. - [x] Ihr Body enthält beide Regeln (Untrennbarkeit, Aufnahmeschwelle ≥ 3 mit Ausnahmeklausel) und grenzt gegen `migrate-corpus.md` ab. - [x] Sie enthält **keinen** Verweis auf `instructions/dev/` (D4) — ein Entwurf hatte einen, er wurde vor dem ersten `verify` entfernt. - [x] Sie ist aus `kb/sources/COLLECTION.md`, `kb-profiles.md` und `setup-instance.md` erwähnt und aus **keiner** `SKILL.md`, keiner AGENTS.md und keiner CLAUDE.md verlinkt; per `instructions verify` belegt. - [x] `docs verify`, `instructions verify` und `pytest` grün. - [x] Changelog: Bump `--minor` auf `4.8.0-beta.9`, Prosa im bestehenden Kandidateneintrag, ohne `--breaking`, ohne Migrationsdokument. - [x] ~~`corpus-policy.md` nimmt `unclassified` vom Subtype-Floor aus~~ — bereits in #66 erledigt (D5). - [x] **Nachgetragen, im ursprünglichen Body nicht gefordert:** `INSTALL.md` nennt die neue Setup-Frage. Ohne das hätte die Aufzählung dessen, wonach das Setup fragt, eine Frage unterschlagen. ## `docs/`-Veralterung geprüft Keine der vier Seiten ist durch dieses Paket veraltet. `ownership-and-templates.md` führt die `root: kb`-Type-Specs bereits als `.template`-gestützt und instanzeigen — dieses Paket *wendet* die Eigentümerlinie an, statt sie zu verschieben, und ist damit ein Beleg für die Seite, keine Korrektur an ihr. `pipeline-rationale.md`, `version-model.md` und `why-gates-are-code.md` berührt es nicht. `README.md` bleibt ebenfalls korrekt: seine Zeile zu `setup-instance.md` ist eine bewusst unvollständige Kurzfassung („git init, author identity, an optional remote, and the first commit") und nennt weder Konventionen noch Personalization, wird durch eine weitere Frage also nicht falsch — anders als `INSTALL.md`, das die Fragen einzeln aufzählt und deshalb nachgezogen wurde. ## Modelle je Phase Design, Versionsteil und Boundary-Beurteilung (D1–D7, Vorbereitungssitzung): **Opus**. Mechanischer Mittelteil (die vier Dateien, Bump, Changelog-Prosa): **ebenfalls Opus** — der Wechsel auf Sonnet wurde am Ende der Vorbereitung angeboten und nicht vollzogen, weil die Umsetzung direkt in derselben Sitzung startete. Abschlussphase (`stack-close`, dieser Body, die `docs/`-Prüfung, der `INSTALL.md`-Nachzug): **Opus**. Alle drei Phasen auf demselben Modell; die mittlere teurer als nötig, die beiden ungeprüften Phasen auf dem Modell, das sie verlangen. Zweites Paket in Folge mit demselben Muster (#66 auch) — der angebotene Wechsel scheitert reproduzierbar daran, dass Vorbereitung und Umsetzung dieselbe Sitzung sind, was #50 als Befund bereits offen hat. ## Was daraus offen weiterläuft - **#69** (Paket D, Reproduktionslauf) ist das letzte offene Paket der Vierergruppe; #66, #67 und #68 sind geschlossen. - Der `obligation:`-Nebenbefund oben ist bewusst **nicht** zu einem Issue gemacht worden, sondern hier notiert: er ist ein Ein-Zeilen-Verdacht am Schema, kein Arbeitspaket, und gehört nach `instructions/dev/issue-tracking.md` § Incoming stubs erst ausgearbeitet, wenn ihn jemand aufgreift. - Die erste echte Anwendung von `evolve-subtypes.md` steht aus: `unclassified` steht auf dieser Instanz bei 0 Seiten, es gibt also nichts zu drainen. Die Instruction ist damit geschrieben, aber nicht an echtem Material gelaufen.
torben added the prio/plannedsize/Marea/kbarea/distributionkind/build labels 2026-09-08 17:32:39 +00:00
Author
Owner

Changelog: Body auf den Vorbereitungsstand umgeschrieben, gegen den Baum geprüft (2026-09-09). Neu: § Entscheidungen mit D1–D7, § Versionsteil (MINOR, Kandidat 4.8.0-beta.8 bleibt offen und eskaliert in place), § Prüfstand mit den vorab gemessenen Zahlen. Vier Korrekturen am alten Text: D4 — der vorgesehene Link auf instructions/dev/corpus-policy.md ist unzulässig, weil instructions verifys Boundary-Check ihn als in einer verteilten Instanz dangelnd meldet; die Untrennbarkeitsregel wird stattdessen aus sich selbst begründet. D5 — der frühere Punkt 4 (corpus-policy.md nimmt unclassified vom Subtype-Floor aus) ist seit #66 erledigt, Punkt und Kriterium gestrichen statt offen. D2 — Geltungsbereich auf jede Subtype-Achse erweitert (entity/concept/source tragen alle subtype_field: + layout:), source_type bleibt der ausgearbeitete Fall. D7instructions sync fällt aus den Kriterien, weil keine SKILL.md berührt wird. Neuer Punkt 4: kb/sources/COLLECTION.md benennt die Schleife am unclassified/-Fach. Dateiname festgelegt: instructions/evolve-subtypes.md (D1). Nicht begonnen — die Umsetzung folgt als eigene Sitzung.

**Changelog:** Body auf den Vorbereitungsstand umgeschrieben, gegen den Baum geprüft (2026-09-09). Neu: § Entscheidungen mit D1–D7, § Versionsteil (MINOR, Kandidat `4.8.0-beta.8` bleibt offen und eskaliert in place), § Prüfstand mit den vorab gemessenen Zahlen. Vier Korrekturen am alten Text: **D4** — der vorgesehene Link auf `instructions/dev/corpus-policy.md` ist unzulässig, weil `instructions verify`s Boundary-Check ihn als in einer verteilten Instanz dangelnd meldet; die Untrennbarkeitsregel wird stattdessen aus sich selbst begründet. **D5** — der frühere Punkt 4 (`corpus-policy.md` nimmt `unclassified` vom Subtype-Floor aus) ist seit #66 erledigt, Punkt und Kriterium gestrichen statt offen. **D2** — Geltungsbereich auf jede Subtype-Achse erweitert (`entity`/`concept`/`source` tragen alle `subtype_field:` + `layout:`), `source_type` bleibt der ausgearbeitete Fall. **D7** — `instructions sync` fällt aus den Kriterien, weil keine `SKILL.md` berührt wird. Neuer Punkt 4: `kb/sources/COLLECTION.md` benennt die Schleife am `unclassified/`-Fach. Dateiname festgelegt: `instructions/evolve-subtypes.md` (D1). Nicht begonnen — die Umsetzung folgt als eigene Sitzung.
Author
Owner

Changelog: Umsetzung abgeschlossen. Alle vier Punkte implementiert (kb-profiles.md, setup-instance.md, neue instructions/evolve-subtypes.md, kb/sources/COLLECTION.md), docs verify/instructions verify/pytest grün, Version auf 4.8.0-beta.9 eskaliert, Changelog-Prosa geschrieben. Alle Akzeptanzkriterien abgehakt bis auf den Publish selbst — der ist auf ausdrückliche Anweisung dieser Sitzung nicht ausgeführt. Neuer § Offen im Body nennt das als letzten Schritt vor stack-close.

**Changelog:** Umsetzung abgeschlossen. Alle vier Punkte implementiert (`kb-profiles.md`, `setup-instance.md`, neue `instructions/evolve-subtypes.md`, `kb/sources/COLLECTION.md`), `docs verify`/`instructions verify`/`pytest` grün, Version auf `4.8.0-beta.9` eskaliert, Changelog-Prosa geschrieben. Alle Akzeptanzkriterien abgehakt bis auf den Publish selbst — der ist auf ausdrückliche Anweisung dieser Sitzung nicht ausgeführt. Neuer § Offen im Body nennt das als letzten Schritt vor `stack-close`.
Author
Owner

Changelog: Abschluss-Rewrite, Issue geschlossen. Body auf Vergangenheitsform gebracht: Commit-Tabelle (6b300aa, 7bc5da6), D1–D7 als getroffene und umgesetzte Entscheidungen statt als Vorhaben, § Was gebaut wurde ersetzt § Umzusetzen. Neu gegenüber dem Vorbereitungsstand: der INSTALL.md-Nachzug als zusätzliches, im ursprünglichen Body nicht gefordertes Kriterium — die Datei zählt die Setup-Fragen einzeln auf und hätte die neue unterschlagen; der obligation:-Nebenbefund am new instruction-Scaffolding (bewusst als Notiz, nicht als Issue); die docs/-Veralterungsprüfung (vier Seiten, keine betroffen, mit Begründung je Seite); die Modelle je Phase (dreimal Opus, mit dem Hinweis, dass der angebotene Sonnet-Wechsel zum zweiten Mal in Folge daran scheitert, dass Vorbereitung und Umsetzung dieselbe Sitzung sind — Befund liegt an #50). CI nachgetragen: Runs 202/203 auf 6b300aa beide success, release.yml ohne Release-Schnitt (neuester Release unverändert v4.7.4), Run 204 auf dem Prosa-Nachzug lief beim Schließen noch. § Offen zu #69 als letztem Paket der Vierergruppe.

**Changelog:** Abschluss-Rewrite, Issue geschlossen. Body auf Vergangenheitsform gebracht: Commit-Tabelle (`6b300aa`, `7bc5da6`), D1–D7 als getroffene und umgesetzte Entscheidungen statt als Vorhaben, § Was gebaut wurde ersetzt § Umzusetzen. Neu gegenüber dem Vorbereitungsstand: der `INSTALL.md`-Nachzug als zusätzliches, im ursprünglichen Body nicht gefordertes Kriterium — die Datei zählt die Setup-Fragen einzeln auf und hätte die neue unterschlagen; der `obligation:`-Nebenbefund am `new instruction`-Scaffolding (bewusst als Notiz, nicht als Issue); die `docs/`-Veralterungsprüfung (vier Seiten, keine betroffen, mit Begründung je Seite); die Modelle je Phase (dreimal Opus, mit dem Hinweis, dass der angebotene Sonnet-Wechsel zum zweiten Mal in Folge daran scheitert, dass Vorbereitung und Umsetzung dieselbe Sitzung sind — Befund liegt an #50). CI nachgetragen: Runs 202/203 auf `6b300aa` beide success, `release.yml` ohne Release-Schnitt (neuester Release unverändert `v4.7.4`), Run 204 auf dem Prosa-Nachzug lief beim Schließen noch. § Offen zu #69 als letztem Paket der Vierergruppe.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#68