UI-2: Monitor issue Gantt → view tab on issue detail (kill /monitor/issue/.../gantt) #398
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#398
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
As an operator, I want graph and Gantt views of an issue's pipeline timeline to be tabs on a single page, not separate routes, so that switching visualisations doesn't trigger a fresh page load and a redundant SSE re-subscription.
Why
monitor.issue.$owner.$repo.$issueNumber.tsxandmonitor.issue.$owner.$repo.$issueNumber.gantt.tsxare two routes that:/issues/pipeline?repo=...&issue=...) with identical query keysonPipelineStageSSE patch logic line-for-linenowon a 1s interval (only the Gantt needs it, but both subscribe)<PipelineGraph>or<PipelineGantt>is renderedToggling between them triggers full route remount + new SSE subscription, despite the data being identical.
Acceptance criteria
Route consolidation
monitor.issue.$owner.$repo.$issueNumber.tsxsearch schema to accept?view=graph|gantt(default:graph)view:graph→<PipelineGraph>+<DependencyGraph>(current default behaviour)gantt→<PipelineGantt>+ activenowtickerGraph | Timeline, both linking to the same route with different?view=apps/web/src/routes/monitor.issue.$owner.$repo.$issueNumber.gantt.tsx/monitor/issue/$owner/$repo/$issueNumber/gantt→/monitor/issue/$owner/$repo/$issueNumber?view=ganttShared logic extraction
onPipelineStageSSE patch handler into a singleuseIssuePipelineSSE(repo, issue)hook used by both rendersnowticker (useEffect+setInterval(1000)) only runs whenview === "gantt"(effect cleanup on toggle)PipelineGraph+PipelineGanttcomponents stay as-is; only the route owner changesTests
monitor.issue.$owner.$repo.$issueNumber.tsxtests extended:?view=ganttrenders Gantt,?view=graphrenders graph, default is graph, toggle updates URL without unmountnowticker only active in Gantt view (assertion via render-count or interval-spy)bun run qacleanOut of scope
PipelineGraphorPipelineGanttinternalsReferences
apps/web/src/routes/monitor.issue.$owner.$repo.$issueNumber.tsxL56-208 — primary surfaceapps/web/src/routes/monitor.issue.$owner.$repo.$issueNumber.gantt.tsxL48-205 — to be deleted