Context
socket-link/ampere#663 rejected ROADMAP as a canon type with the rationale that a roadmap is a view, not a noun — a rendering of PROJECT, MILESTONE, and WORK_ITEM over time. This ticket is that view: a Phosphor surface that renders the admitted knowledge-work entities as a timeline. Filed early by request.
Gate: opens after socket-link/ampere#663 merges and a producing Link exists so the surface renders real entities, not fixtures.
Objective
A timeline surface: projects as lanes, milestones as markers on targetDate, work items groupable into their projectId lane, statuses color-mapped from the closed CanonWorkStatus enum.
Expected Outcomes
- Timeline surface consuming the three entity types via their display models (never canon types directly — same isolation wall as all UI)
- Status → color mapping over the closed enum, exhaustively;
providerStatus on detail inspection only
- Degrades gracefully: entities with no
targetDate collect in an undated shelf rather than vanishing; empty projects render as empty lanes
- Consistent with existing Phosphor rendering conventions and thermal discipline (Breaker-aware if animated)
Tasks
- Recon (STOP): verify merged entity shapes; survey existing Phosphor surface patterns and the VoxelFrame DTO path for whether the timeline is a Phosphor-rendered surface or a Compose surface consuming Phosphor conventions — record the verdict
- Design pass: lane/marker/shelf layout against the design system
- Implement against fixture data mirroring real merged shapes; swap to live entities when a producing Link ships
- Validate: snapshot per
CanonWorkStatus member; undated-shelf and empty-lane states covered
Technical Constraints
Read-only view; no scheduling/editing affordances; closed-enum styling only; performance within existing thermal budgets.
Out of Scope
Any ROADMAP canon type (rejected, recorded on socket-link/ampere#663); editing or re-planning interactions; Gantt-style dependency arrows (needs relation data the canon types don't carry — future widening question, not a rendering hack).
Agent: Opus for recon/design; Sonnet for implementation
Context
socket-link/ampere#663 rejected
ROADMAPas a canon type with the rationale that a roadmap is a view, not a noun — a rendering ofPROJECT,MILESTONE, andWORK_ITEMover time. This ticket is that view: a Phosphor surface that renders the admitted knowledge-work entities as a timeline. Filed early by request.Gate: opens after socket-link/ampere#663 merges and a producing Link exists so the surface renders real entities, not fixtures.
Objective
A timeline surface: projects as lanes, milestones as markers on
targetDate, work items groupable into theirprojectIdlane, statuses color-mapped from the closedCanonWorkStatusenum.Expected Outcomes
providerStatuson detail inspection onlytargetDatecollect in an undated shelf rather than vanishing; empty projects render as empty lanesTasks
CanonWorkStatusmember; undated-shelf and empty-lane states coveredTechnical Constraints
Read-only view; no scheduling/editing affordances; closed-enum styling only; performance within existing thermal budgets.
Out of Scope
Any
ROADMAPcanon type (rejected, recorded on socket-link/ampere#663); editing or re-planning interactions; Gantt-style dependency arrows (needs relation data the canon types don't carry — future widening question, not a rendering hack).Agent: Opus for recon/design; Sonnet for implementation