0.4.5: workspaces, claim liveness, native Codex capture
Workspaces, liveness, and native Codex capture. Three things real fleets hit, fixed.
Added
- Workspace mode. Start your sessions in a directory that holds several repos and it just works: the capture hooks resolve the repo from the FILE being edited, not from where the session started, so each edit is captured into the repo it belongs to. Run
quilt setupat that workspace root once and it wires the root (where sessions load hooks from) plus every repo inside. Previously a session started above the repo silently captured nothing. - Native capture for OpenAI Codex.
quilt setupwiresapply_patchcapture hooks into~/.codex/hooks.jsonwhen Codex CLI is installed (strictly additive; your other Codex hooks are untouched). Codex sessions are captured per file under acodex-<session>id, multi-file patches included, and renames never re-attribute unchanged lines. One Codex reality, stated plainly by setup and doctor: Codex skips newly added hooks until you approve them once in an interactive session. Capture only for now; claim prevention on Codex comes later. - Dead actors can no longer strand live work. A claim whose holder shows no sign of life (no quilt activity for 5 minutes, or an ended session) and provably has nothing to protect (no attributed lines, a clean working tree under the target) is reclaimed automatically the moment someone else needs it: at claim time (the grant reports
reclaimedFrom), at edit time, and whenever a queue is wedged behind it. Uncontended claims keep their full TTL, and a quiet holder with real uncommitted work is never auto-reclaimed. - No more silent misattribution via claim adoption. An anonymous edit inside a claim adopts the holder's identity only when that holder is demonstrably alive. A dead holder's reservation is reclaimed and the edit lands under its real author; a quiet holder with uncommitted work triggers a loud denial instead. Previously the misattribution surfaced only at commit time as "you don't own any committable changes".
Full details in the CHANGELOG.