Repository navigation
v4.10.1
v4.10.1 (2026-08-08)
Docs: memory-sync-init
brewdoc
Fixed
memory-sync-initHARD depth no longer deletes a rule file. Apaths:entry pointing at a tree that no longer exists is nowDANGLING: the dead entry is dropped from the frontmatter list and reported, and the rule file itself is never removed. Path resolution requires both probes to come back empty before a verdict is issued —git ls-files -- ':(glob)<pattern>'(the:(glob)magic stops git's*from crossing/, unlike a Claude Codepaths:glob) and a filesystemfind, so a git-ignored tree no longer reads as dead. Verdicts are per entry, not per file:OK | TOO_BROAD | TOO_NARROW | DANGLING | MISSING | CORRECTLY_GLOBAL, and an existingpaths:key is never stripped- PASS B precedence was ambiguous. The Borderline table now explicitly overrides the obvious-knowledge discriminator, and the "inverts the project default" class is stated as a KEEP. The deletion unit is the whole rule — its numbered row plus every continuation line — not a single line. A file cut by more than half is reported with its
lines_before/lines_afterratio - Non-growth vs. PASS A frontmatter repair contradicted each other. PASS A's shrink-only carve-out for repairing
paths:is now stated at all four sites that assert non-growth, and the ordering check accepts Phase 2 appends and HARD drops while still requiring surviving numbered ids to keep their number and relative order agent-auditread every agent as dead in any repo whose.gitignorehides.claude/— the ownership probe usedgit ls-files. It now probes the filesystem. Implied-but-unnamed tools and unverifiable command steps are reported, not silently strippedgenerate.shemit was not atomic. A mid-emit failure left a half install that every later emit refused, pushing the user toward the destructiveMEMORY_SYNC_FORCE=1. Emit now stages into amktemp -dinside.claude/skills/and lands with a singlerm -rf && mv- Command injection in
generate.sh: the skills counter passed a skill-directory name througheval; a directory namedx'$(...)'yexecuted. Fixed by passing real arguments. Also: repo root resolves viagit rev-parse --show-toplevel(orMEMORY_SYNC_ROOT), branch derivation walksorigin/HEAD-> any remote HEAD -> a sole local branch ->UNDERIVABLE,statusscans the reference files too and prints an identical key set whether or not the skill is installed, and scalars are flattened of newlines before substitution - Emitted skill self-sync covered 2 of 3 references —
memory-guide.mdwas excluded.memory-guide.mditself claimed NARROW-to-BROAD ordering (it is BROAD-to-NARROW), and global user-level memory is now marked OUT OF SCOPE: reported, never edited
Changed
- docs: the
memory-sync-initpage was written against a 3-file draft. It now documents the four emitted files, the six phases (GATHER, SYNC, VERIFY, SELF-SYNC, PROPOSE, REPORT), the twelve AI-filled blocks, a generator tool list withoutWrite,statusactually runninggenerate.sh status, and a new Depth: NORMAL vs HARD section
Quick Install
# 1. Add marketplace (one-time)
claude plugin marketplace add https://github.com/kochetkov-ma/claude-brewcode
# 2. Install plugins
claude plugin install brewcode@claude-brewcode
claude plugin install brewdoc@claude-brewcode
claude plugin install brewtools@claude-brewcodeAlready installed? Update
claude plugin marketplace update claude-brewcode
claude plugin update brewcode@claude-brewcode
claude plugin update brewdoc@claude-brewcode
claude plugin update brewtools@claude-brewcode