fix: gate Gateway message action requester provenance [AI]#102031
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 8, 2026, 6:48 AM ET / 10:48 UTC. Summary PR surface: Source +79, Tests +312. Total +391 across 5 files. Reproducibility: yes. Current main is source-reproducible because Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Land the narrow security-boundary fix after maintainer acceptance of the compatibility tradeoff and exact-head or merge-queue validation against current main. Do we have a high-confidence way to reproduce the issue? Yes. Current main is source-reproducible because Is this the best way to solve the issue? Yes. The PR gates trust at the Gateway RPC boundary, preserves the internal backend bridge with admin proof, and avoids adding a new config option, schema field, or plugin-specific workaround. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 58891c85b68b. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +79, Tests +312. Total +391 across 5 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
Review history (10 earlier review cycles; latest 8 shown)
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
ClawSweeper proof for current head 8da4343 Behavior proved: a write-scoped Gateway Environment: local PR checkout at head Protected boundary/sink/source: public Gateway Command/artifact:
Evidence:
Compatibility/operator note: existing Live gaps: no private Discord/WhatsApp/native channel credentials were used. The local proof uses the real Gateway WebSocket path and stubs only the external provider/channel sink; GitHub Actions CI is green for the PR head. |
|
@clawsweeper re-review |
|
Verification before merge: Behavior addressed: write-scoped Gateway
Regression Risk: Best fix verdict: best/appropriate. The fix belongs at the Gateway trust boundary rather than duplicating sender-provenance checks in every channel plugin, and it preserves the internal backend bridge without exposing admin scope to plugin authorization. User behavior change: |
…102031) * fix: gate message action requester provenance * fix: preserve trusted gateway action context * fix: preserve message action effective scopes * chore: refresh gateway protocol swift model * fix: keep swift message action init additive * fix: avoid message action wire shape change * fix: downscope non-owner message action bridge * fix: keep cli message actions least privileged * fix: downscope message action runtime scope * fix: normalize message action bridge provenance
…102031) * fix: gate message action requester provenance * fix: preserve trusted gateway action context * fix: preserve message action effective scopes * chore: refresh gateway protocol swift model * fix: keep swift message action init additive * fix: avoid message action wire shape change * fix: downscope non-owner message action bridge * fix: keep cli message actions least privileged * fix: downscope message action runtime scope * fix: normalize message action bridge provenance
…102031) * fix: gate message action requester provenance * fix: preserve trusted gateway action context * fix: preserve message action effective scopes * chore: refresh gateway protocol swift model * fix: keep swift message action init additive * fix: avoid message action wire shape change * fix: downscope non-owner message action bridge * fix: keep cli message actions least privileged * fix: downscope message action runtime scope * fix: normalize message action bridge provenance (cherry picked from commit e25fa79)
What Problem This Solves
Resolves a problem where a write-scoped Gateway client could provide requester identity fields on
message.actionrequests and have that identity treated as trusted channel provenance by downstream message actions.Why This Change Was Made
The Gateway now treats requester account and sender provenance like other trusted channel-action context: only full-scope callers can bridge server-injected requester identity through the public RPC boundary. Write-scoped clients can still invoke supported message actions, but their caller-supplied requester identity and owner bit are stripped before channel dispatch.
User Impact
Operators keep the existing
message.actionworkflow for normal write-scoped clients, while channel actions that depend on trusted sender identity no longer accept spoofed requester provenance from those clients. This narrows the authorization boundary without changing channel configuration, storage, migrations, or plugin manifests.Evidence
git diff --checknode scripts/run-vitest.mjs src/gateway/server-methods/send.test.tspassed: 124 tests.blacksmithCLI is unavailable.