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>
Kurzform (Nutzer-Entscheidung): eine neue Zeile mit `"` unter dem Knoten
— eigenes Zeichen statt Einrückung, weil Einrückung Hierarchie bedeutet;
Leerraum-Regel wie bei =, >/<, damit "Zitat"-Labels unberührt bleiben.
Langform (Nutzer-Entscheidung): hinter einem `---`-Trenner nach
YAML-/Frontmatter-Vorbild eröffnen ID-Zeilen (#auth) Blöcke, deren
eingerückte Zeilen der Text sind — kein Schlusszaun, der vergessen werden
könnte; die Wurzelknoten-Regel endet am Trenner, darum braucht dort keine
Zeile ein Zeichen. Fehlertoleranz: verwaiste/uneingerückte Zeilen im
Beschreibungsteil warnen zeilengenau — ein versehentlicher Trenner macht
sich laut bemerkbar. SPEC §11, TASKS, ROADMAP und Plan nachgezogen; damit
ist die letzte offene Schreibweise der fünf D34-Erweiterungen fest.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Parser liest die Marke zwischen Zeichen und Statusbox (Leerraum-Regel,
`- >Achtung` bleibt Label); den Anfangszustand rechnet initialCollapsed()
in model.js: `>` klappt ein, `<` (und die Fokusmarke !!!) holt seinen
Teilbaum hervor, indem die Faltung die Pfad-Ebenen hinunterwandert —
Geschwister stehen als einzelne eingeklappte Knoten da, jede Kante bleibt
eine echte. Im Diagramm: Falt-Zeichen ▾/„▸ n" vor dem Label (n = alle
verborgenen Knoten), Klick oder ←/→ am fokussierten Knoten klappt um;
Eingriffe je Label-Pfad, nur für die Sitzung, Dokumentwechsel setzt
zurück. Eingeklappte Kinder werden nicht gerendert (Export, Messungen,
Pfadlinie automatisch konsistent), ihre Warnungen aber weiter gemeldet.
Export/Druck: „▸ n" bleibt, das ▾ offener Knoten fällt weg. Legende +
a11y in allen 9 Sprachen; SPEC-§11-Abschnitt in §1/§9 überführt;
15 neue Tests (tests/fold.test.js), Snapshots aktualisiert.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Stellung: `- > [x] Backend` — die Marke steht hinter dem Zerlegungszeichen,
damit die Gate-Spalte bündig bleibt (an ihr liest das Auge die Hierarchie
ab); `>` am Zeilenanfang wäre zudem die Markdown-Blockquote-Konvention.
Wurzelknoten ohne Zeichen tragen die Marke am Zeilenanfang.
Grafikexport und Druck folgen der sichtbar eingeklappten Struktur (wie der
Verworfene-Filter, SPEC §9); eingeklappte Knoten werden gekennzeichnet,
damit das Bild nicht stillschweigend Vollständigkeit behauptet — anders als
Cursor-Ring/Kranz/Fokusmarke ist die Faltung eine Aussage über das Bild,
nicht über den Betrachter. Genaue Form der Kennzeichnung beim Bauen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Parser erkennt `=` als disjunktives Gate (nur mit folgendem Leerraum —
`=SUMME(…)` bleibt Label); Mischungen melden mixedGate wie gehabt. Die
XOR-Regel warnt je WEITERER realisierter Alternative (xorConflict mit
Zeilennummer; realisiert = [~]/[/]/[x]/[^], siehe D35). Darstellung erbt
die komplette any-of-Geometrie (ul class="or xor"), ergänzt um eine
„1"-Plakette am Austritt der Sammelleiste — auch im Grafikexport.
Legende (+ hint_root) und Warntext in allen 9 Sprachen; SPEC §11-Eintrag
in §1/§3/§9 überführt; 13 neue Tests (tests/xor.test.js).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SPEC §11: Zeichen festgelegt (disjunktiv wie `|`, Mischung → mixedGate,
Leerraum-Regel gegen Labels wie =SUMME(…)); offen bleibt nur noch die
Kennzeichnung der Gruppe im Diagramm. D34-Nachtrag begründet die Wahl und
hält die verworfenen Kandidaten fest (x, ^, |1, /, ⊕, °).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tickets haben auf `#` Vorrang (`#123` als etablierte Kurzschreibweise, oft
zugleich die natürliche Knoten-ID; notfalls Präfix wie `#t123`). Freie
Schlagworte verlassen `#` und gehen auf `&tag` — als niedrig priorisierte
Idee, ausdrücklich ungebaut: Ohne Konsumenten (Filter-Linse, Taiga-Label-Sync)
sind Tags nur Kommentare mit Extra-Syntax; gebaut erst zusammen mit dem ersten.
Zeichenwahl nach den D32-Kriterien: `&` ist auf DE- wie US-Layout eine
Shift-Taste, nie ein Dead-Key; „R&D" und „Drag & Drop" bleiben durch die
Alleinstehend-Regel (wie `!!!`) Labels. Verworfen: `~` (Dead-Key auf Mac-DE,
Zirka-Kollision), `$`, `%`, `:`, `§`, `*`.
Damit ist der offene Punkt aus D34 durch Wegfall statt Trennregel geschlossen.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die fünf geplanten Notations-Erweiterungen für vollständiges Lean-Pathfinding
sind in die Doku eingearbeitet — Schreibweisen samt offener Punkte in SPEC §11,
Begründung und Folgen in D34, Aufgaben in Phase 4, und als Knoten im
mitgelieferten Werkbaum-Plan.
Drei Kollisionen mit Bestehendem sind dabei benannt statt stillschweigend
mitentschieden: `#` trägt jetzt drei Bedeutungen (Ticket, Schlagwort, Knoten-ID),
`x` für XOR liest sich neben `[x]` schlecht, und kurze Knotenbeschreibungen
können keine eingerückte Folgezeile sein, weil Einrückung Hierarchie bedeutet.
Die weitestreichende Folge betrifft D18: Mit Dependency Closure — gemeinsame
Abhängigkeiten nur einmal gezählt — ist die günstigste Alternative nicht mehr
lokal entscheidbar; die gierige Wahl je Gruppe ist nicht länger optimal.
LEAN-PATHFINDING.md schlug für Abhängigkeiten noch `→ Feature` vor (Verweis auf
den Titel, rote Linien); das ist mit `:#id` überholt und korrigiert.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- docs/ROADMAP.md: neuer Abschnitt „Gemeinsam an einem Diagramm arbeiten" in
drei Stufen — Lesen teilen (?sourceUrl=, vorhanden), asynchron über Git
(heute schon möglich, weil der Plan Text ist: git diff/blame sind lesbar;
Ausbau = Backend committet jede Änderung), live tippen (Transport ist der
kleinere Teil, das Zusammenführen gleichzeitiger Änderungen der eigentliche;
Text-CRDT passt wegen D14 ohne eigene Merge-Logik). Notiert auch, warum Git
direkt aus dem Browser kein Live-Sync ist (Sync auf Zuruf, CORS-Proxy nötig,
Konfliktmarker mitten in der Notation) und was vor einer Entscheidung offen
ist (erste Laufzeit-Abhängigkeit, Commit-Granularität, Rechte).
- docs/examples/example-werkbaum.werkbaum: passender Zweig „Working together
on one plan" (94 Knoten, parst ohne Warnung).
Dabei aufgefallen: Das mitgelieferte Dokument wurde nur EINMAL angelegt — die
Ergänzung hätte niemanden erreicht, der die Seite schon geöffnet hatte.
`werkbaum-seeded` hält deshalb statt '1' den Fingerabdruck (FNV-1a) der
ausgelieferten Fassung; bei neuer Fassung wird der Text nachgezogen, aber nur
wenn der Nutzer ihn nicht bearbeitet hat. Gelöscht bleibt gelöscht.
`resetToDefaults()` setzt den Merker mit.
Verifiziert im Browser, vier Fälle: alte unveränderte Fassung wird nachgezogen
(98 Zeilen, neuer Zweig da); selbst geänderter Text bleibt unangetastet;
gelöschtes Dokument kehrt nicht zurück; frischer Zustand zeigt die neue
Fassung (89 sichtbare Knoten, keine Warnung). Vitest 37/37.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Zwei zusammenhaengende Ideen unter "Kleinere Ideen" festgehalten, aufbauend
auf dem Aufwands-Rollup:
- Nutzen/Wert je Knoten als Gegenstueck zur Kosten-Groesse (Nutzen/Kosten-
Priorisierung, WSJF-artig); Syntax bewusst offen gelassen (SPEC-first).
- Gestaffelter "guenstigster Pfad": D18 status-bewusst machen (fertig/prod =
erledigt), nur den offenen Rest hervorheben und zur naechsten, per Nutzen
gewaehlten Ausbaustufe weiterspringen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>