Skip to content

fix(overview): wire shipped phases — drop stale Phase 4 stub, real Issues & PRs widget#72

Merged
Copxer merged 1 commit into
mainfrom
fix/overview-wire-shipped-phases
May 1, 2026
Merged

fix(overview): wire shipped phases — drop stale Phase 4 stub, real Issues & PRs widget#72
Copxer merged 1 commit into
mainfrom
fix/overview-wire-shipped-phases

Conversation

@Copxer
Copy link
Copy Markdown
Owner

@Copxer Copxer commented May 1, 2026

The Overview dashboard had four spots still pointing at "Phase X — coming soon" even though the underlying functionality has shipped. Reconcile in one sweep so the dashboard honestly reflects what's live.

User flagged this when they noticed the Deployment timeline / Phase 4 tile still rendering as pending in the Visualizations placeholder, even though Phase 4 fully shipped weeks ago.

What changed

  1. visualizationStubs — dropped the "Deployment timeline / Phase 4" entry (Phase 4 shipped its real surface as the Deployments sidebar entry). The Phase 5 "Website performance" entry was reframed as "Phase 5 · spec 025" so it's clear which spec ships the dedicated Overview widget — the data layer (spec 023) is already live.
  2. Issues & Pull Requests widget — was a hardcoded stubIssues fixture; now wired to real WorkItemsForUserQuery (spec 016, shipped). OverviewController injects the query and passes topWorkItems capped at 4. The Vue widget renders PR/Issue badges, real titles + numbers, repo chip, author, "Updated Xm ago", and links each row out to GitHub. Footer points at /work-items for the full queue.
  3. Activity Heatmap header label — "mock" → "last 90 days" (data was wired to real activity_events aggregates in fix/activity-heatmap-real-data; the label drifted).
  4. Services widget footer — was attributed to "phase 5 — Website Monitoring"; corrected to "phase 6 — Docker Host Agent" (services live with the Docker host agent, not the website monitor).

Test plan

  • vendor/bin/pint --test passes.
  • php artisan test — 2 net new passing tests (test_overview_topworkitems_pulls_from_user_repos_only proves sibling-user issues don't leak; existing test_overview_carries_the_mock_dashboard_payload extended with a topWorkItems assertion). Full suite 312 passed (was 310). 50 failures are env-CSRF baseline; CI passes them.
  • npm run build clean.
  • Manual smoke (post-merge): open /overview, observe Issues & PRs widget shows real items linking to GitHub; Visualizations placeholder no longer lists Deployment timeline; heatmap header reads "last 90 days"; Services footer mentions phase 6.

Self-review notes

Kept GetOverviewDashboardQuery::handle()'s no-arg signature unchanged. WorkItemsForUserQuery requires a User — the controller is the right merge point.

Mock slices left intact (still phase-pending):

  • dashboard.services — Phase 6
  • dashboard.alerts — Phase 7
  • dashboard.uptime — Phase 5/8 (spec 025 will replace with real website-uptime aggregates)
  • stubHosts (Hosts widget) — Phase 6
  • stubServices (Services widget) — Phase 6 (footer now correct)
  • Visualizations placeholder rows for World map / System metrics / Resource utilization / Website performance

Phase-1 scoping caveattopWorkItems uses WorkItemsForUserQuery which scopes via Project.owner_user_id. Matches every other user-scoped slice; cross-tenant uniform fix when teams ship.

This stacks cleanly on top of PR #71 (open) — that one touches Pages/Projects/Show.vue + commands.ts + Welcome.vue + sidebar + monitoring/Create.vue, none of which overlap with this PR's three-file diff (OverviewController.php, Overview.vue, SmokeTest.php). Either order works for merging.

…sues & PRs widget

The Overview dashboard had four spots still pointing at "Phase X — coming soon"
even though the underlying functionality has shipped. Reconcile in one
sweep so the dashboard honestly reflects what's live.

- visualizationStubs no longer lists "Deployment timeline / Phase 4"
  — Phase 4 (specs 020–022) shipped its real surface as the
  Deployments sidebar entry / /deployments page. The stub gridhad
  graduated; the placeholder only listed it because the cleanup was
  forgotten when 022 closed out. Phase 5's Website performance entry
  is reframed as "Phase 5 · spec 025" — the data layer (spec 023)
  shipped, the dedicated Overview widget lands with spec 025.

- The Issues & Pull Requests widget on Overview was a hardcoded
  stubIssues fixture even though Phase 2's WorkItemsForUserQuery
  (spec 016) has been live for weeks. OverviewController now injects
  the query and passes a topWorkItems prop (capped at 4 most-recent
  open items, scoped to the user's repos). The Vue widget renders
  PR/Issue badges, real titles + numbers, repository chip, author,
  and "Updated Xm ago" timestamps. Each row links out to the GitHub
  issue/PR. Footer points at /work-items for the wider queue.

- Activity Heatmap header label "7 days · 4-hour buckets · mock"
  was stale — the heatmap was wired to real activity_events
  aggregates in fix/activity-heatmap-real-data. Updated to
  "last 90 days" reflecting the actual aggregation window.

- Services widget footer mistakenly attributed itself to "phase 5 —
  Website Monitoring." Services live with the Docker host agent
  (phase 6); fixed to match.

Tests: extended SmokeTest::test_overview_carries_the_mock_dashboard_payload
with a topWorkItems assertion, plus a new
test_overview_topworkitems_pulls_from_user_repos_only proving
sibling-user open work items don't leak into the widget.

Self-review notes: kept GetOverviewDashboardQuery's no-arg handle()
signature unchanged. WorkItemsForUserQuery requires a User, so the
controller is the merge point. The four mock KPI slices (services,
alerts, uptime) stay until their owning phases ship. Phase-1
single-tenant scoping for topWorkItems mirrors WorkItemsForUserQuery's
existing behavior — uniform fix when teams ship.
@Copxer Copxer merged commit 175b37e into main May 1, 2026
1 check passed
@Copxer Copxer deleted the fix/overview-wire-shipped-phases branch May 1, 2026 03:28
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