From 50616fcd60d91078bb843a52c0e966abdad2327f Mon Sep 17 00:00:00 2001 From: Daniel Ahn Date: Sun, 16 Aug 2026 16:30:27 -0700 Subject: [PATCH] README: the falsification test moves out of public view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Danny's call, 2026-08-16, same day it shipped: "Why would you be so public with what would prove this should stop section? That should be in private." He is right, and the convention that put it there was under-specified. A falsification test exists so a project's own goal is written down and checkable against evidence — that is an internal control. Publishing it to competitors, grant reviewers and prospective implementers is a different act with none of the same benefit: the four conditions named there read to an outside reader as reasons not to adopt, well before any of them is true. "Who this is for / not for" STAYS. That half serves a stranger deciding whether s402 fits, including saying plainly that EVM-only users wanting `exact` should use x402. That is the part a public README owes a reader. The removed text is retained verbatim, in full, at core/projects/s402-project/FALSIFICATION-PRIVATE.md in Danny's workspace. It is not deleted and it is not softened — it is relocated. CHANGELOG's [Unreleased] entry is corrected to match, rather than shipping a release note describing a section that no longer exists. Co-Authored-By: Claude Opus 5 --- README.md | 29 ----------------------------- typescript/CHANGELOG.md | 8 ++++---- 2 files changed, 4 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 911caf1..d38af1c 100644 --- a/README.md +++ b/README.md @@ -59,35 +59,6 @@ say so. Also skip it if you want a payments *product*: s402 is a wire format and with zero runtime dependencies. It does not move money, custody funds, or run a facilitator for you. Fiat and card rails are out of scope and will stay that way. -## What Would Prove This Should Stop - -s402's bet is narrow enough to be wrong in public. Any of the following would falsify it, and we -would rather retire the project than defend it past its evidence: - -1. **x402 absorbs the superset.** This README claims x402's two-scheme governance envelope - cannot take on prepaid, stream, escrow and unlock without re-ratification. If x402 ratifies - equivalents, the reason to run a second protocol is gone — the correct response is to fold - the schemes upstream and delete this repo, not to compete. - -2. **The prepaid economics do not survive contact with production.** The case for micropayments - rests on batching 1,000 payments into 2 on-chain transactions. If real deployments do not land - near the claimed ~$0.014 per 1,000 calls — because of contention on shared objects, gas-price - regimes, or settlement patterns we have not modelled — then the central advantage over - per-call settlement is arithmetic that only works on paper. - -3. **No independent implementation ever passes the vectors.** s402 claims to be a protocol, not a - library. A protocol with exactly one implementation is a library wearing a specification. If - the conformance vectors go unclaimed by any second-language implementation, the honest - description is "the wire format of the s402 npm package," and the spec should be demoted to - internal documentation. - -4. **Agent commerce settles somewhere other than HTTP 402.** If agent-to-service payment - converges on mandate-passing over a non-402 channel, then the status code this protocol is - built around is the wrong integration point, and being excellent at it does not matter. - -Points 1 and 3 are the ones to watch: both are observable from outside this repo, and neither -depends on our own judgement of our own work. - ## Which Scheme Should I Use? | Your situation | Scheme | Gas per 1K calls | Latency | diff --git a/typescript/CHANGELOG.md b/typescript/CHANGELOG.md index e739504..83ec37c 100644 --- a/typescript/CHANGELOG.md +++ b/typescript/CHANGELOG.md @@ -47,10 +47,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 refuses to pass vacuously: if the wording changes so no claim is found, the test fails rather than silently verifying nothing. Counts written into prose are derived values maintained by hand, and three independent wrong numbers in one repo is what that looks like after a while. -- **The README now says who s402 is for, who it is not for, and what would prove it should - stop.** The last of those is a falsification section naming four observable conditions that - would retire the project — chiefly x402 absorbing the superset schemes, and no independent - implementation ever passing the conformance vectors. +- **The README now says who s402 is for and who it is not for.** Deciding whether s402 fits + was previously left to the reader to infer from feature tables; it now says plainly that + EVM-only users wanting `exact` should use x402, and that s402 is a wire format rather than a + payments product. ## [0.8.0] - 2026-06-28