tools/wikitool new instruction --name "<name>" schrieb obligation: required in jede neue
Instruktion. obligation: ist ein Migrationsfeld (instructions/CONTRACT.md
§ instructions/migrations/, types/instruction.schema.yaml) - eine gewoehnliche Instruktion
ist keine Migration und hat nichts, was laufen muesste.
Ursache:tools/chemenu/commands/new_page.py, _build_frontmatter() materialisierte jedes
Schema-default: unbesehen. Ueber alle acht types/*.schema.yaml gibt es genau zwei: provenance (entity/concept, in required:) und obligation (instruction, nicht in required:).
Entscheidung
Der Scaffold materialisiert ein Schema-default: nur fuer ein Feld, das das Schema auch in required: fuehrt. Ein default: auf einem optionalen Feld ist eine Lese-Annahme (was ein
fehlendes Feld bedeutet), keine Schreib-Vorgabe - sie hinzuschreiben macht aus der stillen
Annahme eine ausgesprochene Behauptung. Die Lese-Annahme selbst steht unveraendert und
unabhaengig in tools/chemenu/kb_state.py:164
(str(frontmatter.get("obligation") or REQUIRED)), abgedeckt von test_obligation_defaults_to_required_when_undeclared.
Der array-Zweig direkt daneben (leere Liste [] fuer ein unbesetztes optionales Array wie tags:) ist davon ausdruecklich ausgenommen und blieb unveraendert: ein fehlender
Schluessel wuerde sonst den Template-Filter-Suffix woertlich in den Body schreiben
({related|bullets} -> das Wort "bullets" in der Seite).
Umsetzung
tools/chemenu/commands/new_page.py: _build_frontmatter() prueft jetzt field_name in required neben "default" in field_schema; Modul- und Funktions-Docstring
aktualisiert.
Tests in tools/chemenu/tests/test_new_page.py:
test_new_instruction_omits_migration_only_default - kein obligation: im Scaffold
test_new_instruction_explicit_obligation_is_still_written - --set obligation=offered
schreibt das Feld weiterhin (expliziter Pfad unberuehrt)
test_new_entity_still_materializes_empty_arrays_for_unset_optional_fields - tags/related/sources bleiben [], kein woertliches "bullets" im Body
test_new_entity_applies_schema_declared_defaults (bestehend) - provenance: general
bleibt unveraendert
Doc-Pull-Through: types/type-spec.md § Anatomy of a type, tools/CONTRACT.mds new-Zeile, instructions/CONTRACT.md § instructions/migrations/ (haelt fest, dass der Scaffold keines
der drei Migrationsfelder liefert - sie werden von Hand ergaenzt).
Version --patch (6.1.0-beta.5 -> 6.1.0-beta.6): kein Bestandsdokument aendert sich, keine
Migration, ein zurueckgerolltes Werkzeug schriebe das Feld nur wieder mit.
Verifiziert:pytest (1312 passed), tools/wikitool docs verify (OK, keine neuen Befunde), tools/wikitool instructions verify (OK, 23 Instruktionen/7 Skills gueltig). Reproduziert vor
der Aenderung (Scaffold schrieb obligation: required), gegengeprueft nach der Aenderung
(Feld fehlt; --set obligation=offered schreibt es weiterhin).
Kein docs/-Dokument traegt Reasoning ueber Scaffold-Defaults - keines wurde stale.
Publiziert: aa31d43 auf main.
Akzeptanzkriterien
tools/wikitool new instruction --name "x" erzeugt eine Frontmatter ohne obligation:.
Kein Migrationsdokument wird vom Scaffold vollstaendig erzeugt (weder vorher noch nachher - migrates_to:/migration_kind: haben kein default:); die drei Migrationsfelder werden
von Hand ergaenzt, jetzt in instructions/CONTRACT.md dokumentiert.
Frontmatter-Tests decken den instruction-Scaffold ab (s.o.).
docs verify, instructions verify, pytest ohne neue Befunde.
Modelle
Triage/Design (Entscheidung als Regel, verworfene Alternativen): Opus 5. Mechanische Mitte
(Code, Tests, Doc-Pull-Through, Version-Bump): Opus 5. Closing-Phase (dieser Body, docs/-Staleness-Check): Opus 5 - Wechsel zu Sonnet wurde angeboten, Nutzer hat weitergearbeitet.
## Befund
`tools/wikitool new instruction --name "<name>"` schrieb `obligation: required` in jede neue
Instruktion. `obligation:` ist ein Migrationsfeld (`instructions/CONTRACT.md`
§ `instructions/migrations/`, `types/instruction.schema.yaml`) - eine gewoehnliche Instruktion
ist keine Migration und hat nichts, was laufen muesste.
**Ursache:** `tools/chemenu/commands/new_page.py`, `_build_frontmatter()` materialisierte jedes
Schema-`default:` unbesehen. Ueber alle acht `types/*.schema.yaml` gibt es genau zwei:
`provenance` (`entity`/`concept`, in `required:`) und `obligation` (`instruction`, nicht in
`required:`).
## Entscheidung
**Der Scaffold materialisiert ein Schema-`default:` nur fuer ein Feld, das das Schema auch in
`required:` fuehrt.** Ein `default:` auf einem optionalen Feld ist eine Lese-Annahme (was ein
fehlendes Feld bedeutet), keine Schreib-Vorgabe - sie hinzuschreiben macht aus der stillen
Annahme eine ausgesprochene Behauptung. Die Lese-Annahme selbst steht unveraendert und
unabhaengig in `tools/chemenu/kb_state.py:164`
(`str(frontmatter.get("obligation") or REQUIRED)`), abgedeckt von
`test_obligation_defaults_to_required_when_undeclared`.
Der `array`-Zweig direkt daneben (leere Liste `[]` fuer ein unbesetztes optionales Array wie
`tags:`) ist davon **ausdruecklich ausgenommen** und blieb unveraendert: ein fehlender
Schluessel wuerde sonst den Template-Filter-Suffix woertlich in den Body schreiben
(`{related|bullets}` -> das Wort "bullets" in der Seite).
## Umsetzung
- `tools/chemenu/commands/new_page.py`: `_build_frontmatter()` prueft jetzt
`field_name in required` neben `"default" in field_schema`; Modul- und Funktions-Docstring
aktualisiert.
- Tests in `tools/chemenu/tests/test_new_page.py`:
- `test_new_instruction_omits_migration_only_default` - kein `obligation:` im Scaffold
- `test_new_instruction_explicit_obligation_is_still_written` - `--set obligation=offered`
schreibt das Feld weiterhin (expliziter Pfad unberuehrt)
- `test_new_entity_still_materializes_empty_arrays_for_unset_optional_fields` -
`tags`/`related`/`sources` bleiben `[]`, kein woertliches "bullets" im Body
- `test_new_entity_applies_schema_declared_defaults` (bestehend) - `provenance: general`
bleibt unveraendert
- Doc-Pull-Through: `types/type-spec.md` § Anatomy of a type, `tools/CONTRACT.md`s `new`-Zeile,
`instructions/CONTRACT.md` § `instructions/migrations/` (haelt fest, dass der Scaffold keines
der drei Migrationsfelder liefert - sie werden von Hand ergaenzt).
- Version `--patch` (6.1.0-beta.5 -> 6.1.0-beta.6): kein Bestandsdokument aendert sich, keine
Migration, ein zurueckgerolltes Werkzeug schriebe das Feld nur wieder mit.
**Verifiziert:** `pytest` (1312 passed), `tools/wikitool docs verify` (OK, keine neuen Befunde),
`tools/wikitool instructions verify` (OK, 23 Instruktionen/7 Skills gueltig). Reproduziert vor
der Aenderung (Scaffold schrieb `obligation: required`), gegengeprueft nach der Aenderung
(Feld fehlt; `--set obligation=offered` schreibt es weiterhin).
Kein `docs/`-Dokument traegt Reasoning ueber Scaffold-Defaults - keines wurde stale.
Publiziert: `aa31d43` auf `main`.
## Akzeptanzkriterien
- [x] `tools/wikitool new instruction --name "x"` erzeugt eine Frontmatter ohne `obligation:`.
- [x] Kein Migrationsdokument wird vom Scaffold vollstaendig erzeugt (weder vorher noch nachher -
`migrates_to:`/`migration_kind:` haben kein `default:`); die drei Migrationsfelder werden
von Hand ergaenzt, jetzt in `instructions/CONTRACT.md` dokumentiert.
- [x] Frontmatter-Tests decken den `instruction`-Scaffold ab (s.o.).
- [x] `docs verify`, `instructions verify`, `pytest` ohne neue Befunde.
## Modelle
Triage/Design (Entscheidung als Regel, verworfene Alternativen): Opus 5. Mechanische Mitte
(Code, Tests, Doc-Pull-Through, Version-Bump): Opus 5. Closing-Phase (dieser Body,
`docs/`-Staleness-Check): Opus 5 - Wechsel zu Sonnet wurde angeboten, Nutzer hat weitergearbeitet.
Gefunden beim Anlegen der Instruktion aus #108.
Changelog: Body auf Umsetzungsstand umgeschrieben. Ursache gegen den Baum verifiziert (new_page.py:108-109 materialisiert jedes Schema-default:; ueber alle acht Schemas gibt es genau zwei, provenance in required:, obligation nicht) und der Defekt reproduziert. Neu: die Entscheidung als Regel (default: nur fuer ein Pflichtfeld materialisieren) mit Begruendung und zwei verworfenen Alternativen; ein Abschnitt, der den array-Zweig ausdruecklich ausnimmt (sonst rendert {related|bullets} den Literaltext bullets); Umsetzungshinweise zum Test-Harness (root: repo liest config.ROOT, Fixture use_shipped_type_specs), zur Doc-Pull-Through-Liste und zur Versionsstelle (--patch). Altes Akzeptanzkriterium 2 aufgeloest: der Scaffold erzeugt heute kein vollstaendiges Migrationsdokument (migrates_to:/migration_kind: haben kein default:), damit faellt seine Bedingung weg und nur die Dokumentationspflicht bleibt. Drei neue Regressionskriterien (provenance, leere Arrays, --set obligation=offered).
**Changelog:** Body auf Umsetzungsstand umgeschrieben. Ursache gegen den Baum verifiziert (`new_page.py:108-109` materialisiert jedes Schema-`default:`; ueber alle acht Schemas gibt es genau zwei, `provenance` in `required:`, `obligation` nicht) und der Defekt reproduziert. Neu: die Entscheidung als Regel (`default:` nur fuer ein Pflichtfeld materialisieren) mit Begruendung und zwei verworfenen Alternativen; ein Abschnitt, der den `array`-Zweig ausdruecklich ausnimmt (sonst rendert `{related|bullets}` den Literaltext `bullets`); Umsetzungshinweise zum Test-Harness (`root: repo` liest `config.ROOT`, Fixture `use_shipped_type_specs`), zur Doc-Pull-Through-Liste und zur Versionsstelle (`--patch`). Altes Akzeptanzkriterium 2 aufgeloest: der Scaffold erzeugt heute **kein** vollstaendiges Migrationsdokument (`migrates_to:`/`migration_kind:` haben kein `default:`), damit faellt seine Bedingung weg und nur die Dokumentationspflicht bleibt. Drei neue Regressionskriterien (`provenance`, leere Arrays, `--set obligation=offered`).
Changelog: Body auf Endzustand umgeschrieben. Umgesetzt und publiziert (aa31d43): _build_frontmatter() materialisiert ein Schema-default: jetzt nur fuer ein Feld in required:; drei neue Tests plus Doc-Pull-Through in types/type-spec.md, tools/CONTRACT.md, instructions/CONTRACT.md. Alle vier Akzeptanzkriterien erfuellt (Kriterium 2 im Sinne der finalen Fassung: der Scaffold liefert nie eines der drei Migrationsfelder, jetzt dokumentiert statt als offene Bedingung). Version 6.1.0-beta.6, pytest/docs verify/instructions verify gruen.
**Changelog:** Body auf Endzustand umgeschrieben. Umgesetzt und publiziert (`aa31d43`): `_build_frontmatter()` materialisiert ein Schema-`default:` jetzt nur fuer ein Feld in `required:`; drei neue Tests plus Doc-Pull-Through in `types/type-spec.md`, `tools/CONTRACT.md`, `instructions/CONTRACT.md`. Alle vier Akzeptanzkriterien erfuellt (Kriterium 2 im Sinne der finalen Fassung: der Scaffold liefert nie eines der drei Migrationsfelder, jetzt dokumentiert statt als offene Bedingung). Version 6.1.0-beta.6, `pytest`/`docs verify`/`instructions verify` gruen.
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.
Befund
tools/wikitool new instruction --name "<name>"schriebobligation: requiredin jede neueInstruktion.
obligation:ist ein Migrationsfeld (instructions/CONTRACT.md§
instructions/migrations/,types/instruction.schema.yaml) - eine gewoehnliche Instruktionist keine Migration und hat nichts, was laufen muesste.
Ursache:
tools/chemenu/commands/new_page.py,_build_frontmatter()materialisierte jedesSchema-
default:unbesehen. Ueber alle achttypes/*.schema.yamlgibt es genau zwei:provenance(entity/concept, inrequired:) undobligation(instruction, nicht inrequired:).Entscheidung
Der Scaffold materialisiert ein Schema-
default:nur fuer ein Feld, das das Schema auch inrequired:fuehrt. Eindefault:auf einem optionalen Feld ist eine Lese-Annahme (was einfehlendes Feld bedeutet), keine Schreib-Vorgabe - sie hinzuschreiben macht aus der stillen
Annahme eine ausgesprochene Behauptung. Die Lese-Annahme selbst steht unveraendert und
unabhaengig in
tools/chemenu/kb_state.py:164(
str(frontmatter.get("obligation") or REQUIRED)), abgedeckt vontest_obligation_defaults_to_required_when_undeclared.Der
array-Zweig direkt daneben (leere Liste[]fuer ein unbesetztes optionales Array wietags:) ist davon ausdruecklich ausgenommen und blieb unveraendert: ein fehlenderSchluessel wuerde sonst den Template-Filter-Suffix woertlich in den Body schreiben
(
{related|bullets}-> das Wort "bullets" in der Seite).Umsetzung
tools/chemenu/commands/new_page.py:_build_frontmatter()prueft jetztfield_name in requiredneben"default" in field_schema; Modul- und Funktions-Docstringaktualisiert.
tools/chemenu/tests/test_new_page.py:test_new_instruction_omits_migration_only_default- keinobligation:im Scaffoldtest_new_instruction_explicit_obligation_is_still_written---set obligation=offeredschreibt das Feld weiterhin (expliziter Pfad unberuehrt)
test_new_entity_still_materializes_empty_arrays_for_unset_optional_fields-tags/related/sourcesbleiben[], kein woertliches "bullets" im Bodytest_new_entity_applies_schema_declared_defaults(bestehend) -provenance: generalbleibt unveraendert
types/type-spec.md§ Anatomy of a type,tools/CONTRACT.mdsnew-Zeile,instructions/CONTRACT.md§instructions/migrations/(haelt fest, dass der Scaffold keinesder drei Migrationsfelder liefert - sie werden von Hand ergaenzt).
--patch(6.1.0-beta.5 -> 6.1.0-beta.6): kein Bestandsdokument aendert sich, keineMigration, ein zurueckgerolltes Werkzeug schriebe das Feld nur wieder mit.
Verifiziert:
pytest(1312 passed),tools/wikitool docs verify(OK, keine neuen Befunde),tools/wikitool instructions verify(OK, 23 Instruktionen/7 Skills gueltig). Reproduziert vorder Aenderung (Scaffold schrieb
obligation: required), gegengeprueft nach der Aenderung(Feld fehlt;
--set obligation=offeredschreibt es weiterhin).Kein
docs/-Dokument traegt Reasoning ueber Scaffold-Defaults - keines wurde stale.Publiziert:
aa31d43aufmain.Akzeptanzkriterien
tools/wikitool new instruction --name "x"erzeugt eine Frontmatter ohneobligation:.migrates_to:/migration_kind:haben keindefault:); die drei Migrationsfelder werdenvon Hand ergaenzt, jetzt in
instructions/CONTRACT.mddokumentiert.instruction-Scaffold ab (s.o.).docs verify,instructions verify,pytestohne neue Befunde.Modelle
Triage/Design (Entscheidung als Regel, verworfene Alternativen): Opus 5. Mechanische Mitte
(Code, Tests, Doc-Pull-Through, Version-Bump): Opus 5. Closing-Phase (dieser Body,
docs/-Staleness-Check): Opus 5 - Wechsel zu Sonnet wurde angeboten, Nutzer hat weitergearbeitet.Gefunden beim Anlegen der Instruktion aus #108.
Changelog: Body auf Umsetzungsstand umgeschrieben. Ursache gegen den Baum verifiziert (
new_page.py:108-109materialisiert jedes Schema-default:; ueber alle acht Schemas gibt es genau zwei,provenanceinrequired:,obligationnicht) und der Defekt reproduziert. Neu: die Entscheidung als Regel (default:nur fuer ein Pflichtfeld materialisieren) mit Begruendung und zwei verworfenen Alternativen; ein Abschnitt, der denarray-Zweig ausdruecklich ausnimmt (sonst rendert{related|bullets}den Literaltextbullets); Umsetzungshinweise zum Test-Harness (root: repoliestconfig.ROOT, Fixtureuse_shipped_type_specs), zur Doc-Pull-Through-Liste und zur Versionsstelle (--patch). Altes Akzeptanzkriterium 2 aufgeloest: der Scaffold erzeugt heute kein vollstaendiges Migrationsdokument (migrates_to:/migration_kind:haben keindefault:), damit faellt seine Bedingung weg und nur die Dokumentationspflicht bleibt. Drei neue Regressionskriterien (provenance, leere Arrays,--set obligation=offered).Changelog: Body auf Endzustand umgeschrieben. Umgesetzt und publiziert (
aa31d43):_build_frontmatter()materialisiert ein Schema-default:jetzt nur fuer ein Feld inrequired:; drei neue Tests plus Doc-Pull-Through intypes/type-spec.md,tools/CONTRACT.md,instructions/CONTRACT.md. Alle vier Akzeptanzkriterien erfuellt (Kriterium 2 im Sinne der finalen Fassung: der Scaffold liefert nie eines der drei Migrationsfelder, jetzt dokumentiert statt als offene Bedingung). Version 6.1.0-beta.6,pytest/docs verify/instructions verifygruen.