Abgeschlossen. Gebaut und ausgeliefert in f3ccbd8, Stack 8.0.0-beta.34 (--minor).
Verifiziert durch CI-Run 524 (verify + pwsh) und Run 525 auf f3ccbd8, beide
success; lokal docs verify, instructions verify und pytest (2175 passed, 3 skipped).
Die Abschlussprüfung (stack-close, 2026-10-04) fand für dieses Paket keinen veralteten docs/-Text und keinen Contract, der nachgezogen werden musste: docs/ trägt weder die
Label-Begründung noch D28, und kb/CONTRACT.md wiederholt den Katalog nicht.
Gegenüber dem Entwurf zusätzlich angefasst (Doku-Pull-Through, keine Entwurfsänderung):
types/project.md § Template: die TODO-Zeile in ## Beteiligte sagte „kein Wikilink, keine
eigene Seite" absolut; jetzt mit der Ausnahme für Personen mit eigener Seite. Die Datei ist
dadurch über 100 Zeilen gewachsen und trägt ein generiertes Inhaltsverzeichnis.
instructions/gtd-weekly-review/SKILL.md Schritt 4 wiederholte D28 verkürzt; jetzt mit
demselben Zweig für Personen mit eigener Seite.
Die D28-Regel steht in types/project.md unter § Authoring guidance (nicht „§ Rules", wie
der Entwurf schrieb).
Problem
Für die Kante zwischen Person und Vorhaben führte instructions/link-taxonomy.md § Operational
genau drei Label, alle von der Person aus geschrieben:
Label
behauptet
owns
ist rechenschaftspflichtig für Existenz und Entscheidungen des Ziels
maintains
trägt die Pflege des Ziels
authored
hat das Ziel einmalig geschaffen
Für den häufigsten Fall gab es nichts: jemand wirkt an etwas mit, ohne dafür einzustehen,
es zu pflegen oder es geschaffen zu haben. Beteiligung wurde entweder als owns überzeichnet
oder als see-also unterspezifiziert. Beides verletzt die Invariante aus § „The invariant every
label obeys".
Konkret wurde es durch D28 aus #119: ## Beteiligte einer kb/gtd/-Seite trägt Personen als
Erwähnung ohne Link; bekommt eine Person eine eigene Seite, sollte daraus eine Kante „mit einem
Beteiligungs-Label" werden — ein Label, das es nicht gab.
Zweiter Einsatzfall: die berufliche Instanz entsteht auf Basis von 8.0.0 final. Dort gibt
es für viele Personen Seiten, und RACI ist die übliche Lesart von Beteiligung. Deshalb prio/blocking: vor version release von 8.0.0 gebaut.
Stand im Baum (geprüft 2026-10-03, vor dem Bau)
Ziel-Collection stand:kb/gtd/ (#119 D22, angelegt in #123).
Ein Label ist reine Daten. Kein Code kennt Katalog-Label beim Namen außer links.SEE_ALSO (tools/chemenu/links.py). lint (unauthorised_labels) und xref add
prüfen gegen kb_collections.authorised_labels(), also gegen das outbound: der
instanzeigenen COLLECTION.md — nie gegen link-taxonomy.md. Der Mechanismus war in test_conventions.py und test_xref.py bereits abgedeckt.
Die Seite rendert nur ihre eigenen Kanten.xref.render_links_block() schreibt den ## Beziehungen-Block aus dem related: der Seite selbst; die eingehende Sicht gibt es nur in search und index rebuild.
Verwaist heißt: keine eingehende Kante (lint_core.py, orphan_pages).
Organisationen waren entity_type: person (seit #172 eigener Typ organization).
Korpus: eine gtd-Seite, vier Personenseiten, keine Kante dazwischen. Nichts umzustellen.
Entscheidungen
D1 — Die Kante steht auf der Projektseite: [Vorhaben] <label> [Person] (Betreiber, 2026-10-03)
Früher angenommen war die Gegenrichtung ([Person] contributes-to [Vorhaben]). Umgedreht, weil:
Die Antwort steht, wo die Frage gestellt wird. „Wer ist beteiligt" ist eine der zwei
Fragen, für die eine Projektseite existiert (#119); nur die eigenen Kanten einer Seite
erscheinen in ihrem ## Beziehungen-Block.
Personen-Stubs bleiben Stubs. Sie werden nicht mit jedem Projekt editiert und bekommen eine
eingehende Kante, sind also nicht mehr verwaist.
Dieselbe Hand pflegt Erwähnung und Kante — wer ## Beteiligte schreibt.
D28 wird einfacher: Person ohne Seite → Prosa ohne Link; Person mit Seite → Prosa mit [[wikilink]] plus Kante auf derselben Projektseite.
contributes-to entfiel: es wäre nur der Spiegel von involves (§ „Direction is authored,
never mirrored"). owns/maintains/authored blieben unverändert.
D5 — Die Label (Betreiber, 2026-10-03)
Label
behauptet
RACI
Inverse
involves
nimmt das Ziel als Beteiligten auf, ohne die Rolle festzulegen
— (allgemein)
—
staffed-by
wird vom Ziel mit getragen und ausgeführt
R
—
owned-by
hat im Ziel den, der für Existenz und Entscheidungen einsteht
A
owns
consults
holt die Einschätzung des Ziels ein
C
—
informs
hält das Ziel auf dem Laufenden
I
—
Alle fünf stehen im Katalog; welche eine Instanz führt, entscheidet ihr outbound:. Diese
Instanz autorisiert involves und owned-by; die berufliche Instanz autorisiert in ihrer
eigenen COLLECTION.md die RACI-Label — nicht Teil dieses Issues.
owned-by statt eines eigenen A-Labels: owns sagt genau das, nur von der anderen Seite; ein
zweites Wort für dieselbe Aussage wäre ein Synonym, das kein Lint auseinanderhält. Als
Inversen-Paar zulässig, weil die Gegenrichtung eine eigenständige Primäraussage ist (der
Maßstab von depends-on/required-by). Es ist die vierte Paarung neben depends-on/ required-by, runs-on/hosts, composition/part-of.
Die Satzzeilen sagen „das Ziel", nicht „die Person": „Projekt X consults Kunde Y" oder
„staffed-by Dienstleister GmbH" muss genauso richtig lesen. Darauf baut #172 auf, wo eine Person
ohne eigene Seite über ihre Organisation erreicht wird.
D2 — Versionsteil: --minor
Vorwärts: wer instructions/ und tools/ überkopiert, bekommt neue Katalogzeilen; die
eigenen COLLECTION.md und types/project.md berührt das Upgrade nicht (sie kommen nur als .template). Nichts ändert sich, bis die Instanz ein Label selbst autorisiert.
Rückwärts: eine ältere tools/-Fassung kennt keinen Katalog im Code; ihr lint
akzeptiert ein neues Label, solange die COLLECTION.md der Instanz es autorisiert — genau die
Eigenschaft, die AK 6 festhält.
Der Kandidat ging von 8.0.0-beta.33 auf 8.0.0-beta.34.
D3 — Kein eigener Test für die Label
Ein pytest, der ein Label in einer echten COLLECTION.md festnagelt, prüft Daten einer
instanzeigenen Datei, nicht Verhalten; der Mechanismus war bereits getestet. Stattdessen am
echten Baum verifiziert (AK 5) und festgehalten, dass kein Code die Label kennt (AK 6).
D4 — Auch innerhalb von kb/entities/ (Betreiber, 2026-10-03)
involves und owned-by sind auch unter entities: im outbound: von kb/entities/COLLECTION.md autorisiert, in derselben Richtung wie D1 ([Codebase] involves [Person]).
Akzeptanzkriterien
instructions/link-taxonomy.md § Operational führt die fünf Label aus D5 je mit einer
Zeile, formuliert für ein beliebiges Ziel; owns/owned-by steht als vierte Inversen-Paarung
in der Tabelle und in § „Direction is authored, never mirrored" („Only four pairs do", plus ein
Absatz, warum die vierte kein Spiegel ist); ein Absatz grenzt involves gegen die vier
RACI-Label ab und owned-by gegen staffed-by.
kb/gtd/COLLECTION.md: outbound: entities: [involves, owned-by, see-also];
§ Authorised labels nennt die zwei Label, die Richtung (D1) und dass die RACI-Label im Katalog
bereitstehen.
kb/entities/COLLECTION.md: outbound: entities: autorisiert involves und owned-by
(D4); § Authorised labels grenzt sie gegen owns/maintains/authored ab.
types/project.md § Authoring guidance und kb/gtd/COLLECTION.md § Two rules tragen den
D28-Wortlaut aus D1; dazu die TODO-Zeile in types/project.md § Template und gtd-weekly-review Schritt 4.
Am echten Baum: authorised_labels("gtd", "entities") und authorised_labels("entities", "entities") enthalten je involves und owned-by; authorised_labels("entities", "gtd") enthält keins der fünf. tools/wikitool lint --json
vor und nach der Änderung (Basis per git stash) identisch.
rg -w 'involves|staffed-by|owned-by|consults|informs' tools/chemenu außerhalb von tests/: kein Treffer.
version bump --minor → 8.0.0-beta.34, CHANGES.md-Changeset geschrieben (f3ccbd8);
CI-Runs 524 und 525 auf f3ccbd8 grün.
Nicht Teil dieses Issues
Organisationsseiten und Personen nach Kunde gruppiert — #172.
Die COLLECTION.md der beruflichen Instanz (sie autorisiert ihre RACI-Label selbst).
Ein Sweep über bestehende owns/see-also-Kanten zwischen Personen und Codebasen. Stand
2026-10-03 gab es keine Kante zwischen Person und gtd-Seite; ein Sweep wäre ein eigenes
Issue, vergleichbar #48.
## Ergebnis
**Abgeschlossen.** Gebaut und ausgeliefert in `f3ccbd8`, Stack **8.0.0-beta.34** (`--minor`).
Verifiziert durch CI-Run **524** (`verify` + `pwsh`) und Run **525** auf `f3ccbd8`, beide
success; lokal `docs verify`, `instructions verify` und `pytest` (2175 passed, 3 skipped).
Die Abschlussprüfung (`stack-close`, 2026-10-04) fand für dieses Paket keinen veralteten
`docs/`-Text und keinen Contract, der nachgezogen werden musste: `docs/` trägt weder die
Label-Begründung noch D28, und `kb/CONTRACT.md` wiederholt den Katalog nicht.
Gegenüber dem Entwurf zusätzlich angefasst (Doku-Pull-Through, keine Entwurfsänderung):
- `types/project.md` § Template: die TODO-Zeile in `## Beteiligte` sagte „kein Wikilink, keine
eigene Seite" absolut; jetzt mit der Ausnahme für Personen mit eigener Seite. Die Datei ist
dadurch über 100 Zeilen gewachsen und trägt ein generiertes Inhaltsverzeichnis.
- `instructions/gtd-weekly-review/SKILL.md` Schritt 4 wiederholte D28 verkürzt; jetzt mit
demselben Zweig für Personen mit eigener Seite.
- Die D28-Regel steht in `types/project.md` unter **§ Authoring guidance** (nicht „§ Rules", wie
der Entwurf schrieb).
## Problem
Für die Kante zwischen Person und Vorhaben führte `instructions/link-taxonomy.md` § Operational
genau drei Label, alle von der Person aus geschrieben:
| Label | behauptet |
|---|---|
| `owns` | ist rechenschaftspflichtig für Existenz und Entscheidungen des Ziels |
| `maintains` | trägt die Pflege des Ziels |
| `authored` | hat das Ziel einmalig geschaffen |
Für den häufigsten Fall gab es nichts: **jemand wirkt an etwas mit, ohne dafür einzustehen,
es zu pflegen oder es geschaffen zu haben.** Beteiligung wurde entweder als `owns` überzeichnet
oder als `see-also` unterspezifiziert. Beides verletzt die Invariante aus § „The invariant every
label obeys".
Konkret wurde es durch D28 aus #119: `## Beteiligte` einer `kb/gtd/`-Seite trägt Personen als
Erwähnung ohne Link; bekommt eine Person eine eigene Seite, sollte daraus eine Kante „mit einem
Beteiligungs-Label" werden — ein Label, das es nicht gab.
**Zweiter Einsatzfall:** die berufliche Instanz entsteht auf Basis von **8.0.0 final**. Dort gibt
es für viele Personen Seiten, und RACI ist die übliche Lesart von Beteiligung. Deshalb
`prio/blocking`: vor `version release` von 8.0.0 gebaut.
## Stand im Baum (geprüft 2026-10-03, vor dem Bau)
- **Ziel-Collection stand:** `kb/gtd/` (#119 D22, angelegt in #123).
- **Ein Label ist reine Daten.** Kein Code kennt Katalog-Label beim Namen außer
`links.SEE_ALSO` (`tools/chemenu/links.py`). `lint` (`unauthorised_labels`) und `xref add`
prüfen gegen `kb_collections.authorised_labels()`, also gegen das `outbound:` der
instanzeigenen `COLLECTION.md` — nie gegen `link-taxonomy.md`. Der Mechanismus war in
`test_conventions.py` und `test_xref.py` bereits abgedeckt.
- **Die Seite rendert nur ihre eigenen Kanten.** `xref.render_links_block()` schreibt den
`## Beziehungen`-Block aus dem `related:` der Seite selbst; die eingehende Sicht gibt es nur in
`search` und `index rebuild`.
- **Verwaist heißt: keine eingehende Kante** (`lint_core.py`, `orphan_pages`).
- **Organisationen waren `entity_type: person`** (seit #172 eigener Typ `organization`).
- **Korpus:** eine `gtd`-Seite, vier Personenseiten, keine Kante dazwischen. Nichts umzustellen.
## Entscheidungen
### D1 — Die Kante steht auf der Projektseite: `[Vorhaben] <label> [Person]` (Betreiber, 2026-10-03)
Früher angenommen war die Gegenrichtung (`[Person] contributes-to [Vorhaben]`). Umgedreht, weil:
- **Die Antwort steht, wo die Frage gestellt wird.** „Wer ist beteiligt" ist eine der zwei
Fragen, für die eine Projektseite existiert (#119); nur die eigenen Kanten einer Seite
erscheinen in ihrem `## Beziehungen`-Block.
- **Personen-Stubs bleiben Stubs.** Sie werden nicht mit jedem Projekt editiert und bekommen eine
eingehende Kante, sind also nicht mehr verwaist.
- **Dieselbe Hand pflegt Erwähnung und Kante** — wer `## Beteiligte` schreibt.
- **D28 wird einfacher:** Person ohne Seite → Prosa ohne Link; Person mit Seite → Prosa mit
`[[wikilink]]` plus Kante auf derselben Projektseite.
`contributes-to` entfiel: es wäre nur der Spiegel von `involves` (§ „Direction is authored,
never mirrored"). `owns`/`maintains`/`authored` blieben unverändert.
### D5 — Die Label (Betreiber, 2026-10-03)
| Label | behauptet | RACI | Inverse |
|---|---|---|---|
| `involves` | nimmt das Ziel als Beteiligten auf, ohne die Rolle festzulegen | — (allgemein) | — |
| `staffed-by` | wird vom Ziel mit getragen und ausgeführt | R | — |
| `owned-by` | hat im Ziel den, der für Existenz und Entscheidungen einsteht | A | `owns` |
| `consults` | holt die Einschätzung des Ziels ein | C | — |
| `informs` | hält das Ziel auf dem Laufenden | I | — |
Alle fünf stehen im Katalog; welche eine Instanz führt, entscheidet ihr `outbound:`. **Diese
Instanz** autorisiert `involves` und `owned-by`; die **berufliche Instanz** autorisiert in ihrer
eigenen `COLLECTION.md` die RACI-Label — nicht Teil dieses Issues.
`owned-by` statt eines eigenen A-Labels: `owns` sagt genau das, nur von der anderen Seite; ein
zweites Wort für dieselbe Aussage wäre ein Synonym, das kein Lint auseinanderhält. Als
Inversen-Paar zulässig, weil die Gegenrichtung eine eigenständige Primäraussage ist (der
Maßstab von `depends-on`/`required-by`). Es ist die vierte Paarung neben `depends-on`/
`required-by`, `runs-on`/`hosts`, `composition`/`part-of`.
**Die Satzzeilen sagen „das Ziel", nicht „die Person":** „Projekt X consults Kunde Y" oder
„staffed-by Dienstleister GmbH" muss genauso richtig lesen. Darauf baut #172 auf, wo eine Person
ohne eigene Seite über ihre Organisation erreicht wird.
### D2 — Versionsteil: `--minor`
- **Vorwärts:** wer `instructions/` und `tools/` überkopiert, bekommt neue Katalogzeilen; die
eigenen `COLLECTION.md` und `types/project.md` berührt das Upgrade nicht (sie kommen nur als
`.template`). Nichts ändert sich, bis die Instanz ein Label selbst autorisiert.
- **Rückwärts:** eine ältere `tools/`-Fassung kennt keinen Katalog im Code; ihr `lint`
akzeptiert ein neues Label, solange die `COLLECTION.md` der Instanz es autorisiert — genau die
Eigenschaft, die AK 6 festhält.
Der Kandidat ging von `8.0.0-beta.33` auf `8.0.0-beta.34`.
### D3 — Kein eigener Test für die Label
Ein pytest, der ein Label in einer echten `COLLECTION.md` festnagelt, prüft Daten einer
instanzeigenen Datei, nicht Verhalten; der Mechanismus war bereits getestet. Stattdessen am
echten Baum verifiziert (AK 5) und festgehalten, dass kein Code die Label kennt (AK 6).
### D4 — Auch innerhalb von `kb/entities/` (Betreiber, 2026-10-03)
`involves` und `owned-by` sind auch unter `entities:` im `outbound:` von
`kb/entities/COLLECTION.md` autorisiert, in derselben Richtung wie D1 (`[Codebase] involves [Person]`).
## Akzeptanzkriterien
1. [x] `instructions/link-taxonomy.md` § Operational führt die fünf Label aus D5 je mit einer
Zeile, formuliert für ein beliebiges Ziel; `owns`/`owned-by` steht als vierte Inversen-Paarung
in der Tabelle und in § „Direction is authored, never mirrored" („Only four pairs do", plus ein
Absatz, warum die vierte kein Spiegel ist); ein Absatz grenzt `involves` gegen die vier
RACI-Label ab und `owned-by` gegen `staffed-by`.
2. [x] `kb/gtd/COLLECTION.md`: `outbound: entities: [involves, owned-by, see-also]`;
§ Authorised labels nennt die zwei Label, die Richtung (D1) und dass die RACI-Label im Katalog
bereitstehen.
3. [x] `kb/entities/COLLECTION.md`: `outbound: entities:` autorisiert `involves` und `owned-by`
(D4); § Authorised labels grenzt sie gegen `owns`/`maintains`/`authored` ab.
4. [x] `types/project.md` § Authoring guidance und `kb/gtd/COLLECTION.md` § Two rules tragen den
D28-Wortlaut aus D1; dazu die TODO-Zeile in `types/project.md` § Template und
`gtd-weekly-review` Schritt 4.
5. [x] Am echten Baum: `authorised_labels("gtd", "entities")` und
`authorised_labels("entities", "entities")` enthalten je `involves` und `owned-by`;
`authorised_labels("entities", "gtd")` enthält keins der fünf. `tools/wikitool lint --json`
vor und nach der Änderung (Basis per `git stash`) identisch.
6. [x] `rg -w 'involves|staffed-by|owned-by|consults|informs' tools/chemenu` außerhalb von
`tests/`: kein Treffer.
7. [x] `tools/wikitool docs verify` und `tools/wikitool instructions verify` grün; `pytest`:
2175 passed, 3 skipped.
8. [x] `version bump --minor` → 8.0.0-beta.34, `CHANGES.md`-Changeset geschrieben (`f3ccbd8`);
CI-Runs 524 und 525 auf `f3ccbd8` grün.
## Nicht Teil dieses Issues
- **Organisationsseiten und Personen nach Kunde gruppiert** — #172.
- Die `COLLECTION.md` der beruflichen Instanz (sie autorisiert ihre RACI-Label selbst).
- Ein Sweep über bestehende `owns`/`see-also`-Kanten zwischen Personen und Codebasen. Stand
2026-10-03 gab es keine Kante zwischen Person und `gtd`-Seite; ein Sweep wäre ein eigenes
Issue, vergleichbar #48.
torben
changed title from Link-Taxonomie hat kein Label für Beteiligung ohne Verantwortung (Person → Projekt) to Link-Taxonomie: Beteiligungs- und RACI-Label von der Projektseite aus (Vorhaben → Person)2026-10-03 20:31:09 +00:00
Changelog: Gegen den Baum aufgefrischt und fertig entworfen. status/blocked entfernt — die Ziel-Collection kb/gtd/ steht seit #123. Richtung umgedreht (D1): die Kante steht auf der Projektseite ([Vorhaben] <label> [Person]), weil nur die eigenen Kanten einer Seite in ihrem ## Beziehungen-Block erscheinen und Personen-Stubs so unberuehrt bleiben; contributes-to entfaellt als Spiegel. Labelsatz (D5): involves allgemein plus RACI staffed-by/owned-by/consults/informs, owned-by als Inverse von owns; diese Instanz autorisiert involves/owned-by, die berufliche ihre RACI-Label selbst. Neu D2 (--minor, Drop-in-Test gefuehrt: kein Code kennt Label beim Namen), D3 (kein eigener pytest, Verifikation am echten Baum), D4 (auch innerhalb kb/entities/). Der fruehere Downgrade-Pruefauftrag ist durch D2/AK 6 ersetzt. kind/decision → kind/build, prio/planned → prio/blocking (die berufliche Instanz entsteht auf 8.0.0 final). Organisationsseiten ausgegliedert nach #172.
**Changelog:** Gegen den Baum aufgefrischt und fertig entworfen. `status/blocked` entfernt — die Ziel-Collection `kb/gtd/` steht seit #123. **Richtung umgedreht** (D1): die Kante steht auf der Projektseite (`[Vorhaben] <label> [Person]`), weil nur die eigenen Kanten einer Seite in ihrem `## Beziehungen`-Block erscheinen und Personen-Stubs so unberuehrt bleiben; `contributes-to` entfaellt als Spiegel. **Labelsatz** (D5): `involves` allgemein plus RACI `staffed-by`/`owned-by`/`consults`/`informs`, `owned-by` als Inverse von `owns`; diese Instanz autorisiert `involves`/`owned-by`, die berufliche ihre RACI-Label selbst. Neu D2 (`--minor`, Drop-in-Test gefuehrt: kein Code kennt Label beim Namen), D3 (kein eigener pytest, Verifikation am echten Baum), D4 (auch innerhalb `kb/entities/`). Der fruehere Downgrade-Pruefauftrag ist durch D2/AK 6 ersetzt. `kind/decision` → `kind/build`, `prio/planned` → `prio/blocking` (die berufliche Instanz entsteht auf 8.0.0 final). Organisationsseiten ausgegliedert nach #172.
Changelog: Gebaut und gepublisht (f3ccbd8, Stack 8.0.0-beta.34), CI-Runs 524/525 gruen. AK 1–8 abgehakt mit Beleg. Neu im Body: Abschnitt „Stand der Umsetzung" mit drei Abweichungen vom Entwurf, alle Doku-Pull-Through ohne Entwurfsaenderung — die TODO-Zeile in types/project.md § Template (Datei dadurch > 100 Zeilen, jetzt mit generiertem Inhaltsverzeichnis), gtd-weekly-review Schritt 4, und der korrigierte Abschnittsname (§ Authoring guidance statt „§ Rules"). Problem-Abschnitt ins Praeteritum gesetzt.
**Changelog:** Gebaut und gepublisht (`f3ccbd8`, Stack 8.0.0-beta.34), CI-Runs 524/525 gruen. AK 1–8 abgehakt mit Beleg. Neu im Body: Abschnitt „Stand der Umsetzung" mit drei Abweichungen vom Entwurf, alle Doku-Pull-Through ohne Entwurfsaenderung — die TODO-Zeile in `types/project.md` § Template (Datei dadurch > 100 Zeilen, jetzt mit generiertem Inhaltsverzeichnis), `gtd-weekly-review` Schritt 4, und der korrigierte Abschnittsname (`§ Authoring guidance` statt „§ Rules"). Problem-Abschnitt ins Praeteritum gesetzt.
Changelog: Geschlossen. Body auf Endstand: Kopf „Ergebnis" statt „Stand der Umsetzung", mit den gelaufenen Prüfungen (CI 524/525, docs verify, instructions verify, pytest) und dem Befund der Abschlussprüfung — kein veralteter docs/-Text, kein nachzuziehender Contract für dieses Paket. D5 sagte noch im Präsens, Organisationen seien entity_type: person; seit #172 falsch, jetzt als Verweis auf #172 formuliert.
**Changelog:** Geschlossen. Body auf Endstand: Kopf „Ergebnis" statt „Stand der Umsetzung", mit den gelaufenen Prüfungen (CI 524/525, `docs verify`, `instructions verify`, `pytest`) und dem Befund der Abschlussprüfung — kein veralteter `docs/`-Text, kein nachzuziehender Contract für dieses Paket. D5 sagte noch im Präsens, Organisationen seien `entity_type: person`; seit #172 falsch, jetzt als Verweis auf #172 formuliert.
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.
Ergebnis
Abgeschlossen. Gebaut und ausgeliefert in
f3ccbd8, Stack 8.0.0-beta.34 (--minor).Verifiziert durch CI-Run 524 (
verify+pwsh) und Run 525 auff3ccbd8, beidesuccess; lokal
docs verify,instructions verifyundpytest(2175 passed, 3 skipped).Die Abschlussprüfung (
stack-close, 2026-10-04) fand für dieses Paket keinen veraltetendocs/-Text und keinen Contract, der nachgezogen werden musste:docs/trägt weder dieLabel-Begründung noch D28, und
kb/CONTRACT.mdwiederholt den Katalog nicht.Gegenüber dem Entwurf zusätzlich angefasst (Doku-Pull-Through, keine Entwurfsänderung):
types/project.md§ Template: die TODO-Zeile in## Beteiligtesagte „kein Wikilink, keineeigene Seite" absolut; jetzt mit der Ausnahme für Personen mit eigener Seite. Die Datei ist
dadurch über 100 Zeilen gewachsen und trägt ein generiertes Inhaltsverzeichnis.
instructions/gtd-weekly-review/SKILL.mdSchritt 4 wiederholte D28 verkürzt; jetzt mitdemselben Zweig für Personen mit eigener Seite.
types/project.mdunter § Authoring guidance (nicht „§ Rules", wieder Entwurf schrieb).
Problem
Für die Kante zwischen Person und Vorhaben führte
instructions/link-taxonomy.md§ Operationalgenau drei Label, alle von der Person aus geschrieben:
ownsmaintainsauthoredFür den häufigsten Fall gab es nichts: jemand wirkt an etwas mit, ohne dafür einzustehen,
es zu pflegen oder es geschaffen zu haben. Beteiligung wurde entweder als
ownsüberzeichnetoder als
see-alsounterspezifiziert. Beides verletzt die Invariante aus § „The invariant everylabel obeys".
Konkret wurde es durch D28 aus #119:
## Beteiligteeinerkb/gtd/-Seite trägt Personen alsErwähnung ohne Link; bekommt eine Person eine eigene Seite, sollte daraus eine Kante „mit einem
Beteiligungs-Label" werden — ein Label, das es nicht gab.
Zweiter Einsatzfall: die berufliche Instanz entsteht auf Basis von 8.0.0 final. Dort gibt
es für viele Personen Seiten, und RACI ist die übliche Lesart von Beteiligung. Deshalb
prio/blocking: vorversion releasevon 8.0.0 gebaut.Stand im Baum (geprüft 2026-10-03, vor dem Bau)
kb/gtd/(#119 D22, angelegt in #123).links.SEE_ALSO(tools/chemenu/links.py).lint(unauthorised_labels) undxref addprüfen gegen
kb_collections.authorised_labels(), also gegen dasoutbound:derinstanzeigenen
COLLECTION.md— nie gegenlink-taxonomy.md. Der Mechanismus war intest_conventions.pyundtest_xref.pybereits abgedeckt.xref.render_links_block()schreibt den## Beziehungen-Block aus demrelated:der Seite selbst; die eingehende Sicht gibt es nur insearchundindex rebuild.lint_core.py,orphan_pages).entity_type: person(seit #172 eigener Typorganization).gtd-Seite, vier Personenseiten, keine Kante dazwischen. Nichts umzustellen.Entscheidungen
D1 — Die Kante steht auf der Projektseite:
[Vorhaben] <label> [Person](Betreiber, 2026-10-03)Früher angenommen war die Gegenrichtung (
[Person] contributes-to [Vorhaben]). Umgedreht, weil:Fragen, für die eine Projektseite existiert (#119); nur die eigenen Kanten einer Seite
erscheinen in ihrem
## Beziehungen-Block.eingehende Kante, sind also nicht mehr verwaist.
## Beteiligteschreibt.[[wikilink]]plus Kante auf derselben Projektseite.contributes-toentfiel: es wäre nur der Spiegel voninvolves(§ „Direction is authored,never mirrored").
owns/maintains/authoredblieben unverändert.D5 — Die Label (Betreiber, 2026-10-03)
involvesstaffed-byowned-byownsconsultsinformsAlle fünf stehen im Katalog; welche eine Instanz führt, entscheidet ihr
outbound:. DieseInstanz autorisiert
involvesundowned-by; die berufliche Instanz autorisiert in ihrereigenen
COLLECTION.mddie RACI-Label — nicht Teil dieses Issues.owned-bystatt eines eigenen A-Labels:ownssagt genau das, nur von der anderen Seite; einzweites Wort für dieselbe Aussage wäre ein Synonym, das kein Lint auseinanderhält. Als
Inversen-Paar zulässig, weil die Gegenrichtung eine eigenständige Primäraussage ist (der
Maßstab von
depends-on/required-by). Es ist die vierte Paarung nebendepends-on/required-by,runs-on/hosts,composition/part-of.Die Satzzeilen sagen „das Ziel", nicht „die Person": „Projekt X consults Kunde Y" oder
„staffed-by Dienstleister GmbH" muss genauso richtig lesen. Darauf baut #172 auf, wo eine Person
ohne eigene Seite über ihre Organisation erreicht wird.
D2 — Versionsteil:
--minorinstructions/undtools/überkopiert, bekommt neue Katalogzeilen; dieeigenen
COLLECTION.mdundtypes/project.mdberührt das Upgrade nicht (sie kommen nur als.template). Nichts ändert sich, bis die Instanz ein Label selbst autorisiert.tools/-Fassung kennt keinen Katalog im Code; ihrlintakzeptiert ein neues Label, solange die
COLLECTION.mdder Instanz es autorisiert — genau dieEigenschaft, die AK 6 festhält.
Der Kandidat ging von
8.0.0-beta.33auf8.0.0-beta.34.D3 — Kein eigener Test für die Label
Ein pytest, der ein Label in einer echten
COLLECTION.mdfestnagelt, prüft Daten einerinstanzeigenen Datei, nicht Verhalten; der Mechanismus war bereits getestet. Stattdessen am
echten Baum verifiziert (AK 5) und festgehalten, dass kein Code die Label kennt (AK 6).
D4 — Auch innerhalb von
kb/entities/(Betreiber, 2026-10-03)involvesundowned-bysind auch unterentities:imoutbound:vonkb/entities/COLLECTION.mdautorisiert, in derselben Richtung wie D1 ([Codebase] involves [Person]).Akzeptanzkriterien
instructions/link-taxonomy.md§ Operational führt die fünf Label aus D5 je mit einerZeile, formuliert für ein beliebiges Ziel;
owns/owned-bysteht als vierte Inversen-Paarungin der Tabelle und in § „Direction is authored, never mirrored" („Only four pairs do", plus ein
Absatz, warum die vierte kein Spiegel ist); ein Absatz grenzt
involvesgegen die vierRACI-Label ab und
owned-bygegenstaffed-by.kb/gtd/COLLECTION.md:outbound: entities: [involves, owned-by, see-also];§ Authorised labels nennt die zwei Label, die Richtung (D1) und dass die RACI-Label im Katalog
bereitstehen.
kb/entities/COLLECTION.md:outbound: entities:autorisiertinvolvesundowned-by(D4); § Authorised labels grenzt sie gegen
owns/maintains/authoredab.types/project.md§ Authoring guidance undkb/gtd/COLLECTION.md§ Two rules tragen denD28-Wortlaut aus D1; dazu die TODO-Zeile in
types/project.md§ Template undgtd-weekly-reviewSchritt 4.authorised_labels("gtd", "entities")undauthorised_labels("entities", "entities")enthalten jeinvolvesundowned-by;authorised_labels("entities", "gtd")enthält keins der fünf.tools/wikitool lint --jsonvor und nach der Änderung (Basis per
git stash) identisch.rg -w 'involves|staffed-by|owned-by|consults|informs' tools/chemenuaußerhalb vontests/: kein Treffer.tools/wikitool docs verifyundtools/wikitool instructions verifygrün;pytest:2175 passed, 3 skipped.
version bump --minor→ 8.0.0-beta.34,CHANGES.md-Changeset geschrieben (f3ccbd8);CI-Runs 524 und 525 auf
f3ccbd8grün.Nicht Teil dieses Issues
COLLECTION.mdder beruflichen Instanz (sie autorisiert ihre RACI-Label selbst).owns/see-also-Kanten zwischen Personen und Codebasen. Stand2026-10-03 gab es keine Kante zwischen Person und
gtd-Seite; ein Sweep wäre ein eigenesIssue, vergleichbar #48.
Link-Taxonomie hat kein Label für Beteiligung ohne Verantwortung (Person → Projekt)to Link-Taxonomie: Beteiligungs- und RACI-Label von der Projektseite aus (Vorhaben → Person)Changelog: Gegen den Baum aufgefrischt und fertig entworfen.
status/blockedentfernt — die Ziel-Collectionkb/gtd/steht seit #123. Richtung umgedreht (D1): die Kante steht auf der Projektseite ([Vorhaben] <label> [Person]), weil nur die eigenen Kanten einer Seite in ihrem## Beziehungen-Block erscheinen und Personen-Stubs so unberuehrt bleiben;contributes-toentfaellt als Spiegel. Labelsatz (D5):involvesallgemein plus RACIstaffed-by/owned-by/consults/informs,owned-byals Inverse vonowns; diese Instanz autorisiertinvolves/owned-by, die berufliche ihre RACI-Label selbst. Neu D2 (--minor, Drop-in-Test gefuehrt: kein Code kennt Label beim Namen), D3 (kein eigener pytest, Verifikation am echten Baum), D4 (auch innerhalbkb/entities/). Der fruehere Downgrade-Pruefauftrag ist durch D2/AK 6 ersetzt.kind/decision→kind/build,prio/planned→prio/blocking(die berufliche Instanz entsteht auf 8.0.0 final). Organisationsseiten ausgegliedert nach #172.Changelog: Gebaut und gepublisht (
f3ccbd8, Stack 8.0.0-beta.34), CI-Runs 524/525 gruen. AK 1–8 abgehakt mit Beleg. Neu im Body: Abschnitt „Stand der Umsetzung" mit drei Abweichungen vom Entwurf, alle Doku-Pull-Through ohne Entwurfsaenderung — die TODO-Zeile intypes/project.md§ Template (Datei dadurch > 100 Zeilen, jetzt mit generiertem Inhaltsverzeichnis),gtd-weekly-reviewSchritt 4, und der korrigierte Abschnittsname (§ Authoring guidancestatt „§ Rules"). Problem-Abschnitt ins Praeteritum gesetzt.Changelog: Geschlossen. Body auf Endstand: Kopf „Ergebnis" statt „Stand der Umsetzung", mit den gelaufenen Prüfungen (CI 524/525,
docs verify,instructions verify,pytest) und dem Befund der Abschlussprüfung — kein veralteterdocs/-Text, kein nachzuziehender Contract für dieses Paket. D5 sagte noch im Präsens, Organisationen seienentity_type: person; seit #172 falsch, jetzt als Verweis auf #172 formuliert.