Skip to content

feat: GitHub issues/PRs/CI dashboard#950

Draft
Hweinstock wants to merge 18 commits intoaws:mainfrom
Hweinstock:feat/github-dashboard
Draft

feat: GitHub issues/PRs/CI dashboard#950
Hweinstock wants to merge 18 commits intoaws:mainfrom
Hweinstock:feat/github-dashboard

Conversation

@Hweinstock
Copy link
Copy Markdown
Contributor

@Hweinstock Hweinstock commented Apr 24, 2026

Problem

No centralized view of issue health, PR review velocity, or CI reliability for agentcore-cli. GitHub's built-in Insights lack time-to-review histograms, label gap analysis, and CI flaky job detection.

Solution

Config-driven static dashboard generator that produces three HTML pages (Issues, PRs, CI/Tests) deployed to GitHub Pages via a daily GitHub Actions workflow.

Architecture

config.ts    → declarative: pages, sections, metrics, time windows
github.ts    → fetches data via gh CLI (REST + GraphQL)
transform.ts → raw data → chart-ready metrics
components/  → @kitajs/html JSX → static HTML strings
charts.ts    → client-side Chart.js initialization
generate.tsx → orchestrates fetch → transform → render → write

Key decisions

@kitajs/html over React — We use JSX purely as a typed templating language. React's virtual DOM, reconciler, and 130KB runtime add nothing when generating static HTML. kitajs compiles JSX directly to strings (3KB, zero deps, 2.8x faster). Same developer experience, no runtime overhead.

gh CLI over Octokit — The gh CLI handles auth, pagination, and rate limiting out of the box. Using execFileSync (not execSync) prevents shell injection. GraphQL batches PR + review data in 7 calls instead of 630 sequential REST calls.

Config-driven sections — Adding a chart or table is a config change, not a code change. Section types: stats, timeline, distribution, histogram, table, trend, weeklyTable, termFrequency, ci. Each type is computed by transform.ts and rendered by a corresponding component.

Global time window tabs — All sections on Issues/PRs pages recompute for each window (All Time, 24h, 7d, 30d). Timeline granularity adapts: hourly for 24h, daily for 7d, weekly for 30d+.

Lazy chart initialization — Charts in hidden tab panels initialize when the panel becomes visible, avoiding Chart.js zero-dimension rendering bugs.

Dashboard pages

Issues — timeline, label distribution, open age, avg open age trend, resolution histogram by label, most discussed open issues, stale issues, term frequency of unlabeled issues, weekly summary table

PRs — timeline, PR status buckets (needs-re-review/waiting-on-author/needs-initial-review/approved), avg open age trend, TTFR + TTM histograms with granular time buckets, size distribution, TTM by size, stale PRs with priority + last activity, weekly summary table

CI/Tests — per-workflow pass rates with time windows, pass/fail timeline, most failing jobs, flaky job detection, recent failures, avg job duration

Testing

  • 37 unit tests covering parsers, stats, histograms, percentiles, PR bucket assignment, priority ranking
  • TypeScript strict mode, eslint clean
  • Workflow runs tsc --noEmit and vitest run before generating
  • Verified against live repo data (263 issues, 701 PRs, 500+ CI runs)

@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@Hweinstock Hweinstock force-pushed the feat/github-dashboard branch from 47b984b to 7b8deb7 Compare April 24, 2026 18:09
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot removed the size/xl PR size: XL label Apr 24, 2026
@github-actions github-actions Bot added the size/xl PR size: XL label Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 24, 2026
@github-actions github-actions Bot added size/xl PR size: XL and removed size/xl PR size: XL labels Apr 25, 2026
@Hweinstock Hweinstock deployed to e2e-testing April 25, 2026 00:39 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xl PR size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants