Repository navigation
v0.1.67 — doctor for plugin installs, clock check
v0.1.67 ships the 3 PRs merged on main since v0.1.66: two merge commits (#524, #527) and one squash merge (#526).
What ships
Doctor for marketplace plugin installs (#527, closes #525)
Marketplace installs ship no npm CLI, so you couldn't run doctor. Now /deeppairing:doctor works, backed by a self-contained server/doctor.mjs inside the plugin. It shares the diagnostic code with the npm doctor (clock, daemon, hook, ledger and session-lock checks), and INSTALL.md has terminal instructions.
- Report-only by default: it names the project it resolved and rejects unsupported arguments. A non-interactive
--fixcancels. --fix --yesstays local: it repairs local metadata, gitignore, checkpoint registration and verified local dead locks. It never kills daemons, removes global locks, or touches shared or user hook rows. It also never removes local Stop, PreToolUse or Bash ask rows, because installation can't prove the plugin is enabled for this project. Removing those needs interactive consent, with a warning. Mixed rows keep unrelated commands.- Settings backups first: before any consented settings write, doctor saves an exact-byte backup under a unique name, prints its path, and refuses to write if the backup fails. Report-only, cancelled and no-op runs create none.
- One npm-side change: the npm doctor's ledger diagnosis is now read-only, so it no longer creates a corrupt-file snapshot. Other repair behavior there is unchanged.
Doctor warns about a stepping or drifting clock (#524, closes #500)
Doctor samples the wall clock against the monotonic clock for about 400 ms. It warns, in second person with the fix, if the wall clock steps backwards or drifts. On WSL, the fix is the Windows Time service plus wsl --shutdown. It is warning-only, with no exit-code change and no network. The CONTRIBUTING doc has a "WSL: clock drift" section. This adds the diagnostic for #500; it doesn't claim the flaky tests are gone.
Delegate-first design: packet recovery no longer depends on the clock (#526, docs only)
The design now orders packet recovery by a durable per-debrief Ask generation instead of timestamps. Equal timestamps and backward clock steps can no longer hide a later answered question. No runtime behavior changes.
Not in this release: the delegate slices S1–S6, #430 and #434.
Review provenance
- #527: Implemented by Codex. Per the coordination board, Mitch assigned #525 to Sol 6.1; the GitHub record shows only the shared account. An independent reviewer's two P2 findings were fixed (stale-daemon kill and global-lock repair now need confirmation), and Sol re-approved
ea625bf0and9cf629af. An independent Claude Opus review approved9cf629af, and Astra held the merge to address its recommendations (disabled-plugin handling and settings backups). Sol approved the delta at3233c478. A post-merge Claude verification with a real packaged probe found nothing new. Integrated by Astra. - #524: a Sonnet builder and an independent Sonnet review (approve at
1952509d). - #526: Codex-authored, per the
codex/branch and the coordination board (it follows Astra's final audit of #507). Sol approved8a1357a1and the delta0f2c3c5e, a Claude Opus review approved8a1357a1, and a Claude delta ack approved0f2c3c5e. - Every round is recorded on its PR.
Verification
Measured on a fresh native clone, branch release/v0.1.67 off main a67e04ef:
- Version sources: all four read 0.1.67.
- Diff vs
main: 7 files, 7 insertions and 7 deletions (the four version sources plus thedaemon.js,standalone.jsanddoctor.mjsstamps). - Cold build:
pnpm install --frozen-lockfile, thenpnpm build:clean; the regenerated stamps are committed. - Typecheck: 3 of 3 tasks clean.
- Lint: 0 errors; mcp-server 218 warnings (cap 240), shared 3.
- Tests: full
FORCE_COLOR=0 NO_COLOR=1 pnpm testpasses on the first run, in the foreground: mcp-server 389 files and 5,861 tests, shared 15 files and 321 tests. No timing failures. - Checks:
version-lockstepandplugin-bundle-bootpass (2 files, 5 tests). - Rebuild: a second cold
pnpm build:cleanleavesgit statusclean, andgrep -rF "0.1.66" claude-plugin/serverreturns nothing. - Conflict markers: none.