Releases: thrillmade/logmind
Release list
v1.2.0
Changelog
- 66ccd99 [skip-logmind] feat(skill push): privacy gate layers 3+4 — content scanner + repo-visibility (§8.2 wave-2) (#143)
- c64e4a6 feat(v1.2.0): logmind log Go port + markdown self-healing (3 layers) (#152)
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
v1.1.0
Changelog
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
v1.0.1
Changelog
- 3ab27c7 [skip-logmind] chore(notify): port off Python import + idempotent fallback (§8.3) (#140)
- 6c908d4 [skip-logmind] chore(version): refresh stale docstring + SpecVersion 0.1.0 → 0.1.1 (§8.4 + #154) (#139)
- 2fbf93e [skip-logmind] chore: add dependabot auto-merge caller workflow (§8.1) (#138)
- a112d70 [skip-logmind] chore: re-pin dependabot-auto-merge to §8.6 SHA b208d22 (#144)
- 0ad6083 [skip-logmind] feat(skill push): privacy gate layers 1+2 (frontmatter + dir convention) (§8.2) (#141)
- 5a74ded chore(deps): bump thrillmade/clud-bug from 0.6.32 to 0.6.34 (#120)
- 231aa2a feat(check-links): exclude docs/reviews/PR-*.md from orphan check (SPEC §6.2) (#145)
- 637c655 feat(skill push): port logmind skill push from Python (G4.b) (#136)
- 0d77e0e feat(sync): port logmind sync from Python (B5b / G4.a) (#135)
- e294c2a feat: lead install with Go binary v1.0; deprecate Python install path (G6.a) (#134)
- 126e22b v1.0.0 cutover: Go rewrite → main (#132)
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
v1.0.0
Changelog
- b898da9 logmind: fix(B7): GORELEASER_CURRENT_TAG to disambiguate double-tagged commits
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
v1.0.0-rc3
Changelog
- f6c38ba logmind: Wire thrillmade-orchestrator[bot] App for cask-bump (G1.e.2)
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
v1.0.0-rc2
Changelog
- f3a727a chore(v1.0): polish before final tag — SpecVersion final + brew-not-pip suggestion (#131)
- 53d3767 logmind: fix(B7): wire HOMEBREW_TAP_PAT now that it's provisioned
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
v1.0.0-rc1
Changelog
- 20e2d77 B1.scaffold: Go module + cobra + version + snapshot infrastructure (#116)
- bca92f8 B2: git integration + hooks (install-hook, check-decisions, check-links, post-merge/post-rewrite bodies) (#117)
- f220d1d B3: derived doc generators (timeline, file-structure, tree, rebase) (#119)
- e075b02 B4: agent file templating (agents list/add/remove/update/migrate + inserter package) (#118)
- 35e1dbd B5: skill CLI (new/test/bench/audit/suggest) (#124)
- 2d15030 B6: config + doctor + init + self-update (+ v0.6.16 PATH probe carry-forward) (#125)
- 0ca203d B7: distribution (GoReleaser + brew + curl + Mac codesign + notarize) (#127)
- 2963283 carry-forward: v0.6.16 features into B2/B3/B4 Go ports (#128)
- e062462 fix(B7): release.yml startup_failure — replace Apple-Actions/import-codesign-certs with inline security commands (#130)
- 078d038 fix: strip 'origin/' prefix in post-merge hook's default-branch skip (#129)
- 6c6e3b0 logmind: bisect(B7): add workflow_dispatch inputs + packages:write back
- 772edce logmind: fix(B7): bisect release.yml — minimal version to identify startup_failure cause
- 5c00c19 logmind: fix(B7): remove empty env: block from GoReleaser snapshot step
- a50770e logmind: fix(B7): replace missing HOMEBREW_TAP_PAT secret with GITHUB_TOKEN
- ad34a28 logmind: fix(B7): tag-trigger glob pattern (v[1-9]+ → v[1-9]*)
- 6490670 logmind: test(B6 follow-up): port commit-msg hook tests from main to v1-go-rewrite
Install
- Homebrew (macOS / Linux):
brew install thrillmade/tap/logmind- Curl:curl -fsSL logmind.dev/install.sh | sh- Manual: download the matchinglogmind_VERSION_OS_ARCH.tar.gz
from the assets below, extractlogmind, drop into$PATH.
Verify checksums against SHA256SUMS before running unknown binaries.
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
v0.6.15
Hotfix surfaced by the tokenomics agent's v0.6.14 verification cycle.
Fixed — post-merge hook skips regen on default branch
After gh pr merge --squash --delete-branch, the post-merge hook fires on main. v0.6.14 correctly fixed the orphan-branch-blocks-checkout failure (issue #112), but on main the regen still ran — producing output that DIFFERED from origin/main (the squash compressed history that the local regen reads), leaving docs/timeline.md + docs/file-structure.md as unstaged modifications on every merge cycle. Every merge needed a manual git checkout -- docs/timeline.md docs/file-structure.md to make local main clean.
v0.6.15: the hook now exits 0 when the current branch matches refs/remotes/origin/HEAD's symbolic ref (the default branch). The regen-timeline.yml workflow already handles main server-side; local main converges on next pull. Trade "immediate local view of the new entry" for "main matches origin/main after every merge" — the latter is what users expect.
Trade-off accepted (alternatives considered + rejected):
- Pre-merge regen via a server-side workflow committing to PR branch → invasive (extra commit per PR, requires PAT, adds CI time); deferred to a possible v0.7.x design
- Auto-amend the merge commit on main locally → surprising; would rewrite history mid-pull
- Document
git checkout -- docs/as the recommended cleanup → doesn't actually solve the "main should match origin/main" intent
Files: src/logmind/core/gitattributes.py _build_post_merge_hook_body extends the orphan-branch guard with a default-branch guard; tests/test_merge_driver.py adds test_post_merge_hook_body_embeds_default_branch_skip_logic.
Validation gate
pytest -qgreen: 829 passed, 1 skipped (+3 over v0.6.14).- After v0.6.15 propagates + tokenomics agent re-upgrades: next
gh pr merge --squash --delete-branchshould leavegit statusclean on main (no unstaged docs files). Verifies the structural fix end-to-end.
v0.6.14
Three propagation-pipeline polish fixes surfaced during the v0.6.13 cycle (2026-06-02). All three address pain points that required manual intervention during v0.6.13 propagation and that the workflow should handle structurally going forward.
Fixed — Doctor content-diff for installed hooks (issue #112 addendum)
logmind doctor now content-diffs installed .git/hooks/post-merge (and post-rewrite) bytes against the bundled canonical body, in addition to the v0.6.10 version-marker equality check. Closes the failure mode the tokenomics reporter flagged in the #112 addendum: "doctor's check is too cheap a signal" — if the hook drifts after install while preserving the marker line (manual edit, clobber-then-restore by another tool, marker-propagation bug), the v0.6.10 check would still report current while the body is genuinely stale.
v0.6.14: marker equality stays as the cheap fast-path; the content-diff is the expensive correctness check that fires when it matters. Drift surfaces as STALE (content drift) with the existing "reinstall via logmind self-update" remediation pointer.
Files: src/logmind/core/doctor.py (_probe_post_merge_hook + _probe_post_rewrite_hook); tests/test_merge_driver.py (new content-drift and byte-identical tests).
Fixed — logmind-self-update.yml v7: [skip-logmind] PR title prefix
Bot-generated propagation PRs from logmind-self-update.yml are by-definition NOT decision commits — they're pin-bumps + template body refreshes owned by the workflow itself. v0.6.13 propagation surfaced this as a consistent failure: consumer-repo check-decisions.yml failed every PR because the diff exceeded the 20-line threshold AND no decision file was present. The fix required manually editing each PR title to include [skip-logmind] (the existing maintainer-override path) + closing and reopening the PR to re-fire the title-cached check-decisions workflow.
v0.6.14: the self-update template now sets [skip-logmind] logmind self-update: X.Y.Z → A.B.C as both the commit message AND the gh pr create --title at workflow creation time. Eliminates the manual editing + close+reopen ritual entirely.
Files: src/logmind/templates/github/logmind-self-update.yml.template (bumped to v7); tests/test_v0_2_1_audit_fixes.py (new test + marker bump).
Fixed — logmind-self-update.yml v7: PyPI CDN-aware retry
The version-check step polls the PyPI simple/ index OR JSON API to find the latest published logmind. Both propagate via a CDN that lags 30-60s behind a publish event. Cron-triggered self-update workflows can fire during the gap, see "Latest: ", and silently no-op. Hit on v0.6.12 (1/5 propagations) and v0.6.13 (1/5 propagations).
v0.6.14: wraps the version-check in a 3-attempt exponential backoff (0s → 30s → 60s). If all 3 see the same version, accept and proceed as today (legitimate no-op). If any sees a higher version, use it. Adds 0-90s to worst-case workflow runtime; eliminates the silent-skip class of bug.
Files: same template; same test file.
Validation gate end-to-end
After v0.6.14 propagates through all 5 thrillmade consumer repos, the next release cycle (v0.6.15+) should:
- 5/5 consumers' self-update workflows pin-bump-only releases succeed first attempt with NO manual title editing, NO close+reopen rituals, NO CDN-race silent-skips
- doctor on any repo with a hand-edited or drifted hook body reports
STALE (content drift)with thelogmind self-updateremediation pointer