Relationships

Every observable cross-module link in the SPA. Each card shows the source, the target, the verb, where the relationship is anchored in code, and how load-bearing it is.

Total Links19
Strong14
Advisory4
Deprecated1

Filters

Module involved
Strength
19 of 19 relationships
Calibration
MLops
strong
Calibration feeds runs to MLops

Finished calibration runs become candidates for promotion. MLops queries MLflow for the symbol's runs and surfaces them for explicit promote/unpromote.

MLopsPanel.tsx → getPromotedExperiments() / promoteExperiment()
MLops
Trading
strong
MLops gates Trading

Trading refuses to start an algorithm whose backing experiment isn't promoted in MLops. The wizard calls validateExperiment() on the user-selected run before allowing the Confirm step.

TradingWizardContainer.tsx — validateExperiment() before start
Trading
Analytics
strong
Trading produces sessions for Analytics

Each trading session emits real-time analytics that Analytics consumes via SSE. After session close, the same data is available as a one-shot fetch.

AnalyticsPanel.tsx → useLiveTimeSeries(sessionId) → SSE stream
Backtest
Analytics
strong
Backtest produces results for Analytics

Completed backtests are pulled into the same chart families as live sessions — distribution, P&L curve, latency — so reconciliation is byte-identical.

AnalyticsPanel.tsx → getBacktestResults(id)
Calibration
Backtest
strong
Calibration supplies parameters to Backtest

Backtest can either use the promoted production parameters for a symbol, or a specific calibration run id selected from the wizard.

BacktestWizard → config.calibration_run_id
Instruments
Trading
strong
Instruments publishes metadata to Trading

Algorithm configuration needs per-symbol metadata (tick size, lot size, calendar). The trading wizard loads it once at the symbol-select step.

TradingWizard → getInstrument(symbol) for tick/lot/calendar
Instruments
Backtest
strong
Instruments publishes metadata to Backtest

Same instrument metadata is required by Backtest to set the engine's quoting constraints before replay.

BacktestWizard → getInstrument(symbol)
Services
Dashboard
strong
Services renders banner via Dashboard

Services owns the GatewayHealthBanner component — it sits above every route, polling /infrastructure/summary to surface degraded backend components.

Header.tsx → <GatewayHealthBanner/>
Admin
Services
strong
Admin authorizes Services

External service launches (MLflow, pgAdmin, Grafana) are gated on `services.open` — a capability admin owns and trader/mlops inherit.

ControlPanel.tsx — services.open capability gate
Dashboard
Trading
advisory
Dashboard links into Trading

Dashboard aggregates per-engine state and offers a click path into the Trading shell to drill into the running session.

Dashboard.tsx → engine cards click → /trading
Dashboard
Calibration
advisory
Dashboard teaches via Calibration

The Dashboard Pipeline modal is the first-time-user education flow — it walks Calibrate → Promote → Trade in one diagram with deep-links into each tab.

PipelineVisualization.tsx + PipelineModal.tsx
Simulator
Trading
deprecated
Simulator synthesizes ticks for Trading

Although the standalone Simulator tab is deprecated, its synthesizer is still callable from PaperSessionLauncher when a paper session needs fabricated market data.

PaperSessionLauncher → startSimulator() (still callable)
Admin
Trading
strong
Admin authenticates Trading

All operational surfaces depend on an authenticated session. Admin owns the auth flow and the SessionTimer / SessionWarningModal.

LoginPage → JWT issuance → useStore.auth.accessToken
Calibration
Services
strong
Calibration depends on Docker for Services

Calibration launches docker containers via the backend. Services owns the Infrastructure panel that reports whether Docker is reachable + healthy.

startCalibrationRun → backend docker_runner.py
MLops
Services
strong
MLops depends on MLflow for Services

MLops's promotion logic reads from the MLflow tracking server. Services surfaces MLflow health and a launch link to the MLflow UI.

MLopsPanel → MLflow backend (PostgreSQL + artifacts)
Analytics
Services
advisory
Analytics depends on SSE proxy via Services

The SSE stream uses the same nginx route the dashboard is served behind. If the SSE proxy buffering is misconfigured, live charts freeze.

useLiveTimeSeries → /session-analytics/{id}/stream (proxied through nginx)
Trading
Services
strong
Trading depends on gateway via Services

The host-side Trading Engine talks to the QSE gateway. Services renders gateway health so an operator can correlate engine misbehaviour with broker downtime.

trading-engine ↔ QSE gateway (STOMP over TLS)
Admin
Trading
strong
Admin records all live writes via Trading

Every trading.live.write action (start real, stop real, promote, unpromote) is journaled into the audit log. Admin renders it; Trading triggers it.

AuditLogPanel.tsx ← /audit (backend audit table)
Dashboard
Services
advisory
Dashboard consumes summary from Services

The Dashboard hero cards include a compact infrastructure tile sourced from the same endpoint that powers the full Services panel.

Dashboard.tsx → fetchInfrastructure()