feat: der günstigste Pfad zeigt die offene Front (D46)

Der Pfad rechnete rein aus T-Shirt-Größen — `ownCost()` war
`SIZE_RANK[size] + 1`, der Status kam in der Kostenrechnung überhaupt nicht
vor (nur `[-]` flog heraus). Folge: Längst Erledigtes wurde voll eingepreist
und lag weiter hell auf dem Pfad; im mitgelieferten Werkbaum-Plan zeichnete
die Linie damit überwiegend fertige Arbeit nach. Und in einer Alternativgruppe
hatte eine bereits realisierte Alternative keinerlei Kostenvorteil — der Pfad
empfahl die nominell billigere, obwohl die Wahl längst getroffen und bezahlt
ist.

Ab jetzt kostet Erledigtes 0. Der Pfad beantwortet damit „was ist als
Nächstes am günstigsten?" statt „was hätte der Plan von vorn gekostet?".

- Schwelle bei `[x]` fertig: die Beförderung auf `[^]` ist keine Kostenfrage
  (das tut per D30 ein eigener Commit).
- Angefangenes (`[~]`, `[/]`) zählt weiter voll — Bruchteile ordinaler Größen
  wären erfunden, und `[~]` heißt laut §4 gerade „Risiko hoch".
- Maßgeblich ist der intrinsische Status: investiert ist investiert, auch wenn
  Abhängigkeiten den Knoten effektiv zurückhalten (D39). Verhindert nebenbei
  doppeltes Zählen — die Abhängigkeit steht mit eigenen Kosten selbst da.
- Abgezogen werden nur die eigenen Kosten, nicht der Teilbaum.

Darstellung: Erledigte bleiben `cheap` und behalten ihre volle Statusfarbe
(grün/blau sagt schon „nichts mehr zu tun"), verlieren aber Stationspunkt und
implizites M-Badge — Letzteres macht eine Kostenannahme sichtbar, und an einem
erledigten Knoten wird keine getroffen. Station ist der tiefste noch OFFENE
Knoten eines Zweigs (`hidesOpenCheap()` fragt den Teilbaum statt nur die
direkten Kinder): Sind alle Kinder fertig, wird der offene Elternknoten selbst
die Station. Der eingeklappte Knoten (D38) erbt dieselbe Verschärfung.

Kein neuer Umschalter — der vorhandene ändert seine Bedeutung.

Nachgemessen am Werkbaum-Plan: 110 Knoten auf dem Pfad (unverändert),
Stationen 69 -> 24, und die 24 sind exakt die offene Front (Ticket-Referenzen,
Öffnen/Speichern, Backend-Gerüst samt REST und Persistenz, Websocket-Transport,
Text-CRDT, Mermaid-Layout, IDEA-Plugin). Linie wird weiter gezogen; Export und
Druck folgen ohne Zusatzcode, sie lesen dieselbe `.node.cheap-leaf`.

236 Tests grün, davon 14 neue (tests/frontier.test.js). Der Snapshot des
kanonischen Beispiels ändert sich um genau zwei Knoten.

SPEC §9, llms.md und ROADMAP/TASKS nachgezogen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-23 12:14:34 +02:00
co-authored by Claude Fable 5
parent 9069955895
commit c793bf0038
9 changed files with 342 additions and 36 deletions
+7 -8
View File
@@ -95,14 +95,13 @@ Tastendruck ein Commit); und wer bei einem Backend eigentlich was darf
reiner Kostenminimierung. Rollt analog zum Aufwands-Rollup hoch.
(Syntax offen — SPEC-first; `(…)`/`@`/`#`/`%%` sind belegt, es braucht ein
eigenes kollisionsfreies Zeichen.)
- Gestaffelter „günstigster Pfad" (Ausbaustufen): die Pfad-Rechnung (D18)
status-bewusst machen — `fertig`/`prod` gelten als erledigt (Hintergrund),
hervorgehoben wird nur der günstigste noch **offene** Rest (aktuelle Front).
Ist eine Alternativen-Gruppe komplett realisiert, springt der Pfad zur
nächsten, per Nutzen gewählten Ausbaustufe weiter (Regel: erst die Kette auf
`fertig`, dann die nächste Stufe). Baut auf Nutzen + Aufwands-Rollup auf und
erweitert D18 (heute rein statisch/kostenminimierend) um Nutzen- und
Status-/Zeitachse.
- Gestaffelter „günstigster Pfad" (Ausbaustufen) — **die Status-Hälfte ist
gebaut** (D46): `fertig`/`prod` kosten nichts mehr, hervorgehoben wird der
günstigste noch **offene** Rest (aktuelle Front); eine realisierte Alternative
gewinnt ihre Gruppe. Offen bleibt die **Nutzen-Achse**: Ist eine
Alternativen-Gruppe komplett realisiert, zur nächsten, per Nutzen gewählten
Ausbaustufe weiterspringen (Regel: erst die Kette auf `fertig`, dann die
nächste Stufe). Das braucht erst Nutzen + Aufwands-Rollup (oben).
- Attribut-Syntax für Termine/Meilensteine.
- Schlagworte `&tag` mit einer Filter-/Hervorheben-Linse im Diagramm: Der Baum
ist genau eine Zerlegung — ein Tag benennt eine Menge von Knoten quer dazu