feat(services): dense services list — health, Δ7d baseline, issues, last-deploy#247
Merged
Conversation
… issues, and last-deploy columns Redesigns the /services table per the approved "dense table+" direction while keeping every data source fleet-level (no per-service fan-out): - serviceOverviewQuery gains a per-commit `firstSeen: min(Timestamp)` on the same scan; CommitBreakdown now carries errorCount + firstSeen. The serviceOverview cachedDirect policy is bumped to version 2 so pre-upgrade cached rows (missing the field) can't be served. - New GET /v2/error_issues/service_counts backed by ErrorsService.countOpenIssuesByService — one Postgres GROUP BY over actionable, error-kind, non-archived issues (name-scoped; env scoping would need the warehouse fingerprint intersection and is deliberately out). - New useServiceHealthSummary hook derives per-(service, env) health from the already-fetched alert incidents + anomalies; shared by the table (name dot, destructive left rail, footer tally, health filter) and the sidebar's new client-side Health facet. - P95 cell shows a tone-colored delta vs the trailing-7d baseline — first consumer of the existing fleet-level, hour-cached serviceHealthBaseline. - "Commit" becomes "Last deploy": commit message first (lazy per-distinct-sha lookup), sha · age demoted, rollout progress bar with breakdown tooltip, and an "errors ↑ since" state when the newest commit errors ≥2× the older ones. - Rows extracted into a memoized ServiceRow; baseline/issues/messages render progressively and never block first paint. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
|
Your Pullfrog Router balance is exhausted. You have a card on file but auto-reload is disabled, so runs paused once your balance went past the overdraft buffer. Top up balance → · Enable auto-reload →
|
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.

What
Redesigns the
/serviceslist to the approved "dense table+" direction (designed in Paper first): each row now carries a health signal, a P95 delta vs the trailing-7d baseline, an open-issues count, and a message-first Last deploy cell — replacing the raw commit-sha column.How (data stays fleet-level — no N+1)
The page still issues a fixed number of fleet-level requests (verified in the network pane: overview, sparklines, facets, anomalies, baseline, issue counts):
useServiceHealthSummaryhook derives per-(service, env) health from the already-fetched alert incidents + anomalies; shared by the table and the sidebar's new client-side Health facet, so counts and badges can't disagree. Shown as a quiet dot next to the name (degraded/unhealthy only) + a destructive left rail, not a dedicated column.serviceHealthBaselinequery (previously zero consumers); joined via the canonicalbaselineKey.GET /v2/error_issues/service_counts→ErrorsService.countOpenIssuesByService, one PostgresGROUP BY service_nameover actionable, error-kind, non-archived issues. Name-scoped only (env scoping would require the warehouse fingerprint intersection; deliberately out of scope).serviceOverviewQuerygains per-commitfirstSeen: min(Timestamp)on the same scan; the cell derives rollout state (progress bar + breakdown tooltip) and anerrors ↑ sinceflag (newest commit ≥2× older-commit error rate, ≥0.5pp, ≥50 spans both sides) client-side. Commit messages resolve lazily via the existing deduped per-shacommitQueryAtom— the one accepted soft fan-out, bounded by distinct live shas.Reviewer notes
serviceOverview'scachedDirectpolicy is bumped to version 2 because rows gainedfirstSeen(stale cached rows would otherwise miss the field for one TTL window).ServiceOverviewResponseis schema-open (Record<string, Unknown>), so no domain change was needed for the overview; the v2 OpenAPI surface test pins the newservice_countspath.ServiceRow; baseline/issues/messages are progressive enrichment (Result.isSuccessfallback) and never block first paint.service.versionwas considered and skipped — it isn't materialized in ClickHouse (onlyCommitShais); would need an MV column first.Testing
bun run testgreen across all 24 packages (new: query-engine compile assertions incl.min(Timestamp) AS firstSeen, PGlite test forcountOpenIssuesByService, updated v2 surface test);bun typecheckgreen.🤖 Generated with Claude Code
Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.