You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Builders tree shows each builder's current phase in the row label (#773 ... [fix]) but the full phase progression and the artifacts each phase produces are invisible. To see the spec, the user has to know which command opens it; to see the plan, run a different command; to see the current diff, click "View Diff" elsewhere. There's no single tree-driven path that mirrors how a builder actually progresses through a protocol.
Current state
Server-side already parses the full phase list — parseStatusYaml() populates ParsedStatus.planPhases: PlanPhase[] (packages/codev/src/agent-farm/servers/overview.ts:139) where PlanPhase = { id, title, status } (line 29).
But BuilderOverview (overview.ts:35) only exposes the currentphase string — the parsed phase list is truncated server-side before reaching the client.
Tree row builder (views/builders.ts:94–98) labels rows with [<current-phase>] only; no expandable phase children.
Tooltip on the row says Protocol: <p> | Mode: <m> | Progress: <%> (line 108).
SSE already pushes overview changes; no polling needed.
codev.viewPlanFile exists for PIR-only plan files (extension.ts:539); the equivalent viewSpecFile / viewReviewFile do not exist yet — see dependency below.
Proposed behavior
1. Flow the parsed phase list to the client
Extend BuilderOverview with planPhases: PlanPhase[]. No new fetch / parser / poll — just stop truncating data that's already parsed.
2. Render each phase as a child row of the builder
Under each builder row, render every phase as a child item with a status marker:
3. Each phase row is itself expandable to its artifact
Per protocol-specific mapping, expanding a phase row reveals the artifact produced/operated on in that phase:
Phase concept
Reveals
Specify (SPIR/ASPIR)
The spec file (codev/specs/<id>-<slug>.md on the builder's branch)
Plan (SPIR/ASPIR/PIR)
The plan file (codev/plans/<id>-<slug>.md)
Implement / Fix / Code (any)
The builder's current diff — same content as codev.viewDiff (all changed files, expandable like the existing "Changed files" child)
Review (SPIR/ASPIR/PIR/AIR)
The review file (codev/reviews/<id>-<slug>.md)
Other phases (investigate, verify, pr, etc.)
No artifact child — phase row stays a leaf with just its status marker
When a phase has no produced artifact yet (e.g. plan phase pending), expanding shows a placeholder leaf: (no plan file yet).
4. Reactive on phase advance
Tree refreshes via the existing OverviewCache SSE subscription — when porch advances phase or a gate flips, the tree re-renders without polling.
5. The existing "Changed files (3)" child stays
Folds into the Implement / Fix phase row's children (it's the same data), removing duplication.
Dependency
This issue requires P2 (generalize codev.viewPlanFile beyond PIR-only, add sibling codev.viewSpecFile / codev.viewReviewFile). The phase children invoke those commands when clicked. File P2 first or land it as part of this issue's PR.
Acceptance criteria
BuilderOverview.planPhases: PlanPhase[] ships from Tower (no new fetch — surface the already-parsed data).
Each builder row in the tree has one child per phase, status icon indicating done/current/pending.
Phases mapped to a known artifact (Spec/Plan/Implement/Review variants) are themselves expandable to that artifact.
Implement-phase expansion shows the same per-file list as codev.viewDiff; clicking a file row opens its vscode.diff editor (using existing openBuilderFileDiff).
Phases without an artifact (investigate, verify, pr, etc.) render as leaves with status markers only.
Tree updates reactively on SSE overview changes; no polling added.
Works for all protocols that have parsed phases: SPIR, ASPIR, PIR, AIR, BUGFIX, TICK, MAINTAIN. Protocols without artifact-producing phases render leaf-only.
The standalone "Changed files (N)" builder child is absorbed into the Implement/Fix phase child to avoid duplication.
Out of scope
Polling-based phase updates (intentionally — SSE is sufficient).
Re-architecting how artifacts are stored or named.
Editing artifacts from the tree (read-only reveal only).
A separate gates child row (intentionally — gates remain in the current blocked on <gate> row label).
Problem
The Builders tree shows each builder's current phase in the row label (
#773 ... [fix]) but the full phase progression and the artifacts each phase produces are invisible. To see the spec, the user has to know which command opens it; to see the plan, run a different command; to see the current diff, click "View Diff" elsewhere. There's no single tree-driven path that mirrors how a builder actually progresses through a protocol.Current state
parseStatusYaml()populatesParsedStatus.planPhases: PlanPhase[](packages/codev/src/agent-farm/servers/overview.ts:139) wherePlanPhase = { id, title, status }(line 29).BuilderOverview(overview.ts:35) only exposes the currentphasestring — the parsed phase list is truncated server-side before reaching the client.views/builders.ts:94–98) labels rows with[<current-phase>]only; no expandable phase children.Protocol: <p> | Mode: <m> | Progress: <%>(line 108).codev.viewPlanFileexists for PIR-only plan files (extension.ts:539); the equivalentviewSpecFile/viewReviewFiledo not exist yet — see dependency below.Proposed behavior
1. Flow the parsed phase list to the client
Extend
BuilderOverviewwithplanPhases: PlanPhase[]. No new fetch / parser / poll — just stop truncating data that's already parsed.2. Render each phase as a child row of the builder
Under each builder row, render every phase as a child item with a status marker:
Icons:
✓done,▶current,○pending (useThemeIconequivalents).3. Each phase row is itself expandable to its artifact
Per protocol-specific mapping, expanding a phase row reveals the artifact produced/operated on in that phase:
codev/specs/<id>-<slug>.mdon the builder's branch)codev/plans/<id>-<slug>.md)codev.viewDiff(all changed files, expandable like the existing "Changed files" child)codev/reviews/<id>-<slug>.md)When a phase has no produced artifact yet (e.g. plan phase pending), expanding shows a placeholder leaf:
(no plan file yet).4. Reactive on phase advance
Tree refreshes via the existing
OverviewCacheSSE subscription — when porch advances phase or a gate flips, the tree re-renders without polling.5. The existing "Changed files (3)" child stays
Folds into the
Implement/Fixphase row's children (it's the same data), removing duplication.Dependency
This issue requires P2 (generalize
codev.viewPlanFilebeyond PIR-only, add siblingcodev.viewSpecFile/codev.viewReviewFile). The phase children invoke those commands when clicked. File P2 first or land it as part of this issue's PR.Acceptance criteria
BuilderOverview.planPhases: PlanPhase[]ships from Tower (no new fetch — surface the already-parsed data).codev.viewDiff; clicking a file row opens itsvscode.diffeditor (using existingopenBuilderFileDiff).Out of scope
blocked on <gate>row label).