# System Arm ## Daily Login - Zerodha Kite access tokens expire daily. - Users must complete a broker login once per trading day. - Use `/api/broker/login` to start the login flow. ## Arm Flow 1) User logs in to Zerodha. 2) UI calls `POST /api/system/arm`. 3) Backend validates broker session and arms all active runs. 4) Scheduler resumes from the latest committed state and starts execution. ## Failure States - Broker auth expired: `POST /api/system/arm` returns 401 with `redirect_url`. - Run status `ERROR`: skipped and returned in `failed_runs`. - Missing broker credentials: `/api/broker/login` returns 400. ## Recovery - Reconnect broker via `/api/broker/login`. - Reset runs in `ERROR` (admin or manual reset), then re-arm. - Re-run `POST /api/system/arm` to resume. ## Determinism Guarantees - Arm is idempotent: already `RUNNING` runs are not re-written. - Event ledger uses logical time uniqueness to prevent duplicate events. - Next execution is computed from stored strategy frequency and latest state.