3 Sep 2026
corr_2026-09-03_002 · resolved · Restates corr_2026-09-03_001
Claim
Nobody raised this. We found it in our own archive: probe402 published 509 observations of 136 MPP endpoints as `Answered, no quote` - alive, asking to be paid, not saying how much - when every one of those endpoints had said exactly how much, in the same response header, one base64url hop away. The price was inside the challenge's `request` parameter and our parser only read the flat parameters beside it. MPP is the rail no competitor archives, and we were blind on it from our first tick to this one.
Finding
Measured 2026-09-03, read-only, against our own retained captures. Of 525 `WWW-Authenticate: Payment` challenges across 384 archived capture blobs and 162 hosts, 519 carry the charge inside a base64url `request` parameter and 4 carry the flat `amount`/`recipient` auth-params `parseMppChallenge` was written for. Nine payment providers publish the encoded form - tempo (412 challenges), evm (68), stripe (21), solana (4), x402 (4), exact (4), lightning (2), asterpay (2), usdc (2) - and every one of the 519 decodes to an object carrying an amount. The parser looked in the one place the ecosystem does not use, found nothing, and filed `no-amount-or-recipient`. EVERY affected row was then re-read against its own archived capture: all 509 of them, on 136 endpoints across 42 hosts, yield a quote - the transition is uniformly `Answered, no quote` -> `Quoted`/R14d, and none of them remains unreadable. The population is bounded by the archive's own record: a row can move only if its stored `quote_parse.mpp` is true, because the changed function returns early when no `Payment` challenge is present. THERE IS A SECOND, LARGER CLASS AND IT IS NAMED HERE RATHER THAN LEFT OUT. When a quote parses, the classifier returns early with a fixed sub-code list, so a row whose x402 arm quoted and whose MPP arm failed carries NO trace of the failed MPP parse at all. Measured: 4,188 further rows on 881 endpoints. Their outcome and their price are correct and unchanged - x402 stays the primary quote - but they record the endpoint as serving ONE rail when it serves two (rule R14a/R14b/R14c where the corrected reading gives R14e, dual-rail). On an evenly spaced sample of 188 of those 881 endpoints, 188 of 188 promote and none is unchanged. They are NOT in this record's scope because their exact enumeration needs the full re-derivation of the archive, which is queued; scoping 881 endpoints from a sample would publish an inference as a measurement. A second record follows that run.
Remedy
FIXED FORWARD, NOT REWRITTEN. The parser now reads the `request` parameter in the one place a quote is read, and the payment method the challenge names - tempo, stripe, lightning and six others - is recorded as the quote's scheme. A `request` we cannot decode is recorded as an ATTEMPTED parse that failed, never as an endpoint that published no price: the distinction is the whole point, because reading an unreadable challenge as an absent one is how this defect published a statement about 136 operators that was really a statement about us. The rubric version moves 5 -> 6 so the boundary is visible in the archive itself and not only in a changelog; the decision behind the change is recorded there, as what it decided, and is named in this record's method-change reference. NO STORED OBSERVATION IS EDITED and the archive is not migrated, under the standing rule that a stored observation is never edited and a correction annotates it: the affected rows still say what they said, under the rubric version that actually graded them, and this record is how they should be read. Re-deriving the archive under the corrected parser reproduces every other row byte-for-byte; these rows are the declared exception.
How to read the affected rows
Read these rows as `Quoted`. The endpoint answered with a payment challenge carrying a price, and our instrument could not see it. The grade understates the endpoint; it is not a fact about the endpoint at all. Rows on these endpoints from the corrected collector onward carry the quote directly and need no annotation, which is why the range closes rather than staying open. The second class described in `finding` is not annotated here: those rows are correct about the outcome and the price, and what they understate - the rail set - needs the queued re-derivation to enumerate exactly.
136 endpoints
- ep_015927a6f57d91b1
- ep_03c30c40a0a5b1a0
- ep_03dd812c90832418
- ep_06a972bb98b76e95
- ep_07b2409ceb2ec028
- ep_0b7e5107d44706a2
- ep_0e0a7a5457cc4ee9
- ep_0e449648cc27272c
- ep_0fde080679448597
- ep_1023379a034e0e5e
- ep_10a15a85213d621b
- ep_11918c8bfcd59695
- ep_11f5a4dd6eacbfc3
- ep_1297b1376d99d163
- ep_14cd137515de2649
- ep_18ff22c134e74dbb
- ep_1a4816be4769710a
- ep_1a95efebc7c77b34
- ep_1bbc78704e6f9bec
- ep_204df5423998b532
- ep_20cea3a296c58aa1
- ep_2309db23b716b082
- ep_238c652f3663cef9
- ep_24aea71bc3145a12
- ep_26cc5f958a10fbc0
- ep_27524e713ced1dfd
- ep_2906ac7e4b9462a4
- ep_2a192fb6b2102b13
- ep_2c0cc61bd58cdf4c
- ep_2d3c3bc02c7b5fa0
- ep_2ec899d3f206c5f7
- ep_318c64175ae2a495
- ep_35c302b3ae60d18b
- ep_363e7a32981c9f21
- ep_375cb589864fb0ac
- ep_39305eec360c8962
- ep_3c5be4f6f5cfc126
- ep_3f9eec9aa9eed34c
- ep_42b9ccd8917265dd
- ep_450675bf5dee1abb
- ep_469adc79344de7bc
- ep_46a210e833d133c6
- ep_491d5d8d04875e3b
- ep_4969a138fc4e8506
- ep_4d3821f86890e57c
- ep_4d52948887933ddf
- ep_4f5ec0de181b6c54
- ep_4fc15aace14db1cf
- ep_514b7e7945442494
- ep_557df0815e396be9
- ep_55b021c149b64a55
- ep_575b0f265ab186e8
- ep_59799f75cb1fa75e
- ep_5a042773f1ba3740
- ep_5aab5577ba2512a3
- ep_5bf53d587fd6b587
- ep_5de4bc6f8fc496bc
- ep_5e7964eb76360ee7
- ep_5e7ef294f7c42bbd
- ep_60d53b8194b601b9
- ep_65f36ce0f1754305
- ep_67c12437494bc0c1
- ep_6b1041593e05f84e
- ep_6ff3809177cbfeab
- ep_70eb6177c82e7972
- ep_73118968c42a5966
- ep_74bd676d4aa05206
- ep_74c6cabf8233aafb
- ep_7717af75ddfccf47
- ep_78232b89040af7b4
- ep_79743f4d263a2539
- ep_7a69075ecf5e45d2
- ep_7c0c36086ef4b787
- ep_7cf205d8e9545a1f
- ep_7e74d4c384464880
- ep_7edb4651a88779d7
- ep_80c7051c9f81ffaf
- ep_81304c0f6b20c097
- ep_81ac768b326a03e7
- ep_8232e469bb861eef
- ep_830cc2abd1ceec5b
- ep_8357cc1957b9d6bf
- ep_85e1df0b673cb046
- ep_8704fa330eda9d3e
- ep_9092a493275f5d43
- ep_9513c17ae6146fab
- ep_96897b7dd2a04f41
- ep_9886985abed502c7
- ep_9c233c1ecfd576b2
- ep_9c3fd7aaae9a2233
- ep_9d1eb0797985b596
- ep_a263d4ba92d29963
- ep_a27515c80337d124
- ep_a4dc04fc28408a6d
- ep_a5b36cd8fc247de4
- ep_aa28b6442573808b
- ep_abe8174c81fe9a60
- ep_ac46fa358fb0f3b3
- ep_acd529909969119b
- ep_ae02410339974e27
- ep_b37bad39016c4e2c
- ep_b5306b6244aa8306
- ep_b7a01a3d15c27691
- ep_b7c879a5a3cf6f73
- ep_bae73431176502e0
- ep_bc2f3f2c590ae7e8
- ep_bda3b068e5f44e42
- ep_bf93bb21a2db9f95
- ep_bfb0e715a917bdf2
- ep_c01bfb9eb201f841
- ep_c04c96410cb4d270
- ep_c1fe44115f27d227
- ep_c793787a1bb3b042
- ep_d2c91005399a4d42
- ep_d680b7701c2da782
- ep_d9863caa494032aa
- ep_dbe8f5c6fa99afb2
- ep_ddbfd2f3a82ee940
- ep_e0034917e6902f90
- ep_e2a131fcfcdfafb5
- ep_e506b65969224bb0
- ep_e5b92d0b71eb9b90
- ep_e6c312a6460f467e
- ep_eb9aa5c5de6dc1c5
- ep_ed9a73509f3fdfbf
- ep_f061a82af81f62ff
- ep_f0a4af258d213575
- ep_f0a8dac5bb6639a2
- ep_f19a725c50ddcb1b
- ep_f1b97ed21a8abaf7
- ep_f22bc21c730e062d
- ep_f280f69221755ef4
- ep_f3bd1df9bfc63c6c
- ep_f98f8e611d960aaf
- ep_fd60a945564c0c64
- ep_fff8e4640a4a13a1