fix(overview): wire shipped phases — drop stale Phase 4 stub, real Issues & PRs widget#72
Merged
Merged
Conversation
…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.
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.
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
visualizationStubs— dropped the "Deployment timeline / Phase 4" entry (Phase 4 shipped its real surface as theDeploymentssidebar 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.stubIssuesfixture; now wired to realWorkItemsForUserQuery(spec 016, shipped).OverviewControllerinjects the query and passestopWorkItemscapped 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-itemsfor the full queue.activity_eventsaggregates in fix/activity-heatmap-real-data; the label drifted).Test plan
vendor/bin/pint --testpasses.php artisan test— 2 net new passing tests (test_overview_topworkitems_pulls_from_user_repos_onlyproves sibling-user issues don't leak; existingtest_overview_carries_the_mock_dashboard_payloadextended with atopWorkItemsassertion). Full suite 312 passed (was 310). 50 failures are env-CSRF baseline; CI passes them.npm run buildclean./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.WorkItemsForUserQueryrequires aUser— the controller is the right merge point.Mock slices left intact (still phase-pending):
dashboard.services— Phase 6dashboard.alerts— Phase 7dashboard.uptime— Phase 5/8 (spec 025 will replace with real website-uptime aggregates)stubHosts(Hosts widget) — Phase 6stubServices(Services widget) — Phase 6 (footer now correct)Phase-1 scoping caveat —
topWorkItemsusesWorkItemsForUserQuerywhich scopes viaProject.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.