You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: harden isolation, elision, and concurrency per adversarial arc review
A 16-agent adversarial review (4 dimensions, every finding refuted-or-
confirmed against live code) confirmed 11 findings; all fixed except one
deliberate deferral (exclusive gate held across approval waits — needs
the approval-split refactor; recorded in tasks/todo.md).
- DATA LOSS (high): a child that committed its work left a clean
worktree, so cleanup removed it and orphaned the commits. Creation now
records a base-SHA sidecar (next to the worktree, never inside it);
commits ahead of base count as changes and force retention, with
unknown provenance failing closed to retention.
- FALSE ISOLATION (high): foreground shell inherited the process cwd and
relative file-tool paths resolved against it, so isolated children
mutated the original repo. Host exec (protocol, local, ssh, ACP
fallback) gained a cwd argument; foreground shell passes the runtime
work dir, and write/replace/read resolve relative paths against it
while preserving the relative-escape error contract.
- REGRESSION (high): safe mode now disables the read-only-command prompt
elision — users who disabled auto-approval keep every checkpoint.
- REGRESSION (high): untrusted-project hook stripping now publishes a
session notification (web/ACP visible), not just a shell log line.
- MCP readOnlyHint annotations enable supports_parallel via property;
worktree add/remove serializes per repo; CHANGELOG documents the
same-step serialization and stderr-diagnostics behavior changes.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,7 @@ GitHub Releases page; `0.8.0` is the new starting line.
15
15
16
16
## Unreleased
17
17
18
+
-**Adversarial branch review hardening.** A multi-agent review pass confirmed and fixed: committed-but-clean isolation worktrees are now retained (commits ahead of the creation base count as changes — they were previously orphaned on cleanup); foreground shell commands and relative-path file edits now resolve against the agent's work dir, so worktree isolation actually binds them (host exec gained a `cwd` argument); safe mode now also disables the read-only-command prompt elision; MCP tools annotated `readOnlyHint` run in parallel in the same-step gate; worktree add/remove serializes per repo. Behavior notes: same-step tool calls without `supports_parallel` now serialize deterministically (previously fully concurrent), and text-mode error diagnostics moved to stderr — capture `2>&1` or use `--output-format stream-json` if you scraped stdout.
18
19
-**The agent now knows its own permission posture.** A live permissions-state reminder renders the enforced profile, safe-mode/yolo/auto flags, mutation/network allowances, session-approved actions, and the shell gate's command-shaping rules — re-emitted exactly when the posture changes (/yolo, /auto, /trust, new approvals) instead of the model discovering policy through denied tool calls.
19
20
-**Edits recover from whitespace and smart-punctuation drift.** StrReplaceFile no longer hard-fails with "old string not found" when the only mismatch is trailing whitespace, indentation, or smart quotes/dashes: a graduated line-window ladder relocates the edit, replaces the actual file slice (preserving CRLF endings), and names the relaxation it used in the tool message. Multiple fuzzy hits without replace_all still error, so ambiguity is never silently resolved.
20
21
-**`isolation="worktree"` is now enforced for background write agents.** Previously it only recorded intent, so parallel coders shared one working tree and could clobber each other. A write-profile child now runs in its own git worktree of HEAD; its final report names the worktree path with a diff summary so changes merge deliberately, clean worktrees are removed, non-git roots fail with an actionable error, and read-profile children ignore the request.
0 commit comments