Files
werkbaum/docs/TASKS.md
T
mhoennigandClaude Fable 5 477ef6c812 docs: Schlagworte auf &tag umreserviert, #-Doppelrolle aufgelöst (D34)
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>
2026-08-22 12:15:22 +02:00

88 lines
5.3 KiB
Markdown

# Aufgaben
Abhaken beim Erledigen; neue Aufgaben unten anfügen.
## Phase 1 — Modularisierung & Tests
- [x] Projektgerüst: `src/` (parser.js, model.js, render.js, app.js),
`tests/`, `index.html` bindet Module ein; weiterhin ohne Build nutzbar
(ES-Module) oder mit minimalem Setup (Vite) — Entscheidung dokumentieren.
**Vite** gewählt (D19): `src/` als ES-Module, `npm run build` bündelt zu
einer self-contained `dist/index.html` (file://-tauglich). Gerüst steht
(aktuell `src/app.js` + `src/style.css`); Parser/Renderer werden in den
folgenden Checkboxen herausgelöst.
- [x] Parser extrahieren; Verhalten exakt wie in `docs/SPEC.md` §1–§8.
`src/parser.js` exportiert `parse`, `STATUS_BY_CODE`, `SIZE_RANK`
(headless, kein DOM); `app.js` importiert sie.
- [x] Unit-Tests für den Parser (Vitest): kanonisches Beispiel aus SPEC §10
als Fixture; Randfälle: gemischte Gates, Tabs/ungleichmäßige Einrückung,
URL mit `@`, mehrere Wurzeln, leere Labels, `%%` am Zeilenanfang/-ende.
`tests/parser.test.js` (18 Tests).
- [x] Renderer extrahieren (HTML-String-Erzeugung), Snapshot-Tests für
Normal- und Vertikalmodus sowie „Untergliederung fehlt“.
`src/model.js` (Baum-/Kostenlogik) + `src/render.js` (`renderTreeHtml`,
headless); `app.js` reicht UI-State als Parameter herein.
`tests/render.test.js` (6 Tests, Snapshots). Anm.: der Modus
(horizontal/vertikal/kompakt) ist reine CSS-Container-Klasse und ändert
den Renderer-String nicht — ein Snapshot deckt alle drei Modi ab.
- [x] Warnungs-Modell vereinheitlichen (Zeilennummern, Typen).
→ strukturierte Objekte `{type, line, ...}` (Renderer emittiert
`mixedGate`); `src/warnings.js` `formatWarning(w, t)` macht daraus den
lokalisierten, HTML-escapten Text an einer Stelle. Vorbereitet für
Phase 2 (`unknownStatus`). `tests/warnings.test.js`.
## Phase 2 — Qualität
- [x] Barrierefreiheit: Fokusreihenfolge, aria-Labels für Status/Größe/Tags.
→ je Knoten ein sprechender `aria-label` (Label+Status+Aufwand+Zuständige+
Link, lokalisiert, neue `a11y*`-Keys in allen 9 Sprachen); visuelle Badges
`aria-hidden`; Knoten `tabindex="0"` (Fokus = Lesereihenfolge) mit
`:focus-visible`-Rahmen; `#warn` als Live-Region (`role=status`,
`aria-live=polite`). Snapshots aktualisiert.
- [x] Druck-Stylesheet (Diagramm ohne Editor-Panel).
`@media print` in `style.css`: blendet Kopf/Editor/Splitter/Bedien-
elemente/Warnungen/Footer aus, Diagramm füllt die Seite; Statusfarben via
`print-color-adjust:exact`, `break-inside:avoid`, Pfad-Overlay inklusive.
- [x] Fehlertolerantes Parsen weiter ausbauen (unbekannte Statuszeichen melden).
→ Parser erfasst die Statusbox als beliebiges Einzelzeichen, validiert
gegen `STATUS_BY_CODE`; unbekannte Codes → `unknownStatus`-Warnung (Zeile +
Code), Knoten neutral, Folgezeilen unberührt. `render()` führt Parser- +
Renderer-Warnungen zusammen. i18n `unknownStatusWarn` in allen 9 Sprachen.
`tests/parser.test.js` (5 neue Tests).
## Deployment
- [x] GitHub-Pages-Workflow angelegt (`.github/workflows/pages.yml`,
siehe docs/DECISIONS.md D16).
## Phase 3 — Integrationen (siehe [ROADMAP](ROADMAP.md))
- [ ] Backend-Gerüst per Spring Initializr in `backend/` anlegen
(Kotlin, Gradle Kotlin DSL, JDK 21; Konventionen: backend/CLAUDE.md).
- [ ] SVG-Renderer (Layout-Engine) als gemeinsame Basis für Export und
Mermaid-Plugin.
- [ ] Mermaid-Plugin-Spike: Detektor + Registrierung, ein Minimalbaum.
- [ ] Taiga-Spike: `#ref`-Syntax parsen, Status via REST-API auflösen
(read-only), Mapping konfigurierbar.
## Phase 4 — Vollständiges Lean-Pathfinding (siehe [ROADMAP](ROADMAP.md), D34)
Reihenfolge ist nicht beliebig: ohne IDs keine Abhängigkeiten, ohne die keinen
effektiven Status und keine Closure-Rechnung. Jeder Punkt beginnt in
[SPEC §11](SPEC.md) — die dort benannten offenen Schreibweisen sind zu
entscheiden, **bevor** Code entsteht.
- [x] `#`-Doppelrolle auflösen und in SPEC §11 festschreiben.
→ Durch Wegfall statt Trennregel: Tickets haben Vorrang (`#123`
numerisch, oft zugleich die natürliche Knoten-ID; notfalls Präfix wie
`#t123`); Schlagworte gehen auf `&tag` — niedrig priorisiert, gebaut
erst mit dem ersten Konsumenten (D34-Nachtrag).
- [ ] Knoten-IDs parsen; doppelte ID → Warnung mit Zeilennummer.
- [ ] Abhängigkeiten `:#a,#b` parsen; unbekannte ID → Warnung, Zyklen erlaubt.
- [ ] Effektiven Status rechnen (intrinsisch + Abhängigkeiten); Darstellung
entscheiden — die Knotenfarbe zeigt heute den intrinsischen Status.
- [ ] 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
**benennen**.
- [ ] Querverbindungen zeichnen (eigene SVG-Ebene, optisch sekundär);
bei ausgewähltem Knoten ein-/ausgehende hervorheben.
- [ ] Faltmarken `>` / `<` parsen; interaktives Auf-/Zuklappen im Diagramm.
- [ ] XOR-Gruppe (`x`): Zeichen endgültig wählen, parsen, Verletzung melden.
- [ ] Knotenbeschreibungen: Schreibweise für kurze und lange Form festlegen
(Einrückung ist bereits Hierarchie), dann Tooltip/Pop-up.