Skip to content

VSCode: area-header roll-up icons in backlog & builders views #926

@amrmelsayed

Description

@amrmelsayed

Summary

Add a roll-up status icon to the area group headers in the VSCode sidebar's Backlog and Builders views, so an engineer can see at a glance which areas are being actively developed (and which are open to spawn into) without expanding the groups.

Unifying principle: the area-header icon is a roll-up of its children's icons. The rollup function differs because the children differ, but the rule "header summarizes what's inside it" is consistent, and every glyph keeps one meaning. Reuses the existing builder-row icon/color vocabulary — no new colors introduced.

Backlog view headers (binary)

Children are issues, so the question is "is anyone working this area?":

State Icon Color token
Area has ≥1 active builder circle-filled testing.iconPassed (green)
No active builder (open to spawn) circle-outline disabledForeground (grey)

The green dot is the same dot that means "live builder" on a builder row — so its meaning is reinforced, not overloaded. Grey/idle areas stay muted, so the eye skims for spawn targets.

Builders view headers (worst-of-three rollup)

Every builder area group has ≥1 builder, so binary doesn't carry — roll up to the worst child state, reusing the three icons already used on individual builder rows (builders.ts:206-210):

If the area has… Icon Color token
any blocked builder bell notificationsWarningIcon.foreground (yellow)
else any idle/silent builder comment-discussion notificationsInfoIcon.foreground (blue)
else (all active) circle-filled testing.iconPassed (green)

This matches the existing within-group sort order (blocked → idle → active), so the header icon always matches the topmost row in the group.

Both views

  • Tooltip carries the detail. Backlog: "2 builders active in vscode". Builders: "1 blocked · 2 waiting · 3 active". Glanceable icon, count on hover.

Implementation notes

  • VSCode extension only. The Tower web dashboard backlog isn't grouped by area today, so it's out of scope.
  • No server / overview-payload change needed. The overview already carries builders[] (each with an .area field) alongside backlog[], so both rollups are computed client-side in the tree providers.
  • Backlog: derive Set<area-with-active-builder> from overview.builders in backlog.ts, pass a boolean into BacklogGroupTreeItem, set iconPath there.
  • Builders: BuildersProvider already has each group's builders + the isBlocked/isIdle logic when it calls groupByArea; compute the worst-of rollup and pass it into BuilderGroupTreeItem.
  • Keep both changes in the respective subclasses (BacklogGroupTreeItem, BuilderGroupTreeItem), not the shared AreaGroupTreeItem base — the rollup differs per view.

Known limitation (accepted)

An area that's busy but has no remaining backlog items won't render a backlog header at all, so it can't show "working" in the Backlog view. Fine for the "where do I spawn?" goal — you only care about areas that still have spawnable work.

Relevant files

  • packages/vscode/src/views/area-group-tree-item.ts — shared base (do not modify the rollup here)
  • packages/vscode/src/views/backlog-tree-item.ts / backlog.ts
  • packages/vscode/src/views/builder-tree-item.ts / builders.ts

Metadata

Metadata

Assignees

Labels

area/vscodeArea: VS Code extension

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions