Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .markdownlint-cli2.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// markdownlint-cli2 configuration
// Rules disabled to match the repo's intentional writing style. Every rule
// here was failing on pre-existing files before this PR — the workflow was
// added without a config and applied markdownlint's strict defaults.
//
// MD001 (heading-increment) — README opens with h1→h3 by design
// MD012 (no-multiple-blanks) — one stray double blank in CODE_OF_CONDUCT
// MD013 (line-length) — repo writes one long line per paragraph
// (glossary one-liners, prose-heavy playbooks)
// MD024 (no-duplicate-heading) — playbook template repeats ### Goal /
// ### Code / ### Prerequisites across patterns
// MD026 (trailing-punctuation) — README h3 ends with a period by design
// MD032 (blanks-around-lists) — repo style omits blanks around tight lists
// MD033 (no-inline-html) — _template.md uses <Playbook> as a placeholder
// MD034 (no-bare-urls) — a few intentional bare URLs in resource lists
// MD037 (no-space-in-emphasis) — false positive on "* —" markdown
// MD040 (fenced-code-language) — some diff/text blocks omit language tag
// MD041 (first-line-h1) — PULL_REQUEST_TEMPLATE.md opens with ## per
// GitHub's pull-request-template convention
// MD060 (table-column-style) — repo uses compact tables (|x|y| not | x | y |)
{
"config": {
"MD001": false,
"MD012": false,
"MD013": false,
"MD024": false,
"MD026": false,
"MD032": false,
"MD033": false,
"MD034": false,
"MD037": false,
"MD040": false,
"MD041": false,
"MD060": false
}
}
22 changes: 22 additions & 0 deletions docs/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ A pre-settlement hold by an issuer or wallet promising that funds are available;

A Layer 2 EVM rollup operated by Coinbase, the default chain for [x402](https://www.x402.org/) USDC stablecoin payments in 2026; settles to Ethereum.

### Buyer agent

The agent acting on a user's behalf to discover, evaluate, and pay for a resource or product. In [x402](https://www.x402.org/) it constructs the signed `X-PAYMENT` header; in [AP2](https://github.com/google-agentic-commerce/AP2) it carries a user-signed [mandate](#mandate); in [ACP](https://www.agenticcommerce.dev/) it drives the checkout exchange with the merchant. See [/agent-playbooks/x402-buyer-loop.md](../agent-playbooks/x402-buyer-loop.md).

### Buyer-loop

The client-side x402 pattern: hit the resource, receive HTTP 402 with payment requirements, sign a payment payload, retry; documented in the [x402 spec](https://github.com/coinbase/x402).
Expand Down Expand Up @@ -110,6 +114,10 @@ Euro-denominated stablecoin issued by [Circle](https://www.circle.com/eurc); use

## F

### Facilitator

A third-party service that verifies signed [x402](https://www.x402.org/) payment payloads and broadcasts the settlement transfer on-chain, returning a settlement proof (typically a transaction hash) in the `X-PAYMENT-RESPONSE` header. Public facilitators in 2026 include [Coinbase](https://docs.cdp.coinbase.com/x402/welcome), [Stripe-on-Base](https://docs.stripe.com/crypto/stablecoin-payments), and the [x402 Foundation](https://github.com/x402). Merchants treat the facilitator as trusted-but-verified: cross-check facilitator receipts against on-chain settlement in reconciliation.

### Finality

The point at which a transaction is irreversible on its settlement rail; on Base it is ~2 seconds soft, ~13 minutes to Ethereum hard finality, on Tron it is ~3 minutes, on Solana it is ~13 seconds. Merchants design refund and reconciliation around finality, not block time.
Expand Down Expand Up @@ -192,6 +200,10 @@ The legal seller in a transaction — handles tax, returns, and chargebacks; for

The surface of agentic commerce that protocols leave to merchants: catalog, quote, pay, deliver, refund, reconcile. Where ACP / AP2 / x402 / MCP standardize the wire protocol, the merchant operations layer is everything that has to be built on top to actually transact — SKU eligibility per jurisdiction, dynamic pricing and re-quote, multi-rail settlement reconciliation, refund semantics for irreversible rails, fraud signals on agent traffic, signed receipts. See [/docs/merchant-operations-layer.md](./merchant-operations-layer.md) for the canonical page and [/merchant-playbooks/](../merchant-playbooks/) for the operational patterns.

### Mock mode

The default safety mode in this repo's runnable examples, gated by `MOCK_MODE=true` (the implicit default — set `MOCK_MODE=false` to disable). No real funds move, no external network calls happen in default mode, no real keys are required, and every delivery code is clearly non-redeemable (`MOCK-` / `DEMO-` prefixed). Every shortcut is annotated with `// MOCK:` in source so readers can locate the production swap-in point (an x402 [facilitator](#facilitator), an EIP-712 verifier, or a chain RPC). See [/examples/README.md](../examples/README.md).

### MPP — Machine Payments Protocol

Spec from [Tempo and Stripe](https://tempo.xyz/) for machine-to-machine settlement primitives.
Expand Down Expand Up @@ -228,6 +240,12 @@ The airline reservation record; the unit of fulfillment for a flight purchase, g

A processor that abstracts card-network or rail integration for the merchant; Stripe, Adyen, Checkout.com.

## Q

### Quote-vs-settle drift

The variance between the total quoted to an agent at time T0 and the actual cost at settlement T1, driven by supplier wholesale repricing, [stablecoin](#stablecoin) peg deviation (USDC briefly traded near $0.88 during the March 2023 SVB event), FX between quote and settlement currencies, and chain [finality](#finality) latency. The protocols (ACP, AP2, x402, L402) do not define a TTL, a drift threshold, or a re-quote handshake — the merchant invents them. Bound it with a quote TTL, a basis-point drift threshold, and an explicit re-quote envelope; see [/merchant-playbooks/pricing-drift-and-requote.md](../merchant-playbooks/pricing-drift-and-requote.md).

## R

### Refund
Expand All @@ -240,6 +258,10 @@ A merchant-initiated reversal; in cards it is a separate clearing message, in st

The set of constraints attached to an agent's authorization — which merchants, which amounts, which categories, which time window. Defender framing: scope is the primary control surface for agent fraud.

### Seller agent

The agent (or agent-shaped service) exposing a paid resource or product to [buyer agents](#buyer-agent); serves the [x402](https://www.x402.org/) 402 challenge, an [ACP](https://www.agenticcommerce.dev/) product feed and quote endpoints, or an [MCP](https://modelcontextprotocol.io/) storefront, and verifies the buyer's signed payment payload before delivering. In [AP2](https://github.com/google-agentic-commerce/AP2) terms it is the merchant-side endpoint validating the mandate scope before settlement.

### Settlement

The actual movement of value from buyer to merchant; distinct from authorization. In stablecoin flows authorization and settlement collapse into one on-chain transfer.
Expand Down
4 changes: 3 additions & 1 deletion lychee.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ user_agent = "Mozilla/5.0 (compatible; lychee-link-check/0.18; +https://github.c
# Skip URLs that are well-known to block automated checkers or are otherwise
# unreliable to verify from CI. Each entry is a regex matched against the URL.
exclude = [
# Bot-hostile hosts (return 403 to non-browser UAs, but pages are live)
# Bot-hostile hosts (return 403/404/502 to non-browser UAs, but pages are live)
"^https?://(www\\.)?amazon\\.com",
"^https?://(www\\.)?openai\\.com",
"^https?://(www\\.)?tempo\\.com",
"^https?://(www\\.)?fatf-gafi\\.org",
"^https?://developer\\.americanexpress\\.com",
"^https?://(www\\.)?strike\\.me",
Expand Down
Loading