You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Post-settlement fixes for tx 0x1052fa51aa1412119581194acc1011c51786a59538f46bb5f9d593f1ad16d802 (0.01 USDC, Base mainnet, independently confirmed).
Canary hardening (GPT engineer, CTO-verified): did:web receipt verification resolves the kid ONLY via the trusted configured origin's /.well-known/did.json (hostile-but-valid did:web signers refused; legacy did:key kids still resolvable; receipt payer must match settled payer); payment-state file 0600; idempotent recovery may observe zero-or-one new settlements on replay, first send still requires exactly one; evidence artifact updated with the real settlement + idempotent_replay flag.
Attribution fix (root cause of the unverified_payer mislabel: the canary paid with NO first-party tagging): (1) canary now tags every request via X-Agent-Guild-First-Party — token from GUILD_FIRST_PARTY_TOKEN env or the gitignored live/secrets/first_party_token — and REFUSES --execute untagged unless --allow-untagged; evidence records first_party_tagged. (2) effective_payer_attribution(): read-time, config-aware attribution for /billing/revenue + funnel; a record STORED unverified_payer whose payer is in GUILD_X402_FIRST_PARTY_PAYERS (or first_party_payer=True) reads as verified_first_party_canary. Upgrades move TOWARD first-party only (can only weaken an externality claim); bound/attested records never relabeled; append-only stored labels untouched.
Tests: attribution-honesty +2, canary +4; full suites green in JSON and SQLite store modes (905 passed / 9 skipped each), verified in a clean cloud env.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PogUzTjFFU7P4Q9EoY1Nrm
"disclaimer": "First-party canary DRY RUN. Preconditions + signed offer verified; NO signature produced, NO funds moved. NOT a payment, NOT revenue, NOT external adoption.",
3
+
"disclaimer": "First-party canary. A successful settlement is proof the machine-payment loop works end-to-end; it is NOT external adoption and NOT customer revenue.",
"note": "zero: no independently confirmed mainnet settlement exists (testnet/sandbox/unconfirmed activity is value-less and listed under testnet_settlement)"
"note": "counts ONLY mainnet settlements independently CONFIRMED on-chain; `attribution` splits them into verified_first_party_canary (Guild identity, never external), cryptographically_bound_machine_payer (valid caller proof + exact (address, network) wallet binding \u2014 identity proven, ownership/externality UNPROVEN), independently_attested_external_machine (a SEPARATE allowlisted issuer attests externality) and unverified_payer (missing proof is UNKNOWN, never external). Unknown ownership is never called verified external."
22
44
},
23
-
"generation_note": "Produced against a LOCAL mainnet-shaped stack with a fake RPC (chainId 8453) \u2014 no real network call, no signing, no key. Illustrates the artifact shape --execute would emit with real settlement fields added.",
"note": "counts ONLY mainnet settlements independently CONFIRMED on-chain; `attribution` splits them into verified_first_party_canary (Guild identity, never external), cryptographically_bound_machine_payer (valid caller proof + exact (address, network) wallet binding \u2014 identity proven, ownership/externality UNPROVEN), independently_attested_external_machine (a SEPARATE allowlisted issuer attests externality) and unverified_payer (missing proof is UNKNOWN, never external). Unknown ownership is never called verified external."
0 commit comments