Repository navigation
feat(status-pages): one-screen builder, live screen and the page as its own editor - #1950
Merged
Merged
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.
createwrites the page and its components in one transaction, draft or published- New
POST /v2/status_pages/previewbuilds a snapshot from org uptime history, writing nothing isListedIncidentmoved to the domain so publisher and preview share one rulepreviewIdAttremitsdata-*-idonly on preview renders
Before merge
- Env var · Set
VITE_STATUS_PAGE_BASE_URLin every environment, or confirm its default ·apps/web/src/page/status-pages/shared/commands.ts:228 - Migration · Check it is safe on production data and with the code still deployed ·
packages/db/drizzle/20261029195537_status_page_draft/migration.sql - Migration · Check it is safe on production data and with the code still deployed ·
packages/db/drizzle/20261030192924_merge_status_page_draft/migration.sql - Infra · Check every environment has what this config now expects ·
alchemy.run.ts
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% errPOST /v2/alerts/rules/preview 157/day, 0.0% errPOST /v2/traces/search 47/day, 0.0% err |
packages/backend/src/services/status-pages/StatusPageSnapshotBuilder.ts |
536 | StatusPageSnapshotBuilder.probesSeenAt 526/day, 0.0% errpreview 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 instatus-pages.http.test.ts:854;READ_ONLY_POST_PATHSgrants members read access - Publisher skips drafts on both paths (
StatusPagePublisher.ts:106,:261) data-component-id/data-incident-idabsent 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.
Loading