Skip to content

Reject expired or revoked MCP authority after delayed validation - #48

Merged
tmcfarlane merged 8 commits into
v0.8from
codex/gauntlet-mcp-lifecycle
Oct 2, 2026
Merged

tmcfarlane merged 8 commits into
v0.8from
codex/gauntlet-mcp-lifecycle

Conversation

@tmcfarlane

Copy link
Copy Markdown
Owner

A request held during account validation could start a new MCP board read after its grant was revoked. Delayed single-use consumption could also issue a code or token after the consumed record expired. Recheck token, grant and account validity after awaited account resolution, and recheck consumed records after the last required read before creating new authority. SQL consumption now requires expires_at > clock_timestamp() in the same atomic DELETE; valid concurrent consumption still has exactly one winner.

This protects the recorded authorization decisions. It does not cancel or roll back a tool or SQL write already dispatched, or promise linearizable revocation across systems. A code issued for an already-expired account was already unusable; rejecting that issuance also makes its acknowledgement accurate.

Validation: actual runtime/SDK HTTP/SQL regression fixtures pass all 16 cases, including zero board dispatch after held revocation or expiry, delayed code/grant issuance, transaction-start versus current SQL time, and valid/concurrent controls. The 22 focused native OAuth/store/plugin cases pass on Node 20 and Node 22; strict MCP/API types and scoped lint pass. The repaired combined app/API gate passes all 989 tests across 47 files once on Node 20.20.2, with zero retries; types, scoped lint and original-config build pass. An earlier combined run had 981 passes and one Account sign-out failure. That outcome remains preserved, and PR46 separately fixes a phase-controlled owner-reset race with seven before/after regressions; the earlier uninstrumented failure is consistent with that race rather than uniquely attributed to it.. Exact-head full CI is required before merge. Recorded before/after and fixture setup evidence.

Four fresh compiled setup/consent cases pass on desktop/mobile after integrating the sign-out and toolbar fixes. The four captures below are actual disposable browser fixtures from the frozen final app, with published exact-head hashes verified. They validate the inherited connector UI around this backend change. Three fresh toolbar geometry checks also pass. Combined gate and compiled browser evidence.

Compiled disposable consent-selected-desktop

Compiled disposable consent-selected-mobile

Compiled disposable setup-desktop

Compiled disposable setup-mobile

@vercel

vercel Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
zeroclickboards Ready Ready Preview Oct 2, 2026 2:17pm UTC

@tmcfarlane
tmcfarlane merged commit 4879f7e into v0.8 Oct 2, 2026
8 checks passed

This branch was successfully deployed

1 active deployment
Preview — 009a5026 Deployed Oct 2, 2026 by vercel[bot]
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