22 July 2026 — The doorman got his own ledger
Under heavy paid load, the doorman and the vault shared one book: the rate limiter wrote its
token buckets into the same database that records trials and receipts, so a multi-second paid
write could make unrelated free reads — pricing, calibration — time out into an internal error.
We found it because our own QA probes hit the window, three times in a row. The limiter now keeps
its own ledger file, which means free metadata reads no longer queue behind anyone's heavy
verdict. The machine storefront also answers at the conventional address now:
/.well-known/openapi.json aliases the canonical OpenAPI document on every public
host, because an agent probing the well-known path should find the storefront, not a 404.
21 July 2026 — Known answers became byte-stable, and the registry line shed its manifesto
The free demo is a known-answer preview by contract — same input, same verdict. Its envelope now
honours that to the byte: two identical demo calls return bit-identical documents once timestamps
are stripped, so integrators can assert our published specimens in CI
instead of trusting them. The registry description was cut from a 1,600-character manifesto to one
hundred characters that say what the battery does, with the trust honesty moved into the runtime
instructions every connected agent actually reads after connecting. And assay_signal
now names the search artifact it hunts — best-of-N selection — in the words a searching agent
uses.
20 July 2026 — Declared fees testify against the edge, and the paid door answers before it reads
Two hardenings out of the QA battery. The fee an operator declares is now charged against their
own edge: a signal whose round-trip cost eats its gross return dies with the named cause
costs_slippage_capacity instead of dying vaguely elsewhere — at 100 bps per side
across 34 trades, the verdict is fail and says exactly why. And the paid x402 door answers before
it reads: a request without payment receives the 402 offer before any JSON parsing, an oversized
unpaid body a 413, so unpaid probes no longer spend parser bandwidth that paying callers fund.
10 July 2026 — The eighth attack, a benchmark duel, and a signature bug we are naming ourselves
Three things shipped. The survival map gained its eighth adversarial attack, drift_burst:
strip the bars whose PnL dwarfs the local volatility (flash-crash bursts, with their neighbours), and ask
whether the edge survives without them — profits that live only in those bars were rarely harvestable at
quoted prices. assay_var_es now accepts a naive benchmark forecast and runs a Diebold–Mariano
duel on a strictly consistent loss: a risk model that loses to its own naive benchmark dies as
RISK_FORECAST_DOMINATED_BY_BENCHMARK, because sophistication that underperforms naivety is
theatre. And in the spirit of this page: we found and fixed a real bug in our own trust machinery — the
signature on the public calibration record was computed before the privacy bucketing, so verification
against the published document never held. It signs what it publishes now, verified from outside; a
validator that grades itself in public has to file its own findings too. The parameter-neighbourhood
attack also discloses a full stability_surface — the Sharpe terrain around your optimum,
because a lonely spike is an overfit fingerprint.
9 July 2026 — Risk promises and confidence labels go on trial
Two entirely new classes of claim became testable. assay_var_es takes the VaR forecasts a
model published before the fact and asks whether reality breached them more often — or deeper — than the
claimed tail level permits: the breach count is graded on the exact binomial Basel traffic light, and a
joint (VaR, ES) e-process makes Ville's inequality an anytime-valid kill line
(VAR_BREACH_RATE_EXCESS, ES_TAIL_UNDERSTATED). assay_conformal
does the same for prediction intervals: the miss count is judged against the exact distribution the claim
implies — Beta-binomial when a split-conformal calibration size is disclosed, so a correct method is not
punished for its honest variance. Demote-only holds on both sides: too much risk can kill, too little is
an advisory. And the platform now describes itself in the standard envelope at
GET /v1/meta/facts — engine version, stage order, attack set, register size. When a deployment
key is configured the envelope exposes Ed25519 raw-signature evidence over its declared canonical
document; otherwise it is explicitly unsigned. Hosted platform trust additionally checks the signed
keyring and revocation history. Full offline platform trust requires an independently pinned root and
signed trust bundle.
9 July 2026 — Privacy, priced honestly
Data minimisation became a caller choice: pass sketch_opt_out and the 32-number return
sketch is never persisted. The price of the choice is statistical rather than monetary — without the
evidence of near-duplication, the trial counts in full toward the family budget, which means the opt-out
can only make verdicts stricter (the retention ledger has the details).
Dossiers also became portable: POST /v1/tear-sheet renders any gauntlet verdict as a tear
sheet, free.
9 July 2026 — Carry stopped masquerading as alpha
Perpetual-futures backtests love to forget the funding leg. Given a funding-rate series, the new
funding_edge stage audits it strictly and then charges it against every holding period. Two
new ways to die: the profit lived entirely in the ignored cost (funding_erases_edge), or the
price leg loses money on its own and the „edge" IS the funding income
(edge_is_funding_carry) — a crash-prone premium any holder of the position collects, not
timing skill. Malformed or gappy funding evidence blocks an acquittal instead of inventing a kill.
9 July 2026 — Three brackets around the same mean
The significance battery now brackets the mean return three ways: the percentile bootstrap interval,
the studentized bootstrap-t interval — second-order accurate, honest exactly where the percentile bracket
flatters — and the Newey–West HAC interval, which prices in the autocorrelation real trading returns
carry. Where a sharper bracket contains zero and the first one does not, the envelope says so as an
advisory (studentized_ci_contains_zero, hac_ci_contains_zero), because a new
cell earns the right to kill on calibration data, not on enthusiasm.
9 July 2026 — The family was asked about itself
Every family verdict now carries an empirical-Bayes shrinkage exhibit: the trial's t-statistic is
shrunk against the family's own recorded history under a zero-edge prior — how much of a score this size
is signal and how much is noise, by this family's own record (t_shrunk,
shrink_factor). It is an exhibit, never the verdict, and under three usable family trials it
reports insufficient_family_history instead of guessing.
8 July 2026 — Unclear data rights became a named finding
Validation calls accept an attested data-rights declaration, and when it reports the usage rights as
missing or unclear, a would-be pass is withheld as insufficient_evidence with
agent_action: owner_data_decision_required — a verdict computed on data the submitter may
not use is a liability, not evidence. Fails stay fails; nothing is ever upgraded.
8 July 2026 — The lottery-ticket detector
The gauntlet gained a concentration stage that asks a brutally simple question: if we
remove the single best one percent of your bars, does the book still make money? A strategy that only
works because of a handful of jackpot bars is not a repeatable process — it is a lottery ticket luck
hands out once, and the verdict now says so
(edge_concentration_extreme). Its forensic cousin checks the same
instinct against market regimes: an edge that only exists in the most violent bars lives exactly where
slippage explodes. Both run inside every check, at the same price.
8 July 2026 — We started auditing backtest software itself
Different backtesting engines disagree — on identical strategy, data and costs, published results diverge by up to 3.71%, so the simulator you choose is quietly part of your experiment. The new engine assay runs a complete suite of constructed candles, each one a qualitatively different fill situation — including the ones where price data genuinely cannot say which order filled first, which an honest engine must admit rather than guess. Framework authors can pull the suite and grade their engine against it; a free annotated starter set shows how the trap candles work.
8 July 2026 — Claimed track records go under the microscope
Two new tools widened what can be put on trial. assay_reproduce audits the arithmetic
of a claimed track record: send the trades, the candles and the headline numbers, and the engine
rebuilds the equity book independently — flagging any fill that was never physically available at its
bar's prices. assay_survivors answers the question every parameter sweep dodges: of all
the versions you tried, which does the evidence actually leave standing, at a controlled family-wise
error rate — disclosed in your input order, never ranked. The falsify battery also gained a synthetic
placebo that swaps not when you trade, but the world you trade in: markets built with
zero exploitable signal. And pre-registration learned to seal success criteria alongside the strategy —
moving the goalposts after seeing the data now has a name.
8 July 2026 — Honest sweeps, a free lint, and receipts
assay_batch made the honest path the cheap path: submit up to 25 variants of one idea
in a single call, and every variant is counted against the family budget — because showing only your
best try is exactly the trick that fools people. assay_preflight checks a payload's shape
for free before any money moves. The gauntlet gained an anchored walk-forward stage, and the dedicated
x402 gauntlet response now carries a named receipt bound to its payment: a lost response is re-delivered
without paying twice. The receipt is signed when the deployment key is available and reports
signed:false otherwise.
8 July 2026 — One matrix, two questions
assay_pbo grades the selection process itself: across all combinatorial train/test
splits, how often does your in-sample winner fall below the out-of-sample median? Its companion
question — which variants survive — came one sprint later; together they interrogate a whole parameter
sweep from both ends. The trial ledger learned to recognise near-duplicate variants and count them as
what they are (roughly one idea), the gauntlet gained purged combinatorial time-partitions, and the
falsification protocol for judging any signal provider became a free machine-readable tool.
The published deflation thresholds also became a free public endpoint, so the family-budget arithmetic
can be checked without trusting us.
7 July 2026 — Every fail names its killer
The founding release of the discipline this log records. Every failed verdict began carrying its cause of death in one plain sentence; underpowered tests started being stamped as underpowered instead of quietly reading as acquittals; the placebo trial became three-dimensional (timing, sign, chronology); a beta-masquerade check began asking the cheapest question nobody else asks — is this edge just dressed-up market exposure?; the cost gate got a calibrated impact model with its uncertainty published; and undisclosed trial counts became a named finding rather than a silent benefit of the doubt.
What never changes
Verdicts are demote-only — new evidence can lower a grade, never inflate one. Pure/read operations
require an explicit as_of for reproducibility; stateful calls expose their effective timestamp
and replay stored output only under the documented idempotency contract. A fail costs the same as a pass,
because you buy the trial and not the outcome. Current amounts come from
the live pricing registry.