Skip to content

feat(engine): epic dashboard beachhead — domain projections, action-key routing, adapter on the gateway#384

Open
leeovery wants to merge 5 commits into
feat/engine-skeletonfrom
feat/engine-beachhead
Open

feat(engine): epic dashboard beachhead — domain projections, action-key routing, adapter on the gateway#384
leeovery wants to merge 5 commits into
feat/engine-skeletonfrom
feat/engine-beachhead

Conversation

@leeovery

Copy link
Copy Markdown
Owner

What

PR 2 of the engine stack (stacked on #383 — Phase 1 of the build sequence in ideas/deterministic-tree-and-menu-renderer.md on feat/renderer). The beachhead: the epic dashboard read path moves from prose into the engine.

  • domain/epic.cjsepicDetail ported from the continue-epic adapter (shared fns still from discovery-utils; behaviour identical).
  • domain/projections/epic.cjsepicDashboard / epicKey / epicMenu: the entire section A–C of epic-display-and-menu.md as code, including stage dividers, the discovery-map tree (wrap budget enforced — the original gutter-orphan bug is now structurally impossible), build-phase trees, gating, recommendation, and the menu with machine action keys + routes.
  • Adapter on the gatewaydiscovery.cjs = runGateway({ index, fallback, view }). index/fallback outputs byte-identical to before (verified by diff on fixtures; the 98-test discovery suite passes UNCHANGED). view {wu} emits the demarcated DATA / DISPLAY / MENU snapshot.
  • epic-display-and-menu.md: 848 → 411 lines — sections A–C are now call → emit verbatim → STOP → route on the selected key's action/route. The 16-row label-prefix routing table in SKILL.md Step 9 is gone. Soft gates read phase_counts from DATA. Resume/cancel/reactivate flows unchanged.
  • TREE_WIDTH = 65 (total rendered width incl. gutter) — the deliberate narrow-wrap choice, now a named constant.

Display changes (intentional, per the design log)

8-col body gutter (was 9), ↳ From … provenance lines, plans-not-ready + Key merged into the one DISPLAY block, proper ├─/└─ for multi-dep blocked plans.

Judgment calls to review

  • (Phase {N}, Task {M}): M = completed-task count (the .md leaves M undefined).
  • Blocked menu entries are skipped as recommendation candidates (unstated in the .md; recommending a non-selectable item seemed wrong).
  • s/spec keeps its menu position when recommended (a command option can't move to slot 1); gains (recommended).
  • No-map branch: phantom 'pending discussion topics from research count as siblings' rule dropped — no row template exists for unrendered siblings.

Tests

npm test 55 pass (incl. new byte-golden projection suite with a 67-char unbreakable-token wrap case); discovery suite 98 pass unchanged; typecheck clean.

🤖 Generated with Claude Code

leeovery and others added 5 commits June 12, 2026 13:01
domain/epic.cjs builds the EpicDetail (ported from the continue-epic
adapter, shared functions still required from discovery-utils);
domain/projections/epic.cjs renders the stage-grouped dashboard, the
Key block, and the action-keyed menu over it. Conventions gain
titlecase and TREE_WIDTH (65 — tree content width incl. gutter; the
deliberate narrow-wrap choice). lib.cjs exposes engine.detail.* and
engine.project.*.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ck/view

discover()/format() keep their byte-identical labelled output (detail
building now comes from engine.detail.epicDetail); the new view verb
emits one snapshot — DATA (flags, phase_counts, the ACTIONS key table
with routes and recommended/blocked markers), DISPLAY (dashboard +
key), MENU (rendered menu).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…routes on action keys

epic-display-and-menu.md section A becomes one scoped view call —
DISPLAY emitted verbatim as a code block, MENU verbatim as markdown,
STOP. Selection handling keys off the ACTIONS entry's action value;
route selection invokes the entry's stored route. Resume/cancel/
reactivate keep their hand-drawn displays. SKILL.md Step 9 collapses
the label-matching table to invoking the selected route.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Map-branch dashboard (long unbreakable token hard-split inside the
gutter, every body line within TREE_WIDTH), no-map branch with a
wrapped recommendation, brand-new branch, key category subsets, and
menu ordering/gating/blocked-entry/keys-route coverage. Added to the
npm test list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… pattern in CONVENTIONS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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