Repository navigation
v0.12.0
capcom — v0.12.0 — 2026-10-27
This release makes Tree locks safer to share between sessions and worktrees, lets the issue outline be filtered, and turns index and lock failures into messages that say what to do next.
Breaking changes
- Lock records no longer hold the token in the clear — a lock record now stores only a fingerprint of the Lock token, so reading the lock directory tells you who holds the lock but not how to act as them. An older capcom in the same clone cannot match the new record and treats it as held by another session. What to do: upgrade every capcom that works in the clone; if an older one is stuck, clear the lock with
capcom lock break. Records written by older versions still work and are converted the next time the lock is touched or resumed. --plantakes a plan name, not a path —capcom create --planandcapcom update --plannow refuse (exit 1) a value that is absolute, contains/or\, or is.or.., and the message lists your plans directories. What to do: pass the plan's file name alone, with or without.md;--plan ""still clears it, and a name found in no plans directory is still saved, now with a warning.--jsonon a bare command group is a usage error — runningcapcom,capcom know,capcom dep,capcom lockorcapcom relatedwith--jsonand no subcommand now fails with<command> does not support --jsonand exit 2, instead of printing help and exiting 0. What to do: name a subcommand, or use--helpto see the help.- The AGENTS.md block needs a refresh — the Tree lock paragraph that
capcom agentswrites now explains that the lock is a signal, not a barrier: writes are never refused, but they warn and name the holder. Until you refresh it,capcom checkandcapcom agents --checkreport your existing block as out of date. What to do: runcapcom agentsonce after upgrading.
New
list --treenow filters —capcom list --treecombines with--status,--category,--label,--no-label,--type,--priority,--plan,--plannedand--unplanned, keeping each matching issue together with its parents; a parent shown only for context ends with[context](and"context": truein--json). Only--limitstill cannot be combined with--tree.- Writes tell you when another session holds the worktree —
create,update,log,close,reopen, moves, removals, dependency and Note edits, andfmtoragentswithout--checkstill succeed, but now warnlocked by <holder> (<purpose>) …; if it is yours, carry onwhen the Tree lock is held for something else. Writing the issue you started yourself, andstart,finishand thelockcommands, stay quiet. finish --keep-lockhands you the next command — it now prints the Lock token and itsnext:line spells outcapcom start <next> --token <token>, so you can carry the lock straight on to the next issue (TOKEN=in--kv,lock.tokenin--json). A plaincapcom startrefused aslockednow suggests the same--tokenform.prime --jsonreports whether this worktree is free — its data gains aworktreeentry with the worktree's key, its lock state (free,held,stale,invalidorunreadable) and the same advice as the text'sthis worktree:line.
Improved
- Large stores list faster —
list,ready,next,searchand the other commands that read many issues now fetch them from the index in a fixed handful of reads instead of several per issue, so a store with thousands of issues answers noticeably sooner; output is unchanged. - "Planned" means the plan file exists —
capcom primeandready/next --planned/--unplannedcount an issue as planned only when its plan names a file in one of your plans directories.list --planned/--unplannedstill go by whether the plan field is set, and their help now says so. - Checking a lock no longer writes to disk —
capcom lock check,capcom lock status,capcom primeand the terminal UI no longer create.git/capcom/locks/or a guard file just to read the lock. On a read-only lock directory,lock checknow answers 0 or 3 from the record instead of failing with exit 1. - A busy index explains itself — when another command such as
capcom reindexholds the index past the five-second wait, commands now fail withthe index is busy: … retry when it finishesinstead of a rawdatabase is locked (SQLITE_BUSY)error, andcapcom primeno longer advises a reindex for it. - A damaged lock record points to the fix —
lock check,lock acquire,lock touch,lock releaseandstartmeeting a lock record that cannot be read now fail withthe lock record cannot be readand the hintcapcom lock status, then capcom lock break, in text and--json. - Warning when frontmatter comments are dropped — editing, moving or removing an issue or Note whose frontmatter contains a YAML comment now warns
frontmatter comments are not kept; capcom writes frontmatter in canonical form, instead of losing the comment silently. - Tree and dependency JSON match the text —
list --tree --jsonnow includes each parent'schildrenprogress (total,closed) and themorecount of a--depthcut, anddep list --jsonmarks an issue shown as(see above)withrepeat: trueand carriesmore.
Fixed
- Removed worktrees no longer leave their lock behind — a lock left by a linked worktree that was removed, or removed and re-created at the same path, now counts as free:
capcom lock checkexits 0 andlock acquireorstarttakes it over with a new token.lock statusandprimeshow such a lock asfree (orphaned record of a removed worktree), with"orphaned": truein--json. - Moving an issue or Note keeps Note Refs valid —
capcom mvandcapcom know mvnow rewrite every Note Ref that pointed at the moved file or anything under it, keeping any#symbol, socapcom checkno longer fails on stale Refs afterwards. Both commands list the Notes they changed asrefs_rewritten(REFS_REWRITTEN=in--kv). capcom reindexrepairs a corrupt index — it now deletes a damagedindex.dbwith its-waland-shmfiles and builds a fresh one, where it used to fail on the bad file; other commands meeting a corrupt index fail with the hintcapcom reindex.- Edits that keep a file's size and timestamp are no longer missed — the index now also notices a change that leaves a file's size and modification time as they were, so
list,showandsearchshow the new content. The index rebuilds itself once on the first command after upgrading. - A lock from a fast clock no longer sticks — a Tree lock whose heartbeat is dated more than one TTL in the future now counts as stale, so
capcom lock acquire --take-stalecan take it over, and thelockederror no longer shows negative ages. - Resuming a lock under a new purpose retires the old one —
capcom lock acquire --purpose <new> --token <token>orcapcom start <id> --token <token>now moves the lock to the new purpose, so a session still using the old purpose is refused aslocked(exit 3) instead of taking the lock back.
Docs & install
- Search help covers Chinese, Japanese and Korean text —
capcom search --helpandcapcom know search --helpnow explain that a run of CJK characters without spaces counts as one word, so登录超时问题is found by the whole run and not by登录. - Corrected examples — the
--refexample in the README and incapcom know add --helpnow points at a file that exists, and the terminal UI guide no longer shows a fixed capcom version in its sample screen.