levelrail-cli doctor and GET /api/v1/system/doctor all call the same server-side engine, so they never disagree.
Each check reports ok, warn, fail or unknown with a plain message and, when useful, the raw evidence behind it (a path, the process holding a port, a count). A failing check offers one of three things:
- Auto fix: the control plane does it, after you confirm. See Fix-it engine.
- Guided fix: one thing you do elsewhere, then Re-check.
- Manual: an explanation and a next step.
APP_DOCTOR_CHECK_TIMEOUT, default 10s). A slow check reports unknown and never holds up the others.
In the dashboard
Open Settings, Doctor. Results appear as each check finishes, grouped by area, problems first. Every problem row has Fix now or a Re-check button. Fix all safe issues lists exactly what will change and applies only fixes that are one click and safe; anything that restarts a service or opens access stays a separate step. The dashboard home shows a banner linking here only when a check fails.In the CLI
--api-url), doctor runs the local checks only. --fix always needs a control plane, applies only fixes that are automatic and safe, and lists the rest as skipped with the command to apply them on purpose (fixes apply ID). Without --yes it asks on a terminal and refuses to run otherwise. The exit code is 1 when any check fails.
Expected output:
API
Checks
Fixes never delete user data or volumes. The cleanup fix removes only unreferenced Docker data and keeps rollback targets; anything destructive is a manual step.
See also Troubleshooting and the Fix-it engine.