-
v0.2.1.0 — 2026-06-05 Stable
released this
2026-06-05 10:50:13 -07:00 | 90 commits to main since this releaseFixed
secrets rekeyno longer bricks dotenv stores. The re-encrypt loop used a bare"$dir"*glob, which never matches dotfiles — so.envblobs were decrypted to the temp dir but never re-encrypted, leaving them on the old key while the new key overwrotekey.txt. After a rotation, every dotenv file in the store was undecryptable. The glob now mirrors the decrypt loop ("$dir"* "$dir".*), and a round-trip test (push → rekey → pull) pins it. If you ranrekeyon an earlier version andpullnow fails withno identity matched any of the recipients, your blobs are on a pre-rotation key — recover with an oldkey.txtfrom another machine.secrets initon a second machine now fails helpfully instead of half-initializing. Copyingkey.txtinto~/.secretsand then runninginit(instead of cloning your secrets repo) used to rungit init, crash on the existing key, and leave a store with no.gitignore— a state where a laterpushwould commit the private key. The guard now fires beforegit init, leaves the key untouched, and prints the exactgit clonecommand to run — using the real remote URL when your.secrets-storefile declares one.
Security
- The private key can no longer be committed by a store missing its
.gitignore.push,pull, andrekeynow self-heal store protections immediately before anygit add -A: a missing or corrupted.gitignore(one without thekey.txtline) is rewritten, and the pre-commit hook is reinstalled if absent. The heal runs after the fast-forward pull, closing a window where remote history without a.gitignorecould strip protection mid-push. - An already-tracked
key.txtis now untracked automatically..gitignorecan't untrack a file that was committed in the past; the heal now removes a tracked key from the index with a warning that history may need scrubbing and the key may warrant rotation.
Changed
- Project
CLAUDE.mdgained agent skill-routing guidance and an updated test-suite count (126 bats tests, up from 113).
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download