# Operations and Troubleshooting ## Diagnostic order 1. Confirm Space is `RUNNING`. 2. Fetch `/futures` and inspect response/hash headers. 3. Check `/api/futures/status` with authentication. 4. Inspect runtime file status and datasource metadata. 5. Check Browser Console and Network. 6. Inspect market endpoint for one symbol/interval. 7. Compare DS4 raw/normalized fields and timestamps. 8. Check provider-specific diagnostics. 9. Run one analysis-only request. 10. Do not test Paper Execute during diagnosis. ## Common issues ### Dashboard returns 401 Likely causes: - missing/incorrect `HERMES_ADMIN_PASSWORD`; - wrong Basic username; - browser session expired; - reverse proxy did not preserve auth. Actions: - confirm `HERMES_ADMIN_USERNAME` and `HERMES_DASHBOARD_BASIC_AUTH_USERNAME` alignment; - re-authenticate; - verify `entrypoint.sh` logged successful auth configuration; - never print the password in logs or reports. ### `/futures` returns 200 but old UI appears Possible causes: - stale installed overlay; - wrong template path; - restored old overlay taking precedence; - CDN/browser cache; - duplicate old page implementation. Actions: - compare `X-Hermes-Template-SHA256` with body hash; - inspect `application.runtimeFiles` in status; - confirm `/opt/hermesface_overlay` is preferred; - confirm installed `/opt/hermes/tools/templates/...` matches manifest; - hard reload only after server-side evidence is checked. ### Runtime status is `unknown` `unknown` means evidence is absent, not that files match. Actions: - verify manifest path and permissions; - verify overlay and runtime paths exist; - check `HERMES_FUTURES_OVERLAY_MANIFEST`, `HERMES_OVERLAY_SOURCE`, and `HERMES_SYNC_SCRIPT` overrides; - inspect overlay installation logs. ### Runtime status is `mismatch` Actions: - identify exact mismatched file in status payload; - compare repository/image overlay and `/opt/hermes` file; - verify `sync_hf.py` installed after persistence restore; - rebuild/redeploy from a clean commit. ### Chart says market data unavailable Check market endpoint payload: - HTTP 503 and `API_UNAVAILABLE`: acquisition exception; - `state=unavailable`: no real candles/current price; - `state=stale`: provider timestamp invalid or stale; - `state=partial`: freshness unknown or display fields incomplete. Inspect: ```text warnings missingFields analysisRequiredFieldsMissing staleRequiredFields sourceMetadata technicalDiagnostics ``` Do not replace missing candles with mock data. ### Binance shows HTTP 451 This is an expected regional limitation in some Hugging Face regions. Correct behavior: ```text transportStatus=restricted httpStatus=451 dataUsability=unavailable reason=Regionally restricted ``` Do not use raw-IP or TLS-bypass workarounds. DS4 safety remains authoritative. ### KuCoin reports “Parameter 'from' must be milliseconds” Verify DS4 request builder uses `build_kucoin_time_range()` and sends integer millisecond `from` and `to`. Check for upstream code that converts an already-millisecond value a second time. ### Market data is HTTP 200 but readiness is blocked Transport and readiness are separate. Inspect: - DS4 Futures verification; - DS4 `noTradeGuard`; - missing critical fields; - non-fresh critical fields; - merge rejection reasons. A provider may be reachable while its data is unusable. ### `NO_TRADE` displayed before analysis The initial state must be `NOT_ANALYZED`. Check frontend initialization and `/api/futures/status.analysisState`. A network error must be `ANALYSIS_FAILED` or `API_UNAVAILABLE`, not `NO_TRADE`. ### Signal score shows zero with no components The UI must show `Unavailable`. Check whether `latestSignalScore` is `null` and whether signal components are empty. Do not coerce null to zero. ### Execute button is disabled This is normally correct. Read the visible reason and inspect: ```text latest plan exists planId matches symbol and risk match plan not expired LONG/SHORT decision verified Futures risk approved noTradeGuard false tradingReadiness ready executable true not already executed ``` ### Telegram says Owner setup required No configured/persisted owner exists. Use the one-time private `/claim ` flow. Remove/rotate the bootstrap secret after claim. Do not expose owner ID in dashboard status. ### Telegram proactive alerts unavailable Webhook responses can work without outbound connectivity, but proactive alerts need either: - direct Telegram access with optional proxy; or - configured relay URL and HMAC secret. Keep polling disabled. ## Logs and artifacts Useful logs: ```text Space build log entrypoint startup log sync_hf overlay install/hash log Hermes dashboard log under /opt/data/logs sanitized runtime audit JSON browser Console and Network export without credentials ``` Never attach raw cookies, Authorization headers, tokens, or unredacted provider payloads.