fix(dashboard): harden pinned MCP app authority#111679
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 20, 2026, 1:43 AM ET / 05:43 UTC. Summary PR surface: Source -6, Tests +37, Other -38. Total -7 across 23 files. Reproducibility: no. high-confidence current-main reproduction is available from the supplied material. The PR describes a stale or client-forged authority boundary, but does not provide a runnable before-fix exploit sequence against the current base. Review metrics: 1 noteworthy metric.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Keep the server-derived Do we have a high-confidence way to reproduce the issue? No high-confidence current-main reproduction is available from the supplied material. The PR describes a stale or client-forged authority boundary, but does not provide a runnable before-fix exploit sequence against the current base. Is this the best way to solve the issue? Unclear but directionally strong: resolving authority from the authenticated live view and rechecking it at each interactive operation is the narrowest safe design, provided the removed protocol shape is confirmed unreleased or receives an explicit transition path. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against a22ede72e494. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source -6, Tests +37, Other -38. Total -7 across 23 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
fcff010 to
d5906ad
Compare
d5906ad to
fd67303
Compare
|
Merged via squash.
|
Related: #111524
Follow-up to superseded #111552.
What Problem This Solves
Fixes an issue where pinned MCP App widgets could carry client-selected authority metadata and retain interactive capabilities after their originating live view, grant, revision, or widget instance was no longer authoritative.
Why This Change Was Made
MCP App pins now accept only a live
viewId; the Gateway derives and persists the stable descriptor from the authenticated board session. Canonical stored rows require explicit interactive provenance and an instance id, and every app interaction path dynamically rechecks the current widget grant, revision, and instance. Reconstructed or revoked sources remain read-only.This keeps the existing
MCP_APP_VIEW_EXPIREDlifecycle andshow_widgetHTML behavior unchanged. The UI change is limited to sending the narrowed pin request; naming and capability UX remain unchanged.User Impact
Pinned MCP Apps retain durable dashboard content without allowing stale, replaced, revoked, or client-forged authority to update model context or call tools. Unreleased noncanonical stored MCP rows are dropped instead of receiving a runtime compatibility path.
Evidence
401ef9770e2554b577ab86beabd49503babb414e(upstream/mainat the tooling-critical sync)fd67303ab2d94f78640896b190215c3b93c1c15bblacksmith-testbox, leasetbx_01kxz2hp83sb11acfevmhzm22a; 74 protocol, store, reconstruction, Gateway, and MCP interaction tests passed.tbx_01kxz0aaf9zv3eczzv56t74e45; 105 tests passed including the UI producer.blacksmith-testbox, leasetbx_01kxyz2dy7kyq6bebdvze46y3j; protocol generators matched tracked Swift/Kotlin output,check-protocol-sincepassed, 151 focused tests passed,check:changedpassed forcore,coreTests,ui, andapps, andpnpm buildpassed in 17m45.996s.scripts/prtrust-boundary update and all other commits were audited as non-overlapping; the rebase was conflict-free andgit range-diffproved the authored patch byte-equivalent.git diff --check upstream/main...HEADpassed.AI-assisted: yes. I reviewed the implementation and proof and understand the authority and compatibility boundaries changed here.