feat: status-report impact - #2258
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Membership syncs from impact-named components; resolve writes explicit operational rows; impacts ride in the update audit metadata. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… impacts Events carry per-component impact intervals; manual-mode uptime weighs major/partial as downtime, degraded/operational as up. Reports without impact rows keep the legacy flat-orange, full-duration behavior. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Additive only (buf breaking clean): PageComponentImpact enum, ComponentImpact message, repeated fields on update/create/add-update. UNSPECIFIED means the caller doesn't speak impact — never operational. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t column Create form defaults every selected component to operational (fresh reports are never legacy); add-update prefills current impacts; legacy reports stay legacy unless the operator sets a non-operational impact. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…line Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Statuspage maps affected_components.new_status per update; Betterstack maps per-update affected_resources (richer than the report-level draft assumed); Instatus stays legacy. Writer inserts updates one-by-one to pair impact rows deterministically. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…ates updateStatusReportUpdate accepts componentImpacts with replace-set semantics; the per-update cards show a picker prefilled with the update's own rows and 'No change' for components it didn't touch. The dashboard only sends the set when actually edited, so untouched (incl. legacy) updates keep their rows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The list page's expanded-row sheets get the picker too: the edit sheet prefills the update's own rows with 'No change' for untouched components (replace-set sent only when edited); the create sheet prefills current impacts with the same legacy guard as the report detail page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…snapshots pageComponentIds on report create/update snapshots and componentImpacts on update snapshots, sorted for stable diffs — the audit CHANGES UI only renders before/after, so join-table changes were invisible. Also fixes membership-only updateStatusReport edits being dropped entirely as empty-diff no-ops. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
currentImpactsFromUpdates/worstImpact now single-sourced in constants; getEvents gets the (date, id) tie-break and defensive copy; rpc status-page groups impact rows by update id; rename the relation-shaped update type to avoid clashing with the service-side name; revert unused optionalMetadata. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Manual-mode day cards carry the worst report impact ('Partial outage',
'Major outage', ...) instead of the generic Degraded/Error label; legacy
reports and mixed days where legacy dominates keep the generic label.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 9 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/dashboard/src/components/forms/status-report/component-impact-field.tsx">
<violation number="1" location="apps/dashboard/src/components/forms/status-report/component-impact-field.tsx:62">
P2: `allowUnset` mode is not reversible: after selecting an impact, users cannot set the component back to "No change" (unset).</violation>
</file>
<file name="packages/ui/src/components/blocks/status-events.tsx">
<violation number="1" location="packages/ui/src/components/blocks/status-events.tsx:412">
P3: Use a stable item key here instead of the array index to avoid incorrect element reuse if the impact list changes.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
|
@claude review |
|
Claude finished @mxkaske's task in 2m 56s —— View job Code Review
SummaryThis PR introduces per-component impact tracking for status reports — a solid feature that correctly wires the data model (new join table), service layer, UI forms, and the status-page rendering. The architecture is clean and the batched query design in Two issues from the prior review remain unresolved, and I found two additional ones. IssuesP2 —
|
This reverts commit 8c4e945.
There was a problem hiding this comment.
2 issues found across 7 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".github/workflows/test.yml">
<violation number="1">
P1: CI uses unbounded 'latest' Bun version instead of a pinned exact version, breaking build reproducibility.</violation>
</file>
<file name=".github/workflows/dx.yml">
<violation number="1">
P2: Using 'latest' for bun-version instead of a pinned version removes build reproducibility in CI</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic
No description provided.