Skip to content

feat(overview): Cross-Project Dashboard (closes #32)#47

Merged
erdembas merged 11 commits intomainfrom
feature/32-cross-project-dashboard
Apr 23, 2026
Merged

feat(overview): Cross-Project Dashboard (closes #32)#47
erdembas merged 11 commits intomainfrom
feature/32-cross-project-dashboard

Conversation

@erdembas
Copy link
Copy Markdown
Owner

Summary

Closes #32 — ships the Cross-Project Dashboard end-to-end and turns RunHQ from a per-service manager into a bird's-eye view across the entire project fleet.

  • Two-phase aggregator in runhq-core::overview: fast path (git, resources, staleness, tags) in ~tens of ms; opt-in slow path runs npm outdated / cargo outdated / audit commands in parallel with per-command timeouts and 5-minute memoisation.
  • ProjectDetailDrawer — per-project triage cockpit: severity / bump-tinted tabs, triage rail (tiles double as filters), multi-select with sticky bulk bar that copies all selected upgrade commands as one shell script, in-drawer rescan, and an "Open in…" overflow submenu listing detected editors with a Finder/Explorer fallback.
  • Dashboard filter bar restructured into three logical chambers — Organize · Git · Attention — separated by a proper divider so each group reads as a unit.
  • WorstOffenders band + Resource Heatmap + floating drawer scoped to the content area (sidebar rail stays visible underneath) + auto-hiding macOS-style scrollbars.
  • Removed the two redundant 4-up stat grids at the top of the dashboard (~200px of mostly-zero boxes duplicated by the filter bar), the orphan StatTile / AttentionTile components, and the old ProjectDashboard modal.

Deferred (intentionally)

  • Auto-execute upgrade / CVE-fix commands — copy-as-script already captures ~90% of the value with zero risk surface. Full reasoning in ROADMAP.md §1; if ever revisited, the preferred shape is "Run in RunHQ terminal with command pre-filled, user hits Enter", never a background execute-and-hope.

Scope coverage (issue #32)

Scope bullet Status
Git Status Matrix
Resource Heatmap
Last Activity Tracker
Dependency Outdatedness
Security Alerts
Filter & Sort

Test plan

  • pnpm exec tsc -p tsconfig.json --noEmit — green
  • pnpm exec eslint src — green (only pre-existing warnings)
  • cargo test -p runhq-core — 46 tests pass (verified locally at commit time)
  • Open RunHQ → Dashboard → confirm filter bar reads as three chambers (Organize · Git · Attention)
  • Click a WorstOffenders chip → drawer opens on correct tab
  • In drawer: multi-select outdated packages → "Copy as script" produces a runnable shell block
  • Overflow menu → "Open in…" submenu lists detected editors + Finder/Explorer divider item
  • Sidebar rail stays visible while the drawer is open

Made with Cursor

erdembas added 9 commits April 23, 2026 00:39
…d resource overview (#32)

- Add overview module: gather_overview, stale_projects, detect_runtime
- Add ProjectOverview and OverviewSummary types with git status, runtime, activity
- Add IPC command: get_project_overview
- Add ProjectDashboard component: summary cards, sortable table, git status badges
- Add 4 unit tests for runtime detection
Closes the feature/32 scope end-to-end:

- `ProjectDetailDrawer` — per-project triage cockpit: severity/bump-tinted
  tabs, triage rail (tiles double as filters), selectable rows with
  sticky bulk bar + copy-as-script, in-drawer rescan with freshness
  indicator, overflow menu whose "Open in..." submenu lists detected
  editors and falls back to Finder/Explorer. Advisory external-link is
  persistently visible because reading the GHSA write-up is the primary
  triage action on that row.
- `gather_dependency_scan` runs npm/cargo outdated + audit commands in
  parallel with per-command timeouts and 5-minute memoisation; fast
  path (git, resources, staleness, tags) stays in-memory.
- Dashboard: removed the two 4-up stat grids (~200px of mostly-zero
  boxes duplicated by the filter bar) and restructured the filter bar
  into three logical chambers — Organize / Git / Attention — so each
  group reads as a unit instead of a flat stream of controls.
- Resource heatmap, WorstOffenders band with chips that jump to the
  right drawer tab, floating drawer scoped to the content area so the
  sidebar rail stays visible, auto-hiding macOS-style scrollbars.

ROADMAP: feature 1 marked Shipped with a Delivered section. Added a
Deferred note capturing why auto-executing upgrade / CVE-fix commands
is intentionally held off — copy-as-script already captures ~90% of
the value; if revisited, the preferred shape is "run in RunHQ terminal
with the command pre-filled, user hits Enter" rather than background
execute-and-hope.

Removed orphaned StatTile/AttentionTile components and their barrel
export.

Made-with: Cursor
Documents the feature/32 delivery — scope, drawer, filter-bar
restructure, deferred auto-execute, and the removals (stat grids,
orphan components, old modal). Closes #32.

Made-with: Cursor
@github-actions github-actions Bot added size/size/XL documentation Improvements or additions to documentation rust frontend and removed size/size/XL labels Apr 23, 2026
- Derive `Default` on `OutdatedResult` and `AuditResult` instead of
  hand-rolled `impl Default` (clippy::new_without_default /
  derivable_impls).
- `split(|c: char| c == '-' || c == '+')` → `split(['-', '+'])`
  (clippy::manual_pattern_char_comparison).
- npm audit parser: build `AuditResult` inline instead of
  `let mut r = Default::default(); r.critical = ...`
  (clippy::field_reassign_with_default). Also extracts a small `count`
  closure so the five lookups read as a table, and leaves the
  moderate→medium rename as the only commented line.

Made-with: Cursor
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Apr 23, 2026

Deploying runhq with  Cloudflare Pages  Cloudflare Pages

Latest commit: 20c2ed9
Status: ✅  Deploy successful!
Preview URL: https://1704c04f.runhq.pages.dev
Branch Preview URL: https://feature-32-cross-project-das.runhq.pages.dev

View logs

`overview::gather_overview` and `gather_dependency_scan` already return
`AppResult<_>` (i.e. `Result<_, AppError>`), so `.map_err(AppError::from)`
was an identity conversion that clippy rightly flagged under
`-D warnings` as `clippy::useless_conversion`.

Made-with: Cursor
@erdembas erdembas merged commit ee37235 into main Apr 23, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation frontend rust size/size/XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Roadmap: Cross-Project Dashboard

1 participant