Skip to content

feat(dashboard): emit machine-readable fleet status.json - #78

Merged
ry-ops merged 1 commit into
mainfrom
feat/fleet-status-json
Jun 24, 2026
Merged

feat(dashboard): emit machine-readable fleet status.json#78
ry-ops merged 1 commit into
mainfrom
feat/fleet-status-json

Conversation

@ry-ops

@ry-ops ry-ops commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Why

git-steer's autonomous pipeline (heartbeat β†’ ADR-006 escalation β†’ fix workers) already runs on its own and computes the full fleet CVE picture every run. But it only ships that picture as dashboard HTML. So asking "what's the status of my repos?" from a Claude session forced one of two expensive paths:

  • a live fleet rescan through MCP tools (Claude as the per-repo loop), or
  • parsing 2–3 JSONL files (rfcs.jsonl, cve-queue.jsonl, cache.json) in-context and aggregating.

Both burn Claude spend for data the heartbeat already produced. This was the bottleneck behind hitting monthly limits just to check status.

What

Emit a single small status.json to gh-pages next to index.html:

  • fleet β€” total repos, repos with open alerts, total open alerts, open-by-severity rollup, fixed CVEs, fix rate, avg MTTR
  • escalation β€” ADR-006 posture: hardStop / inLoop lists (threshold matches the escalation script's default of 3)
  • repos β€” per-repo open-alert counts + severity breakdown + escalation status + consecutive fallouts, sorted worst-first

A status query is now one unauthenticated fetch:

https://ry-ops.github.io/git-steer-state/status.json

Pennies, no rescan. git-steer does the work on its schedule; Claude just reads the scoreboard.

Notes

  • Built before the dashboard's queue-merge mutates metrics, so the artifact reflects actual open Dependabot alerts + RFC fixes (the canonical "is my fleet clean" view).
  • Includes repos that dropped off the managed list but still carry escalation state, so a hard-stop is never hidden.
  • Pure additive change to ci-dashboard.mjs; no change to existing dashboard HTML output.
  • Verified the builder logic with mock data (hard-stop incl. dropped repo, in-loop, clear, severity rollup, worst-first sort, fleet totals).

πŸ€– Generated with Claude Code

The heartbeat already computes the full fleet CVE picture every run but only
ships it as dashboard HTML. Asking "what's the status of my repos?" therefore
forced either a live fleet rescan or parsing 2-3 JSONL files in-context β€” the
expensive path that keeps pulling status queries onto Claude spend.

Emit a single small `status.json` to gh-pages alongside index.html:
fleet rollup (open alerts, severity breakdown, fix rate, MTTR), ADR-006
escalation posture per repo (clear / loop / hard-stop, matching the
threshold=3 default), and per-repo open-alert counts sorted worst-first.

A status query is now one unauthenticated fetch of
https://ry-ops.github.io/git-steer-state/status.json β€” pennies, no rescan.

Built before the dashboard's queue-merge mutates `metrics`, so the artifact
reflects actual open Dependabot alerts + RFC fixes. Includes repos that
dropped off the managed list but still carry escalation state, so a hard-stop
is never hidden.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ry-ops
ry-ops merged commit 735b332 into main Jun 24, 2026
3 checks passed
@ry-ops
ry-ops deleted the feat/fleet-status-json branch June 24, 2026 11:22
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