Erledigt (ee24b6e, Stack 7.0.0-beta.1). Paket 1 aus #119 (D16, D17, D22, D24, D27, D28,
D29). Legt die kb/-Haelfte der Projektwelt an.
Was gebaut wurde
Ein neuer Seitentyp fuer das Vorhaben — Ziel, Beteiligte, Endzustand, offene Schleifen —
abgegrenzt gegen das Artefakt, das weiter entity ist (#122).
Type-Spec
types/project.md + types/project.schema.yaml, beide root: kb und damit instanzeigen, also
als .template ausgeliefert (generisch ueber dist_cmd.pys bestehenden Mechanismus fuer jeden root: kb-Typ mit base_dir: — kein Code dafuer noetig).
Pflichtfelder wie geplant: type, state (active/dormant/completed/abandoned, default: active), responsibility (subtype_field, haus/finanzen/technik, kein
Default), created/modified, summary, provenance (default: general). related/sources
optional. base_dir: gtd, also kb/gtd/<bereich>/<Titel>.md.
Vorlage
## Ziel, ## Kontext, ## Beteiligte, ## Status, ## Entscheidungen, ## Gelerntes — wie
in der Ausschreibung. Die beiden Regeln aus #119 (## Status ist dauerhafte Charakterisierung,
nicht Momentzustand; ## Beteiligte traegt Erwaehnungen ohne Wikilink/eigene Seite) stehen
sowohl im Type-Spec (types/project.md § Authoring guidance) als auch in kb/gtd/COLLECTION.md (§ Two rules unique to this collection).
Collection
kb/gtd/COLLECTION.md mit required_by_stack: true. outbound:-Bloecke fuer entities/concepts/sources/gtd, vorerst nur see-also — die Beteiligungs-Label-Frage
bleibt #118. Umgekehrt traegt kb/entities/COLLECTION.md jetzt einen gtd: [see-also]-Block;
ohne ihn lehnt xref add jede Kante von einer Entity auf ein Vorhaben ab — verifiziert
end-to-end (Ablehnung vor dem Block, Erfolg danach, Testkante wieder entfernt).
Stack-Forderung
project/state: steht jetzt neben source/raw_files: in kb_collections.STACK_REQUIRED_TYPES/STACK_REQUIRED_TYPE_FIELDS — eine Codezeile, die docs_verify.check_stack_required_types() und stack_required_collections() (beide bereits
generisch) automatisch auf project/gtd mit ausdehnt.
Akzeptanzkriterien
tools/wikitool types describe project beschreibt den Typ vollstaendig; types list
fuehrt ihn mit base_dir: kb/gtd.
tools/wikitool new project --name X --set responsibility=haus (nicht --responsibility —
das war Kurzschrift in der Ausschreibung, das reale CLI-Muster ist --set feld=wert wie
bei entity_type) erzeugt kb/gtd/haus/X.md mit allen sechs Abschnitten und state: active.
Ein Wert ausserhalb des state-Enums wird abgelehnt, nicht stillschweigend geschrieben —
manuell verifiziert (--set state=erledigt → Fehler, keine Datei).
Ein responsibility-Wert ohne layout:-Eintrag fuehrt zu einem Befund, nicht zu einer
Seite an unerwarteter Stelle — kein neuer Lint-Check noetig: new_page_command
validiert bereits vor dem Schreiben (_validate_or_fail laeuft vor write_page), also
verhindert die reine Enum-Deklaration von responsibility (kein freier String) jeden
Schreibvorgang mit einem nicht gelisteten Wert von vornherein. Manuell verifiziert.
kb/gtd/ wird von wikitool als Collection erkannt, und index rebuild erzeugt je
Verantwortungsbereich eine Katalogsektion — verifiziert (kb/gtd/INDEX.md mit ## Haus-Sektion, kb/index.md fuehrt gtd/).
Eine Kante von einer Personenseite auf eine Vorhabenseite ist autorisierbar, sobald das
Label aus #118 existiert; ohne den gtd:-Block in kb/entities/COLLECTION.md lehnt xref add sie ab — beide Richtungen end-to-end verifiziert.
docs verifyFAILt auf einem Baum ohne Type-Spec name: project mit state:, und passiert einen Baum mit zusaetzlichen instanzeigenen Feldern — neu mit dedizierten
Tests abgedeckt (test_docs_verify.py, test_kb_collections.py); vorher gab es dafuer gar
keine direkte Testabdeckung, nur den indirekten Weg ueber einen vollen verify()-Lauf
gegen den echten Baum.
dist export liefert types/project.md.template und .schema.yaml.template aus, nicht
die adoptierten Dateien — generisch bereits durch _plan_types()/ instance_owned_type_stems() abgedeckt, mitgeprueft von der bestehenden test_page_type_specs_ship_as_templates_and_stack_types_do_not, die jetzt automatisch auch project gegen den echten Baum durchlaeuft.
kb/gtd/COLLECTION.md wird als .template ausgeliefert — gleicher generischer Mechanismus
(iter_kb_collections()-Schleife in dist_cmd.py).
Versionsteil gegen instructions/dev/version-parts.md: die Ausschreibung nahm --minor
an, das war falsch. Der Rueckweg-Test ergab: eine aeltere Instanz, die die neue tools/
uebernimmt ohne types/project.md.template zu adoptieren, faellt bei docs verify durch,
wo sie vorher bestand — das verletzt die Forward-Haelfte des Drop-in-Tests, also
Grenzuebertritt. Mit dem Betreiber abgestimmt (Alternativen erwogen: kb_version-Gating wie
bei labelled edges, oder die Stack-Forderung auf einen spaeteren Bump verschieben) und --major gewaehlt, exakt nach sources eigenem (aelterem, ungegatetem) Vorbild.
Geshippt als 7.0.0-beta.1 mit --breaking/--no-migration (kein Content-Migrationsbedarf
— der Fix ist die gewoehnliche .template-Adoption).
Nebenbei mitkorrigiert
README.mds Verzeichnisbaum nannte unter kb/entities/ noch projects/ statt codebases/ —
Ueberbleibsel aus #122, beim Beruehren desselben Baums mitgezogen.
kb_collections.declaration_issues()s Meldung fuer eine fehlende Pflicht-Collection nannte
immer source, unabhaengig davon, welcher Typ tatsaechlich fehlte — ein latenter Fehler, der
erst mit einem zweiten Eintrag in STACK_REQUIRED_TYPES sichtbar wurde (drei betroffene Tests
in test_conventions.py liefen vorher gegen eine Welt mit nur einer Pflicht-Collection).
Behoben mit der neuen stack_required_collection_owners(), die den Typ pro Collection
generisch ableitet statt ihn hart zu kodieren.
Abhaengigkeiten
Lief nach #122, wie geplant. Entblockt jetzt #118 (der gtd:-Block, auf den es wartete,
existiert). #124/#125/#126 koennen wie in #119s Umsetzungstabelle vorgesehen anlaufen.
**Erledigt** (`ee24b6e`, Stack 7.0.0-beta.1). Paket 1 aus #119 (D16, D17, D22, D24, D27, D28,
D29). Legt die `kb/`-Haelfte der Projektwelt an.
## Was gebaut wurde
Ein neuer Seitentyp fuer das **Vorhaben** — Ziel, Beteiligte, Endzustand, offene Schleifen —
abgegrenzt gegen das **Artefakt**, das weiter `entity` ist (#122).
### Type-Spec
`types/project.md` + `types/project.schema.yaml`, beide `root: kb` und damit instanzeigen, also
als `.template` ausgeliefert (generisch ueber `dist_cmd.py`s bestehenden Mechanismus fuer jeden
`root: kb`-Typ mit `base_dir:` — kein Code dafuer noetig).
Pflichtfelder wie geplant: `type`, `state` (`active`/`dormant`/`completed`/`abandoned`,
`default: active`), `responsibility` (`subtype_field`, `haus`/`finanzen`/`technik`, kein
Default), `created`/`modified`, `summary`, `provenance` (`default: general`). `related`/`sources`
optional. `base_dir: gtd`, also `kb/gtd/<bereich>/<Titel>.md`.
### Vorlage
`## Ziel`, `## Kontext`, `## Beteiligte`, `## Status`, `## Entscheidungen`, `## Gelerntes` — wie
in der Ausschreibung. Die beiden Regeln aus #119 (`## Status` ist dauerhafte Charakterisierung,
nicht Momentzustand; `## Beteiligte` traegt Erwaehnungen ohne Wikilink/eigene Seite) stehen
sowohl im Type-Spec (`types/project.md` § Authoring guidance) als auch in
`kb/gtd/COLLECTION.md` (§ Two rules unique to this collection).
### Collection
`kb/gtd/COLLECTION.md` mit `required_by_stack: true`. `outbound:`-Bloecke fuer
`entities`/`concepts`/`sources`/`gtd`, vorerst nur `see-also` — die Beteiligungs-Label-Frage
bleibt #118. Umgekehrt traegt `kb/entities/COLLECTION.md` jetzt einen `gtd: [see-also]`-Block;
ohne ihn lehnt `xref add` jede Kante von einer Entity auf ein Vorhaben ab — verifiziert
end-to-end (Ablehnung vor dem Block, Erfolg danach, Testkante wieder entfernt).
### Stack-Forderung
`project`/`state:` steht jetzt neben `source`/`raw_files:` in
`kb_collections.STACK_REQUIRED_TYPES`/`STACK_REQUIRED_TYPE_FIELDS` — eine Codezeile, die
`docs_verify.check_stack_required_types()` und `stack_required_collections()` (beide bereits
generisch) automatisch auf `project`/`gtd` mit ausdehnt.
## Akzeptanzkriterien
- [x] `tools/wikitool types describe project` beschreibt den Typ vollstaendig; `types list`
fuehrt ihn mit `base_dir: kb/gtd`.
- [x] `tools/wikitool new project --name X --set responsibility=haus` (nicht `--responsibility` —
das war Kurzschrift in der Ausschreibung, das reale CLI-Muster ist `--set feld=wert` wie
bei `entity_type`) erzeugt `kb/gtd/haus/X.md` mit allen sechs Abschnitten und
`state: active`.
- [x] Ein Wert ausserhalb des `state`-Enums wird abgelehnt, nicht stillschweigend geschrieben —
manuell verifiziert (`--set state=erledigt` → Fehler, keine Datei).
- [x] Ein `responsibility`-Wert ohne `layout:`-Eintrag fuehrt zu einem Befund, nicht zu einer
Seite an unerwarteter Stelle — **kein neuer Lint-Check noetig**: `new_page_command`
validiert bereits vor dem Schreiben (`_validate_or_fail` laeuft vor `write_page`), also
verhindert die reine Enum-Deklaration von `responsibility` (kein freier String) jeden
Schreibvorgang mit einem nicht gelisteten Wert von vornherein. Manuell verifiziert.
- [x] `kb/gtd/` wird von `wikitool` als Collection erkannt, und `index rebuild` erzeugt je
Verantwortungsbereich eine Katalogsektion — verifiziert (`kb/gtd/INDEX.md` mit
`## Haus`-Sektion, `kb/index.md` fuehrt `gtd/`).
- [x] Eine Kante von einer Personenseite auf eine Vorhabenseite ist autorisierbar, sobald das
Label aus #118 existiert; ohne den `gtd:`-Block in `kb/entities/COLLECTION.md` lehnt
`xref add` sie ab — beide Richtungen end-to-end verifiziert.
- [x] `docs verify` **FAILt** auf einem Baum ohne Type-Spec `name: project` mit `state:`, und
**passiert** einen Baum mit zusaetzlichen instanzeigenen Feldern — neu mit dedizierten
Tests abgedeckt (`test_docs_verify.py`, `test_kb_collections.py`); vorher gab es dafuer gar
keine direkte Testabdeckung, nur den indirekten Weg ueber einen vollen `verify()`-Lauf
gegen den echten Baum.
- [x] `dist export` liefert `types/project.md.template` und `.schema.yaml.template` aus, nicht
die adoptierten Dateien — generisch bereits durch `_plan_types()`/
`instance_owned_type_stems()` abgedeckt, mitgeprueft von der bestehenden
`test_page_type_specs_ship_as_templates_and_stack_types_do_not`, die jetzt automatisch auch
`project` gegen den echten Baum durchlaeuft.
- [x] `kb/gtd/COLLECTION.md` wird als `.template` ausgeliefert — gleicher generischer Mechanismus
(`iter_kb_collections()`-Schleife in `dist_cmd.py`).
- [x] `docs verify`, `instructions verify`, `pytest` gruen — 1321 Tests, beide `verify`-Kommandos
grün.
- [x] Versionsteil gegen `instructions/dev/version-parts.md`: **die Ausschreibung nahm `--minor`
an, das war falsch.** Der Rueckweg-Test ergab: eine aeltere Instanz, die die neue `tools/`
uebernimmt ohne `types/project.md.template` zu adoptieren, faellt bei `docs verify` durch,
wo sie vorher bestand — das verletzt die Forward-Haelfte des Drop-in-Tests, also
Grenzuebertritt. Mit dem Betreiber abgestimmt (Alternativen erwogen: kb_version-Gating wie
bei labelled edges, oder die Stack-Forderung auf einen spaeteren Bump verschieben) und
**`--major` gewaehlt**, exakt nach `source`s eigenem (aelterem, ungegatetem) Vorbild.
Geshippt als `7.0.0-beta.1` mit `--breaking`/`--no-migration` (kein Content-Migrationsbedarf
— der Fix ist die gewoehnliche `.template`-Adoption).
## Nebenbei mitkorrigiert
- `README.md`s Verzeichnisbaum nannte unter `kb/entities/` noch `projects/` statt `codebases/` —
Ueberbleibsel aus #122, beim Beruehren desselben Baums mitgezogen.
- `kb_collections.declaration_issues()`s Meldung fuer eine fehlende Pflicht-Collection nannte
immer `source`, unabhaengig davon, welcher Typ tatsaechlich fehlte — ein latenter Fehler, der
erst mit einem zweiten Eintrag in `STACK_REQUIRED_TYPES` sichtbar wurde (drei betroffene Tests
in `test_conventions.py` liefen vorher gegen eine Welt mit nur einer Pflicht-Collection).
Behoben mit der neuen `stack_required_collection_owners()`, die den Typ pro Collection
generisch ableitet statt ihn hart zu kodieren.
## Abhaengigkeiten
Lief nach #122, wie geplant. **Entblockt jetzt #118** (der `gtd:`-Block, auf den es wartete,
existiert). #124/#125/#126 koennen wie in #119s Umsetzungstabelle vorgesehen anlaufen.
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.
Erledigt (
ee24b6e, Stack 7.0.0-beta.1). Paket 1 aus #119 (D16, D17, D22, D24, D27, D28,D29). Legt die
kb/-Haelfte der Projektwelt an.Was gebaut wurde
Ein neuer Seitentyp fuer das Vorhaben — Ziel, Beteiligte, Endzustand, offene Schleifen —
abgegrenzt gegen das Artefakt, das weiter
entityist (#122).Type-Spec
types/project.md+types/project.schema.yaml, beideroot: kbund damit instanzeigen, alsoals
.templateausgeliefert (generisch ueberdist_cmd.pys bestehenden Mechanismus fuer jedenroot: kb-Typ mitbase_dir:— kein Code dafuer noetig).Pflichtfelder wie geplant:
type,state(active/dormant/completed/abandoned,default: active),responsibility(subtype_field,haus/finanzen/technik, keinDefault),
created/modified,summary,provenance(default: general).related/sourcesoptional.
base_dir: gtd, alsokb/gtd/<bereich>/<Titel>.md.Vorlage
## Ziel,## Kontext,## Beteiligte,## Status,## Entscheidungen,## Gelerntes— wiein der Ausschreibung. Die beiden Regeln aus #119 (
## Statusist dauerhafte Charakterisierung,nicht Momentzustand;
## Beteiligtetraegt Erwaehnungen ohne Wikilink/eigene Seite) stehensowohl im Type-Spec (
types/project.md§ Authoring guidance) als auch inkb/gtd/COLLECTION.md(§ Two rules unique to this collection).Collection
kb/gtd/COLLECTION.mdmitrequired_by_stack: true.outbound:-Bloecke fuerentities/concepts/sources/gtd, vorerst nursee-also— die Beteiligungs-Label-Fragebleibt #118. Umgekehrt traegt
kb/entities/COLLECTION.mdjetzt einengtd: [see-also]-Block;ohne ihn lehnt
xref addjede Kante von einer Entity auf ein Vorhaben ab — verifiziertend-to-end (Ablehnung vor dem Block, Erfolg danach, Testkante wieder entfernt).
Stack-Forderung
project/state:steht jetzt nebensource/raw_files:inkb_collections.STACK_REQUIRED_TYPES/STACK_REQUIRED_TYPE_FIELDS— eine Codezeile, diedocs_verify.check_stack_required_types()undstack_required_collections()(beide bereitsgenerisch) automatisch auf
project/gtdmit ausdehnt.Akzeptanzkriterien
tools/wikitool types describe projectbeschreibt den Typ vollstaendig;types listfuehrt ihn mit
base_dir: kb/gtd.tools/wikitool new project --name X --set responsibility=haus(nicht--responsibility—das war Kurzschrift in der Ausschreibung, das reale CLI-Muster ist
--set feld=wertwiebei
entity_type) erzeugtkb/gtd/haus/X.mdmit allen sechs Abschnitten undstate: active.state-Enums wird abgelehnt, nicht stillschweigend geschrieben —manuell verifiziert (
--set state=erledigt→ Fehler, keine Datei).responsibility-Wert ohnelayout:-Eintrag fuehrt zu einem Befund, nicht zu einerSeite an unerwarteter Stelle — kein neuer Lint-Check noetig:
new_page_commandvalidiert bereits vor dem Schreiben (
_validate_or_faillaeuft vorwrite_page), alsoverhindert die reine Enum-Deklaration von
responsibility(kein freier String) jedenSchreibvorgang mit einem nicht gelisteten Wert von vornherein. Manuell verifiziert.
kb/gtd/wird vonwikitoolals Collection erkannt, undindex rebuilderzeugt jeVerantwortungsbereich eine Katalogsektion — verifiziert (
kb/gtd/INDEX.mdmit## Haus-Sektion,kb/index.mdfuehrtgtd/).Label aus #118 existiert; ohne den
gtd:-Block inkb/entities/COLLECTION.mdlehntxref addsie ab — beide Richtungen end-to-end verifiziert.docs verifyFAILt auf einem Baum ohne Type-Specname: projectmitstate:, undpassiert einen Baum mit zusaetzlichen instanzeigenen Feldern — neu mit dedizierten
Tests abgedeckt (
test_docs_verify.py,test_kb_collections.py); vorher gab es dafuer garkeine direkte Testabdeckung, nur den indirekten Weg ueber einen vollen
verify()-Laufgegen den echten Baum.
dist exportlieferttypes/project.md.templateund.schema.yaml.templateaus, nichtdie adoptierten Dateien — generisch bereits durch
_plan_types()/instance_owned_type_stems()abgedeckt, mitgeprueft von der bestehendentest_page_type_specs_ship_as_templates_and_stack_types_do_not, die jetzt automatisch auchprojectgegen den echten Baum durchlaeuft.kb/gtd/COLLECTION.mdwird als.templateausgeliefert — gleicher generischer Mechanismus(
iter_kb_collections()-Schleife indist_cmd.py).docs verify,instructions verify,pytestgruen — 1321 Tests, beideverify-Kommandosgrün.
instructions/dev/version-parts.md: die Ausschreibung nahm--minoran, das war falsch. Der Rueckweg-Test ergab: eine aeltere Instanz, die die neue
tools/uebernimmt ohne
types/project.md.templatezu adoptieren, faellt beidocs verifydurch,wo sie vorher bestand — das verletzt die Forward-Haelfte des Drop-in-Tests, also
Grenzuebertritt. Mit dem Betreiber abgestimmt (Alternativen erwogen: kb_version-Gating wie
bei labelled edges, oder die Stack-Forderung auf einen spaeteren Bump verschieben) und
--majorgewaehlt, exakt nachsources eigenem (aelterem, ungegatetem) Vorbild.Geshippt als
7.0.0-beta.1mit--breaking/--no-migration(kein Content-Migrationsbedarf— der Fix ist die gewoehnliche
.template-Adoption).Nebenbei mitkorrigiert
README.mds Verzeichnisbaum nannte unterkb/entities/nochprojects/stattcodebases/—Ueberbleibsel aus #122, beim Beruehren desselben Baums mitgezogen.
kb_collections.declaration_issues()s Meldung fuer eine fehlende Pflicht-Collection nannteimmer
source, unabhaengig davon, welcher Typ tatsaechlich fehlte — ein latenter Fehler, dererst mit einem zweiten Eintrag in
STACK_REQUIRED_TYPESsichtbar wurde (drei betroffene Testsin
test_conventions.pyliefen vorher gegen eine Welt mit nur einer Pflicht-Collection).Behoben mit der neuen
stack_required_collection_owners(), die den Typ pro Collectiongenerisch ableitet statt ihn hart zu kodieren.
Abhaengigkeiten
Lief nach #122, wie geplant. Entblockt jetzt #118 (der
gtd:-Block, auf den es wartete,existiert). #124/#125/#126 koennen wie in #119s Umsetzungstabelle vorgesehen anlaufen.
Changelog: Umgesetzt und geschlossen (
ee24b6e). Alle Akzeptanzkriterien abgehakt. Versionsteil-Frage aufgeloest:--major, nicht die angenommenen--minor— Details und Begruendung jetzt im Akzeptanzkriterium selbst. Zwei nebenbei gefundene Fehler mitkorrigiert (README-Verzeichnisbaum,declaration_issues()s hartkodiertesource-Meldung) — siehe neuer Abschnitt „Nebenbei mitkorrigiert".