Skip to content

Vibes-Coded x402 fixture-merchant integration (evidence for #167 rail matrix) #222

Description

@Rumblingb

Split out from #167 as @doteyeso-ops suggested — #167 stays the matrix/truthfulness issue, this one carries the Vibes-Coded integration.

Context: vibes-coded.com offered to act as a fixture merchant so the x402 row of our rail matrix is backed by probes against a live counterparty instead of by the presence of an SDK import. Their reply in #167 answered the testnet, idempotency, failure-path and rate-limit questions.

First evidence pass — zero-fund, run 2026-07-27

User-Agent: AgentPay-EvidenceProbe/0.1 (+https://github.com/Rumblingb/Agentpay; issue-167), single sequential requests, well under the ~1 req/s they allowed. No funds moved.

# Check Expected (per #167 reply) Observed
1 Unpaid POST /api/v1/outcomes/currency-convert 402 payment_required 402, well-formed x402v2 body with resource, serviceName, bazaar extension
2 Zero-fund shape check ?preview=1 truncated live response 402, identical discovery body — no preview payload ⚠️
3 Bad key X-Vibes-Key: vb_notarealkey_000 invalid_vibes_key 402, same generic discovery body — no distinct error code ⚠️
4 Bare Python-urllib/3.11 UA blocked at edge 403

(1) and (4) reproduce exactly as described. The x402 discovery body is genuinely well-formed — this is a real rail, not a stub.

Two that didn't reproduce — likely my error, but worth pinning down

@doteyeso-ops — not raising these as defects, and the most probable explanation is that I'm calling them wrong:

  • ?preview=1 returned the standard 402 rather than a truncated response. Is preview scoped to particular SKUs, or does it need a valid X-Vibes-Key present (even at zero balance) to distinguish "preview" from "anonymous"?
  • Invalid key returned the generic 402 rather than invalid_vibes_key. Is the distinct error emitted only once a syntactically valid vb_ key is parsed, with mine failing the format check earlier in the chain and falling through to the unpaid path?

This distinction matters more than it looks for #167. "Underfunded", "bad key" and "never paid" are three different operational states, and a caller that cannot tell them apart cannot build correct retry logic — it will retry a permanently invalid key forever. If they are distinguishable and I simply probed wrong, that is a strong result for the matrix and I will record it as such.

Next, once the above is clarified

  1. Human funds ~$1 USDC via https://vibes-coded.com/start → prepaid vb_… key, hard-capped. This is the only money that moves, and the cap is the security gate — no per-call wallet mid-run, so [P0] Establish sandbox-only payment rail contract and evidence matrix #167's "no mainnet wallets, no production credentials" constraint holds.
  2. Walletless smoke via POST /api/v1/outcomes/balance/trial/claim with a stable agent_id, then retry an impulse SKU.
  3. Full transcript against the 5 checks from [P0] Establish sandbox-only payment rail contract and evidence matrix #167: discovery → 402 → pay → 200; idempotent replay; nonce/replay rejection; the three failure codes; reconciliation against the public funnel.
  4. Write the Vibes row into the rail matrix with links to each transcript.

Scope and security

Sandbox/evidence only. No production money movement is enabled by this issue, and nothing here makes any AgentPay rail live — see #167, which remains the gate. Per @doteyeso-ops, no PR from their side; public probes plus prepaid hops are the whole partnership.

Also worth stating plainly, as in #167: AgentPay has no live payment rail and no genuine revenue. This integration produces evidence for a matrix, not a production path.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions