Skip to content

feat(status-pages): one-screen builder, live screen and the page as its own editor - #1950

Merged
Makisuo merged 12 commits into
status-pages/8-layoutfrom
status-pages/9-builder
Oct 31, 2026
Merged

Makisuo merged 12 commits into
status-pages/8-layoutfrom
status-pages/9-builder

fix(status-pages): the preview lists incidents by the publisher's rul…

5663a37
Select commit
Loading
Failed to load commit list.
Maple Review Bot / Maple / review succeeded Oct 31, 2026 in 1m 12s

Confidence 10/10 · No issues found

🟢 Confidence 10/10 · safe to merge. Draft create/publish, the preview endpoint and its tenant-scoped monitor check are pinned by DB, HTTP and renderer tests.
no findings · tests covered · risk medium · 3/3 new units observable

Adds a draft column, creates a page with its components in one write, and adds POST /v2/status_pages/preview over real uptime history; the rest is renames after the rebase. Safe to merge. The McpQueryError issues traced to apps/web/src/page/registry.ts are untouched — that file only swaps page registrations.

  • create writes the page and its components in one transaction, draft or published
  • New POST /v2/status_pages/preview builds a snapshot from org uptime history, writing nothing
  • isListedIncident moved to the domain so publisher and preview share one rule
  • previewIdAttr emits data-*-id only on preview renders

Before merge

Production impact

Open errors in the changed files (2)
Issue Service Occurrences File
@maple/mcp/errors/McpQueryError (6 issues) maple-chat 1.3k apps/web/src/page/registry.ts
@maple/mcp/errors/McpQueryError (4 issues) maple-ai 349 apps/web/src/page/registry.ts

After this merges, Maple checks whether they stop.

Production traffic of the changed files (last 7 days)
File Calls/day Busiest operations
packages/domain/src/http/v2/auth.ts 616 POST /v2/traces/timeseries 365/day, 0.0% err
POST /v2/alerts/rules/preview 157/day, 0.0% err
POST /v2/traces/search 47/day, 0.0% err
packages/backend/src/services/status-pages/StatusPageSnapshotBuilder.ts 536 StatusPageSnapshotBuilder.probesSeenAt 526/day, 0.0% err
preview 10/day, 20.9% err
apps/api/src/routes/v2/status-pages.http.ts 10 preview 10/day, 20.9% err
apps/web/src/page/status-pages/builder/view.ts 10 preview 10/day, 20.9% err
packages/domain/src/http/v2/status-pages.ts 10 preview 10/day, 20.9% err
Telemetry this change adds and removes (3)
  • ➕ attribute maple.status_page.draft · packages/backend/src/services/status-pages/StatusPagePublisher.ts:107
  • ➕ span name StatusPageSnapshotBuilder.buildDraft · packages/backend/src/services/status-pages/StatusPageSnapshotBuilder.ts:505
  • ➕ span name StatusPagesService.makePublic · packages/backend/src/services/status-pages/StatusPagesService.ts:899
What was checked
  • Preview refuses another org's monitor (monitors.ts:19), pinned in status-pages.http.test.ts:854; READ_ONLY_POST_PATHS grants members read access
  • Publisher skips drafts on both paths (StatusPagePublisher.ts:106, :261)
  • data-component-id/data-incident-id absent from the public render (document.ts:19, render.test.ts:682)
Observability coverage: 3 of 3 changes observable
Change Kind Observable Evidence
POST /v2/status_pages/preview HTTP route yes HttpApi tracer middleware (apps/api/src/http/api-observability.ts:34) covers v2 routes; handler delegates to a named span
StatusPageSnapshotBuilder.buildDraft service read yes Effect.fn("StatusPageSnapshotBuilder.buildDraft") with annotateCurrentSpan (StatusPageSnapshotBuilder.ts:505)
StatusPagesService.makePublic service write yes Effect.fn("StatusPagesService.makePublic") span (StatusPagesService.ts:899)

5663a37 · Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.