Skip to content

[renderer] Wire epic dashboard to the deterministic renderer#354

Closed
leeovery wants to merge 3 commits into
feat/render-treefrom
feat/wire-epic-dashboard
Closed

[renderer] Wire epic dashboard to the deterministic renderer#354
leeovery wants to merge 3 commits into
feat/render-treefrom
feat/wire-epic-dashboard

Conversation

@leeovery

@leeovery leeovery commented Jun 4, 2026

Copy link
Copy Markdown
Owner

Summary

Stacked on #351. Makes the epic state display render via the deterministic renderer instead of being hand-drawn inline.

  • epic-dashboard.cjs (new) — renderEpicDashboard(epic) assembles the entire dashboard (box title, three stage dividers, one tree per phase, stage-meta callouts) from a buildEpicDetail-shaped object, using the generic renderer ([renderer] Tree shape — discovery-map renderer (spike → keeper) #351) + conventions. Epic-specific composition (lifecycle labels, count summaries, source rows, impl progress, seed/import/new-arrival callouts) lives here; titlecase() added to conventions.
  • discovery.cjs — new render <work_unit> [new_arrivals_json] command that emits the finished block (the display surface) in-process; the default data-dump output (the reasoning surface) is untouched, so every other consumer is unaffected.
  • epic-display-and-menu.md — the "non-empty map" branch drops from ~103 lines (hand-drawn template + the whole "Stage and tree display rules") to 7: run the command, emit verbatim. Net −94 lines of prose. The no-map "Otherwise" branch is kept self-contained (still hand-drawn; wiring it + its recommendation logic is a follow-up).

Intentional visual changes from the old hand-drawing (all previously agreed): ↳ From … provenance, 8-col body gutter, width-72 wrapping with the gutter-orphan bug now impossible.

Test plan

  • node --test tests/scripts/test-render.cjs tests/scripts/test-epic-dashboard.cjs — 43 tests (renderer + epic-dashboard: helpers, full render, callouts).
  • Renders the full dashboard from a realistic buildEpicDetail fixture; the render command errors cleanly when the work unit isn't an active epic.
  • Note: end-to-end against a live .workflows/ manifest is not exercised here (this repo has none); the data path reuses the battle-tested discover().

🤖 Generated with Claude Code

leeovery and others added 3 commits June 4, 2026 22:43
Add epic-dashboard.cjs — renders the full epic state display (box title,
three stage dividers, one tree per phase) from a buildEpicDetail-shaped
object, using the generic renderer + conventions. Epic-specific
composition (lifecycle labels, count summaries, ← source rows, impl
progress) lives here. Adds titlecase() to conventions.

Built and tested in isolation against the real data contract — no edits
to the live discovery.cjs or epic-display-and-menu.md yet; that hookup
is a small deliberate follow-up. 9 tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a 'render <work_unit> [new_arrivals_json]' command to discovery.cjs
that emits the finished dashboard block via epic-dashboard.cjs (the
display surface); the default data-dump output (reasoning surface) is
untouched, so other consumers are unaffected. Complete epic-dashboard
with the stage-meta callouts (seeded / imports / new-arrivals). 43 tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace section A's hand-drawn template + the ~100-line 'Stage and tree
display rules' with a call to 'discovery.cjs render {work_unit}', emitted
verbatim in a code block. The renderer (epic-dashboard.cjs) owns all the
gutter/wrap/branch math; the skill just runs it and shows the result.
Keeps the no-map 'Otherwise' branch self-contained (still hand-drawn,
wiring it is a follow-up). Net -94 lines of prose.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@leeovery leeovery changed the title [renderer] Epic-dashboard assembly module [renderer] Wire epic dashboard to the deterministic renderer Jun 4, 2026
@leeovery

leeovery commented Jun 5, 2026

Copy link
Copy Markdown
Owner Author

Winding this back. It was a valuable end-to-end spike — it proved the renderer covers the epic dashboard from real data — but we're pausing the live integration to design the data-handler architecture properly first (one central data handler, per-skill thin entries, schema-driven projections). The diff stays here for reference; renderer core lives in #348/#351.

@leeovery leeovery closed this Jun 5, 2026
@leeovery leeovery deleted the feat/wire-epic-dashboard branch June 5, 2026 07:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant