v0.6.16
Tokenomics-agent verification-report follow-up (Concerns 2/3 + dogfood enforcement + multi-branch self-heal regression). Three changes, one release — all bridge directly into the v1.0 Go rewrite parity matrix.
Fixed — multi-branch self-heal contract restored
The v0.6.15 blanket default-branch skip in the post-merge hook fixed the gh pr merge --squash --delete-branch unstaged-docs case, but broke local-merge regen on main. Concrete failure mode: when agent A merges feat/agent-a locally and agent B merges feat/agent-b against the same main, the merge driver fires for docs/timeline.md with a partial working tree (B's decisions-branches/feat__agent-b.md not yet checked out), producing a timeline missing B's content. The post-merge hook was supposed to sweep — but the v0.6.15 skip made it a no-op on main, freezing the partial output.
v0.6.16 tightens the skip: instead of "skip whenever current branch == default," the hook skips only when HEAD already matches origin/<default> (the actual fast-forward / pull-up case where regen-timeline.yml server-side is authoritative). Local merges that introduce new commits not yet on origin run regen normally, so the working tree reflects the merged-in decision content.
Surfaced by three new regression tests in tests/test_merge_driver.py (two-branch, three-branch, squash-then-merge variants). All exercise real git + logmind subprocess calls — no mocks. The whole dogfood loop assumes this contract holds; without it, every concurrent-PR cycle would silently lose decisions on local merges.
Added — logmind doctor PATH-resolution probe (Concern 3)
Tokenomics-agent's 2026-06-01 recurrence had a non-obvious root cause: logmind doctor reported current for the post-merge hook, but logmind init (invoked from the user's shell, via PATH) was writing a v0.3.4 hook body. The discrepancy: doctor was running via python -m logmind (PYENV_VERSION=3.11.8 → v0.6.13), while logmind typed at the shell prompt resolved through the pyenv shim to an older active pyenv → v0.3.4.
v0.6.16 adds _probe_path_resolution() in core/doctor.py. The probe runs shutil.which("logmind") + <path> --version and compares the resolved binary's version against the currently-running version. Drift surfaces as stale with a marker showing both versions + the conflicting path, so doctor exits non-zero on PATH-conflict (Stack status: DRIFT).
Added — commit-msg hook (dogfood enforcement)
Tokenomics-session feedback "why git add instead of logmind" revealed that even with AGENTS.md guidance, agents fall back to raw git commit on substantive code changes. v0.6.16 adds a commit-msg hook installed by logmind init (alongside post-merge + post-rewrite) that warns when:
- Commit message's first line does NOT start with one of the exempt prefixes (
logmind:,Revert,Merge,Bump version,chore(release):,fixup!,squash!) - Staged diff exceeds 20 lines across code-bearing extensions (
.py .go .ts .tsx .js .jsx .sh .yaml .yml .toml .rs .rb)
WARN by default. STRICT mode (exits 1, rejecting the commit) when .logmind/config.yml contains commit_msg_hook: strict: true. Bypass via git commit --no-verify for intentional overrides. The hook reads strict mode at runtime so users flip without re-installing.
Changed — AGENTS.md template bumps + strengthened framing
AGENTS.md.template: v5 → v6 — heading reframed to "REQUIRED for substantive commits" + new blockquote with "DO NOT run rawgit add/git commit/git push" warning that references the commit-msg hookAGENTS.md.slim.template: v7-pointer → v8-pointer — same strengthening with the contract sentence preserved verbatim ("logmind logreplacesgit add+git commit+git push")
The contract sentence stays load-bearing for tests/test_agents_consolidation.py discovery; new v0.6.16 framing is additive on top.
Validation gate
pytest -qgreen: 846 passed, 1 skipped (+17 over v0.6.15 — 3 self-heal + 9 commit-msg-hook + 5 PATH-probe).- After propagation: tokenomics agent's next
logmind doctorshould surface PATH-conflict if their pyenv shim still resolves to v0.3.4. Their next substantivegit commit(withoutlogmind log) will fire the warning. Multi-branch self-heal test guards regression for the v1.0 Go rewrite parity gate.
Go v1.0 parity carry-forward
Every v0.6.16 change is a parity item for the Go rewrite waves:
- B2 (hooks): port
_build_commit_msg_hook_body()tointernal/hooks/commit_msg_body.gowith byte-identical hook body - B3 (timeline): port the multi-branch self-heal tests to
internal/timeline/merge_driver_test.go - B4 (templates): bump embedded
AGENTS.md.template+ slim variant inembed.FS - B6 (doctor): port
_probe_path_resolution()tointernal/doctor/probe_path.go - Phase 2 convergence: cross-binary parity test (Python v0.6.16 vs Go v1.0 timeline.md byte-identical) is a release gate