Skip to content

feat: gstack-sprint-dashboard — in-flight branch/stage visibility#2095

Open
m3dcodie wants to merge 7 commits into
garrytan:mainfrom
m3dcodie:feature/ui-workflow
Open

feat: gstack-sprint-dashboard — in-flight branch/stage visibility#2095
m3dcodie wants to merge 7 commits into
garrytan:mainfrom
m3dcodie:feature/ui-workflow

Conversation

@m3dcodie

@m3dcodie m3dcodie commented Jun 23, 2026

Copy link
Copy Markdown

Summary

bin/gstack-sprint-dashboard is a read-only CLI that renders a sprint board from gstack's own on-disk state — no new instrumentation, no new user input.

The gap: /retro is backward-looking (what shipped), /landing-report is VERSION-queue-scoped (what's claimed by open PRs). Neither answers "what is in-flight right now, and what stage is each branch at?" — the gap is acute when running several parallel Conductor sprints.

What shipped:

  • /dashboard skill — slash-command discoverable; compact terminal by default, --full for all sections, --web to open the HTML board in a browser
  • PreToolUse hook — fires gstack-dash-oneliner before every skill invocation (disk-only, 3s timeout, silent on error):
    ● feature/ui-workflow  v1.58.5.0  1 in-flight  OH:✓ Spec:○ Plan:▶ Impl:✓ Rev:○  shipped 4d ago  P1:2
    
  • Shared data library (lib/dashboard-data.ts) — typed loaders and assemblers shared by CLI and HTML renderers
  • Three terminal renderers (lib/dashboard-cli.ts) — oneliner (~80 chars), compact (~30 lines), full (~80 lines)
  • HTML board — same data, self-contained HTML with the extension's amber/zinc design system

Pipeline columns: office-hours → spec → plan-review → implement → review → ship → canary

Every widget degrades gracefully when its source file doesn't exist.

CLI — full view (/dashboard --full)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 gstack sprint dashboard — garrytan-gstack
 v1.58.5.0  |  1 in-flight  |  18 ships/mo  |  avg 1.0d/release  |  P1:2  |  decisions:1
 generated 6/26/2026, 10:01:23 AM
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 PIPELINE               OH      Spec    Plan    Impl    Rev     Ship    Canary   Last Activity
 ────────────────────────────────────────────────────────────────────────────────
 feature/ui-workflow    ✓       ○       ▶       ✓       ○       ○       ○       23m ago /plan-eng-revi  #2095 OPEN ◀
 main                   ○       ○       ○       ○       ○       ○       ○       —

 ACTIVITY FEED
 ────────────────────────────────────────────────────────────────────────────────
  23m ago    /plan-eng-review       feature/ui-workflow      completed
  49m ago    /plan-eng-review       feature/ui-workflow      started
  59m ago    /dashboard             feature/ui-workflow      completed
  1h ago     /dashboard             feature/ui-workflow      started
  2d ago     /office-hours          feature/ui-workflow      completed

 TOP SKILLS  (last 30d)
 ────────────────────────────────────────────────────────────────────────────────
  /careful            ████████████████████████████  180
  /freeze             ██████░░░░░░░░░░░░░░░░░░░░░░  36
  /office-hours       ░░░░░░░░░░░░░░░░░░░░░░░░░░░░  1

 QUALITY SCORES  (last 30d)
 ────────────────────────────────────────────────────────────────────────────────
  6/23/2026    /office-hours        10/10  (3 iter)

 RELEASE VELOCITY  (last 30d)
 ────────────────────────────────────────────────────────────────────────────────
  ███████████████████████
  v1.53.0.0   2026-05-29   v1.55.0.0   2026-05-30   v1.57.6.0   2026-06-07
  v1.57.7.0   2026-06-08   v1.58.0.0   2026-06-12   v1.58.5.0   2026-06-21

 ACTIVE DESIGN DOCS
 ────────────────────────────────────────────────────────────────────────────────
  mst-feature-ui-workflow-design-20260623-105354.md    6/26/2026

 TODOS BACKLOG
 ────────────────────────────────────────────────────────────────────────────────
  P1: 2
  P2: 15
  P3: 20

CLI — compact view (/dashboard, default)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 gstack  garrytan-gstack  ·  v1.58.5.0  ·  1 in-flight  ·  18 ships/mo  ·  avg 1.0d  ·  P1:2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 PIPELINE             OH     Spec   Plan   Impl   Rev    Ship   Canary
 ────────────────────────────────────────────────────────────────────────
 feature/ui-workflow  ✓      ○      ▶      ✓      ○      ○      ○       ◀
   (+1 untracked — no skill activity)

 RECENT ACTIVITY
 ────────────────────────────────────────────────────────────────────────
  23m ago   /plan-eng-review     feature/ui-workflow    completed
  49m ago   /plan-eng-review     feature/ui-workflow    started
  59m ago   /dashboard           feature/ui-workflow    completed

 QUALITY 10.0/10   ·   TOP SKILLS  /careful:180  /freeze:36  /office-hours:1

HTML board — screenshot

sprint dashboard

Engineering notes

Data layer extraction. lib/dashboard-data.ts is shared by CLI and HTML renderers. Compact mode skips gh calls for speed; full/web enables them. PR lookup is a single batched gh pr list --json number,state,headRefName --limit 100 call.

Bugs caught during eng review:

  1. loadBacklog regex matched all ### headings (140 total) instead of only ### P0:### P4: (36). Fixed.
  2. inFlightCount used all-time latestStage — stale branches (200+ days) counted as in-flight. Fixed to use stagesReached.size > 0 which respects the 90-day window.
  3. Canary stage not excluded from in-flight count. Fixed.
  4. loadPrData was O(N) serial gh calls. Batched to one call.
  5. WSL2 crash: xdg-open ENOENT is async, bypassing try/catch. Fixed with child.on("error") + explorer.exe handoff.

Test coverage: 51 unit tests across test/dashboard-data.test.ts and test/dashboard-cli.test.ts.

Test plan

  • bun test passes (784 pass, 0 fail)
  • Compact, full, and web modes verified against real repo state
  • Empty-state degradation verified (missing source files)
  • WSL2 browser open verified live
  • PreToolUse hook fires silently before every skill (3s timeout, never blocks)
  • Native Windows cmd.exe — unverified. Same explorer.exe code path should cover it.

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

m3dcodie and others added 5 commits June 23, 2026 11:38
Read-only CLI that renders a self-contained HTML sprint board from
gstack's own on-disk state (timeline.jsonl, analytics/*.jsonl,
CHANGELOG.md, TODOS.md, git, gh pr list). No new instrumentation.

Fills a gap /retro (backward-looking) and /landing-report
(VERSION-queue-scoped) don't cover: what stage is each in-flight
branch at right now, across a whole project.

Design doc + 3-round adversarial review (10/10): /office-hours session.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Header stats: current version, in-flight branch count, ships this
month, avg days/release, P1 backlog open, open decisions — all
derived from existing state (VERSION, CHANGELOG.md, TODOS.md,
decisions.active.json via gstack-decision-search).

Pipeline board: replaces the single "latest stage" badge with all 7
stages as columns (office-hours/spec/plan-review/implement/review/
ship/canary), ticking every stage a branch's history has passed
through, not just the latest. Canary added as a stage after ship.

Shared computeBranchStageData/getChangelogVersions/getBacklogCounts
helpers so the header stats and the existing widgets parse each
source file once, not twice.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
spawn()'s ENOENT for a missing binary surfaces via the async 'error'
event, not a synchronous throw — the prior try/catch never caught it,
crashing the whole process when xdg-open isn't installed (the normal
case on WSL, which has no desktop environment).

WSL also now hands off to explorer.exe via WSL interop (wslpath -w to
get a Windows-style path) instead of trying xdg-open at all. Verified
against a real WSL2 box: the prior code crashed on `-- open`, this one
opens the file in the user's actual Windows browser.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@trunk-io

trunk-io Bot commented Jun 23, 2026

Copy link
Copy Markdown

Merging to main in this repository is managed by Trunk.

  • To merge this pull request, check the box to the left or comment /trunk merge below.

After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here

m3dcodie and others added 2 commits June 26, 2026 07:27
Extracts the monolithic sprint dashboard into lib/dashboard-data.ts
and lib/dashboard-cli.ts, adds terminal-first output (compact default,
--full), and keeps --web for HTML. Adds /dashboard skill, routing rules,
tests, and proactive suggestions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant