feat(cockpit): Phase 1 read-only dashboard over issues/PRs/routing/worktrees - #53
Merged
Merged
Conversation
Adds .claude/scripts/cockpit.sh, a bash+node static-HTML dashboard over open issues (grouped by module label, with a parsed blocking graph), open PRs (review + CI state), model/skill routing (agent frontmatter + adapter config), and active worktrees. Degrades gracefully with no network/gh auth. Companion cockpit.test.sh runs the generator against fixtures for a fully offline smoke test. Links the cockpit from docs/ARCHITECTURE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdLbxgUQhEVr6XtFGzBpsY
robercano
approved these changes
Jul 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
.claude/scripts/cockpit.sh, a bash+node static-HTML dashboard generator (issue #51, Phase 1):module:*label, with a parsed blocking graph ("Blocked by #N", "Blocks #N", task-list- [ ] #Nreferences), cross-linked between issues in the same snapshot.model:from each.claude/agents/*.mdfrontmatter, plusreview.lenses/review.skillsandbudgetfrom the adapter. Adapter path honorsGATES_FILEexactly likegate.sh(soGATES_FILE=.claude/self/gates.jsonworks for self-hosting)..claude/worktrees/*, or renders "none active" — never crashes on an empty/missing dir.No new runtime dependency (bash + node only). Self-contained HTML output (inline CSS, no external CDN/JS). All issue/PR titles are HTML-escaped. Degrades gracefully if a
bot-gh.shcall fails (no network / no gh auth): the affected section renders an "unavailable (gh/network)" placeholder and the script still exits 0.Output defaults to
.claude/state/cockpit.html(gitignored — the generated artifact is never committed); an optional second arg overrides the output path.How to run
Then open the printed path in a browser.
Tests
.claude/scripts/cockpit.test.shis a fully offline smoke test (fixture JSON via--fixtures <dir>, no live gh/network):cockpit.sh --parse-blocking) produces exact edges for known fixture bodies.model:value, and a worktrees section.GATES_FILEoverride is honored.COCKPIT_GH_BIN) still exits 0 and renders the placeholder, without touching real gh/network.Run:
bash .claude/scripts/cockpit.test.shAlso linked from
docs/ARCHITECTURE.mdper acceptance criteria.Test plan
GATES_FILE=.claude/self/gates.json bash .claude/scripts/gate.sh build— passGATES_FILE=.claude/self/gates.json bash .claude/scripts/gate.sh lint— passGATES_FILE=.claude/self/gates.json bash .claude/scripts/gate.sh test— passbash .claude/scripts/cockpit.test.sh— 28/28 checks passcloses #51