What we got wrong

In plain terms: this is everything wrong with ARGUS that we can point to real evidence for — things we shipped broken, times a named competitor beat us on a fair test, and numbers we published and later had to take back. We show it because a trading tool that only tells you what went right is the one to be careful of; the ones worth trusting are the ones that say when they lost. 37 entries follow, 21 of them a competitor we lost to by name, and each is checked against its own record every time this page loads, not written once and left to go stale.

By kind: 6 we shipped it broken, 21 a baseline beat us, 9 claim withdrawn, 1 still open.

Every entry is read out of the artefact that recorded it, at the moment you load this page — not written down once and left to drift. A finding whose artefact cannot be read is listed as unreadable rather than dropped, because a losses page that silently shortens is the most flattering possible lie. back to the console

we shipped it broken

2 ledger rows booked P&L on positions the risk layer refused

paper/runner.py recorded the model's unconstrained intent whenever the desk chose not to re-put a decision to the model, bypassing the Constitution on the common path. Rows 264, 265 booked profit against positions that were never taken — and for one morning they were this project's entire win rate: 100%, on the only two trades it had ever made. They were never made. The rows stay in the chain unedited, because deleting the two that made the numbers look good is precisely the behaviour this system exists to refuse.

argus/paper/corrections.py
claim withdrawn

The semantic router's 52.4% was withdrawn — measured on a friendly corpus, it is really 23.5%

The corpus it was scored on was written by the same author, in the same sitting, as the router's own training examples. Re-measured against one authored by a model that has never seen this repository it scores 1.0x against the regular expressions it was built to beat — level. Leave-one-out cross-validation shows its similarity distributions for right and wrong answers overlapping completely, so no abstention threshold separates them. It is not deployed.

data/lui_router.json
a baseline beat us

A named baseline beat us on regime detection, and we published it

tie — ruptures is still more coherent than FLUSS (ARGUS's original tool) on the ground-truth-free family test, stumpy is bit-identical and 266x faster, and against KNOWN synthetic changepoints FLUSS's own mean F1 is 0.4433 against ruptures' 0.975 (100 trials, noise 0.5-4.0) — a real, unclosed loss for FLUSS specifically. ARGUS's SECOND tool, exact_partition (added 2026-09-22, an exact L2 dynamic program, read from ruptures' own real source), ties ruptures on the identical 100 trials: mean F1 0.98 against ruptures' 0.975 (1 win, 0 losses, 99 ties — not statistically distinguishable from identical, reported as a tie rather than a win)

data/regime_comparison.json
we shipped it broken

The console's regular expressions memorised — a 76.5-point gap between the phrasings they were written for and new ones

They score 100% on the corpus they were widened against and a quarter of that on one written by a model that has never seen them. Four separate held-out corpora were burned discovering this, each one spent the moment its answers were read; eval/ngrambench.py records the status of every split rather than quietly quoting the friendliest.

data/oblique_bench.json
still open

45 of 51 capabilities cannot claim OWNED, and the register prints why

52 condition(s) are claimed with nothing behind them in the artefact. The register fails the build rather than rounding up, and two of those remaining need real spend against a metered model key — stated as a cost rather than quietly skipped.

data/standing.json
we shipped it broken

Our own console contradicted our own README, and both were 'correct'

The console counted two refused positions as trades while every document said zero. Each surface was reading its own source correctly, and both numbers came from the same hash chain — so the contradiction arrived wearing a verification. eval/surfaces.py now compares 6 facts across two surfaces each on every build; it currently reports 0 disagreement(s).

data/surface_agreement.json
we shipped it broken

The desk believed Bitget's MACD — its fields are swapped on 10 of 10 symbols we could check

We recomputed the technical-analysis Skill's RSI before trusting it, and never did the same for its MACD. The Skill returns the signal line in its histogram field and the histogram in signal, and its cross flag contradicted the recomputed lines on 6 symbols. The desk passed those payloads to the model as evidence, and decision theses cited the crosses. Every MACD payload is now recomputed from Bitget's 4h candles before the desk or the console reads it; past theses stay in the chain as written.

data/skill_macd_check.json
claim withdrawn

We said the desk's leans beat a coin flip; they do not beat always calling up

The page and the entry quoted 741 of 1433 leans right at about 2 hours with a 95% interval of 52.7-64.0%, computed as if every call were independent. They came from 135 decision cycles whose symbols share one market move; resampling whole cycles gives 48.1-55.4%. And the test was against 50%, when calling up every time was right 51.6% of the time: cycle by cycle the lean beat that naive call 50 times and lost 59. An independent audit caught both on 2026-09-24; eval/refusal.py now bootstraps over cycles and reports the naive baseline, and every document quoting the old interval was corrected.

data/refusal_alpha.json
we shipped it broken

"349 of 1200 decisions" — the ledger holds 627

The theme audit counted every ledger row as a decision, including the settlement seal written when each decision settles, so its sentence about tradeable sessions read 349 of 1200 against a 627-decision record. The counts in the numerator were right; the denominator was not. Decisions are now filtered by kind before anything is counted (caught 2026-09-24).

data/theme_audit.json
we shipped it broken

The session clock called US market holidays trading sessions

Every clock built without an argument had an empty holiday calendar, so Thanksgiving read as a regular session everywhere the desk asked what the market was doing, the live paper cycle included; one caller in about twenty-five passed the calendar in. Found by a judge audit on 2026-09-26; the calendar is now the default (truth/clocks.py). Correcting it moved a published figure: the risk-layer comparison, on the same frozen data, loses the checkpoints that fell on holidays and now reads 56.32% precision over 314 checkpoints, against the 59.14% over 318 it published. The verdict holds: ARGUS still dominates freqtrade at every threshold.

data/risk_layer_comparison.json
a baseline beat us

Lost to a rival, still open: Deliberation priced as a trading cost

LOSS, measured 2026-09-26 and NOT VERIFIED here: eval/general_delib_comparison.py rescored the production charge on 23,003 decision instants (the forward tape of 2026-09-24 and Tardis Bitget-futures quotes for 2026-09-01 and 2026-08-01) against the realised mid move at 3, 8 and 40 seconds.

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Abstention scored as a decision

LOSS for the earlier abstention_quality: it returns the same output for a perfect, a random and an inverted gate, which fd-shifts orders (AURC 0.177 / 0.489 / 0.868). eval/abstention_coverage.py adopts fd-shifts' method and ties it on every shared quantity (largest difference 3.4e-15), adding the loss priced in bps (fd-shifts' 50%-risk working point loses 3,344bps), None instead of a ValueError, and a…

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Typed factor grammar with no execution surface

LOST on speed to Polars: 14.5x to 187x faster than the columnar grammar_series path on the 7 shipped factors it can express.

data/standing.json
a baseline beat us

Lost to a rival, still open: Cross-market cointegration with corrected multiple testing

LOSS for the screen: survivors_fdr, ARGUS's Benjamini-Hochberg screen, does not hold its target on planted universes (false-discovery rate 18.9% at q 0.05), while 128 general pipelines do.

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Net executable arbitrage vs. a fee-blind detector

LOSS for the deployed decompose(): 49 of its 52 accepts lose money on the first capture (precision 0.058, ticker-bootstrap interval 0 to 0.156) and 24 of 25 on the second.

data/standing.json
a baseline beat us

Lost to a rival, still open: Perception layer: what the desk can see

Graded LOST against OpenBB-finance/OpenBB provider set; TauricResearch/TradingAgents feed list. RE-GRADED 2026-09-29 from IMPLEMENTED to LOST (Activity/28_CAPABILITY_CLOSE_PLAN_2.md §19) on the breadth axis Track 3 names, against the named baseline, run for the first time on the same inputs (eval/perception_breadth.py, data/perception_breadth.json). Every keyless OpenBB provider (cboe, finra, finviz, sec, tmx, yfinance answering; …

data/standing.json
a baseline beat us

Lost to a rival, still open: Crowd sentiment classification, vs. RoB-RT on TweetEval

LOST to RoB-RT by 0.185 of macro-recall on the same 12,284 test tweets: ARGUS's crowd read scores 0.544 (95% CI 0.535 to 0.553) against RoB-RT's 0.729, and trails every published TweetEval baseline, the weakest of them BLSTM at 0.583.

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Self-evolving review rules

It LOSES where the defect is common or falling: at 60% and 75% base rates it warns with no real rule (power 0.3%, where the rivals warn with every rule, real or null), and when the base rate falls from 50% to 20% while every rule keeps its lift, its lifecycle retires 68% of the real rules as decayed; the rivals, which never retire anything, keep them all, and keep 100% of the dead rules warning too (ARGUS 2%).

data/standing.json
a baseline beat us

Lost to a rival, still open: Path-shape matching with a calibrated null

retrieval diversity, 2026-09-25 (data/retrieval_diversity.json): a LOSS for the path matcher - MMR at lambda 0.9, the best on 2019-2022, scores 16.42 Winkler against 16.40 without it on 2023-2026 (Diebold-Mariano p = 0.028); find()'s default stays nearest-first, and diversity is available only when asked for

data/standing.json
a baseline beat us

Lost to a rival, still open: Session-aware execution that refuses to solve through a boundary

Graded LOST against nkaz001/hftbacktest queue model; Bitget's own instrument rules; Almgren & Chriss (2000) closed-form optimum vs nautechsystems/nautilus_trader's real TwapAlgorithm as the field's stated default. RE-GRADED 2026-09-28 from IMPLEMENTED to LOST (Activity/27_CAPABILITY_CLOSE_PLAN.md §6). eval/session_arena.py ran for the first time on real Bitget order books replayed from Tardis (19,440 parents over 11 perpetual and 4 spot first-of-month days; 384 cross a session boundary; three 2025-09-01 days are empty files at the source and are named, not replaced). …

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Portfolio allocation, measured against Riskfolio-Lib's NCO

What remains open: this is a TIE, not a WIN — the goal (per this project's own standing instruction to keep trying LOST capabilities until a real algorithmic idea either flips them or is shown not to) would be an ARGUS allocator that beats Riskfolio's NCO outright, not only matches it. Published because data/allocation_comparison.json already said 'this capability is LOST to the specialist on its own criterion' in its own scope_statement, and nothing read that field into this register until now. Second, later the same day: built ARGUS's own NCO from Riskfolio's real source (Ward linkage, active-set min-variance QP, the real two-difference gap statistic), verified it reproduces Riskfolio's real NCO to 1.3e-05 on the real book, wired it into the SAME live walk-forward comparison this capability was measured LOST on, and re-ran it live: a genuine tie, 8.203bps both, ratio 1.0000.

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Regime-boundary detection, measured against stumpy FLUSS and ruptures

What moved the capability's OVERALL verdict from LOST to TIED is a SECOND, different ARGUS tool (exact_partition, desk/regime.py, added 2026-09-22) that ties ruptures on the same benchmark — read directly from ruptures' own real, BSD-2-Clause source (detection/dynp.py, costs/costl2.py) after Finding 8 showed the gap was a method-family mismatch (a shape-based nearest-neighbour heuristic vs an exact cost-minimi... This mirrors the portfolio-allocation capability's own LOST-to-TIED story exactly: the original tool (HRP there, FLUSS here) still loses on its own; a second, purpose-built tool closes the gap the first one could not. State moves LOST -> TIED — mirroring the portfolio-allocation capability's own same-week story — not to OWNED, because a 1-trial discordant sample cannot support a significance-backed win claim.

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Portfolio stress: the book's move when QQQ falls, vs. skfolio's vine copula and Entropy Pooling

LOST on the tail: ARGUS states a point and no downside, so skfolio's vine wins the 10% quantile (pinball 0.23 against 0.43 for ARGUS's point).

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Order splitting on realised cost vs. Bitget's own TWAP, on a full-depth replay

LOST first, then TIED. The schedule the console printed — Almgren-Chriss in hourly children — cost 12.2bps with fees on a $100k parent against 6.9bps for Bitget's own 60-second TWAP, dearer on all 80 parents: on this book the cadence, not the shape, decides the cost.

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Overnight hedge for an rToken holder vs. Ballast (S2)

The first run of this comparison, the same day, was a clean LOSS and is kept on the record: ARGUS modelled Bitget's stock perpetuals and not the spot rTokens, so the best hedge it could offer an RTSLAUSDT holder was its QQQUSDT index leg, which removed 10.1% and lost on all 11 names (p = 0.001). market/rtoken_spot.py (Ballast's pairing rule, calendar and overnight return, MIT, reproducing its nights to 0.0) and de... the first run was a clean loss (index hedge 10.1% against 99.7%), published before the rebuild

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: A trader's claims about the tape checked against it, measured against MirrorLine

What the report does not carry: the first run was a clear LOSS - ARGUS gave no verdict on any past-tense causal claim or either session claim - and it is kept in data/h2h_mirrorline/argus_raw_first_run.json the first run was a loss (ARGUS read 18 of 38, MirrorLine 38) and is kept; the claim kinds only one desk reads are named

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: A leveraged hold across the weekend, measured against baserate

TIED: the first run was a LOSS (ARGUS answered a hedge question); rebuilt, ARGUS prices liquidation at Bitget's live maintenance tier and live funding, reads 1,443 NVDA weekends since 1999 and the perpetual's own path through 57 weekends.

data/standing.json
a baseline beat us

Lost to a rival, still open: Prompt injection withheld on attacks it was never written against (NVIDIA garak)

Graded LOST against NVIDIA garak @8d1259ef (Apache-2.0): its latent-injection probes as development and its promptinject probes, built by its own resources/promptinject, as a held-out set scored once; the quarantine's own rules as they stood before 2026-09-28 as the second arm. RE-GRADED 2026-09-29 from IMPLEMENTED to LOST (Activity/28_CAPABILITY_CLOSE_PLAN_2.md §47) on the row's own claim, attacks never written against, against a trained classifier (eval/injection_classifier_rival.py, data/injection_classifier_rival.json): ProtectAI's deberta-v3-base-prompt-injection-v2 (Apache-2.0, local) and ARGUS's rules on the same 662 externally sampled deepset/prompt-injections prompts, a corpus…

data/standing.json
a baseline beat us

Lost, then rebuilt to a tie: Trader memory across sessions (what the trader says about themselves) vs. mem0

LOST on recall, WON on false memories, on the only blind round that decides the grade (held_out_4, data/memory_comparison.json, frozen 2026-09-30 05:30 UTC before either side ran): ARGUS recalled 15 of 20 stated facts to mem0's 18, and stored 0 of 12 sentences that were not about the trader to mem0's 7 (a friend's advisor, an influencer, a question, a hypothetical).

data/standing.json
a baseline beat us

Lost to a rival, still open: Volatility-targeted sizing (walk-forward GARCH) against fixed size, after fees

LOST to fixed size on the measure sizing exists for. At the same average exposure, the GARCH-targeted arm's worst drawdown was deeper on all three coins (BTC 29.5% against 27.0%, ETH 54.1% against 51.4%, SOL 57.8% against 52.7%), its Sharpe higher on ETH only (0.80 against 0.70;

data/standing.json
claim withdrawn

6 OWNED grades withdrawn on 2026-09-24: the rival they beat does not lead the sub-theme

Clustering-corrected, base-rate-honest event significance vs. a fixed-null test; Funding-aware cross-asset hedge routing vs. a fee-blind composite router; Self-evolving review rules; Session-aware execution that refuses to solve through a boundary; Structured filing extraction vs. FinanceBench's real, published LLM measurement; Point-in-time correctness vs. OpenBB's real, ungated live-API agent. Each stays in the register below OWNED with the reason and the route back as its first blocker, on /proof.

data/standing.json
claim withdrawn

11 OWNED grades withdrawn on 2026-09-25: a per-group check, by symbol and by half of the sample, could not confirm the proof

Deliberation priced as a trading cost; Abstention scored as a decision; Overfitting gates that raise instead of returning NaN; Typed factor grammar with no execution surface; Factor-discovery safety: no execution surface and trial-corrected selection, vs. RD-Agent; Cross-market cointegration with corrected multiple testing; Net executable arbitrage vs. a fee-blind detector; Episodic memory across decisions; Pre-registered trading protocol, hash-committed; Perception layer: what the desk can see; Path-shape matching with a calibrated null. Each stays in the register below OWNED with the reason and the route back as its first blocker, on /proof.

data/standing.json
claim withdrawn

1 OWNED grade withdrawn on 2026-09-26: a general-purpose tool configured to the same job matched them

Data-honest cross-asset breadth rotation vs. a silently-dropping reference. Each stays in the register below OWNED with the reason and the route back as its first blocker, on /proof.

data/standing.json
claim withdrawn

2 OWNED grades withdrawn on 2026-09-27: one won only on an input that never reaches a real decision, and one rested on cases its author designed

Cross-sectional factor evaluation; Numeric decision grounding vs. TradingAgents' real, unchecked TraderProposal. Each stays in the register below OWNED with the reason and the route back as its first blocker, on /proof.

data/standing.json
claim withdrawn

Removed from the register on 2026-09-29 (IMPLEMENTED): Holiday-aware closed-session pricing vs. an unconditional pre-holiday long bias

Serves no flow (research/gap_study has no caller outside eval and an unused module), belongs to Track 1, which this project does not enter, and its comparison rests on two holiday dates, which can be neither won nor lost. Removing it found and fixed a real defect: a closure reaching a weekend before a Monday holiday was labelled a weekend, so MLK, Presidents, Memorial and Labor Day were misread; fixed in research/gap_study.py and tested against exchange_calendars' XNYS calendar. Brought back by: a longer history than two holiday dates, and a flow that uses the reading.

data/removed_capabilities.json
claim withdrawn

Removed from the register on 2026-09-29 (IMPLEMENTED): rToken factor divergence vs. Alphalens' real Information Coefficient

Serves no flow (research/factor_divergence has no caller outside eval), belongs to Track 1, and both arms score with the same vendored Alphalens information-coefficient function, so the comparison can only ever tie; the ablation's intervals include zero on both factors. Brought back by: a divergence Alphalens cannot compute, measured on frozen candles.

data/removed_capabilities.json
claim withdrawn

Removed from the register on 2026-09-29 (IMPLEMENTED): Decision-latency pricing vs. hftbacktest's real, network-only LatencyModel

A duplicate: the function it claims, execution/latency.thinking_budget_cost_bps, is the one row 01 (deliberation priced as a trading cost) claims, and row 01 records the measured loss of that charge against a trailing realised-move estimator on 23,003 decision instants. The named rival has no input for the quantity, so no same-input comparison can exist. The sub-theme stays covered by row 38 (order splitting against Bitget's own TWAP). Brought back by: none; the claim lives on row 01.

data/removed_capabilities.json

This is not everything wrong with ARGUS — nothing could be, and claiming completeness would be its own overstatement. It is the set of findings that already have an artefact behind them.

Top ↑