Skip to content

feat(alerts): full-page escalation chain editor - #2436

Merged
Makisuo merged 55 commits into
mainfrom
ux/escalation-editor
Nov 10, 2026
Merged

Makisuo merged 55 commits into
mainfrom
ux/escalation-editor

Conversation

@Makisuo

@Makisuo Makisuo commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on #2426. Escalation chains move out of the dialog into a full page that reads as a sentence.

What changed

  • Routes: /alerts/escalation-chains/new and /alerts/escalation-chains/:chainId. Breadcrumb Alerts > Routing > chain name; the Routing sidebar item stays lit; Cancel and Save stay pinned in the header.
  • The chain as cards on a line. "When an alert escalates to this chain", then one card per step: "Notify [targets] then wait [10] minutes for an acknowledgement", then "If nobody acknowledges, repeat the chain [2] times". Targets are inline chips with their own icon: a destination's logo, a person's avatar, a schedule with who is on call now. A "+" on the line between two cards adds a step there (shown on hover and focus, always on touch, and always on the last gap); each step's menu moves, duplicates or removes it. No step numbers.
  • Aside: name, notes, a one-line preview of the whole chain, "Used by N rules" with links, and Delete. The delete confirm lists the rules that would stop escalating and stays disabled while any rule uses the chain; if the API refuses, the page re-reads the chain.
  • Guards: leaving with unsaved changes asks first. A chain deleted elsewhere shows "not found" with a way back, not a retry loop. Viewers without alerts:manage get the page read-only.
  • Focus follows the edit: a new step focuses its Add button, a removed step the previous step's menu.
  • The dialog and its entry points are gone: Routing's "New chain", chain names and "Edit" link to the page; the rule editor's "Create a chain" opens it in a new tab and re-reads chains on return.
  • Data model, API and validation are unchanged (the validators moved to escalation-chain/form.ts). New page-kit pieces pickChips and chainConnector; a destructive-ghost button variant.

Before / after

Before (dialog) After (page)
Delete confirm Read-only viewer Unsaved changes Phone

Lab: /lab/escalation-editor?state=new|populated|inserted|invalid|delete.

Verification

  • apps/web: bunx vitest run src/page/alerts src/route src/shell src/lab src/page/kit 736 pass, root src/*.test.ts 134 pass; packages/views src/ui 166 pass. The page has 25 tests: create (add, set targets and waits, insert between, reorder, remove, save), edit, validation, delete confirm and the in-use refusal, the unsaved-changes guard, not found, read-only, focus targets.
  • Typecheck clean (@maple/web); oxlint -c .oxlintrc.effect.json clean on changed files; ui:index, ui:patterns:check pass.
  • Focus moves were also checked in a real browser.
  • An independent review found 10 issues (an open redirect through a returnTo param, now removed; no unsaved-changes guard; stale title after save; retry loop on a deleted chain; viewers hitting a dead end); all fixed.

Not verified: a live API (the not-found and in-use codes are matched by string), and the browser's own Back and tab close through the unsaved-changes guard.

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

Summary by CodeRabbit

  • New Features

    • Added a dedicated page to create, view, and edit escalation chains, with configurable steps, targets, timing, and repeat behavior.
    • Added previews, form validation, read-only access, and confirmations for deleting chains or leaving with unsaved changes.
    • Chain links now open their dedicated pages. Deletion is blocked when a chain is used by rules, which are shown in the confirmation.
    • Added a destructive ghost button style and reusable components for chain-step controls and selected-item chips.
  • Bug Fixes

    • Updated “Create a chain” links to navigate to the new chain editor.

- Kit: rightSheet over the Dialog Submodel (672px form size, scrolling body,
  sticky footer, slide dropped under reduced motion) with followUrl/isDismissed;
  page/kit/sheet-param holds the ?sheet= helpers (push to open, replace to close).
- Sidebar group labels fold their rows (sidebarGroupToggle, aria-expanded),
  saved to localStorage; the group holding the current page and the collapsed
  rail always show every row.
- Footer on-call pill from the schedules list's on_call_now and the session
  user: on call until the handoff, not on call, or hidden without schedules.
  Re-read at each handoff; a dot with a tooltip on the rail.
- /lab/shell shows all three, with a demo form in the sheet.
- Sheet: opening pushes a history entry marked as this tab's; dismissing
  goes back past it, and only a deep link replaces the param. Kit renamed
  to sidePanelSheet, footer receives close; sheet-param tests sit beside it.
- On-call pill: a shift past its end reads as unknown; reads again at the
  handoff, hourly while off call, on focus and visibility, and with backoff
  (60s doubling, capped) after a stale or failed answer, keeping the last
  good data. Schedule and override writes announce a re-read.
- An org with no schedules is cached per org for a day and skips the request;
  a schedule write clears it.
- "until" uses the viewer's time zone with a short zone name.
- Sidebar: the collapsed rail renders plain labels (no tab stops); the group
  holding the current page can fold and keeps only that row. The pill uses
  aria-label on the rail instead of a title.
… side panel

- Each hub section has its own path (/alerts/rules, /alerts/uptime, /alerts/slos,
  /alerts/silences, /alerts/maintenance, /alerts/on-call, /alerts/routing); /alerts
  stays the Inbox. One page instance serves them all, so a section change reads
  nothing it already has.
- Old /alerts?tab= links replace themselves with the section's path and keep
  their other params ("oncall" and "settings" map to on-call and routing).
- The sidebar's Alerts row lists the sections when active and replaces the hub's
  own section rail. Sub-item aria-current now follows the most specific match.
- New silence opens in a URL-held side panel (?sheet=silence) with a sticky
  Cancel / Save footer; Back, Cancel, Escape and a save close it.
  sidePanelSheet gains onSubmit so the panel is a form.
- The silence panel clears ?sheet= in the model as soon as it closes itself,
  so a clock tick before the URL change can't reopen it. It opens only on the
  Silences section, and a viewer who can't manage loses a linked ?sheet= once
  the grants load (replaced away).
- A rule lives at /alerts/rules/<ruleId>; /alerts/<ruleId> (notifications, the
  apps) replaces itself with it, keeping its tab and window. The rule page and
  editor go back to Rules and their crumbs go through it.
- Settings automation and setup health link to the new section paths.
- The sidebar reveals the open section, every sub-item past the edge fades, on
  each route change; sub-rows are tighter, thin rules split the former groups,
  and the Inbox shows its unacknowledged count from the alert_incidents
  collection, read only while an alerts page is open.
- One AlertsTab schema next to AlertsSection; the sheet commands answer with a
  clock read instead of a no-op message.
Escalation chains move out of the Routing dialog into
/alerts/escalation-chains/new and /alerts/escalation-chains/:chainId.
The chain reads as a column of sentence cards (start, steps, repeat)
with a + between cards to insert a step and a per-step menu to move,
duplicate or remove it. The aside holds the name, notes, a one-line
preview, the rules that use the chain, and delete, whose confirm lists
those rules. Validation moved from the dialog into a shared form module;
the data model and API are unchanged. Routing and the rule editor link to
the new pages and the dialog is deleted.
/lab/escalation-editor renders the editor page over fixtures: new,
populated, a step inserted, invalid, and the delete confirm.
Safety and state:
- Drop returnTo and its helper: no caller passed it, and it could be
  steered off-site.
- Ask before leaving with unsaved edits (link, Back or Cancel). A clean
  form, or one put back to how it was, leaves at once.
- Save and Create go back to Routing with the toast, so the list shows
  the saved name and rules.
- A chain deleted elsewhere reads as not found with the way back, and a
  save that hits it says the chain no longer exists.
- A delete the API refuses reads the chain again, so the dialog names
  the rule that took it and holds its Delete.
- Viewers without alerts:manage read the chain and who uses it; nothing
  can be edited, saved or deleted. Nothing renders until the session
  answers.
- Step edits move focus: a new or duplicated step to its Add button, a
  removed step to the one before it or the leading +.
- Remove the unused step messages.

Layout:
- A step is two lines: "Notify" with its targets as inline chips and an
  Add chip, then the wait. A three-step chain fits in 800px.
- Targets draw their own mark: the destination's logo, a person's
  avatar, a schedule's calendar with who is on call now.
- The last step of a chain that does not repeat reads "then stop".
- The picker says what is still loading and where to make a
  destination; someone removed from the org reads "Unavailable member".
- The connector is a 24px line whose + shows on hover, focus and touch.
- Delete is a quiet destructive button under the details; a paused rule
  says so in Used by.

Kit: pickChips, chainConnector, and a destructive-ghost button variant.
@coderabbitai

coderabbitai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The alerts app adds a full-page editor for creating and editing escalation chains. New routes, hub links, editor controls, and lab scenarios support the page. The hub’s chain dialog is removed, while its deletion confirmation remains and reports rule usage.

Changes: Escalation chain editor

Layer / File(s) Summary
Routes and URL helpers
apps/web/src/route/*, apps/web/src/page/registry.ts, apps/web/src/page/alerts/shared/escalation-chains.ts, apps/web/src/page/alerts/editor/*, apps/web/src/shell/nav.ts
New and existing chains use dedicated routes and URL helpers. The editor is registered as a page, and the Routing navigation item matches the chain routes. The alert editor’s “Create a chain” link points to the new-chain route.
Form and page update flow
apps/web/src/page/alerts/escalation-chain/form*, apps/web/src/page/alerts/escalation-chain/{command,index,message,model,subscription,update}.ts, apps/web/src/page/alerts/escalation-chain/escalation-chain.scene.test.ts
The editor adds form validation, step and target operations, data loading, permission checks, dirty-form navigation handling, save and delete flows, and focus updates. Tests cover these behaviors and their rendered outcomes.
Editor view and controls
apps/web/src/page/alerts/escalation-chain/view.ts, apps/web/src/page/kit/{chain-connector,pick-chips}.ts, apps/web/src/page/alerts/shared/org-members.ts, packages/ui/src/components/ui/button.styles.ts, packages/views/src/ui/INDEX.md
The page renders chain steps, targets, previews, rule details, and dialogs. Reusable controls render insertion points and picked targets. Button styles add destructive-ghost, and memberName accepts a custom fallback for unknown members.
Hub navigation and deletion
apps/web/src/page/alerts/hub/*, apps/web/src/page/alerts/shared/chain-delete-confirm.ts, apps/web/src/page/alerts/escalation-dialog/*
Chain creation and editing now navigate to the full-page editor. The hub retains deletion and disables confirmation for chains used by rules. The chain dialog implementation and its tests are deleted.
Lab scenarios
apps/web/src/lab/entries/escalation*.ts, apps/web/src/lab/escalation*-lab.ts, apps/web/src/lab/registry.ts, apps/web/src/lab/entries/kit/buttons.ts
A new editor lab provides eight scenarios. The escalation hub lab no longer includes chain-dialog states, and lab descriptions reflect the editor page.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant EscalationChainPage
  participant ChainCommand
  participant EscalationChainAPI
  Browser->>EscalationChainPage: Open a new-chain or chain-detail route
  EscalationChainPage->>ChainCommand: Request chain and editor data
  ChainCommand->>EscalationChainAPI: Retrieve chain or editor resources
  EscalationChainAPI-->>ChainCommand: Return results
  ChainCommand-->>EscalationChainPage: Deliver completion messages
  EscalationChainPage->>ChainCommand: Save validated chain payload
  ChainCommand->>EscalationChainAPI: Create or update chain
  EscalationChainAPI-->>ChainCommand: Return save result
  ChainCommand-->>EscalationChainPage: Deliver save completion
  EscalationChainPage-->>Browser: Render page or navigate after success
Loading

Possibly related PRs

Merge Risk: Minimal · up to 0c18b

Escalation chains are now created and edited on a dedicated full page, and the hub links to it. No concrete merge-blocking issue was found. The author reports that a live API and the browser Back/tab-close paths through the unsaved-changes guard were not verified, which is normal pre-merge uncertainty.

Pre-merge checks: Passed 5

Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly summarizes the main change: moving escalation-chain editing to a full page.
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 35 files. (1 skipped: 1 unsupported.)

Finishing Touches

Generate docstrings

  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

Recent review info

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 068a09a2-1eef-47a4-ac16-3fe1b125aebb
Commits

Reviewing files that changed from the base of the PR and between dc4dae2 and 0c18b56.

Files selected for processing: 42

  • apps/web/src/lab/entries/escalation-editor.ts
  • apps/web/src/lab/entries/escalation.ts
  • apps/web/src/lab/entries/kit/buttons.ts
  • apps/web/src/lab/escalation-editor-lab.ts
  • apps/web/src/lab/escalation-lab.ts
  • apps/web/src/lab/registry.ts
  • apps/web/src/page/alerts/editor/editor-chains.scene.test.ts
  • apps/web/src/page/alerts/editor/view-notifications.ts
  • apps/web/src/page/alerts/escalation-chain/command.ts
  • apps/web/src/page/alerts/escalation-chain/escalation-chain.scene.test.ts
  • apps/web/src/page/alerts/escalation-chain/form.test.ts
  • apps/web/src/page/alerts/escalation-chain/form.ts
  • apps/web/src/page/alerts/escalation-chain/index.ts
  • apps/web/src/page/alerts/escalation-chain/message.ts
  • apps/web/src/page/alerts/escalation-chain/model.ts
  • apps/web/src/page/alerts/escalation-chain/subscription.ts
  • apps/web/src/page/alerts/escalation-chain/update.ts
  • apps/web/src/page/alerts/escalation-chain/view.ts
  • apps/web/src/page/alerts/escalation-dialog/dialog.scene.test.ts
  • apps/web/src/page/alerts/escalation-dialog/dialog.test.ts
  • apps/web/src/page/alerts/escalation-dialog/dialog.ts
  • apps/web/src/page/alerts/escalation-dialog/view.ts
  • apps/web/src/page/alerts/hub/hub-chains.scene.test.ts
  • apps/web/src/page/alerts/hub/message.ts
  • apps/web/src/page/alerts/hub/model.ts
  • apps/web/src/page/alerts/hub/update.ts
  • apps/web/src/page/alerts/hub/view-chains.ts
  • apps/web/src/page/alerts/hub/view.ts
  • apps/web/src/page/alerts/shared/chain-delete-confirm.ts
  • apps/web/src/page/alerts/shared/escalation-chains.ts
  • apps/web/src/page/alerts/shared/org-members.ts
  • apps/web/src/page/kit/chain-connector.ts
  • apps/web/src/page/kit/pick-chips.ts
  • apps/web/src/page/registry.ts
  • apps/web/src/route/app-route.ts
  • apps/web/src/route/route.test.ts
  • apps/web/src/route/routers.ts
  • apps/web/src/route/search.ts
  • apps/web/src/shell/nav.ts
  • apps/web/src/view.lazy.test.ts
  • packages/ui/src/components/ui/button.styles.ts
  • packages/views/src/ui/INDEX.md
Files with no reviewable changes: 6

  • apps/web/src/page/alerts/escalation-dialog/dialog.scene.test.ts
  • apps/web/src/page/alerts/escalation-dialog/view.ts
  • apps/web/src/page/alerts/hub/message.ts
  • apps/web/src/page/alerts/escalation-dialog/dialog.ts
  • apps/web/src/page/alerts/hub/model.ts
  • apps/web/src/page/alerts/escalation-dialog/dialog.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review.

@maple-review-bot

This comment has been minimized.

@maple-review-bot maple-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 inline note from Maple's review. The score and summary are in the review comment above.

…size

- A `scrim-panel` token (12% black, 24% in dark) with no blur sits beside a
  side panel, so the page it edits stays readable. Dialogs and other sheets
  keep `scrim`.
- `sidePanelSheet` takes `size`: `compact` (28rem) for a few short fields,
  `form` (42rem, the default) or `wide`.
- The on-call pill is one 32px row of the footer list: a status dot and
  "On call until Mon 09:00" in the viewer's zone (the date instead of the
  weekday once the handoff is over six days out), or a muted "Not on call".
  The zone, date and schedules are its tooltip and accessible name. On the
  collapsed rail it is a calendar glyph badged with the dot.
- Group chevrons show faintly at rest; the toggle is 28px tall.
- A folded group holding the current page shows that page's parent row
  alone, highlighted, without its sub-items.
- Hover is a neutral wash. When a sub-item is the current page only it is
  tinted; its parent keeps the medium weight on a plain background.
- Sub-item rows are 28px on desktop and 36px in the mobile sheet.
- /lab/shell gains Services and Logs pages, a far handoff and both panel sizes.
… the silence panel

- Each section's header has one primary action: New rule (split) on the Inbox
  and Rules, New monitor, New SLO, New silence, New window, New schedule and
  Add destination on their own sections. A section whose empty state already
  offers it shows none until it has rows.
- The Alerts sub-list sets its groups apart with a 4px gap instead of rules,
  and its rows take the kit's height again.
- The silence panel's Services, Environments and Tags are chips inputs that
  suggest what the org's rules name (and the services Uptime listed); a typed
  name can still be added. Its labels share one style.
- A picked end is on the viewer's clock and the field names the zone
  ("Ends, CET"); a scheduled row names its day once. The lab reads the
  viewer's zone instead of UTC.
- The duration choice uses the larger segmented size.
# Conflicts:
#	apps/web/src/shell/oncall.scene.test.ts
#	apps/web/src/shell/view-nav.ts
@maple-review-bot

This comment has been minimized.

@Makisuo

Makisuo commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

F1 fixed in 503f89f: the chain name link is block truncate, so a long name ends in an ellipsis again.

@Makisuo

Makisuo commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

F1 was fixed in 503f89f (pushed after the reviewed commit). F2 and F3 fixed in 9708166: remove buttons name their step ("Stop notifying Slack #alerts-api on step 1"), and the picker says "People could not be loaded" (and the same for schedules) after a failed read.

@maple-review-bot

This comment has been minimized.

# Conflicts:
#	apps/web/src/shell/command.ts
#	apps/web/src/shell/flags.ts
@maple-review-bot

This comment has been minimized.

@Makisuo

Makisuo commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

Preview test

Tested on the combined preview of the whole stack (#2466, app-pr-2466.maple.dev) by a separate test agent in a real browser: happy paths, break attempts, light and dark, and a 390x844 viewport. No uncaught page errors.

Passed: /alerts/escalation-chains/new and /<id> are real pages that survive a direct reload; steps can be added at the end and between, moved and removed, with focus following each edit and the one-line preview updating; save returns to Routing with the chain listed; edits persist; delete works and is refused while a rule uses the chain; every invalid input (no name, no target, waits outside 1 to 1440, repeats outside 0 to 5, an eleventh step) is refused with a reason; the unsaved-changes guard fires on Cancel, a sidebar link, the breadcrumb and Back; a chain deleted elsewhere keeps the draft and says so; every control is reachable by keyboard with a distinct label.

Found and fixed in this push:

  • The Routing row's delete confirm ignored rules using the chain and failed with a 409. It now lists them and holds the delete, sharing the page's logic (9ca9b4afc5).
  • An id that matches nothing was titled "New escalation chain" (d04fb31f41).
  • Removing a target chip dropped focus to the page body. It now moves to the next chip, else the step's Add button (af1108a671).

Still open: after Back then "Discard changes", the next Back returns to a blank new-chain page. The guard is shared with the dashboard widget editor and behaves the same there, so it wants its own change.

Traces (preview environment pr-2466, about 1,900 API requests during the test): no 5xx on any route and no error spans in the API, web worker or alerting services. Chain routes: POST /v2/alerts/escalation_chains p95 153 ms, PATCH p95 140 ms.

three-step chain
delete held while in use

@maple-review-bot

This comment has been minimized.

# Conflicts:
#	apps/web/src/shell/message.ts
#	apps/web/src/shell/model.ts
#	apps/web/src/shell/oncall.scene.test.ts
#	apps/web/src/shell/update.ts
#	apps/web/src/shell/view-nav.ts
#	packages/views/src/ui/sheet.ts
@maple-review-bot

This comment has been minimized.

Base automatically changed from ux/alerting-pages to main November 10, 2026 14:26
# Conflicts:
#	apps/web/src/page/alerts/editor/editor-chains.scene.test.ts
#	apps/web/src/page/alerts/shared/escalation-chains.ts
#	apps/web/src/route/route.test.ts
#	apps/web/src/shell/nav.ts
#	packages/views/src/ui/INDEX.md
@maple-review-bot

This comment has been minimized.

@Makisuo

Makisuo commented Nov 10, 2026

Copy link
Copy Markdown
Collaborator Author

Both notes are fixed in 0c18b56188.

  • F4: the delete confirm says "This rule would stop escalating. Remove the chain from its severity tiers first." for a chain one rule starts, on the page and on the Routing row (they share the helper). A scene test covers the singular.
  • F5: a new test drives ChangedDescription, expects the notes in the save payload, and expects the 500-character refusal. The error now says "Keep the notes to 500 characters", matching the field's label.

@maple-review-bot

maple-review-bot Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Maple review

🟢 Confidence 8/10 · likely safe to merge. Held at 8 because 2 reviewed files were not read.
no findings · tests covered · risk medium · 2 files not read · 1 fix not yet re-checked against the whole diff

Moves escalation chains from a dialog to a full page (/alerts/escalation-chains/new and /:chainId) with inline target chips, per-step menus, a delete confirm shared with the hub and an unsaved-changes guard. Both open findings are fixed and nothing new blocks the merge. The open McpQueryError issues come from the MCP query registry in apps/ai (registry.js, withTableListOnUnknownTable), not the page registry this diff touches, so they are neither fixed nor worsened here; the deleted dialog's view went only partly read.

  • AlertsEscalationChain/...New routes replace the chain dialog; hub links and the rule editor's "Create a chain" now navigate to the page
  • chainDeleteConfirm lists the rules that start a chain and holds Delete while any remains
  • pickChips and chainConnector add inline chips and the step-to-step "+" to the page kit
  • isBlockingNavigation/blockedNavigation guard unsaved edits; viewers without alerts:manage get read-only

Fixed since the last review

  • ✅ F4 · Delete confirm says "These rules" for a chain one rule starts
  • ✅ F5 · Notes field has no test: ChangedDescription is never driven

Production impact

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

After this merges, Maple checks whether they stop.

Files not reviewed (2)

The review ended before it read these diffs, so nothing above vouches for them.

  • apps/web/src/page/alerts/escalation-dialog/dialog.scene.test.ts
  • apps/web/src/page/alerts/escalation-dialog/dialog.test.ts

0c18b56 · What was checked, coverage and telemetry details are on the Maple / review check. Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.

@Makisuo
Makisuo merged commit f577116 into main Nov 10, 2026
29 checks passed
@Makisuo
Makisuo deleted the ux/escalation-editor branch November 10, 2026 14:52
@maple-review-bot

Copy link
Copy Markdown

Maple: after this shipped

✅ Shipped clean. Nothing this change touches got worse in the hour after it deployed.

Deployed to maple-ai (production) at 2026-11-10 15:08 UTC as f577116. Compared the 60 minutes before and after.

Errors in the changed files:

  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h
  • ➖ @maple/mcp/errors/McpQueryError: 0/h → 0/h

Maple looks once, an hour after the first deploy that carries the merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant