feat: 'claudebox doctor' — the host-health checks as a first-class verb #50

Merged
dan-claude-bot merged 1 commit from feat/doctor-verb into main 2026-07-14 13:24:17 +00:00
dan-claude-bot commented 2026-07-14 13:13:20 +00:00 (Migrated from github.com)

Closes #46.

claudebox doctor            # read-only: is this host fit to mint boxes?
claudebox doctor --fix      # also revert drill leftovers
claudebox doctor --pin-dns  # quick-test the resolver pin (setup-host pins by default since #45)

Delegation, per the issue: the install tree already ships the whole repo, so the verb is a table row + a function that execs the installed drill/doctor.sh with its flags passed through — the doctor's exit code (0 clean / 1 problems) is the verb's. One hardened script, two audiences, and the five-false-alarms lesson (#40/#42/#43) is inherited rather than re-learned.

Vocabulary reframed: the verdict now reads fit to mint boxes (and to drill) — same facts, right audience. The header comment names both callers.

The mint-failure path stops freelancing: cmd_new's cloud-init failure hint — which hand-diagnosed the #33 resolver case inline — now ends with Diagnose it: claudebox doctor, and mentions the two other mint-killers the doctor catches (wedged daemon, dnsmasq not serving).

Also: claudebox help doctor explains what is checked and why each check exists; README's command table gains the row. Flags after the verb work directly (claudebox doctor --fix) via a one-line parser pass-through, since the doctor's flags belong to the doctor.

Not done here, deliberately: splitting the drill-only sections out of the script — the issue leaves placement to the implementer, and the --fix drill-leftover checks are harmless (and honest) for a user host. If #17 lands first, this is one more rename site; if this lands first, box doctor is the rename.

🤖 Generated with Claude Code

Closes #46. ```sh claudebox doctor # read-only: is this host fit to mint boxes? claudebox doctor --fix # also revert drill leftovers claudebox doctor --pin-dns # quick-test the resolver pin (setup-host pins by default since #45) ``` **Delegation, per the issue:** the install tree already ships the whole repo, so the verb is a table row + a function that `exec`s the installed `drill/doctor.sh` with its flags passed through — the doctor's exit code (0 clean / 1 problems) is the verb's. One hardened script, two audiences, and the five-false-alarms lesson (#40/#42/#43) is inherited rather than re-learned. **Vocabulary reframed:** the verdict now reads `fit to mint boxes (and to drill)` — same facts, right audience. The header comment names both callers. **The mint-failure path stops freelancing:** `cmd_new`'s cloud-init failure hint — which hand-diagnosed the #33 resolver case inline — now ends with `Diagnose it: claudebox doctor`, and mentions the two other mint-killers the doctor catches (wedged daemon, dnsmasq not serving). Also: `claudebox help doctor` explains what is checked and why each check exists; README's command table gains the row. Flags after the verb work directly (`claudebox doctor --fix`) via a one-line parser pass-through, since the doctor's flags belong to the doctor. **Not done here, deliberately:** splitting the drill-only sections out of the script — the issue leaves placement to the implementer, and the `--fix` drill-leftover checks are harmless (and honest) for a user host. If #17 lands first, this is one more rename site; if this lands first, `box doctor` is the rename. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/box#50
No description provided.