# Runtime Validation Checklist Before trusting the dashboard values for any operational decision, ensure the following core invariants hold in the most recent bot health payload and reconciliation summary: - [ ] `capital_invariant_violations_total == 0` - [ ] `reconciliationMismatchCount == 0` - [ ] `reconciliationMissingFromExchange == 0` - [ ] `reconciliationMissingInDb == 0` - [ ] `tradingLoopHealthy == true` - [ ] `reconciliationLoopHealthy == true` ### Capital Coverage Validation - [ ] **Ledger vs. Broker:** Verify that "Allocated Capital" (from ledger) is feasible given "Broker Balance". - [ ] **Mismatch Diagnosis:** If `Allocated > Buying Power`, the "Capital Coverage" pill will show "Insufficient funds". This is a valid state but means trades may be rejected by the broker. - **Action:** If this warning persists, either reduce profile allocations or deposit funds into the brokerage account. ### Debugging "No Trades Executed" If the bot is running (`tradingLoopHealthy == true`) but no trades are opening: 1. **Check Readiness:** Ensure symbol signal is "SIGNAL ACTIVE" in Overview. 2. **Check Capital Coverage:** Verify the profile has not exhausted its liquidity (check "LP" pill). 3. **Check Rejections:** Look at "Recent Order Rejections" for explicit broker errors (e.g., `insufficient qty`, `day trading limit`). - These rejections are now surfaced directly in the dashboard and do not require log diving. ### Operator Note - **Ledger ≠ Liquidity:** The internal ledger (`allocated_capital`) tracks what the bot *intends* to spend. The broker balance is what is *actually* available. - **Enforcement:** The bot will attempt trades based on its ledger. If the broker rejects them due to lack of funds, those show up in "Recent Order Rejections". - **UI Status:** The "Capital/LP" indicators are informational warnings for the operator. They do not automatically pause the bot.