You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
M5: survivorship, the market taxonomy, and a review that kills
The company now overturns its own confirmed result, and nobody intervenes.
HYP-0001 CONFIRMED -> REFUTED
claimed max_drawdown < 0.20, measured 0.1236
objection SURVIVORSHIP, critical
re-run universe 3 names -> 6 names
restored LUNC/USDT, FTT/USDT, HOTAIR/USDT
max_drawdown 0.1236 -> 0.6451
verdict UPHELD
A researcher registers a drawdown claim over the instruments still trading and
it is confirmed. A Critic names SURVIVORSHIP. The Chair dispatches the test.
The point-in-time re-run restores three delisted names, drawdown goes from 12%
to 65%, and the claim dies by measurement rather than by argument.
The critic does not write the test
----------------------------------
It names a defect; `meetings/taxonomy.py` generates the varied specification
from the one under review. That distinction is the point. A critic that
composes its own test can write one that cannot fail, or that tests something
else, or that quietly uses a capability it does not hold. Naming a defect gets
a test whose construction is written down, reviewed, and identical every time
the same defect is alleged. The prose is the critic's; the arithmetic is not.
Each builder varies exactly one thing -- asserted by a test -- because a test
that changed the universe AND the cost model would settle nothing. Which way
"worse" points depends on the metric: drawdown getting bigger is bad, return
getting bigger is not, and getting that backwards would make every objection
unfalsifiable in one direction and automatic in the other.
Survivorship had to be made measurable, not merely discussable
--------------------------------------------------------------
The fixture universe gained three instruments that die. The first version had
them drifting quietly down -- and survivorship became undetectable, because no
ranking rule would ever hold one. That was wrong about how the failure
actually happens: LUNA and FTT both looked like the best names right up until
they were worth nothing. The casualties now PUMP before they collapse, which
is what draws a rotation rule into them, and a universe that quietly drops
them reports the attraction without ever paying for it.
`point_in_time` is now a first-class engine operation rather than a footnote
in a data pipeline, which is the only reason a Critic can see the defect and a
test can vary it.
The engine went cross-sectional
-------------------------------
`rotation` ranks the whole universe each bar and holds the leaders. Multi-asset
simulation, still one-bar latency applied in a single place rather than trusted
to each signal.
Path metrics gained a block bootstrap interval. Without one they cannot support
a confirmatory claim at all -- the verdict rule reports UNDERPOWERED, correctly,
and every drawdown claim becomes unanswerable. Blocks rather than individual
returns because shuffling one at a time destroys the runs of losses that ARE
the drawdown.
That interval is honestly wide: roughly 20 percentage points around a 200-bar
maximum drawdown. So the demonstration declares a minimum effect of 0.11 rather
than 0.05. A claim pretending to resolve five points would be UNDERPOWERED and
the rule would be right to say so -- declaring what the data can support,
before looking at it, is the discipline rather than a concession to it.
On the numbers
--------------
martex-quant found this defect on real crypto history, where it took a Sharpe
of 1.47 to 0.86. Those figures belong to that corpus and are NOT reproduced
here; Aurelis has no market data of its own yet. What is reproduced is the
mechanism, on fixture instruments where the bias is present by construction.
The figures above are whatever the engine computed. Nothing was tuned until a
number came out right.
Honest finding: leakguard, purged-cv, calibrate and timeleak are not
resolvable from PyPI, the same as martex-quant. The integrity checks M5 needs
are implemented natively (`integrity.point_in_time`), and doctor reports what
is actually present.
376 tests, ruff clean, mypy strict.
Also fixed: two earlier README edits used .replace() without asserting and had
silently done nothing, so the front page still described M2. Every doc edit in
this commit asserts its anchor first.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0 commit comments