Skip to content

feat: incident insights page and uptime report insights - #862

Open
fclairamb wants to merge 27 commits into
mainfrom
feat/todos-2026-11-13
Open

fclairamb wants to merge 27 commits into
mainfrom
feat/todos-2026-11-13

Conversation

@fclairamb

@fclairamb fclairamb commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

What changed

  • Incident insights page (/incidents/insights, GET /orgs/:org/incidents/insights): top failing checks, median/p90 time to acknowledge and to resolve, resolution split, 7d/30d/90d period; "Insights" button on the incidents list; en/fr/de/es; docs and e2e.
  • Scheduled uptime report: median time to resolve/acknowledge and a "Most incidents" block, computed by the same package as the dashboard; localized, preview fixtures and size budget updated.
  • Incidents active during the period: the page and the report insights now count an outage that started before the period and is still open, or was resolved inside it. Before, a check down for 10 days was missing from the 7 day table. New optional ListIncidentsFilter.ActiveSince (SQLite and Postgres). The report's existing downtime and incident-count figures are unchanged.
  • The insights endpoint returns exactly 5,000 incidents when truncated (it could return up to one page more).
  • More tests: window overlap, pagination and truncation, check lookup error, a group incident shared by two checks counted once in the report, a failed insights load failing the report, the page against the real endpoint (no mock).
  • Batch gate fix: the Insights button's data-testid was overridden by its inner link.
  • Flaky test fix: account-notifications-discord.spec.ts failed at teardown when the stubbed /auth/me fetch was still in flight.

Decided by autopilot

  • Spec 01: downtime clipped in the new incidentinsights package instead of reusing availability.IncidentBlock (which drops incidents starting before the window); extra pagedCount field as the ack-rate base. No CHANGELOG edit (release-please owns it).

🤖 Generated with Claude Code

fclairamb and others added 2 commits November 13, 2026 00:40
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@fclairamb
fclairamb marked this pull request as ready for review November 12, 2026 23:41
@fclairamb fclairamb added autopilot frozen Batch PR under review: takes only its own fixes, new work goes to the next batch labels Nov 12, 2026
fclairamb and others added 7 commits November 13, 2026 00:44
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No CHANGELOG edit: release-please owns it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…cks, time to acknowledge, time to resolve

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…port

Reuses incidentinsights.Compute on the report window's incidents, restricted to the schedule's checks. CHANGELOG is release-please's.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.31307% with 22 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.69%. Comparing base (2bce978) to head (78f2f92).

Files with missing lines Patch % Lines
server/internal/checkers/checksftp/checker.go 52.17% 11 Missing ⚠️
server/internal/incidentinsights/insights.go 93.61% 6 Missing ⚠️
server/internal/handlers/incidents/insights.go 97.56% 2 Missing ⚠️
server/internal/uptimereport/report.go 96.72% 2 Missing ⚠️
server/internal/checkers/checkbrowser/checker.go 92.85% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #862      +/-   ##
==========================================
+ Coverage   90.66%   90.69%   +0.02%     
==========================================
  Files        1362     1364       +2     
  Lines      140091   140379     +288     
==========================================
+ Hits       127017   127316     +299     
+ Misses      13065    13054      -11     
  Partials        9        9              
Files with missing lines Coverage Δ
server/internal/app/server.go 92.11% <100.00%> (-0.05%) ⬇️
server/internal/db/models/incident.go 100.00% <ø> (ø)
server/internal/db/postgres/postgres.go 95.00% <100.00%> (+<0.01%) ⬆️
server/internal/db/sqlite/sqlite.go 96.79% <100.00%> (+<0.01%) ⬆️
.../internal/handlers/emailpreview/fixtures_report.go 99.33% <100.00%> (+0.12%) ⬆️
server/internal/handlers/incidents/service.go 87.76% <ø> (-0.29%) ⬇️
server/internal/uptimereport/write.go 97.65% <100.00%> (+0.15%) ⬆️
server/internal/checkers/checkbrowser/checker.go 61.53% <92.85%> (+1.84%) ⬆️
server/internal/handlers/incidents/insights.go 97.56% <97.56%> (ø)
server/internal/uptimereport/report.go 83.03% <96.72%> (+4.89%) ⬆️
... and 2 more

... and 26 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

…tch gate)

Button asChild merges its props into the Link, whose own data-testid won,
so incidents-insights-button never existed in the DOM.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@fclairamb fclairamb added the implemented Every spec of the PR is implemented and its batch gate was green label Nov 13, 2026
@fclairamb fclairamb changed the title feat: todos 2026-11-13 feat: incident insights page and uptime report insights Nov 13, 2026
fclairamb and others added 9 commits November 13, 2026 01:43
… gate)

The Discord notifications negative-control test ends while the stubbed
route.fetch() is pending, so the disposed response failed the test on its
first attempt and passed on retry.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ing the period

Adds ListIncidentsFilter.ActiveSince (resolved_at IS NULL OR resolved_at >= value),
used with Until by the insights page and the report's insights figures, so an
outage that began before the window and is still open (or resolved inside it) is
counted. The report's downtime and incident-count figures are unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…pe, real endpoint

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…changes

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Stacked on #862: merge it first.

Editing an email check dropped its config from the save request, so the
sender authentication options (SPF, DKIM, DMARC, blocklists) were never
saved. Email checks now send their config; heartbeat and
private-location are unchanged. Browser e2e test added.

Closes fclairamb/solidping-business#73

## Decided by autopilot
None.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
fclairamb and others added 3 commits November 13, 2026 08:57
…llows i18n (#866)

Stacked on #862: merge it first.

Closes fclairamb/solidping-business#74
Closes fclairamb/solidping-business#75

- sftp checker: close connection when context expires; context errors
map to timeout
- browser checker: detached page logged as INFO with clear diagnostics
- dashboard: `<html lang>` follows displayed language (fixes browser
auto-translate crash)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
fclairamb and others added 5 commits November 13, 2026 09:46
A release tag enters the upgrade matrix the moment it is pushed, but its
image is published by the tag's own CI about 20 minutes later. A pull
request whose CI started in between failed every leg from that tag on
'not found' (both v0.49.1 legs on this branch).

upgrade-test.sh now pulls the old image first and retries for IMAGE_WAIT
seconds (default 0, so a local run still fails at once). CI sets 1500 and
the job timeout goes from 10 to 35 minutes to leave room for it.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Conflicts in the email check edit fix: this branch carried the fix from
PR 864 and main got the same fix in PR 868, with one more server test, a
DMARC assertion and the turn-off path in the Playwright test.

- check-form.tsx: the code change was identical on both sides, main's
  comment kept.
- email-check-sender-auth.spec.ts: main's test kept, it covers everything
  the branch's test asserted.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
# Conflicts:
#	web/dash0/e2e/email-check-sender-auth.spec.ts
#	web/dash0/src/components/shared/check-form.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autopilot frozen Batch PR under review: takes only its own fixes, new work goes to the next batch implemented Every spec of the PR is implemented and its batch gate was green

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant