From db87a45ca3207489638e5b230cbdebcee70bb0b8 Mon Sep 17 00:00:00 2001 From: Eason Liang Date: Fri, 28 Aug 2026 09:21:13 +0800 Subject: [PATCH] docs: add File-Write Safety feature guide New page covering the guarded write path (observed vs unobserved writes, the four rejection messages), per-write checkpoints, per-step change cards, rollback, and the checkpoints settings. Wires the page into the sidebar, the features index, the chat interface guide (change cards), the checkpoints config list, and the apply-patch / edit-file / edit / write-to-file tool reference pages. Includes four screenshots (summary + full change cards, rollback state, checkpoints settings). --- .../available-tools/apply-patch.md | 7 + .../available-tools/edit-file.md | 7 + docs/advanced-usage/available-tools/edit.md | 7 + .../available-tools/write-to-file.md | 7 + docs/basic-usage/the-chat-interface.md | 4 + docs/features/checkpoints.mdx | 1 + docs/features/file-write-safety.md | 127 ++++++++++++++++++ docs/features/index.md | 1 + sidebars.ts | 1 + .../file-write-safety/change-card-full.png | Bin 0 -> 22698 bytes .../file-write-safety/change-card-summary.png | Bin 0 -> 7034 bytes .../img/file-write-safety/rollback-state.png | Bin 0 -> 6346 bytes .../settings-checkpoints.png | Bin 0 -> 22723 bytes 13 files changed, 162 insertions(+) create mode 100644 docs/features/file-write-safety.md create mode 100644 static/img/file-write-safety/change-card-full.png create mode 100644 static/img/file-write-safety/change-card-summary.png create mode 100644 static/img/file-write-safety/rollback-state.png create mode 100644 static/img/file-write-safety/settings-checkpoints.png diff --git a/docs/advanced-usage/available-tools/apply-patch.md b/docs/advanced-usage/available-tools/apply-patch.md index 9e60c56d..5a1a54c0 100644 --- a/docs/advanced-usage/available-tools/apply-patch.md +++ b/docs/advanced-usage/available-tools/apply-patch.md @@ -108,3 +108,10 @@ The patch format uses custom headers followed by unified diff blocks: - [`apply_diff`](/advanced-usage/available-tools/apply-diff): Use for single-file search-and-replace with fuzzy matching - `apply_patch`: Use for multi-file operations with unified diff format - [`write_to_file`](/advanced-usage/available-tools/write-to-file): Use for creating entire new files + +--- + +## Write safety + +This tool publishes through the guarded write path: the write is checked against the file's observed version, and a rejected write (for example, the file changed after it was read) returns a re-read-then-retry error the agent can act on. See [File-Write Safety](/features/file-write-safety). + diff --git a/docs/advanced-usage/available-tools/edit-file.md b/docs/advanced-usage/available-tools/edit-file.md index bfce915c..a17df325 100644 --- a/docs/advanced-usage/available-tools/edit-file.md +++ b/docs/advanced-usage/available-tools/edit-file.md @@ -89,3 +89,10 @@ When the `edit_file` tool is invoked, it follows this process: - [`apply_diff`](/advanced-usage/available-tools/apply-diff): Use for precise, context-aware edits with fuzzy matching These are different implementations of search-and-replace with varying capabilities. + +--- + +## Write safety + +This tool publishes through the guarded write path: the write is checked against the file's observed version, and a rejected write (for example, the file changed after it was read) returns a re-read-then-retry error the agent can act on. See [File-Write Safety](/features/file-write-safety). + diff --git a/docs/advanced-usage/available-tools/edit.md b/docs/advanced-usage/available-tools/edit.md index 108aaa4d..f09eb4a9 100644 --- a/docs/advanced-usage/available-tools/edit.md +++ b/docs/advanced-usage/available-tools/edit.md @@ -89,3 +89,10 @@ When the `edit` tool is invoked, it follows this process: :::info Deprecated Alias `SearchAndReplaceTool` is a deprecated internal alias for `EditTool`. They are the same tool. ::: + +--- + +## Write safety + +This tool publishes through the guarded write path: the write is checked against the file's observed version, and a rejected write (for example, the file changed after it was read) returns a re-read-then-retry error the agent can act on. See [File-Write Safety](/features/file-write-safety). + diff --git a/docs/advanced-usage/available-tools/write-to-file.md b/docs/advanced-usage/available-tools/write-to-file.md index 10b0be2f..dd2b639a 100644 --- a/docs/advanced-usage/available-tools/write-to-file.md +++ b/docs/advanced-usage/available-tools/write-to-file.md @@ -198,3 +198,10 @@ export function debounce(func, delay) { 18 ``` + +--- + +## Write safety + +This tool publishes through the guarded write path: the write is checked against the file's observed version, and a rejected write (for example, the file changed after it was read) returns a re-read-then-retry error the agent can act on. See [File-Write Safety](/features/file-write-safety). + diff --git a/docs/basic-usage/the-chat-interface.md b/docs/basic-usage/the-chat-interface.md index 05e4f062..ca35c852 100644 --- a/docs/basic-usage/the-chat-interface.md +++ b/docs/basic-usage/the-chat-interface.md @@ -69,6 +69,10 @@ For more productivity tips, check out our [Tips & Tricks](/tips-and-tricks) guid * **Copying Text:** You can copy text from the chat history by selecting it and using the standard copy command (Ctrl/Cmd + C). Some elements, like code blocks, have a dedicated "Copy" button. * **Expanding and Collapsing**: Click on a message to expand or collapse it. +### Change Cards + +When a step changes files, a change card appears in the chat listing each file with its additions and removals. The card offers **Rollback step** (restore every file the step touched) and a per-file rollback button, each confirmed before anything is written. Cards are powered by per-write checkpoints and the per-task change journal — see [File-Write Safety](/features/file-write-safety). + ### Mermaid Diagrams Zoo Code renders Mermaid diagrams directly in chat. Diagram backgrounds, labels, lines, and exported PNGs follow your active IDE color theme, including light and high-contrast themes. If you change themes while a conversation is open, existing diagrams update automatically. diff --git a/docs/features/checkpoints.mdx b/docs/features/checkpoints.mdx index e380d7eb..ed25c141 100644 --- a/docs/features/checkpoints.mdx +++ b/docs/features/checkpoints.mdx @@ -54,6 +54,7 @@ Access checkpoint settings in Zoo Code settings under the "Checkpoints" section: 1. Open Settings by clicking the gear icon → Checkpoints 2. Configure checkpoint behavior: - Check or uncheck the "Enable automatic checkpoints" checkbox + - Check or uncheck "Checkpoint after each file write" (on by default) — takes a snapshot after every successful file write by the agent, which powers the per-step change cards and rollback. See [File-Write Safety](/features/file-write-safety) - Adjust the "Checkpoint initialization timeout" (10-60 seconds, default: 30s) Checkpoint settings in Zoo Code configuration diff --git a/docs/features/file-write-safety.md b/docs/features/file-write-safety.md new file mode 100644 index 00000000..1dc64622 --- /dev/null +++ b/docs/features/file-write-safety.md @@ -0,0 +1,127 @@ +--- +description: How Zoo Code guards every file the agent writes — version-checked writes that fail loudly instead of silently clobbering, per-write checkpoints, per-step change cards, and one-click rollback. +keywords: + - file write safety + - guarded writes + - version guard + - atomic writes + - write rejection + - stale version + - change cards + - rollback + - per-write checkpoints + - change journal +--- + +# File-Write Safety + +When the agent writes a file, Zoo Code checks the on-disk state against what the agent actually saw before the write is published. If the file changed underneath — by you, another agent instance, or a background process — the write is **rejected loudly** with a message that tells the agent exactly what to do (re-read the file, then retry) instead of silently overwriting your changes. + +Every accepted write is also **atomic** (the file either holds the old content or the new one, never a partial write) and is recorded: a checkpoint snapshot per write and a one-line journal entry per change, which power the per-step change cards and the rollback controls in the chat. + +--- + +## How a write is guarded + +Three pieces work together: + +- **Version token** — a fingerprint of the on-disk file state: device, inode, size, and the file's modification and change times (in nanoseconds). Two reads of an unchanged file produce the same token; any change produces a different one. +- **Observation** — reading a file records its version token for the task. A write is only allowed to proceed against a file the agent has observed (read) first. +- **Guarded publish** — the write is re-checked against the observed token at publish time: + + | Write kind | Guard | + |---|---| + | Create a new file | Fails if the file already exists and was not read first | + | Update (overwrite) | Publishes only if the on-disk token still matches the observed one | + | Edit (literal replace / patch) | Requires a prior observation, then publishes only on a token match | + +Writes to the same file are ordered through a per-path queue, so concurrent tool calls cannot interleave half-written states. The actual bytes are published by the atomic write primitive: write to a temporary file in the same directory, then rename over the target — a crash mid-write leaves either the old or the new content, never a truncated file. + +--- + +## When a write is rejected + +A rejected write does not happen silently. The tool returns an error to the agent that names the problem and the fix: + +- File not read yet -- read the file, then retry. — the agent tried to edit a file it never read. It reads the file, then retries the same edit. +- File already exists at (path) and was not read before this write -- read the file first, then retry. — a create-style write targeted an existing file the agent had not read. +- Stale version -- the file changed since you read it (expected (token), current (token)); re-read the file, then retry. — the file was modified after the agent read it. The write is refused and the agent re-reads, so your newer content becomes the base for the retry. +- File was deleted after it was read -- the version recorded at read time (token) no longer exists; re-read the file, then retry. — the file was removed after the read. The agent re-reads (creating a fresh observation) before retrying. + +Real I/O failures (permission denied, disk error) are surfaced as I/O errors, not guard verdicts — the guard only rejects on a state mismatch. + +Because a rejection is a normal tool error, the agent recovers on its own: it re-reads the file, re-bases its edit on the current content, and retries. You do not need to intervene unless you want to. + +--- + +## Per-write checkpoints + +With checkpoints enabled, Zoo Code snapshots the workspace **after every successful agent write**, in addition to the task-start baseline. The snapshots live in the same shadow Git store that powers the existing [Checkpoints](/features/checkpoints) feature — no new storage. + +The behavior is controlled by the **Checkpoint after each file write** setting (on by default) in Settings → Checkpoints: + +- **On** (default): each accepted write produces its own checkpoint, so a change card can roll back to the state *before* that specific write. +- **Off**: checkpoints are only taken at the existing coarser cadence. + +--- + +## Per-step change cards + +After a step in which the agent changed files, a **change card** appears in the chat: + +Change card summary: three files changed this step with per-file add/remove counts and a Rollback step button + +*The summary card lists each changed file with its additions and removals, plus a step-level rollback button.* + +- **Summary** (default): file names with added/removed line counts. +- **Full**: the unified diff for each file, shown inline in the card. Selected with the **Show full diff in change cards** setting: + +Change card full detail with inline unified diffs for each changed file + +The card data comes from the per-task change journal (changes.jsonl), which records one line per written file: the file path, the operation (created or modified), and the checkpoint the write produced. The journal is appended one line at a time; if a line is ever torn, the loader repairs the tail and keeps the readable prefix. + +--- + +## Rollback + +The change card offers two rollback scopes: + +- **Per file** — the rollback button on a file row restores that one file to the content it had at the step's checkpoint. The other files of the step are untouched. +- **Per step** — the **Rollback step** button restores every file the step touched. + +Each action asks for confirmation before anything is written: + +Change card with per-file rollback states: one file rolled back, one failed rollback, and a step in progress + +Rollback reuses the existing checkpoint restore service — the same shadow Git store and the same restore primitive the Checkpoints UI uses — so a rolled-back file is restored exactly to the checkpointed content. Failures are reported per file in the card: a rollback that cannot restore one file says so next to that file instead of failing the whole step. + +Rollback requires checkpoints to be enabled for the task. If they are not, the card shows a message instead of acting. + +--- + +## Settings + +| Setting | Default | Effect | +|---|---|---| +| **Checkpoint after each file write** | On | Takes a checkpoint after every successful agent write (see [Checkpoints](/features/checkpoints)). | +| **Show full diff in change cards** | Off (summary) | Full: show the inline unified diff in change cards. Summary: file list with line counts. | + +Checkpoints settings section showing the per-write checkpoint and change card detail controls + +Both settings are regular persisted settings: they round-trip through the settings export/import and apply to new tasks once saved. + +--- + +## Default write path + +The file-write safety guards apply to every file the agent writes — write-to-file, edit-file, search-replace, and apply-diff all publish through the guarded path. The diff-approval behavior that pairs with it: when the agent edits a file, the change is approved in the chat (the change card above) rather than opening a separate diff editor, so the write happens while your focus stays in the conversation. + +--- + +## Where the data lives + +| Data | Location | +|---|---| +| Checkpoint snapshots (per write + task start) | The task's shadow Git checkpoint store (same as the existing Checkpoints feature) | +| Change journal | changes.jsonl inside the task's storage directory | +| Version tokens | Computed on demand from file statistics; nothing is stored | diff --git a/docs/features/index.md b/docs/features/index.md index 8e0aefb1..af380120 100644 --- a/docs/features/index.md +++ b/docs/features/index.md @@ -32,6 +32,7 @@ Discover the powerful features that make Zoo Code your ultimate AI-powered codin ### Workflow Management - [**Task Todo List**](/features/task-todo-list) - Track progress on complex multi-step tasks - [**Checkpoints**](/features/checkpoints) - Save and restore conversation states +- [**File-Write Safety**](/features/file-write-safety) - Version-guarded writes, per-write checkpoints, change cards, and rollback - [**Boomerang Tasks**](/features/boomerang-tasks) - Reusable task templates - [**Custom Modes**](/features/custom-modes) - Create specialized AI assistants for specific workflows diff --git a/sidebars.ts b/sidebars.ts index 33c5b5cd..92660f71 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -27,6 +27,7 @@ const sidebars: SidebarsConfig = { "features/auto-approving-actions", "features/boomerang-tasks", "features/checkpoints", + "features/file-write-safety", "features/code-actions", "features/codebase-indexing", "features/custom-instructions", diff --git a/static/img/file-write-safety/change-card-full.png b/static/img/file-write-safety/change-card-full.png new file mode 100644 index 0000000000000000000000000000000000000000..825fa0e3c1de3e9c9fe8a95428d5529225bce8a7 GIT binary patch literal 22698 zcmb@tby!qg*gi^wfFK~Dl!Cwj3KG&W(u@K_mwP9HTdyp|#w`Gf~QI^y>8kJCrTzoWd*f*yBC zmucjX(NTJDhhKhwvuF;sh4|&D=Rq~`-~p{Fj-GwzkG6C+p@fyUzVNlx7M^BC z7k*w3O-cv;7EJsy9i+9~bji0fVzQ$@o7k`h-I5`?KNjr!l=j~BM}Nxum@77%==zF~ zyS`$v0Z#$<|GDCTD6anphhcslgax_&>AzPzC=2HQ%vV^bxVSh=LlP1a=j-QgapA+y z4!5jNs?55hfv=1i+%LyhiM&=?rE7}Dr_aLlF4xb0h`shL6-go}^uGFKYk4FJyg;zY zKu<3*Jv~~gw78gIV!GDegjv>%M&jFw{hZe53rJXiV|O%TC^@t1L`iY+^XJdCOi_4L z)n6s+yq$G7I?Z~e>I%jV3ezU$Prk}V;zA4UW?eSVd~wjb<+O&4(L8&Nr1yh{u&UL# zWqLp~H9+UW!opUaXzU%Ctm3(#9Z)Qoea18&w8o$WzAbJJ>3o|zIrbz}j4#iR+qpR_ zt9g&Hj25gPb3G4HSf~VJPtLE391oIM%nw47mwPLo-+&VM?@~YNfm2aY#m!v4wg-9Z zkw6Dp4Zid4dD(X1fUq%B$eR0}-Nbzn-#*$421AZpZOzn{?#e#edx;O?#zkKh#a)U> zN*YCPlicFaU(M+ZtZkc{H{zk6#8!VarGFxC7~Y)KV&OwYYSvSkV>P`RI?sg+q z8o?(h?$U3p3J$2XwKbh0?WCagY&u&mVqD~tF*U-BSZ&v(!r&^_WfSV!tJr3bm6tgA zdtOWZKfOLMj499NrPLSwY)mg6mrfpi>l@iBIk8pM!o61g+I6;iqmzpQ6@QTyKbc~j zJ<~IVaLo5=_UjAYNjN|b(o+Ng<~3e4G}I!2s7fC=<>PwKa;(*l17qK0$=F>pmeTsI z8Sd?U#uAOpn8rU=-zwO`LC10HN}aA|Uny>6$4E6eq9LK+J52+-;I-!6I;RqEH&v)u z73wlR$gbVh?x(SgZLWk;y0;Mck$q&Nj$lfw*$o8g<;4T3P~Nh9FUfWl8KaeRX-=0H zz%u3sy^eEJ0#;gnTy#LQZy9?~fcqFRh=r^+6PaC>NDhQ&)%0W*SEy|gI@AqG`Sn#Lb13=oLUjh47xK!3RE;6paf?hg!2zN_!soOV{ejE4D-O!H&G z?VuA^)cY=_KD4{r2}f6IqoGBB-`yob%kY2iyjXTYtE3vb*sd1P{;hcPcsFfo;kHziVox-?U-}&DfM(n;fJ)JnGk&t zzwuK%_{^^0I}@ndk$C{WbL+LGH;;V%D)S1d*a@#S{K<$1F;OVL3!SEWsr?iWgdF3J zBF4N$odl}DxuZp`IS;em6pw^X6YiSCZQmAi~W+(p<$&3o{nn#5DJRM|ZFyeC; zR0j`5sV;j&Uf0A2=P5KN`1m*k2!2pTG4JEIt7%gdcJc1b9(Mf@VKb1eApf&jpak%=vGlt0kR);#VCsE!R6q ztMtO!exHxvbJ{P^v(*aNCp+KB!9yOC=%S>nWsis3G{p%}t4zQ0JGht6O6L3Eqs&or z3<7DYCDDMVYPVzJgU{I^;{=z0gJ2=L;DTg@$$fn2Y&f>Q>CAO`NjnDTI)|8H!`nUE z*o-Mf-}bkz-%gL2d%$;{g7BbOcJ@);UT8hG#_P~Y^iQJt_xisls$2g(Vf~Y+?*EhX z{=NS1x$mExH*{?I>eVYxPqEXciV8

xCAd(a}*L#r^X}t|6%sA~wU439=GQ64_g9 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 literal 0 HcmV?d00001 diff --git a/static/img/file-write-safety/change-card-summary.png b/static/img/file-write-safety/change-card-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..3064ec924bb06ff7c7ad4690b6a8c02782864a88 GIT binary patch literal 7034 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 VQgMrXDgg)w!E}vvDz)!M{U5ZdFN6R9 literal 0 HcmV?d00001 diff --git a/static/img/file-write-safety/rollback-state.png b/static/img/file-write-safety/rollback-state.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfeea2546bc69cd1d069269913cb46f950aadee GIT binary patch literal 6346 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 Jr7