Skip to content

Cockpit: interactive dependency graph — milestone DAG with live status coloring #208

Description

@robercano

Blocked by #206

Context

Blocking edges are already parsed (cockpit.sh --parse-blocking) but rendered only as a "Blocked by" table column; the only visual graph is the static mermaid block in the generated docs/ROADMAP.md. Yet the blocking graph is the load-bearing structure of the whole system — census ADVANCE eligibility and the release gate (#176) both hinge on it. It should be the visual centerpiece of the cockpit: one glance shows the critical path to the release and where it's stuck.

Proposal

  1. Client-side SVG DAG of the selected milestone's issues, built from the edges in Cockpit v2 foundation: /api/state JSON snapshot + zero-dep client-rendered SPA shell #206's state JSON. Layered topological layout (roots/unblocked left, release-gate issue rightmost); a small hand-rolled longest-path layering is enough at this scale (tens of nodes) — no external layout library.
  2. Node coloring by state, derived from the SAME state fields the release board uses: done (closed), in flight (live worker), ready (open + unblocked), blocked, needs-human; the release-gate issue gets a distinct treatment.
  3. Interactions: hover highlights the full upstream/downstream chain; click opens the issue card (and worker drawer when in flight); pan/scroll for larger graphs.
  4. Robustness: cycle detection renders flagged cycle edges (dashed/warning) instead of hanging — the census has genuinely hit all-blocked cycles (loop-census: all-blocked cycle fallback bypasses the blocking gate for a release issue with real (non-cyclic) open blockers #200); issues with no edges render in a side rail of unconnected nodes, not dropped; cross-milestone edges render as stub nodes linking out.

Acceptance criteria

  • Correct DAG for fixture milestones, including: a cycle fixture (flagged, no crash/hang), disconnected nodes (side rail), and a cross-milestone edge (stub node).
  • Status colors match the board view's classification for the same fixtures (shared source of truth in the state JSON).
  • Pure client-side, no external assets; layout stays legible at ~40 nodes.
  • The toposort/layering helper is exercised by tests runnable under plain node (no browser), plus fixture tests for the state classification.

Notes

  • Sibling of the release-board issue in this milestone; they share the issue-card model and open-drawer behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlogFiled, not yet approved by the owner - the loop must NOT pick it upenhancementNew feature or requestmodule:harnessOrchestrator machinery under .claudepriority:highNext in line

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions