feat(doctor): split into universal `sol doctor` + journal-host `journal doctor` master
Reframe diagnostics so each surface owns the right question: - `sol doctor` (surface "universal", valid from both `sol` and `journal`) runs only universal CLI-usability checks — python sanity, sol_importable, local_bin_sol_reachable, and the `sol`-wrapper stale-alias check — and is clean on a box with no local journal. - new `journal doctor` runs journal-host health: disk, config/journal-dir writability, service identity + running/crash-loop state, journal_sync, the `journal`-wrapper stale-alias check, launchd plist, and feature advisories. Folder/service checks skip cleanly (never false-fail) off a journal host; severities per design (config-invalid/identity-mismatch/ crash-loop/systemd-failed/sync-conflict = fail, stopped/socket-absent = warn, features = advisory). Consolidate the probe infra that `preflight.py` had duplicated into a new stdlib-only `solstone/think/probe.py` (Check/CheckResult/ProbeOutput/ run_probe/make_result + helpers + the shared check bodies); preflight and doctor now compose from it. preflight behavior is byte-identical. Repoint `journal setup` step-1 at a readiness battery via `doctor --readiness` (universal + disk + journal-dir-writable + feature advisories, no runtime service/sync checks). STEP_NAMES and the doctor JSONL event/ status/summary contract are unchanged for the macOS installer parser. Split the per-binary stale-alias check + legacy uv-tool/pipx auto-migration so each surface migrates only its own wrapper. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>