diff --git a/CHANGELOG.md b/CHANGELOG.md index 381f07cc..2a92235d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,15 @@ The release workflow uses a tag's section here as its release notes (a hand-written `docs/releases/.md` wins if present), so keeping this file current is part of cutting a release. +## v0.302.70 + +- Claude Agent: a reply the model starts while graff refreshes its tool list arrives whole. graff dropped what Claude Code sent during the re-list, so the reply lost its start and the turn failed with "unparseable response" (#1804). +- A turn that ends after the provider returns empty replies 6 times in a row now says so over ACP: the turn stopped, the conversation is kept, and sending again retries. It used to end with a bare `EmptyCompletion` (#1802). +- Simulator tests no longer overwrite the Mac's clipboard. With the Simulator app open and Edit > Automatically Sync Pasteboard on, a command that runs simulator tests (`xcodebuild test`, `xctest`) or writes a simulator pasteboard (`simctl pbcopy`/`pbsync`) is refused with steps to fix it. graff never changes the setting or touches the clipboard; `GRAFF_ALLOW_SIM_PASTEBOARD=1` turns the check off (#1801). +- Large request bodies are no longer cut off while they are still uploading. Connecting, uploading and waiting for the response each have their own time limit; the upload limit grows with the body and follows its progress, and a peer that stops reading still fails (#1785). +- An ACP chat that was loaded or forked is a peer under its own session id, so mail addressed to it reaches it (#1803). +- Retains all changes from v0.302.69. + ## v0.302.69 - Reading peer mail no longer rewrites history the model was already sent: only wake lines it was never sent are removed. On Claude Agent every woken turn used to start a fresh Claude Code process; on other providers the cached prefix changed after each inbox read (#1799). diff --git a/docs/releases/v0.302.70.md b/docs/releases/v0.302.70.md new file mode 100644 index 00000000..68452236 --- /dev/null +++ b/docs/releases/v0.302.70.md @@ -0,0 +1,11 @@ +# v0.302.70 + +Fixes for Claude Agent tool-list refreshes, empty-reply failures, simulator tests and the clipboard, large uploads, and peer mail to resumed ACP chats. + +- **Claude Agent: a reply that starts during a tool-list refresh arrives whole.** After the model loads a tool, graff tells Claude Code its tool list changed and waits for it to read the new list. Anything else Claude Code sent during that wait was dropped, so a reply that was already streaming lost its start and the turn failed with "unparseable response". Those lines are now kept and read in order. (#1804) +- **An empty-reply failure explains itself.** When the provider returns an empty reply 6 times in a row, the turn ends with a message saying so: the conversation is kept, and sending again retries. ACP clients used to show only `EmptyCompletion`. (#1802) +- **Simulator tests can't overwrite your clipboard.** With the Simulator app open and Edit > Automatically Sync Pasteboard on (the default), a simulator test that copies text replaced the Mac's clipboard, and nothing restored it. A command that runs simulator tests (`xcodebuild test`, `test-without-building`, `xctest`) or writes a simulator pasteboard (`simctl pbcopy`, `pbsync`) is now refused while that is the case, with steps to fix it: quit the Simulator app or turn the menu item off. graff never changes the setting and never reads or restores the clipboard. `GRAFF_ALLOW_SIM_PASTEBOARD=1` turns the check off. (#1801) +- **Large uploads aren't cut off while they're still sending.** Connecting, uploading the request and waiting for the response each have their own limit. The upload limit grows with the body and resets while bytes keep moving (a 1 MiB body gets up to 94 s), so a slow but live upload completes. A server that stops reading still fails, and Esc still cancels. (#1785) +- **Peer mail reaches resumed ACP chats.** A chat loaded or forked over ACP kept its old peer name, so mail sent to its session id found no one. It now registers under its own session id, which lets Harness deliver chat-to-chat messages through the peer inbox. (#1803) + +Includes all changes from v0.302.69. diff --git a/scripts/eval/tier1-manifest.json b/scripts/eval/tier1-manifest.json index 290b8213..0ae7997d 100644 --- a/scripts/eval/tier1-manifest.json +++ b/scripts/eval/tier1-manifest.json @@ -14,7 +14,7 @@ "src/main.zig", "src/repl.zig" ], - "test_count_baseline": 3601, + "test_count_baseline": 3627, "test_count_slack": 25, "required_invariants": [ { diff --git a/src/cli_text_source.zig b/src/cli_text_source.zig index 9b2e45da..b0c97e29 100644 --- a/src/cli_text_source.zig +++ b/src/cli_text_source.zig @@ -5,6 +5,11 @@ pub const changelog_text = \\What's new \\────────── + \\0.302.70 + \\ • Claude Agent: a reply that starts during a tool-list refresh no longer fails + \\ • simulator tests can't overwrite your clipboard; large uploads aren't cut off + \\ • an empty-reply failure says what happened and how to retry + \\ \\0.302.69 \\ • reading peer mail no longer rewrites history the model was already sent \\ • graff login kimi works for kimi.ai (international) accounts; sign-in links are copied