AlphaAssay $ test my signal
THE BATTERY LOG

The examiner keeps getting stricter. In public.

Most validators describe themselves once and stop. This page is the running record of what the battery learned to catch, dated as it shipped — because a stricter test is only worth something if you can see it getting stricter. Two things have never changed along the way: verdicts can devalue a signal but never bless one. Current per-check and per-variant amounts remain published by the live registry rather than frozen into this changelog.

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.