Skip to content

SalvoDocumentation

How it works underneath, and an honest roadmap of what is built and what is not.

The four products ​

Each has its own page: a picture of how it works, then the questions a first-time reader asks, answered honestly.

LevelProductMoney runs onToday
1Cinemark: unused Movie Club credits become ticketsStripe, or stablecoins for AI agents🔵 Built, two testnet orders with a stand-in
2Gift cards: in store, online, and account creditStripe: a hold on the shopper's card🔵 In store and online built, never used for real. 🟡 Account credit designed, no code
3Cash advance: your card pays for someone's purchase, and you get cashA stablecoin escrow, designed only🔵 Built as code, cannot run yet
4Loyalty: sign up once, get the best redemptionsNo money moves🟡 Designed, no code

Where the money goes maps every product's money in one picture: how it comes in, where it waits, who is paid, and which steps touch Stripe.

Read this first ​

This documentation distinguishes three states. The distinction is the point:

DesignedReasoned through and written down. No code.
BuiltImplemented with green tests. Has never run against reality.
ProvenHas run against a real merchant, a real card, or real money.

Very little is proven. A great deal is built. This project has mixed the two up more than once. A safeguard that passes its tests but never actually runs is worse than having none, because you can see a missing safeguard and you cannot see a dead one.

Two real examples:

  • The velocity window was declared and tested, but nothing read it for most of the project's life. Per-LP velocity limits were the primary issuer-risk mitigation, and they never engaged.
  • ChipotleVault, the Lit vault backend, existed but was only mentioned in comments. Every code path used the custodial vault instead, and the custody guard rightly refuses a third party's card there. So even if that backend had worked, no seller could have listed a card under their own name.

A static check (pnpm lint:dead) now fails the build when an exported function is reachable only from tests. That is what stops this recurring.