Appearance
Common Issues
About this article
- Audience: Operators running soaks or daily fleet checks
- Goal: After reading, you can diagnose and fix the four most frequent failures
- Type: Troubleshooting
Summary
These four issues cover most soak gate failures and fleet health degradations on Shadow fleets. Probe through the proxy first (PHANTOM_PROXY:8788), then restart apps or prune recordings as needed.
Encoder stall
Symptom: recent_chunks stays at zero, encode_fail_streak climbs above 24, and soak samples stop advancing past ~50/60. get_recording_status may report "Recording appears stalled."
Cause: The H.265 FIFO reader or ghost_core encoder path stopped while the agent still runs. Storage pressure and partial restarts (pkill without app restart) are common triggers.
Fix: Prune recordings if storage is tight, then restart the edge app (oakctl app stop/start). Probe with get_recording_status until recent_chunks resumes. Re-run a short soak gate before a full 60-minute soak.
Disk / storage critical
Symptom: .h265_status or /fleet/health shows storage_health: CRITICAL — high used percentage, under 1 GB free, hundreds of chunks. Recorder may still report is_writing_data: true but chunk growth stalls.
Cause: Sixty-second H.265 chunks fill internal storage faster than rotation or pruning keeps up. Overlay lag after partial prunes can leave health CRITICAL even when writes resume.
Fix: Run the shadow prune script (keep ~30 newest chunks), confirm free space via get_recording_status, then restart the app. For sustained recording, attach external storage before boot. Re-probe /fleet/health until status is WARNING or OK.
Thermal soak fail
Symptom: Soak gate marks thermals FAIL when die temperature exceeds policy limits, or MQTT publishes THERMAL_CRITICAL. Short soaks may PASS while longer runs fail near sample 40–50.
Cause: Sustained 30 fps encode plus RF-DETR inference raises SoC die temperature. Enclosure placement, ambient heat, or missing renice/thermal mitigation worsen peaks above 70–85 °C.
Fix: Check die temp in /fleet/mqtt/latest during a soak. Improve airflow, confirm thermal watchers are active, and prune or reduce load if storage pressure adds I/O heat. Restart the app after mitigation, then re-run soak with read_soc_temp monitoring.
MQTT stale
Symptom: /fleet/mqtt/latest shows stale_sec above 120, telemetry Hz drops below ~8, or contract verify reports low MQTT rate. Detections and health topics stop updating while the device appears online.
Cause: Broker disconnect, wrong mqtt_host in device config, or the proxy ingest client lost its subscription after a stack restart. Network blips between shadow and host broker also produce transient staleness.
Fix: Confirm /fleet/mqtt/config broker host matches the device registry entry. Restart the proxy MQTT stack and the shadow edge app. Run contract verify for 20 s at expected ~10 Hz. If stale persists, reprovision MQTT host via /fleet/provision-shadow.
Next steps
- Full recovery playbooks: Recovery
- Prune and soak workflow: Prune & soak
- Automation rates context: Automation rates
Operator depth
Live fleet state and harness evidence live in private operator handoff (not published) (private).