Files
werkbaum/docs/examples/werkbaum.werkbaum
T
mhoennigandClaude Fable 5 3ba37fc5a0 feat: Abhängigkeiten (:#a,#b) parsen — unbekannte ID warnt, Zyklen zulässig (SPEC §1, D37)
Extraktionsschritt 7: alle alleinstehend angesetzten `:#a,#b`-Token —
EIN zusammenhängendes Token ohne Leerraum, mehrere je Zeile werden
zusammengeführt; eingeklammerte Erwähnungen wie `(:#auth,#api)` bleiben
Label (Zitier-Konvention wie `(#auth)`, deshalb enger als die frühere
§11-Formulierung). `deps` sind ID-Strings am Knoten; der Parser prüft
nur Existenz (Warnung unknownDep, Vorwärts-Referenzen normal), Zyklen
werden bewusst nicht einmal erkannt. Sichtbar als `→ #a, #b` im Tooltip
und als a11yDeps; Legendenzeile + Warntext in allen 9 Sprachen. Im
mitgelieferten Plan: Zyklen-legal und unknown-id-Warnung auf [x],
Abhängigkeits-Knoten auf [~]. 12 neue Tests (tests/deps.test.js).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-22 16:25:09 +02:00

169 lines
8.7 KiB
Plaintext

%% Werkbaum, planned with Werkbaum — what exists today and where it could go.
%% Distilled from docs/ROADMAP.md, docs/TASKS.md and docs/DECISIONS.md.
[~] Werkbaum (XXL) https://github.com/mhoennig/werkbaum
- [^] Notation (L)
- [^] Line format (M)
- [^] Status box, eight states (S)
- [^] T-shirt size and the "decompose from M" rule (S)
- [^] People tags, bare URLs, %% comments (XS)
- [^] And/or decomposition (S)
- [^] Optional nodes — neither required nor an alternative (S)
- [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] 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)
- [?] Node descriptions, shown as a tooltip or pop-up (M)
- [?] A short text right at the node (S) %% indentation already means hierarchy
- [?] A long block at the end, addressed by its id (S)
- [-] A separate storage format for the structure (L) %% the text is the format
- [ ] Ticket references (#123) (S)
- [?] Benefit per node, not only cost (M)
| [?] Another sigil next to the size (S)
| [?] Story points behind the T-shirt sizes (M)
- [~] Editor (XL) https://werkbaum.javagil.de
- [^] Live diagram from text (M)
- [^] Parser (S)
- [^] Renderer, three layout modes (M)
- [^] Horizontal fan (S)
- [^] Vertical, transposed (S)
- [^] Compact (S)
- [?] Cross links for dependencies (M)
- [?] Visually secondary — the tree carries the message (S)
- [?] Highlight what a selected node needs and feeds (S)
- [^] Cheapest path (M)
- [^] Cost model, missing size counts as M (S)
- [^] Metro-map line through the leaves (S)
- [?] Count the whole dependency closure (M)
- [?] Shared dependencies counted only once (S)
- [!] The cheapest alternative is no longer the local one (M) %% see D34
| [?] Search exactly, the trees are small enough (M)
- [?] Enumerate the any-of choices (S)
- [?] Cost is the size of the union (S)
| [ ] Stay greedy, but say so (XS)
- [^] Export (M)
- [^] SVG and PNG download (S)
- [^] PNG to the clipboard (S)
+ [^] Print stylesheet (XS)
- [^] Nine interface languages (M)
- [^] Translations (S)
- [^] Default taken from the browser (XS)
- [^] Accessibility: aria labels, focus order (S)
- [^] Works on a phone (S)
- [^] Several documents in one editor (M)
- [^] Switcher in the editor title bar (S)
- [^] Load a document from ?sourceUrl= (S)
- [^] Jump between diagram and text (S)
- [x] Line numbers in the text editor (XS) %% the warnings name them
- [?] Collapsible subtrees (M)
- [?] Initial state from the text: > collapses, < re-opens (S)
- [?] Fold and unfold in the diagram, independently of the text (S)
- [ ] Open and save .werkbaum files (S)
+ [^] Show what is new since your last visit (S)
+ [?] A pastel colour per person (S)
- [?] Dates and milestones (M)
| [?] An attribute in the line (S)
| [?] A separate timeline view (L)
- [^] Build and delivery (M)
- [^] One self-contained file, bundled by Vite (S)
- [^] Unit tests (S)
- [^] Published on every push (S)
- [-] Deploy through a gh-pages branch (S) %% GitHub Actions instead
- [-] Fonts from Google (XS) %% self-hosted, no third-party request
- [ ] Backend (XL)
- [ ] Kotlin and Spring Boot scaffold (M)
- [ ] Gradle Kotlin DSL, JDK 21 (S)
- [ ] Health endpoint and CI (S)
- [ ] Documents on the server (L)
- [ ] Text plus metadata, no structure format (M)
- [ ] REST endpoints (S)
- [ ] Persistence (S)
- [ ] Share by link (S)
- [?] Accounts and permissions (L)
| [?] Single user, one token (S)
| [?] Log in with OIDC (L)
- [~] Collaborating on a Diagram (XL)
- [^] Watch a shared Etherpad — it merges, we render (S)
- [^] Load the pad's plain-text export (XS)
- [^] Reload on demand (XS) %% a timer only trips Etherpad's rate limit
- [^] Embed the pad, keep the text mirror beside it (M)
- [^] Three views: pad and text, pad only, text only (S)
- [^] Splitter between pad and mirror (XS)
- [?] Editing in the frame stops after a while (S) %% SameSite=Lax, see D31
| [?] Ask the admin for cookie.sameSite = None (XS)
| [ ] Live with it: edit in the pad's own tab (XS)
- [^] A shared pointer: !!! focuses a node for everyone (XS)
- [?] Update by itself, within about 2 s (M)
| [?] Our own Etherpad beside Werkbaum (M) %% then every setting below is ours
- [ ] Node and a real database in userland (S) %% the flatfile store is not for production
- [ ] Book the RAM quota for an own daemon (XS)
- [ ] Reverse proxy in .htaccess, websockets included (S) %% Mattermost does it, wiki shows how
- [ ] systemd user unit so it survives a reboot (XS)
- [!] Keeping a public service patched (S) %% indefinitely, that is the real cost
| [?] Admin raises the export rate limit (XS) %% default is 10 per 90 s
| [?] Admin installs a plugin that pushes the text (S) %% postMessage to the page
| [?] Our own backend holds one socket and fans out (XXL)
| [ ] Poll inside the budget, at best every 9 s (S) %% legal, but not 2 s
| [-] Our own socket straight to the pad (L) %% measured: upgrade refused
| [-] Read the pad's HTML instead of the export (M) %% measured: no CORS header
- [ ] Git as the shared store (L)
| [ ] A file in a repository, changed by pull request (S) %% works today, no code
| [?] The backend commits every change (L)
- [?] History and restore (M)
- [?] Diff between two versions (S)
- [?] Who changed this line (S)
- [?] A branch per scenario (S)
- [?] Live editing, several people at once (XL)
- [ ] Transport over a websocket (S) %% the easy half
- [!] Merging simultaneous edits (L) %% the actual work
| [?] Text CRDT — the plan is plain text, so it fits (L)
| [?] Operational transformation (XL)
- [?] Cursors and who else is here (S)
- [-] A merge algorithm of our own (XL) %% solved problem, do not reinvent
- [?] Mermaid plugin (XL)
- [!] A layout engine of its own (XL) %% measure, place, route — the real work
- [ ] Measure node sizes (M)
- [ ] Text metrics without a browser (S)
- [ ] Badges and tags inside the box (S)
- [ ] Place nodes and route connectors (L)
- [ ] All-of fan (M)
- [ ] Horizontal (S)
- [ ] Transposed (S)
- [ ] Any-of rail (S)
- [?] Registration with Mermaid (M)
| [?] External diagram, self-hosted pages only (M)
| [?] Pull request into Mermaid itself (L)
- [?] IntelliJ IDEA plugin (XL)
- [?] Show the diagram in the IDE (L)
| [?] Through Mermaid, once Werkbaum is part of Mermaid itself (M)
- [?] Fenced werkbaum blocks render in Markdown (S)
- [-] A self-hosted Mermaid diagram type (S) %% the IDE brings its own Mermaid
| [?] Our own preview: the bundled single file in a JCEF window (M)
- [?] Hand the editor text in (S)
- [?] Get the clicked line back to the caret (S)
+ [?] A real editor, not just a preview (XL)
- [?] Language support for .werkbaum (L)
- [?] Lexer and parser to a PSI tree (M)
- [?] Syntax highlighting (S)
- [?] Warnings as inspections (S) %% mixed gate, unknown status
- [?] Completion for status, size and tags (S)
- [?] Structure view and folding (S)
- [?] Kotlin with the Gradle IntelliJ plugin (S)
- [!] A second parser that must not drift from the SPEC (M) %% exactly what D14 warns about
| [?] Both parsers test against the same fixtures (S)
| [?] Run the one JS parser inside the IDE (M)
- [?] Tracker integration (XL)
| [?] Taiga (L) https://taiga.io
- [ ] Resolve "#123" over the REST API (M)
- [ ] Read title, link and status (S)
- [ ] Map the workflow onto the states (S)
- [?] Write the status back (M)
- [-] A plugin inside Taiga itself (L) %% legacy frontend, self-hosted only
| [?] Tenzu, the successor (XXL) https://tenzu.net
| [ ] No tracker, plain text is enough (XS)