diff --git a/src/fxhnt/adapters/web/templates/cockpit.html b/src/fxhnt/adapters/web/templates/cockpit.html index 32f94aa..2c0139f 100644 --- a/src/fxhnt/adapters/web/templates/cockpit.html +++ b/src/fxhnt/adapters/web/templates/cockpit.html @@ -44,6 +44,7 @@ {{ f.display_name }} · {{ f.venue }} {{ exec_badge(f.execution) }} + {% if f.reference_only %}ref{% endif %} {% if f.status %}{{ f.status }}{% endif %} {{ f.tier }} diff --git a/src/fxhnt/application/dashboard_service.py b/src/fxhnt/application/dashboard_service.py index 3648e1a..93fa490 100644 --- a/src/fxhnt/application/dashboard_service.py +++ b/src/fxhnt/application/dashboard_service.py @@ -13,6 +13,10 @@ from fxhnt.registry import STRATEGY_REGISTRY # only if nothing else exists (it is not an alpha edge). _HEADLINE_PREFERENCE = ("bybit_4edge", "combined") _BENCHMARK_SLEEVES = frozenset({"beta"}) +# The venues we ACTUALLY execute on: Bybit (the crypto deploy book) + Alpaca (the US-equity leg). Every +# other venue (Binance discovery/reference tracks, the glbx 60/40 benchmark) is REFERENCE-ONLY — observed +# on the gate, never traded live. Binance is no longer an active execution venue. +_ACTIVE_VENUES = frozenset({"bybit-perp", "alpaca-paper"}) def _gate_min_days(gate_spec: dict | None) -> int: @@ -57,6 +61,7 @@ class DashboardService: # registry SSOT metadata — drives the Overview's deploy/research grouping + paper/live badge. venue=reg.venue, tier=str(meta.get("tier", "research")), execution=str(meta.get("execution", "paper")), + reference_only=reg.venue not in _ACTIVE_VENUES, # not an active execution venue → reference )) return out diff --git a/src/fxhnt/ports/dashboard.py b/src/fxhnt/ports/dashboard.py index f376de7..49287a7 100644 --- a/src/fxhnt/ports/dashboard.py +++ b/src/fxhnt/ports/dashboard.py @@ -44,6 +44,9 @@ class FleetRow: venue: str = "" tier: str = "research" execution: str = "paper" + # True when the track is NOT on an active execution venue (Bybit deploy / Alpaca equities) — e.g. the + # Binance discovery/reference tracks + the 60/40 benchmark. Reference-only: observed, never traded live. + reference_only: bool = False @dataclass(frozen=True, slots=True)