Skip to content

fix(doctor): clear the standing dot-doctor warnings - #5

Merged
phall1 merged 1 commit into
mainfrom
fix/sweep-doctor-warnings
Aug 17, 2026
Merged

fix(doctor): clear the standing dot-doctor warnings#5
phall1 merged 1 commit into
mainfrom
fix/sweep-doctor-warnings

Conversation

@phall1

@phall1 phall1 commented Aug 17, 2026

Copy link
Copy Markdown
Owner

dot-doctor reported four warnings on every run. Three were real; one could not be answered from a non-interactive process.

Before: 4 warnings · After: 1, deliberately left (see below)

chezmoi drift — 7 targets → 1

Two were mode-only and permanent by construction. blackbird install writes .codex/config.toml at 0600 and pi keeps ~/.pi/agent at 0700, while the sources declared 0644/0755 — so every apply lost the race and the warning could never clear. Both sources are now private_, matching reality and the safer mode.

Renaming those sources broke three hardcoded references, fixed here: checks/pi.sh:6, checks/chezmoi.sh:37, renovate.json:22. (The dot_pi rename is 28 files, all pure renames — no content changes, and every target path is unchanged since private_ is source-side only.)

The rest were handled on their merits rather than with a blanket apply:

target action why
.zshrc re-add live had a kimi-code PATH export; apply would have deleted it
.grok/config.toml re-add live had [models] default; apply would have deleted it
.config/opencode/opencode.jsonc apply source deliberately newer (blackbird-opencode 0.1.2 → 0.1.3)
autoresearch/package.json apply source pins @opencode-ai/plugin 1.4.7 over "*"
com.phux.update-check.plist apply tracked in source, simply never applied

gitstatusd

p10k spawns it lazily on the first prompt render, so a non-interactive dot-doctor run can never observe it — the warning carried no signal. Counting zsh processes doesn't help either: every tool-spawned subshell is one. The check now reports the daemon when running, accepts the binary being present, and warns only when the binary is missing — the condition that actually degrades the prompt.

lstags / .zwc

lstags was absent because its run_onchange build had never fired; built and installed from src/lstags. The stale .zwc was regenerated with dot-zcompile.

Left deliberately

.claude/settings.json still drifts. Its source is a modify_ script asserting permissions.defaultMode=bypassPermissions while the live file says auto. That's a standing disagreement about permission posture, not drift, and it isn't mine to settle — re-add can't capture it either, since modify_ scripts compute their output.

Verification

$ dot-doctor
2 warnings, no failures     # 'uncommitted changes' clears on merge

bash -n clean on all three checks; renovate.json parses; chezmoi apply --dry-run shows only .claude/settings.json and a pending run_onchange script.

🤖 Generated with Claude Code

Four warnings were reported on every run. Three were real and one could not be
answered from a non-interactive process.

chezmoi drift: seven targets reported as modified outside chezmoi. Two were
mode-only and permanent by construction — blackbird install writes
.codex/config.toml at 0600 and pi keeps ~/.pi/agent at 0700, while the source
declared 0644 and 0755, so every apply lost the race. The sources are now
private, which both matches reality and is the safer mode. Renaming those
sources broke three hardcoded references, in checks/pi.sh, checks/chezmoi.sh
and renovate.json, which are updated here.

Of the remaining drift, .zshrc and .grok/config.toml carried live edits that
apply would have deleted, a kimi-code PATH export and the [models] default
selection, so both are captured into source rather than reverted. The opencode
plugin config, the autoresearch pin and the update-check launch agent were
deliberately newer in source and are applied.

gitstatusd: p10k spawns it lazily on the first prompt render, so a
non-interactive doctor run can never observe it and the warning carried no
signal. Counting zsh processes does not help either, since every tool-spawned
subshell is one. The check now reports the daemon when running, accepts the
binary being present, and warns only when the binary is missing, which is the
condition that actually degrades the prompt.

lstags was absent because its run_onchange build had not fired; it is built and
installed. The stale .zwc was regenerated with dot-zcompile.

.claude/settings.json is left drifting deliberately. Its source is a modify_
script asserting permissions.defaultMode=bypassPermissions while the live file
says auto, so this is a standing disagreement about permission posture rather
than drift, and it is not mine to settle.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@phall1
phall1 enabled auto-merge (squash) August 17, 2026 01:49
@phall1
phall1 merged commit 070e0dc into main Aug 17, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant