:todo rows grow wt links, sev bullets, fade, counts, familiesThe :todo row is bare KEY title [done] while a :work row carries nav, buttons and stats. Ruling (gritzko 2026-08-03): one ticket = one worktree — multi-tree work becomes a ticket FAMILY with explicit On1:/On2: deps — so a board row can check for its wt (listWork + the suffix-tolerant ticketKey, the exact reverse of work's [?]) and surface links and stats. This ticket grows the row; the arg grammar and meta filters stay /todo/TODO/TODO-004's.
views/work/work.js already maps wt name → ticket (ticketKey, WORK-010) and owns the stats machinery: graf ahbeh (WORK-011), fadeHex age fade (WORK-005), fixed button slots (R2).views/todo/todo.js reads one line per ticket (header) and renders KEY <elastic title> [done]; sort still rides the dying header [MARK] — Now:/Sev: pairs are the truth now (/todo/TODO/TODO-004 context).mtime.idx caches per-blob commit times — the fade must read THAT, not fs mtime (a fresh clone restamps every file, TODO-004 measured all 837 tickets tie).Board and todo TOPIC rows grow, in order: sev bullet, key, wt link, counts, fade; family children nest under their parent. Composes with the /todo/TODO/TODO-002 badge and the BE-040 [done] button, forks neither.
● off Sev: (CRIT red, HIGH orange, MED plain, LOW dim); open/closed state in the same glyph (closed tickets, when a TODO-004 filter shows them, render hollow ○).work/<KEY>* wt puts a visible [»] slot after the key, minting status //KEY — the symmetric twin of work's [?]; no wt → the slot ┄-fills (fixed columns, the work R2 discipline).[+N][-N] via work's registry/graf cache, plus changed/new/deleted file counts (~N +N -N) off the wt status; zero sides show nothing, two-digit clamp — the work ahbehSpans conventions.mtime.idx; pager-only leading #rrggbb O token, fadeHex reused as-is.Sub: names a listed OPEN parent indents under it, dotted rails (├┄┄, work's tracker-run look); a parent-less or closed-parent Sub: renders flat.Sev:/Now:/Sub: come off the ONE TODO-001 read (a pageMeta head-scan of Key: value lines) or the TODO-003 index — never a second open per ticket.registry()), and only for tickets that HAVE a wt; the no-wt board must stay index-fast.work/PIN-1b links from ticket PIN-1; two wts matching one ticket → the name-sorted first gets the slot, the rest are :work's business.Sev: (the migration ran); the header-grep stays only as the closed-state fallback until TODO-004 lands its Now: filter.pageMeta() head-scan (Sev/Now/Sub/Due) on the TODO-001 read pathSev:-driven sortlistWork × ticketKey) + the [»] slotmtime.idx (blocked on /todo/BRO/BRO-044)Sub: family nesting, dotted rails///be/#3adde9ed (2026-08-03) — the fade item is unblocked; it needs the wt rebased past that commit (base was acc80350 + the bee1634d merge).