Dependency visualization for plan site
Surface cross-entity relationships by scanning content for ID references (WORK-XXX, SPEC-XXX, BUG-XXX, ADR-XXX). Build a bidirectional relationship index and render relationships in a dedicated layout slot on each entity page.
Acceptance Criteria
- During the
registerpipeline phase, entity content is scanned for ID reference patterns - A bidirectional relationship index is built in the
EntityRegistry - Each entity page displays a "Relationships" section showing linked entities
- Each reference is a live link with an inline status badge
- Relationships are categorized: "Blocked by", "Blocks", "Related"
- Blocked items show a visual indicator in the sidebar when blockers are unresolved
- Relationships render via a computed layout slot or region (not manual HTML injection)
Approach
Extend the plan package's pipeline hooks. In register(), scan each entity's content for (WORK|SPEC|BUG|ADR)-\d+ patterns and index relationships. The relationships section is surfaced via the shared layout engine — either as a computed slot in planLayout (similar to how computed.toc works) or as an injected region. This avoids manual HTML injection in postProcess() and keeps the rendering declarative.
Once WORK-050 converges the plan renderer with the shared layout engine, the relationships section can sit in the right-side panel alongside the ToC, providing an "on this page" + "related entities" sidebar similar to documentation sites.
References
- SPEC-015 (Plan Site UX at Scale — Feature 6)
- WORK-020 (entity registration — the registry this builds on)
- WORK-050 (renderer convergence — provides the layout slot mechanism)