# Release checklist

Use this checklist before publishing a customer build.

## Build

- [ ] Version string is correct in bridge, dashboard docs, config, and NinjaTrader AddOn.
- [ ] `python -m compileall bridge run_bridge.py` passes.
- [ ] `node --check web/static/app.js` passes, if Node is installed.
- [ ] `build_release.ps1 -Mode BridgeOnly -Clean` produces `dist\TradeLinkBridge`.
- [ ] Compiled bridge starts and serves `http://127.0.0.1:5000`.

## NinjaTrader

- [ ] `TradeLinkAddOn.cs` compiles privately in NinjaTrader.
- [ ] NinjaTrader export uses compiled assembly, not source export.
- [ ] Export zip imports on a clean NinjaTrader install/profile.
- [ ] TradeLink opens from Control Center > New.
- [ ] Sim101 is the default selected account when available.

## User package

- [ ] `build_release.ps1 -Mode User -NinjaTraderAddOnZip <compiled zip>` completes.
- [ ] User zip contains `1_TradeLinkBridge`, `2_NinjaTrader`, and `3_User_Guide`.
- [ ] User zip does not contain raw `.py`, `.cs`, `.ps1`, or `.spec` files.
- [ ] The NinjaTrader folder contains the compiled AddOn export zip.
- [ ] User guide is present.
- [ ] `1_TradeLinkBridge\Open Dashboard.url` is present and opens the local dashboard after the bridge starts.

## Smoke test

- [ ] Start packaged bridge from a clean folder.
- [ ] License screen/dashboard loads from `Open Dashboard.url`.
- [ ] MT5 demo connects and streams XAUUSD prices.
- [ ] NinjaTrader AddOn heartbeat appears as active in dashboard.
- [ ] Sim101 order opens, records, and closes correctly.
- [ ] MT5 demo hedge opens and closes when enabled.
- [ ] Closed history displays MT5 actual profit from MT5 history when available.
- [ ] Leaving the dashboard open does not cause runaway browser-tab memory; auto-refresh should stay at the default 5 seconds unless deliberately changed.
