Repository navigation
fix(mcp): accept create scopes in durable approvals - #2650
Conversation
align the host approval type and native validation with external create access. preserve scope uniqueness and exact approval binding. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Kalvin Chau <kalvin@block.xyz>
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Carl, an automated reviewer, commenting via Wes's GitHub account.
Verdict: no blockers at d2d4bb9. This is not an approval.
This widens the durable approval type and native validator to the three-scope contract main already uses (#2411 + #2464). Existing read/post grants don't gain create. Native renew and check_current still require the approval to match exactly, and resume still requires the saved scopes to match the requested scopes exactly. The consent copy already describes create and the 30-day renewal. Tool calls still check scope one by one in src/buzz-mcp/external.ts. No other native or TS scope allowlist is still missing create.
Validation gaps
- The new Rust regression hasn't run post-fix locally. The hosted Rust/JS checks were still pending when I looked.
- Live native consent, keychain persistence and resume with a
creategrant haven't been exercised. - The body says "keep draft", but the PR is marked ready for review.
Merge criteria: hosted Rust and JS checks green, plus one manual approve → restart → resume pass with a create-scoped app if you want live evidence before merge.
Co-authored-by: Simone <0828be588d5c9c4d092c5b1cf01761d5aef63d6b104807fd8e8284d517dd1a99@buzz.block.builderlab.xyz> * origin/main: fix(mcp): accept create scopes in durable approvals (#2650) feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478) fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475) fix(agents): show each message author's username and display name (#2628) fix(agents): preserve visible edits in conversation history (#2355) fix(canvas): keep todo edits from approving unrelated instructions (#2350) fix(messages): keep messages in their canonical channel (#2349) NEXUS-4165: Add Thinking to agent creation (#2409) feat(plugins): let a plugin paint a backdrop behind the shell (#2437) feat(search): lead empty quick open with unread conversations (#2634) NEXUS-4170: Allow external apps to create private Solo chats (#2411) fix(acp): count grouped thinking levels when checking a synced level (#2640) Signed-off-by: John Tennant <jtennant@squareup.com>
…leanup * origin/main: fix(mcp): accept create scopes in durable approvals (#2650) feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478) fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475) fix(agents): show each message author's username and display name (#2628) fix(agents): preserve visible edits in conversation history (#2355) fix(canvas): keep todo edits from approving unrelated instructions (#2350) fix(messages): keep messages in their canonical channel (#2349)
* origin/main: (28 commits) fix(mcp): accept create scopes in durable approvals (block#2650) feat(bestie): Bestie tab and Remembers you for a hosted Bestie (block#2478) fix(relay): p-tag a one-to-one DM's agent partner on new messages (block#2475) fix(agents): show each message author's username and display name (block#2628) fix(agents): preserve visible edits in conversation history (block#2355) fix(canvas): keep todo edits from approving unrelated instructions (block#2350) fix(messages): keep messages in their canonical channel (block#2349) NEXUS-4165: Add Thinking to agent creation (block#2409) feat(plugins): let a plugin paint a backdrop behind the shell (block#2437) feat(search): lead empty quick open with unread conversations (block#2634) NEXUS-4170: Allow external apps to create private Solo chats (block#2411) fix(acp): count grouped thinking levels when checking a synced level (block#2640) feat(conversation): let plugin rows manage messages without visiting a channel (block#2512) feat(github): make side-panel link opening optional (block#2629) feat(messages): show a blurred thumbnail until an image loads (block#2556) fix(relay): give large roster and read-state reads a 30s deadline (block#2627) fix(user-status): show a status emoji's :name: on hover where the full status shows (block#2384) fix(inbox): keep the list's place when returning in the same session (block#2134) fix(messages): pass verified labels to the forward recipient picker (block#2633) feat(messages): forward a message to a person (block#2167) ... # Conflicts: # tests/browser/settings.spec.mjs
* commit '4bb94e259': feat(github): rework the GitHub settings page (#2450) fix(mcp): accept create scopes in durable approvals (#2650) feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478) fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475) fix(agents): show each message author's username and display name (#2628) fix(agents): preserve visible edits in conversation history (#2355) fix(canvas): keep todo edits from approving unrelated instructions (#2350) fix(messages): keep messages in their canonical channel (#2349) NEXUS-4165: Add Thinking to agent creation (#2409) feat(plugins): let a plugin paint a backdrop behind the shell (#2437) feat(search): lead empty quick open with unread conversations (#2634) NEXUS-4170: Allow external apps to create private Solo chats (#2411)
…-service * origin/main: (29 commits) Normalize profile names for verified-name matching (#2348) Add BuzzTerm font settings and compact glyph spacing (#2502) feat(plugins): let a host command run only verified bytes (#2535) NEXUS-4228: Add plugin toolbar actions and panel links (#2645) Keep plugin update controls stable and spaced (#2636) feat(inbox): rename to Activity and simplify the filter bar (#2543) fix(goose): track every replaced protected worker and check its security gate (#2528) docs(agents): say Pi agents don't take plugin notes yet (#2534) feat(agents): reorder agent cards with hold and drag (#1837) fix(messages): keep own sends from before the loaded history off the timeline (#2525) feat(github): rework the GitHub settings page (#2450) fix(mcp): accept create scopes in durable approvals (#2650) feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478) fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475) fix(agents): show each message author's username and display name (#2628) fix(agents): preserve visible edits in conversation history (#2355) fix(canvas): keep todo edits from approving unrelated instructions (#2350) fix(messages): keep messages in their canonical channel (#2349) NEXUS-4165: Add Thinking to agent creation (#2409) feat(plugins): let a plugin paint a backdrop behind the shell (#2437) ... # Conflicts: # src/bundled/goose/runtime.ts
Bestie replaced its entire DM timeline when a reply was opened. It now uses the shared conversation-tab workspace: the DM stays mounted beside resizable thread tabs, with existing placement, move/rename/close controls and retained drafts when the side pane collapses. Profile and GitHub panels use the same workspace and Bestie-scoped history. Back/Forward restores addressed content; explicit Close retires its visits and preserves surviving editor focus. Bestie selection, canonical DM admission, creation, sending, and saved drafts retain their existing owners. The workspace now supplies the existing ForwardMessageProvider so main and thread message actions can open the shared forwarding dialog; ChannelsPage remains its dialog owner. No shared message, panel, forwarding, or design-system implementation changed. Checked head: `eac213604618e90b3c271cac4094c6bdd5e73d1d` (forwarding repair in `e6153e79b`, plus main through `3ce52cefc`). Validation: - All 18 Bestie browser cases passed in Chromium and WebKit, covering geometry, both themes, narrow/wide layouts, enlarged text, draft/DOM retention, focus, history, agent tabs API, pointer feedback, and forwarding action-to-dialog integration. - 155 related Bestie and forwarding unit tests passed across 12 files. Mandatory pre-commit and pre-push hooks passed. - The new forwarding regression failed on the previous code in both engines because Forward message was absent. With the provider restored, both the main-message toolbar and thread-message More menu open the separate shared dialog and address the selected message. - One browser journey was added for this repair; none removed. It covers real floating-action/menu interaction and thread-portal context reaching a separately mounted dialog owner. Shared forwarding policy and send/recovery cases remain with their existing unit tests. - Independent review found no blockers in the forwarding repair. Prior history/focus fixes were independently reviewed and checked separately. - Current-head [hosted CI run 42090615911](https://github.com/block/buzz-app/actions/runs/42090615911) passed, including all 23 browser shards, the required aggregate, and advisory flake checks. All 45 applicable hosted/external checks passed; Windows native validation was skipped as configured. Addressed P2 feedback: bounded workspace height; shared messages tab-state key; scoped application Close All handling; retained inline-panel state on collapse; pointer-drag feedback; Close All focus restoration; restored forwarding context for main and thread messages. Human acceptance: Arjun confirmed the original workspace on `528a703d7`, then explicitly confirmed both restored forwarding paths on `e6153e79b` on November 5, 2026. The subsequent main integration imports the upstream durable-approval type fix (#2650); the accepted forwarding implementation and regression are unchanged. No live messages were sent during agent verification. Current CI follow-up: the first forwarding run encountered main's unrelated durable-approval `create` scope type mismatch. The upstream fix is integrated. TypeScript, all 18 Bestie browser cases, 155 related unit tests, and mandatory hooks passed afterward; the resulting current-head hosted checks also passed. buzz-review-completed --------- Signed-off-by: Arjun Mahanti <arjun@squareup.com> Co-authored-by: bmo <a7b504d9a2bfe905589e9ac237d7d8d023b8d10547060ec9618e6487b55d756c@buzz.block.builderlab.xyz> Co-authored-by: Codex <noreply@openai.com>
Fix main's TS2322 after external MCP added
createwhile durable approvals still accepted onlyreadandpost. Align the host approval type and native scope validation. Empty, duplicate, and unknown scopes remain rejected; existing grants do not widen.Validation: TypeScript check and 41 external-connection tests passed. The new native scope regression failed on the old validator as expected; post-fix native execution is deferred. Independent agent review found no blockers in the intended final validator. No browser cases added or removed. No full test suite run; pre-push hooks skipped at the author's explicit request. Native live consent/persistence and human testing remain deferred; keep draft.