Skip to content

Releases

Public Update: Feat: Trader UX, fail-closed execution, VOOI broker & Telegram alerts

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 31 Oct 13:10

Public Highlights

Why It Matters

People can see what the product is doing in plain language, and the app refuses unsafe opens instead of hoping an operator notices. Partners get a cleaner VOOI broker surface and clearer safety story — without claiming live money trading is fully on.

Who Benefits

  • Traders and operators using the UI day to day
  • Partners evaluating UX, safety posture, and VOOI integration hygiene
  • The team shipping and monitoring production (better evidence, smaller alert secret blast radius)

New Capabilities (short list)

  • Browse and act on Deals in one flow, with Health, Operations, Getting started, and How it works
  • Fail-closed open / close confirmations and honest realized PnL
  • VOOI broker API (/vooi/broker/*) and Telegram user subscriptions + operator commands
  • Locked stop/recovery thresholds, gate evidence, playbooks, stall diagnostics

Advantages / Benefits

  • Faster orientation and fewer accidental real-money clicks
  • Less decoding of internal error codes during incidents
  • Cleaner partner-facing integration surface with VOOI
  • Stronger production signal without loading the full runtime dotenv onto GitHub-hosted alert runners

What's Next / Future Plans

Tracked in the source monorepo (not invented here):

  • VOOI funded canary / venue route health (#479, #595–#602)
  • Phase 4-pre evidence bundle (#496, #497)
  • Distribution readiness / go-live sign-off (#619–#626)
  • Frontend follow-ups #607, #603

Live multi-venue trading with real money remains an explicit later decision.

Upgrade Notes

  • This public repo mirrors the frontend/ tree from the monorepo; deploy/runtime config still lives with the full stack.
  • See configuration table in the mirrored notes below for ARB_VOOI_BROKER_KEY, Telegram webhook/operator settings, and alert fallback secrets.
  • Validate Health / /status after deploy before any live-trading discussion.

Full Changelog (Mirrored)

v2026.10.31 — Clearer trading screens, safer opens, VOOI broker tools & Telegram alerts

Compared to: v2026.10.14
Date: 2026-10-31
Window: everything merged to main after the VOOI-first release on 2026-10-14

This release is about three things that matter in day-to-day use:

  1. Seeing the system clearly — screens that use normal words and show what is ready (or not).
  2. Not opening a bad trade by accident — if something important is missing, the open button stays off.
  3. Working better with partners and alerts — VOOI broker tools on our side, and Telegram messages people can opt into.

Important for everyone reading this: live trading with real money is still off by default. Nothing in this release flips that switch for you. We made the product safer and clearer while that switch stays off.


In plain words

Imagine you have a dashboard that finds price differences across exchanges, helps you open matched trades, and watches risk.

Since mid-October we:

  • Redesigned how traders move through the app (find a deal → check it → open → watch positions).
  • Made the app refuse to open when conditions are wrong, instead of hoping the operator notices.
  • Finished a large hardening pass: thresholds locked, failure playbooks written, operator Telegram commands.
  • Added a proper VOOI broker API so we can manage broker analytics and settings through our own backend.
  • Added user Telegram subscriptions so people can turn product alerts on and off for themselves.
  • Tightened production monitoring and how we send alert fallbacks (without exposing the full production secret file to GitHub runners).

If you are a partner: this release shows we care about operator clarity, fail-closed safety, and clean integration surfaces — not only about shipping features fast.


New Capabilities

Each item below is something you can do or see now that was missing or much harder before.

Browse and act on deals in one flow

You can move from a simple Deals list into an execution sheet, then watch open trades on Positions. You no longer need to jump across unrelated screens to understand one opportunity.
Related: #537, #542, #545

Understand system health at a glance

The Health page uses a traffic-light style view, including whether the VOOI order path looks healthy. Operators can tell “data is fine” from “orders may be blocked” without reading raw logs.
Related: #544, #575

Learn the product without a walkthrough call

Getting started and a real How it works page explain the flow in product language. New teammates and partners can orient themselves from the UI.
Related: #520, #545

Run day-to-day ops from one place

The Operations page gathers confirmed actions, positions / daily P&L, guardrails, parity, and continuity checks. Real-money actions ask for an explicit confirmation.
Related: #520, #544, #574

Read Auto in normal language

Gates, blockers, switches, and outcomes are shown as plain words instead of internal codes. The product explains why something is blocked.
Related: #544, #546, #576, #593

Open trades only when checks pass (fail-closed)

If trading is off, the route is not ready, the deal is not ready, or the safety check has not answered yet, open stays disabled. Manual API opens also refuse routes the screener has not marked ready.
Related: #546, #560, #566

Close positions with a clear confirmation

Closing uses an accessible in-app dialog (keyboard-friendly), not a browser pop-up that is easy to miss.
Related: #563, #605

See honest position results

Positions show real realized P&L and keep the minus sign on losses. Snapshots can mark dry-run context so warnings follow the right position.
Related: #557, #606

Spot inconsistent coins / prices earlier

A wrong-coin warning and corrected basis math help catch mismatched symbols when mid prices are missing.
Related: #542, #554

Manage VOOI broker analytics and settings from our API

Server-side /vooi/broker/* routes support broker analytics reads and management writes (users, public-key rotation, exchange defaults), with secret ARB_VOOI_BROKER_KEY kept off the browser.
Related: #609

Subscribe to product alerts in Telegram

Users can subscribe, unsubscribe, and check status; product alerts can go to a personal chat id.
Related: #628

Control key operator actions from Telegram

Operators can use /status, /gate, /stop, /help, /ack behind a webhook secret, allowlists, rate limits, and audit counters.
Related: #519

Trust locked stop / recovery rules

All 12 stop and recovery thresholds are locked against reviewed calibration evidence, so production config cannot quietly drift.
Related: #517

Diagnose failures with playbooks and evidence

Gate evidence tests, root-cause playbooks, fault maps, stall diagnostics, and clearer incident classification make “what went wrong?” answerable from status and runbooks.
Related: #518, [#591...

Read more

Public Update: Feat: Multi-venue execution, public product expansion, and ops reliability hardening

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 11 Oct 10:16

Public Highlights

Why It Matters

This release reduces operational and security risk under edge conditions.

Who Benefits

Operators, security reviewers, and teams running protected deployments.

Upgrade Notes

  • Validate auth and policy settings in staging before rollout.
  • Release v2026.10.11 focus: This release delivers a broad production-readiness sweep across execution, public product surfaces, operational reliability, and CI/CD quality gates. The stack now supports multi-v...

Full Changelog (Mirrored)

Summary

This release delivers a broad production-readiness sweep across execution, public product surfaces, operational reliability, and CI/CD quality gates. The stack now supports multi-venue live order execution, expanded public data flows and pages, stronger auth behavior for Telegram-first operation, and deeper production monitoring guardrails.

Execution and Venue Coverage

  • Added Binance live order adapter and execution capability matrix support (#417).
  • Added Bybit and Aster live order adapters (#418, #416).
  • Added dYdX v4 and Extended live order adapters (#422, #423).
  • Expanded execution modeling and venue capability routing for cross-venue order handling.

Public API and Auth Hardening

  • Added public channel auth controls and proxy allowlist behavior.
  • Added dual-surface auth matrix coverage for public and operator flows (#409).
  • Added public journal projection endpoint and schema coverage (#305).
  • Improved Telegram-first operation:
    • API token fallback path for auth continuity.
    • Frontend 401 hinting for Telegram session recovery.
    • Telegram web app bootstrap script integration.
  • Updated deploy smoke logic to treat Telegram-mode edge /status 401 as expected when applicable.

Strategy, Screener, and Runtime Semantics

  • Added automated auto-exit close criteria:
    • stop-loss thresholding
    • spread-window exits
    • funding-window exits
    • minimum-hold gating (#407)
  • Added 24h dry-run validation for auto-exit criteria behavior (#370).
  • Added event-driven screener fast passes and latency-budget controls.
  • Added order-book confirmation for cross-venue basis entry validation.
  • Added reproducible screener latency benchmark and baseline artifact generation (#298).
  • Fixed /status snapshot continuity refresh behavior with single-flight control (#412).

Frontend Product Surface Expansion

  • Introduced mobile-first redesign and tokenized design system upgrades across shell/pages (#379, #380, #202).
  • Added product modes mapped to runtime presets (#303).
  • Added shared public data layer for public pages.
  • Added public Statistics and Journal pages over public DTOs (#305).
  • Added guided onboarding wizard over public endpoints (#306).
  • Refined public/operator layout and navigation behavior with broader responsive coverage.

Operations and Reliability

  • Improved production health monitoring and readiness checks.
  • Published effective threshold source reporting in monitoring summaries.
  • Bounded 5xx and upstream-reset counters to recent lookback windows to reduce stale-noise alerts.
  • Added unattended Stage-A baseline capture with JSON summary output (#438).
  • Added host-side production watchdog script with systemd timer/service templates (#443).
  • Fixed project-cycle state sync to use stable item/field/option IDs (#441).

Market Data and Historical Inputs

  • Added VOOI reference-only connector support for market-data integration (#291).
  • Added VOOI funding-history backfill utility and seed schema support (#369).

CI/CD and Quality Gates

  • Added dual-surface compatibility matrix CI path and public-layer documentation checks.
  • Enhanced frontend lint/test workflow:
    • changed-files lint scope
    • ESLint cache usage
    • markdown exclusion from frontend lint path
    • improved runner consistency
  • Updated CI job dependencies so frontend checks complete before backend audit stages.
  • Added helper script for CI queue-priority operations.
  • Updated workflow dependencies and action versions for stability and maintainability.
  • Improved frontend CI/CD job flow in latest pipeline sweep (#445).

Documentation and Coverage Expansion

  • Reworked architecture/operations navigation and cross-links for maintainability.
  • Extended test coverage across API auth matrix, public projection contracts, execution adapters, ws-ticket/auth edges, monitoring scripts, and frontend public layout behavior.

Notable Net-Effect Clarification

  • An intermediate edge token-injection change was introduced and then reverted in full. The final released behavior keeps the API closed as intended and does not retain that temporary opening path.

Validation Highlights

  • Expanded targeted suites across auth/API/WS-ticket/public projection/monitoring/execution paths.
  • CI and docs consistency checks updated in lockstep with behavior and contract changes.
  • Production-monitor scripts and watchdog flow validated with dedicated tests and runbook updates.

Public Update: Ops: Roadmap reset and execution hardening plan

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 02 Oct 18:51
e3cab81

Public Highlights

Why It Matters

This release reduces operational and security risk under edge conditions.

Who Benefits

Operators, security reviewers, and teams running protected deployments.

Upgrade Notes

  • Validate auth and policy settings in staging before rollout.
  • Release v2026.10.02.01 focus: Executive Summary

Full Changelog (Mirrored)

Executive Summary

Roadmap governance and execution planning were normalized in one cycle: open work is now explicit, parent-child ownership is linked, and the delivery board reflects current priorities instead of historical closure noise.

Delivered In This Release

  • Roadmap reset to active stages R1-R4 with clear dates and outcomes.
  • Open work linked to parent programs and milestones for traceable execution.
  • Missing live-readiness backlog captured as actionable issues.
  • Project board cleaned and re-centered on in-progress and next critical tasks.
  • Mirror synchronization completed for org repositories.

Scope Added To Backlog

  • #266 live place/cancel/status wiring
  • #267 safe-env signed submit/cancel smoke validation
  • #268 depth query path for slippage
  • #269 maker-first entry flow
  • #270 restart reconciliation classifier + seeded integration path
  • #271 missing READY/risk/connectivity alert emission
  • #272 remaining global stop-trading triggers
  • #273 stop-recovery gate with cooldown, health checks, and manual ack

Next Week Plan

  1. Close R1 blockers first: #272 and #273.
  2. Start R2 execution hardening: #266, #267, #268.
  3. Run targeted reliability checks and publish checkpoint status on #174.

Validation

  • GitHub issue hierarchy and milestone mapping verified.
  • Project board states updated and archived noise removed.
  • Repo synchronization checks completed across origin and upstream.

Compatibility and Risk

  • No runtime behavior changes in this release.
  • No config default changes.
  • Operational risk lowered by clearer execution sequencing and ownership.

Public Update: Frontend: WS Auth Ticket UX + Parity Runtime Visibility

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This update improves visibility and usability for real-time decision making.

Who Benefits

Frontend users, traders, and support operators working from the dashboard.

Upgrade Notes

  • Refresh the app build to pick up UI and telemetry improvements.
  • Release v2026.09.27.01 focus: What's Changed

Full Changelog (Mirrored)

What's Changed

Full Changelog: MarchenkoRuslan/arbitrage@v2026.09.26.01...v2026.09.27.01

Public Update: Ops: Data Collection + Profitability Trust Milestone Closure

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This release reduces operational and security risk under edge conditions.

Who Benefits

Operators, security reviewers, and teams running protected deployments.

Upgrade Notes

  • Validate auth and policy settings in staging before rollout.
  • Release v2026.09.26.01 focus: Closed two major milestones: Data collection and Profitability Trust & Formula Hardening.

Full Changelog (Mirrored)

Summary

  • Closed two major milestones: Data collection and Profitability Trust & Formula Hardening.
  • Delivered trust diagnostics, calibration pipeline, and runtime coefficient artifact governance (loader + rollback).

User-Visible Changes

  • New trust diagnostics surfaced in status and execution preflight flows (confidence/provenance and blocker clarity).
  • Deterministic ranking and tie-break behavior hardened for repeatable candidate selection.
  • Runtime now supports calibration artifact loading with rollback path and schema-aware validation.
  • Added explicit handling for unavailable historical win-rate data in history gate diagnostics.

Configuration Changes

  • Added runtime controls for calibration artifact management and rollback.
  • Extended diagnostics fields and reason codes exposed via API contracts.

Data and Strategy Semantics

  • Scoring decomposition hardened (signal vs execution-adjusted components).
  • Calibration artifacts introduced for profitability coefficients with reproducible generation pipeline.
  • Candidate/blocker reason deduplication improves operator interpretation and triage.

Operational Impact

  • Backward compatibility: additive for most API consumers, but diagnostics payloads became richer and stricter in meaning.
  • Migration steps: operators should validate calibration artifact presence/health before enabling runtime override workflows.
  • Risk/watchouts: missing historical data now emits explicit trust reasoning instead of silent ambiguity.

Milestone Closure Evidence

  • Data collection: 15 closed / 0 open, closed 2026-09-26.
  • Profitability Trust & Formula Hardening: 9 closed / 0 open, closed 2026-09-26.
  • Program tracker issues closed: #109 and #123.
  • Key merged PRs: #212, #213, #214.

Validation Evidence

  • Release based on merged main changes at commit 84e99b3.
  • Milestone and issue closure verified via GitHub API/CLI at publication time.

Public Update: Frontend: Real-time Opportunities via WebSocket with REST fallback

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This update improves visibility and usability for real-time decision making.

Who Benefits

Frontend users, traders, and support operators working from the dashboard.

Upgrade Notes

  • Refresh the app build to pick up UI and telemetry improvements.
  • Release v2026.09.22 focus: Added WebSocket-based real-time delivery for the Opportunities page, with automatic fallback to REST polling when the connection is unhealthy.

Full Changelog (Mirrored)

Summary

  • Added WebSocket-based real-time delivery for the Opportunities page, with automatic fallback to REST polling when the connection is unhealthy.

User-Visible Changes

  • Updated behavior/output: Opportunities page now connects to /ws/opportunities on load; a transport indicator near the page title shows live/connecting/reconnecting/polling-fallback state with a manual "Retry" button.
  • New or changed CLI/runtime behavior: none (frontend-only change)
  • Any removed behavior: none

Configuration Changes

  • Added vars: VITE_ARB_WS_URL (optional; overrides the derived WS endpoint)
  • Changed defaults: none
  • Deprecated vars: none

Data and Strategy Semantics

  • Formula/metric changes: none
  • Ranking or validation changes: none
  • Exchange connector behavior changes: none

Operational Impact

  • Backward compatibility: fully backward compatible; REST polling remains the automatic fallback path, manual refresh unaffected
  • Migration steps (if any): none
  • Risks / watchouts: WS frames older than the currently cached snapshot (by updated_at) are discarded to avoid out-of-order overwrites; a silently unresponsive connection is force-closed after 60s to trigger reconnect

Deprecation Timeline (required when aliases/deprecations exist)

  • N/A ΓÇö no compatibility aliases introduced

Validation Evidence

  • Commands run: pnpm run check (lint, unit tests, build, audit); Playwright e2e for the transport indicator (connect, reconnect-to-fallback, manual refresh)
  • Scope of tests/lint checks: unit tests for backoff math, socket lifecycle, stale-frame guard, stall detection, ticket auth; e2e for visible transport states
  • Known limitations not covered: detailed ticket-auth UX (429 Retry-After, expired/reused-ticket messaging) tracked separately in #72

Public Update: Exec: Partial Fill Lifecycle (Two-Leg Open)

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This release expands executable market coverage and improves cross-venue reliability.

Who Benefits

Execution operators, strategy owners, and teams tracking venue behavior in production.

Upgrade Notes

  • Confirm venue allowlists and dry-run checks before enabling new execution paths.
  • Release v2026.09.19.02 focus: OrderResult now reports filled_quantity, remaining_quantity, average_fill_price, and

Full Changelog (Mirrored)

Summary

  • OrderResult now reports filled_quantity, remaining_quantity, average_fill_price, and
    last_fill_price, and OrderStatus gained partially_filled and canceled.
  • The two-leg engine polls order status every ARB_EXEC_PARTIAL_FILL_POLL_S until an order is
    terminal or ARB_EXEC_PARTIAL_FILL_TIMEOUT_S elapses, then cancels the resting remainder.
  • The second leg is sized off the quantity the first leg actually filled, and rollbacks close
    only the filled quantity, so a partial fill no longer leaves naked directional exposure.
  • A first leg that fills below ARB_EXEC_MIN_PARTIAL_FILL_PCT is rolled back without opening
    the second leg.
  • A partial second leg retries only the missing remainder until it completes or
    ARB_EXEC_MAX_UNHEDGED_DURATION_S elapses; the unhedged remainder is then trimmed off the
    first leg and the attempt stays active at the reduced size.
  • A failed trim leaves residual_exposure: true and counts toward the consecutive-rollback stop.
  • DryRunBroker can simulate partial and deferred fills (fill_ratio, max_fill_size,
    partial_next, defer_next) and implements get_order_status / cancel_order.

Config impact

  • Added:
    • ARB_EXEC_PARTIAL_FILL_TIMEOUT_S (default 60)
    • ARB_EXEC_PARTIAL_FILL_POLL_S (default 2)
    • ARB_EXEC_MAX_UNHEDGED_DURATION_S (default 30)
    • ARB_EXEC_MIN_PARTIAL_FILL_PCT (default 0.3)
  • ARB_EXEC_PARTIAL_FILL_POLL_S must be <= ARB_EXEC_PARTIAL_FILL_TIMEOUT_S.

Compatibility and migration

  • Default runtime stays read-only and live venue placement is still rejected.
  • Full-fill dry-run behavior is unchanged; the new fields default to the full-fill values.
  • GET /config gains the four new keys. POST /execution/open and GET /execution/attempts
    gain filled_quantity, partial_fill, unhedged_timeout, residual_trim_quantity, and
    residual_trim_order, plus per-order filled_quantity, remaining_quantity, and
    average_fill_price.

Validation

  • pytest covers fill-field normalization, broker partial/deferred fill simulation, status
    polling, timeout cancel, partial leg1 hedging and rollback sizing, the minimum partial floor,
    second-leg remainder retry, residual trim success and failure, the unhedged timeout, the new
    settings validators, and the API contract.
  • ruff check . and generated OpenAPI types are updated in the same changeset.

Public Update: Feat: Cash and Carry HL Spot-Perp

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This update improves visibility and usability for real-time decision making.

Who Benefits

Frontend users, traders, and support operators working from the dashboard.

Upgrade Notes

  • Refresh the app build to pick up UI and telemetry improvements.
  • Release v2026.09.19.01 focus: Added read-only Hyperliquid spot ingestion (spotMetaAndAssetCtxs), SpotTicker/CostOfCarry models, and a cash_and_carry strategy scorer (long spot + short perp) with profile spot-pe...

Full Changelog (Mirrored)

Summary

  • Added read-only Hyperliquid spot ingestion (spotMetaAndAssetCtxs), SpotTicker/CostOfCarry models, and a cash_and_carry strategy scorer (long spot + short perp) with profile spot-perp-carry-v1 (closes #96).

User-Visible Changes

  • Updated behavior/output: strategy registry accepts cash_and_carry; opportunities expose spot/perp instrument_kind and optional borrow_rate on the long leg.
  • New or changed CLI/runtime behavior: each REST poll refreshes HL spot quotes into MarketState (best-effort). Continuous screener loop still defaults to funding_arbitrage; invoke Cash and Carry via find_opportunities_with_strategy(..., strategy_type="cash_and_carry") like basis.
  • Replay: Cash and Carry positions use basis convergence/inversion, funding flip, funding decay, and time-stop exits; borrow APR reduces funding carry PnL.

Configuration Changes

  • Added vars: ARB_CASH_AND_CARRY_ENTRY_BPS (default 5.0), ARB_BORROW_RATE_APR (default 0.0), ARB_LENDING_YIELD_APR (default 0.0).
  • Changed defaults: none.
  • Deprecated vars: none.

Data and Strategy Semantics

  • Formula: combined_score = basis_bps + funding_edge_bps - carry_cost_bps - roundtrip_fees, with basis_bps = (perp_mark - spot_mark) / spot_mark * 10000.
  • Entry requires basis_bps >= cash_and_carry_entry_bps and non-negative expected perp funding.
  • Unit spot tokens map to perps (UBTC -> BTC, etc.); ADL/margin checks apply only to perp legs.

Operational Impact

  • Backward compatibility: funding and basis paths unchanged.
  • Migration steps: none.
  • Risks/watchouts: live spot execution remains out of scope (SpotOrderRequest is a model only); borrow rate is config-driven (not fetched from a lending market).

Validation Evidence

  • Commands run: pytest, ruff check ., frontend types:generate / contract check.
  • Scope of tests/lint checks: spot parse, scoring, exits, validator ADL skip, OpenAPI config fields.
  • Known limitations not covered: live spot order placement; continuous multi-strategy merge in the default screener loop.

Public Update: Frontend: Deep Pipeline Diagnostics

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This update improves visibility and usability for real-time decision making.

Who Benefits

Frontend users, traders, and support operators working from the dashboard.

Upgrade Notes

  • Refresh the app build to pick up UI and telemetry improvements.
  • Release v2026.09.16.01 focus: Added a Deep Pipeline Diagnostics section to the Status page for one-screen triage.

Full Changelog (Mirrored)

Summary

  • Added a Deep Pipeline Diagnostics section to the Status page for one-screen triage.
  • Added a drop-counter heatmap with per-cycle relative intensity scaling.
  • Added reason-code distribution with Top 8 default and Show all expansion for high-cardinality cycles.
  • Added reason-severity breakdown (blocked vs watching) with percentage shares.
  • Added unified exchange split table for exchange_diagnostics counters.
  • Added concise top-3 blockers summary that combines drop counters and reason events.

Configuration impact

  • Added vars: None.
  • Changed defaults: None.
  • Deprecated vars: None.

Operational impact

  • Backward compatibility: Fully backward compatible; no backend API contract changes.
  • Operator workflow: Triage watching floods from Status page without manually aggregating /status JSON.

Validation evidence

  • corepack pnpm --dir frontend test
  • corepack pnpm --dir frontend build

Public Update: Frontend: Backtest Page UI

Choose a tag to compare

@MarchenkoRuslan MarchenkoRuslan released this 27 Sep 12:06
983a89e

Public Highlights

Why It Matters

This update improves visibility and usability for real-time decision making.

Who Benefits

Frontend users, traders, and support operators working from the dashboard.

Upgrade Notes

  • Refresh the app build to pick up UI and telemetry improvements.
  • Release v2026.09.13.01 focus: Added a full Backtest Page UI (/backtest) with five tabs - Summary, Replay, Gate, Locks, Detail - so operators can run replays, inspect KPIs, and manage strategy locks without call...

Full Changelog (Mirrored)

Summary

  • Added a full Backtest Page UI (/backtest) with five tabs - Summary, Replay, Gate, Locks, Detail - so operators can run replays, inspect KPIs, and manage strategy locks without calling the API directly (closes #36).

User-Visible Changes

  • Updated behavior/output: new /backtest route with an operator workspace for validating a strategy before execution is considered.
  • Summary: dataset coverage (total snapshots, symbols, first/last snapshot timestamp). Empty until history accumulates (ARB_BACKTEST_CAPTURE_ENABLED=true).
  • Replay: run replay against captured history (symbols, date range, entry/exit score, cycle hours, min samples, strategy id). Result panel shows parameters used and KPI breakdown (samples, entries/exits, win rate, PnL, drawdown, exit reasons), plus lock action.
  • Gate: current pass/fail verdict for strategy readiness.
  • Locks: history of frozen replay results (POST /backtest/lock) with PnL/drawdown and detail link.
  • Detail: full breakdown of one selected lock, including gate thresholds and achieved metrics.
  • New or changed CLI/runtime behavior: server-side validation errors (422) are shown next to specific fields (ApiValidationError, parseApiError) instead of generic messages.
  • Removed behavior: none.

Configuration Changes

  • Added vars: none (uses existing ARB_BACKTEST_CAPTURE_ENABLED for snapshot capture).
  • Changed defaults: none.
  • Deprecated vars: none.

Data and Strategy Semantics

  • Formula/metric changes: none (frontend-only change; no backend/API contract changes).
  • Ranking/validation changes: replay result panel surfaces exact parameters used and backend exit_reasons breakdown.
  • Exchange connector behavior changes: none.

Operational Impact

  • Backward compatibility: fully backward compatible; no backend/API contract changes.
  • Migration steps: none.
  • Risks/watchouts: locking re-runs replay with the same parameters rather than freezing what is on screen; sample counts may differ if new snapshots arrive between replay and lock. Page does not auto-poll; use refresh for summary/gate, locks refresh after a new lock is created.

Deprecation Timeline

  • Not applicable (no aliases/deprecations introduced).

Validation Evidence

  • Commands run: pnpm run check (lint, test, build, audit) - all passing.
  • Scope of tests/lint checks: component/hook/integration suite for Summary, Replay, Gate, Locks, Detail tabs, error handling, and refresh behavior.
  • Known limitations not covered: manual smoke test against local backend with real snapshot data; automated tests use mocked data.