docs/status/, and every artifact names the command that produced it.
Nothing here is typed by hand — if a claim and the code disagree, the artifact is the
one telling the truth.
Generated by npm run evidence:build from 12 artifact(s).
What this build does not claim
The four testnet accounts
Public keys only. These are what make fee sponsorship checkable rather than asserted: open any settled payment on stellar.expert and the transaction’s source and fee account is the FEEPAYER, never the payer — the payer appears only inside the Soroban authorization entry. That is the whole claim, and it takes two clicks to falsify.
The FEEPAYER is also published live at
https://stellarsight.xyz/health as feePayer.
Settlements, by why they exist
A settlement count means nothing without knowing what produced it. Every payment this repo generates is labeled at the moment it settles:
An unlabeled hash renders as unlabeled, never as organic. The full map is
docs/status/provenance.json; every hash with an explorer
link is in TESTNET-TXS.md.
Coverage: scheme × asset × network
Acceptance criteria, as observed
Written bynpm run verify:conformance -- --emit on 2026-10-10 12:58:27 UTC
(commit b211e15), driving an unmodified @x402/fetch client —
no STELLARSIGHT code on the payment path.
Settled:
2bf4a54c7af24aa4ee032c73b84172a7d09fa71eb36fafcff8c94c5609e6b5a9 · 0.01 SXT · 6271ms end to end.
Artifact: docs/status/conformance.json
The x402 repository’s own e2e suite
The RFP names this as a hard acceptance criterion: “a passing run of the x402 repo’s e2e suite for both networks”. This is thestellar:testnet half — stellar:pubnet is
Tranche 3 work, so the other half is scheduled rather than skipped.
6/6 scenarios passed against https://stellarsight.xyz, on suite commit
6557149b1437.
Every payment settled in Circle testnet USDC — not by choice but by construction:
the suite’s Stellar route resolves its asset through @x402/stellar’s
defaultMoneyConversion and offers no override, so a Stellar run is a USDC run. That
also answers, on chain, the “any SEP-41 token, USDC by default” line in RFP 3.1 that this
project had until now only claimed.
What this run does not cover, stated here rather than left for a reader to find:
- The seller and the payer are processes the harness spawns locally; it has no remote-seller mode, so the hosted seller at stellarsight.xyz is not on this path. What is exercised remotely is the facilitator.
- Reaching a deployed facilitator at all requires a forwarding relay in e2e/facilitators/external-proxies/, which is gitignored upstream and therefore first-party. Ours is published at e2e-proxy/ so the run is auditable.
- stellar:pubnet is Tranche 3. The RFP asks for both networks; this is the testnet half, and the other half is scheduled rather than skipped.
- x402-foundation/x402#3187 (open; fix PR #3228 unmerged): e2e/clients/typescript/client.ts derives EVM and SVM signers before branching on —families, so a Stellar-only run crashes without CLIENT_EVM_PRIVATE_KEY and a 64-byte CLIENT_SVM_PRIVATE_KEY. Both are unused decoys in this run.
docs/status/upstream-e2e.json · relay source: e2e-proxy/
Rejection audit
The negative-path counterpart: every documented error path, driven for real, with the code and reason the caller actually received. A rejection that arrives without a non-empty reason fails this run even when its status code is right.node scripts/verify-rejections.mjs · 11/11 applicable path(s) behaved as documented
Artifact:
docs/status/rejections.json
Scripted batches
Breadth of settlement, run serially and labeled as scripted. Not a load test — LOAD-BASELINE.md already publishes what this stack does under concurrency, and it is the least flattering number in the repo.What a settlement costs the Soroban host
Read back off the ledger from the transaction named below, and compared against the network’s liveConfigSetting entries — both sides fetched, neither typed. Regenerate
with npm run evidence:footprint -- --emit; the nightly re-measures the payment it has
just settled.
Worst utilization 1.5% — about 66.7× headroom against the tightest per-transaction limit. Measured on
2bf4a54c7af2… in ledger 5,122,704.
Memory is the one row without a measurement: Peak host memory is not recorded in the transaction envelope or result meta, so usage is unobserved. The per-transaction limit is reported for completeness.
Fee-payer runway
THREAT-MODEL.md T6: this deployment sponsors every buyer’s network fee from one account, so a drained fee-payer stops every settlement at once. Read straight off Horizon — balance, and burn from every transaction on the account over the trailing window, successful or not, since a fee is charged either way. Regenerate withnpm run monitor:feepayer -- --emit; a scheduled workflow pages on a breach.
Artifact:
docs/status/feepayer.json
How fast discovery answers
Wall-clock from the measuring machine over the public internet to a parsed JSON body — network round-trip and CDN included, because that is what a caller experiences. A server-side timer would look better and mean less. Regenerate withnpm run latency:discovery -- --emit.
Worst uncached p95 is 305 ms across 25 samples per probe, 0 failed request(s). Uncached and cached are never averaged together. Uncached forces a CDN miss with a unique parameter per request so the function actually runs — that is the honest number. Cached repeats one URL, which is what a caller polling a hot query sees; it is reported because it is true and labelled because quoting it alone would be the flattering half of the measurement.
Interoperability: one client, two facilitators
The same unmodifiedwithBazaar() client from @x402/extensions, pointed at this
deployment and at another facilitator, with every accepts entry validated by
@x402/core’s own PaymentRequirementsSchema. Regenerate with
npm run verify:interop.
One client parses both: yes. Every
accepts entry validates on both sides: yes. The two catalogs are not expected to agree — one indexes EVM resources and the other Stellar ones — so what is measured is whether a single consumer can read both and construct a payment from either.
Facilitators checked that do not serve the Bazaar discovery endpoint today:
- x402.org facilitator (https://x402.org/facilitator) — /supported answers 200; /discovery/resources answers 404
- x402.rs facilitator (https://facilitator.x402.rs) — /supported answers 200; /discovery/resources returns HTML
Dependency licences
npm run audit:licenses enumerates the production dependency tree — 191 packages,
workspaces included, dev dependencies excluded because they are not redistributed — and
reads each declared licence out of the installed package.json. CI runs it with
--strict, so an unknown licence fails the build alongside a copyleft one.
0 strong copyleft, 0 weak copyleft, 0 unknown across 191 packages. That is the check behind the architectural claim that this facilitator is self-hosted on
@x402/stellar rather than built on the AGPL-3.0 OpenZeppelin Relayer — the licence argument is now a property of the installed tree, not a statement of intent.
Run it yourself
Against the hosted deployment, with nothing installed:GC4E5Q6W…, the FEEPAYER — not the payer.