%% 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) - [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) - [?] 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 - [x] Collapsible subtrees (M) - [x] Initial state from the text: > collapses, < re-opens (S) - [x] 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)