feat: Effektiver Status — Knotenfarbe zeigt ihn, Diskrepanz-Marke unten links (SPEC §4/§9, D39)

Jeder Status bekommt einen Fortschritts-Rang entlang der Ergebnis-Skala
(D5); effektiv ist das Minimum über die Abhängigkeits-Hülle (Fixpunkt —
Zyklen teilen ihr Minimum, wörtlich das „wird gemeinsam fertig" aus D34).
Neutral und [-] zählen als 0, [!] als 1; bei doppelter ID gilt die erste
Vergabe. Entschieden (Nutzer): Die Knotenfarbe zeigt den effektiven
Status — das Diagramm beantwortet „wie weit ist das wirklich?". Wo der
eigene Status weiter ist, sitzt unten links die eigene Statusbox als
Marke in den eigenen §4-Farben (auch im Export/Druck); Tooltip und
a11yEffective benennen beides. XOR-„realisiert" und „Was ist neu?"
bleiben bewusst intrinsisch. i18n in allen 9 Sprachen; 12 neue Tests
(tests/effective.test.js).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-22 17:15:04 +02:00
co-authored by Claude Fable 5
parent cbe798d746
commit 15c3e85e26
12 changed files with 297 additions and 40 deletions
+40
View File
@@ -1834,3 +1834,43 @@ Stiel-Messung, Treppe und Pfadlinie sind damit ohne Zusatzcode konsistent
per CSS zu verstecken). Die Kennzeichnung „▸ n“ ist Teil des Knotentexts und
wandert von selbst in den SVG-Export; das ▾ offener Knoten wird dort und im
Druck entfernt — es ist Bedienelement, keine Aussage über den Plan.
## D39 — Effektiver Status: die Farbe sagt die Wahrheit, die Marke die Box
Mit den Abhängigkeiten (D37) gibt es zwei Aussagen je Knoten: was in der
Statusbox steht (intrinsisch) und wie weit er wirklich ist (effektiv, §4).
Erwogen waren drei Darstellungen — Diskrepanz-Kennzeichnung bei intrinsischer
Farbe (die ursprüngliche Empfehlung), ein Umschalter, oder Farbe = effektiv.
**Entschieden (Nutzer): Die Knotenfarbe zeigt den effektiven Status; wo der
eigene Status weiter ist, kommt eine Diskrepanz-Marke dazu.** Das ist die
stärkere Wahl: Das Diagramm beantwortet „wie weit ist das wirklich?“ — genau
die Frage, für die man auf einen Plan schaut. Ein grünes `[x]`, das auf ein
rosé `[~]` wartet, wäre die hübschere Lüge.
**Die Rechenregel ist ein Minimum über die Abhängigkeits-Hülle.** Jeder Status
bekommt einen Fortschritts-Rang entlang der Ergebnis-Skala (D5); effektiv ist
das Minimum des intrinsischen Rangs über den Knoten selbst und alles, was er
direkt oder mittelbar braucht. Diese Form hat zwei angenehme Folgen: **Zyklen
brauchen keine Sonderregel** — alle Knoten eines Zyklus teilen ihr Minimum,
und das ist wörtlich das „wird gemeinsam fertig“ aus D34; und die Rechnung ist
eine schlichte Fixpunkt-Iteration (Ränge sinken nur, Abbruch garantiert).
Außerhalb der Skala: neutral und `[-]` zählen als 0 — wer auf etwas
Verworfenes oder nie Begonnenes zeigt, ist effektiv am Anfang, und genau das
soll auffallen —, `[!]` als 1 (die Absicht-ohne-Investition-Gruppe aus D35).
Bei doppelter ID gilt die **erste** Vergabe — das löst das in D36 offen
gelassene „wer gewinnt bei Verweisen“ konsistent zur `duplicateId`-Warnung.
**Die Diskrepanz-Marke ist die eigene Statusbox in den eigenen Farben.**
Unten links (die letzte freie Knoten-Ecke: oben rechts Größe, unten rechts
Tags, oben links ⚠) sitzt ein kleines `[x]`-Etikett in den §4-Farben des
intrinsischen Status — die Notation kennzeichnet sich mit ihrem eigenen
Vokabular, niemand lernt ein neues Symbol, und die Farben tragen die ganze
Geschichte: Knoten rosé (effektiv in Arbeit), Etikett grün (selbst fertig).
Tooltip („effektiv … — selbst schon …, wartet auf Abhängigkeiten“) und
`a11yEffective` sagen es in Worten. Marke und Färbung gehören in Export und
Druck — sie sind eine Aussage über den Plan, nicht über den Betrachter.
**Was beim intrinsischen Status bleibt:** die XOR-Regel (§3) — „realisiert“
heißt Kosten investiert, und investiert ist investiert, auch wenn
Abhängigkeiten den Knoten zurückhalten; und „Was ist neu?“ (D28) — der gelbe
Kranz meldet das `[^]` im Text, also den Deploy des Knotens selbst. Beide
Prüfungen laufen im Parser bzw. auf dem Text und bleiben unberührt.
+32 -11
View File
@@ -190,6 +190,24 @@ Codiert als Checkbox nach dem Zeichen (Erweiterung der Markdown-Task-Syntax):
verloren, Folgezeilen bleiben unberührt. (Eine mehrzeichige Klammer wie
`[xyz]` ist keine Statusbox und bleibt Teil des Labels.)
**Intrinsischer und effektiver Status (Abhängigkeiten, §1).** Der Status in
der Box ist der **intrinsische** — der Bearbeitungsstand des Knotens selbst.
Der **effektive** Status berücksichtigt die Abhängigkeiten: Ein Knoten kann
effektiv nicht weiter sein als das, was er braucht.
- **Fortschritts-Rang** entlang der Ergebnis-Skala (D5):
`[?]` 0 · `[ ]` 1 · `[~]` 2 · `[/]` 3 · `[x]` 4 · `[^]` 5. Außerhalb der
Skala zählen neutrale Knoten und `[-]` als Rang 0 („nichts Anrechenbares“),
`[!]` als Rang 1 (Absicht ohne Investition, D35).
- **Effektiver Rang = Minimum des intrinsischen Rangs über die
Abhängigkeits-Hülle**: der Knoten selbst plus alles, was er per `:#…` direkt
oder mittelbar braucht. Zyklen brauchen keine Sonderregel — alle Knoten
eines Zyklus teilen so von selbst ihr Minimum („wird gemeinsam fertig“, §1).
Unbekannte IDs zählen nicht (sie sind schon gewarnt); bei doppelter ID gilt
die **erste** Vergabe (D36).
- Der effektive Status wird **gerechnet, nie geschrieben** (D14: der Text ist
die eine Quelle der Wahrheit). Darstellung: §9; Begründung: D39.
## 5. Aufwand (T-Shirt-Größen)
- Werte: `XS < S < M < L < XL < XXL`, notiert in Klammern, z. B. `(L)`.
@@ -241,6 +259,17 @@ Stück zwischen Elternknoten und erstem Abzweig — eine kleine **„1“-Plaket
(weißer Kreis mit grauem Rand, graue Ziffer): „genau eine“. Sie erscheint auch
im Grafikexport. Siehe D35.
**Die Knotenfarbe zeigt den effektiven Status (§4)**, nicht den intrinsischen —
das Diagramm beantwortet „wie weit ist das wirklich?“. Wo der eigene Status
**weiter** ist als der effektive (der Knoten wird von Abhängigkeiten
zurückgehalten), sitzt unten links eine kleine **Status-Marke** mit der
eigenen Statusbox (z. B. `[x]`) in den §4-Farben des intrinsischen Status;
Tooltip und `aria-label` benennen beide. Ohne Diskrepanz ändert sich nichts —
und für die XOR-Regel (§3) und „Was ist neu?“ (unten) zählt weiterhin der
**intrinsische** Status: Investiert ist investiert, und `[^]` im Text bleibt
die Deploy-Aussage. Marke und Färbung erscheinen auch im Grafikexport und im
Druck. Siehe D39.
**Optionale Knoten (`+`, §3):** Sie hängen an der normalen all-of-Zerlegung,
die Anordnung bleibt unverändert. Zwei Kennzeichen, beide auch im Grafikexport:
@@ -661,17 +690,9 @@ die Closure-Rechnung des günstigsten Pfads (alle drei unten).
### Intrinsischer und effektiver Status
- Der **intrinsische** Status ist der, der in der Statusbox steht (§4) — der
Bearbeitungsstand des Knotens selbst.
- Der **effektive** Status berücksichtigt zusätzlich die Abhängigkeiten: Ein
intrinsisch fertiger Knoten ist effektiv **nicht** fertig, solange eine
Abhängigkeit es nicht ist.
- Der effektive Status wird **gerechnet, nie geschrieben**. Im Notationstext
steht ausschließlich der intrinsische — sonst gäbe es zwei Quellen der
Wahrheit für dieselbe Aussage.
- **Offen ist die Darstellung.** Die Knotenfarbe zeigt heute den intrinsischen
Status (§4); beide zugleich brauchen entweder einen zweiten visuellen Kanal
oder einen Umschalter.
**Umgesetzt** — Rechenregel in §4 (Fortschritts-Rang, Minimum über die
Abhängigkeits-Hülle), Darstellung in §9 (Knotenfarbe = effektiver Status,
Diskrepanz-Marke unten links). Siehe D39.
### Querverbindungen im Diagramm
+6 -1
View File
@@ -83,8 +83,13 @@ entscheiden, **bevor** Code entsteht.
`deps` als ID-Strings am Knoten, Warnung `unknownDep`, Zyklen bewusst
ungeprüft; sichtbar als `→ #a, #b` im Tooltip + `a11yDeps`;
SPEC-§11-Teil nach §1 überführt; `tests/deps.test.js`.
- [ ] Effektiven Status rechnen (intrinsisch + Abhängigkeiten); Darstellung
- [x] Effektiven Status rechnen (intrinsisch + Abhängigkeiten); Darstellung
entscheiden — die Knotenfarbe zeigt heute den intrinsischen Status.
→ Entschieden und umgesetzt (D39): Fortschritts-Rang (SPEC §4), effektiv
= Minimum über die Abhängigkeits-Hülle (Fixpunkt, Zyklen teilen ihr
Minimum); **Knotenfarbe = effektiver Status**, bei Diskrepanz die eigene
Statusbox als Marke unten links in den eigenen Farben (auch im Export);
Tooltip + `a11yEffective`; `tests/effective.test.js`.
- [ ] Günstigsten Pfad auf die Dependency Closure umstellen (gemeinsame
Abhängigkeiten nur einmal zählen). Erweitert D18; die gierige Wahl je
Alternativgruppe ist damit nicht mehr optimal — Verfahren wählen und
+3 -3
View File
@@ -12,9 +12,9 @@
- [x] Node IDs (#auth) (S) %% often just the ticket number, see SPEC §11
+ [?] Free tags, &tag (M) %% only together with a consumer, see D34
- [?] A lens: highlight every node tagged &x (S)
- [~] Dependencies across the tree, (:#auth,#api) (M)
- [?] They constrain the status, not when work may start (S)
- [?] Effective status: intrinsic, plus what it depends on (S)
- [x] Dependencies across the tree, (:#auth,#api) (M)
- [x] They constrain the status, not when work may start (S)
- [x] Effective status: intrinsic, plus what it depends on (S)
- [x] Cycles are legal — they mean "finished together" (XS)
- [x] An id with no node behind it is a warning (XS)
- [x] XOR, = — exactly one alternative, not at least one (S)