Two inconsistencies found verifying the IBKR /strategy/multistrat page:
1. A FAILED backtest with a high Sharpe (multistrat: Sharpe 1.7, gate FAIL)
rendered a GREEN "Validated edge ... backtest passed" banner directly above
the FAIL badge — the Sharpe>=1.0 fallback overrode the explicit FAIL. The
verdict now respects the badge: an explicit FAIL is an amber "Backtest
didn't clear the gate ... treat it as unproven", never a green "passed".
The backtest Sharpe figure also goes neutral-grey (not alarming red) when
unvalidated — the number itself (1.7) isn't bad, it just didn't validate.
2. The UCITS lines the EU DU account actually holds (CSPX/CBU0/IDTM/IGLN/ICOM)
weren't in ASSET_DESCRIPTIONS, so the holdings "what it is" column read
"other". Mapped each to its plain description (US stocks / US Treasuries /
Gold / Commodities), same as its US cousin.
Regression tests: a passed=False + Sharpe 1.7 detail renders amber
"didn't clear the gate" and never "backtest passed"/"Validated edge"; UCITS
tickers resolve to plain descriptions, never "other". Verified desktop+mobile.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Neither is tradeable on Bybit: crypto_tstrend as a standalone Binance-perp forward
track was a -0.21 marginal-Sharpe drag/crash-amplifier, and stablecoin_rotation's
FDUSD/USDP pairs aren't listed on Bybit. Removes the two *_nav assets, their
registry entries, the orphaned migration_builders builders, and the
Binance-only StableRotationForward wrapper (stablecoin_runner.py's
StableReversionRunner stays -- it's still live via the Bybit stablecoin eval
paths). The crypto_tstrend SLEEVE inside the bybit_4edge deploy book
(_DEFAULT_BYBIT_SLEEVES, Bybit data) is untouched.
Updates dependent tests: deletes 5 whose subject (the retired asset/registry
entry/module) no longer exists, and swaps the retired sid for a still-registered
one (unlock/xsfunding/sixtyforty) in tests that only used crypto_tstrend as a
generic example sid.
The broad-Binance-universe momentum book (venue binance+glbx) was a survivorship/
microcap mirage superseded by the isolated crypto_tstrend edge + bybit_4edge. Removed
the combined_forward_nav Dagster asset (+ its cockpit_forward/paper_book_snapshot deps),
the registry entry (DB registry row auto-prunes via _seed_registry), the dashboard
headline preference, and the dead migration builder. CombinedBook modules retained
(still used by the forward-track CLI). Test fixtures repointed combined -> crypto_tstrend.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) Edge cards rendered the internal sleeve id as a "class <sleeve_name>" row
(dev info, not user info — on mobile the fleet table reflowed it into a
"class crypto_tstrend" card row). Removed the `class` column from the deploy
table, the shared track_row / deploy_constituent_row macros, and the
research table (and the paper page's individual-edges table). Human title +
real metrics (Sharpe / return / maxDD) are untouched.
2) The "Research — not the fund" section is literally not the fund, yet stacked
as a long wall under the fund edges. Wrapped it in a <details> (collapsed by
default) with a clear summary styled to match the section-header skin;
content intact, htmx auto-refresh preserved.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Connect the bybit deploy book's multi-year BACKFILL (persisted paper_nav, venue="bybit") to the fund
headline so the page leads with the REAL record ($393,955 · +294% · real Sharpe · maxDD · since 2021)
plus a small live-readiness chip (gate days/min · status) — never the not-started forward track's
0.00 / 0 forward days.
- nav_stats.nav_backfill_stats: pure, unit-tested helper computing total return / annualised Sharpe
(mean daily ret / pstdev × sqrt(365)) / maxDD / final equity from a persisted NAV equity series.
- Short pre-gate forward Sharpes are kept ("fun to watch") but rendered DIMMED with a "· pre-gate"
marker; cleared tracks render bright. One caption explains it.
- Compact edges table (edge · class · record · forward · nav); not-started 0-day trackers collapsed
into a "warming" subsection so they don't dominate.
- Cut clutter: removed the two prose paragraphs (folded into title= tooltips), removed the duplicate
"Go to" footer, and replaced the grouped Live/Backtest nav with one tidy row
(Overview · Paper · Replay · Backtest).
- Reusable Jinja macros (_macros.html: headline_card, provisional_num, track_row) for the
cockpit-wide consistency roll-out. FleetRow gains gate_min_days for the forward "days/min" denominator.
Presentation + data-connection only — no edge return or gate logic changed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- combined relabeled 'Crypto momentum book (vestigial trend overlay)': the engine is validated
crypto momentum; the futures-trend leg riding the crypto spine has no edge and never gates.
- Retired eqfactor_long/eqfactor_tilt (US-equity price-factors — weakly-held, edge never
established) + their orphaned shared eqfactor_scores asset. Strategy classes stay in
equity_factor_strategy.py. _seed_registry prunes stale rows automatically.
Cockpit fleet now = 4 tracks: 2 validated crypto edges (xsfunding, unlock) + the crypto-momentum
book + the 60/40 benchmark. 7 Dagster assets. Tests updated (labels + retarget to surviving
tracks); full suite 511 passed, mypy clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>