Repository navigation
v4.115.1
Fix: up no longer invents an idempotency key for the tier purchase or the faucet
Without a caller-supplied idempotencyKey, r.up() / run402 up / MCP up (and projects.provision with autoPrerequisites) derived one from the run's inputs. Every wallet running a default run402 up therefore sent the same Idempotency-Key on POST /tiers/v1/prototype, and a wallet that bought again within the gateway's 24-hour replay window was answered with its own earlier receipt instead of being charged.
- The tier purchase and the faucet drip now carry a key only under a caller root key (
action:<root>:tier.set,action:<root>:wallets.faucet), as theagent-cold-start-bootstrapspec requires. Without one, their stepdetails.idempotency_keyisnull. - Re-running
upafter a crash stays safe: it readstier.status()first and skips the purchase when the tier is already active. - The unused
RUN402_IDEMPOTENCY_REQUIREDerror is removed.
Pairs with the gateway change that scopes the tier route's replay cache to the signing wallet and the request body.
Full Changelog: v4.115.0...v4.115.1