No response grows with the size of the change
The flow died on exactly the changes big enough to deserve a document. Paged diffs, hunk-id anchors, a run handle that survives a restart.
compute_diff returned the whole diff beside the run_id every later call needs. On a 205,432-character change the response was 234,337 characters — past the client’s tool-result cap, so it was spilled to a file whole and the run_id went with it. The reviewer has no file access by design, so it could neither record a round nor submit. The bigger the change, the more certain the failure.
Now compute_diff returns the handle, the SHAs and a numbered hunk index; the bytes come from read_diff, paged on hunk boundaries — the unit the anchors already speak in. Envelope on the change that prompted it: 234,337 → 15,622 characters, twelve pages, every walked hunk byte-identical on reassembly.
Breaking: compute_diff no longer returns diff. The document format is unchanged.
Also
- •A run handle, not a working directory. Rounds were filed under the server’s cwd while submits passed the repo — different keys in a multi-repo workspace, so the submit found no interview and the reviewer re-ran everything. A run is now
sha256(repo|base_sha|head_sha), required by both tools. - •Anchors by hunk id. A stop says
H3, H4instead of restating line numbers from a diff header. Ids are expanded before validation, so nothing downstream changes. - •A transcript parser per agent. Claude Code and Codex transcripts share nothing; guessing at both half-worked in silence —
get_spinereduced 831 Codex entries to one gap item. - •A tour grouped by the plan, not the diff. Grouping by file structure produces stops that are really just filenames.
- •The reviewer lost the orchestrator’s tools. It could reset consent for every repository on the machine, and in one run reached for it after two failed submits.
Commits for this release: v0.2.11…v0.3.1