@@ -17,6 +17,73 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
1717
1818### Agent
1919
20+ - ** ` apply_patch ` can update files again.** Its Update operation read the target
21+ through the line-numbered ` read_file ` view and then tried to match the patch's
22+ raw context lines against it, so every context-bearing update failed with
23+ "failed to find expected lines in file." Updates now read the file's real
24+ content. This was the codex-family edit path, and its most likely symptom was
25+ the model retrying the identical patch.
26+
27+ - ** A worker that succeeds is no longer refused on its next dispatch.** Salvage
28+ classification matched free-text substrings, so a finished report whose Summary
29+ merely mentioned "no progress," "cancelled," or "long silence" was recorded as a
30+ forced stop and blocked an identical re-dispatch for the rest of the session.
31+ Classification is now exact. A parallel wave where one worker salvages and
32+ another succeeds also stops leaving the brief blocked.
33+
34+ - ** Large files read in one pass instead of many.** A truncated ` read_file ` now
35+ returns a continuation handle that resumes exactly where it stopped, rather
36+ than telling the model to re-read the same path at a new offset. Following a
37+ spent handle explains what happened and names the file and offset to resume
38+ from, instead of a bare "not found."
39+
40+ - ** Edits show what changed.** ` edit_file ` , ` write_file ` , ` delete_file ` , and
41+ ` apply_patch ` return a bounded diff of the change, so nothing needs a
42+ verification read to confirm the edit landed. The harness already re-read and
43+ compared after every write; that result now reaches the operator and the model.
44+
45+ - ** Reasoning survives resume, and corrected retries win.** On the Responses
46+ adapters, reasoning items were dropped whenever a turn carried no model field —
47+ including on resume — while the tool calls they produced were kept, a shape
48+ known to degenerate reasoning models. Duplicate tool results also kept the
49+ stale first copy, discarding a corrected retry. Tool names now route through
50+ the wire-safe codec on all three adapters.
51+
52+ - ** Compaction stops discarding the prompt cache.** Compacted prompt prefixes are
53+ byte-stable across passes, so a compaction no longer invalidates the cache in
54+ full, and a shallow reclaim no longer re-triggers compaction immediately.
55+
56+ - ** Per-model loop visibility.** Mid-stream degenerate-repetition aborts are
57+ recorded per detector with the measured value beside its threshold, so the loop
58+ rate can be read per model instead of inferred.
59+
60+ ### Interface
61+
62+ - ** The context meter tells the truth after ` /new ` , ` /clear ` , and compaction.**
63+ It resets rather than reporting pre-clear usage, and re-syncs to the compacted
64+ size rather than blanking to zero.
65+
66+ - ** Compaction is visible when it happens.** Folding turns away now shows in the
67+ TUI instead of the transcript quietly shrinking.
68+
69+ - ** The status indicator no longer flashes "awaiting response" mid-fan-out.**
70+ During parallel tool calls the first tool to finish used to mark the turn idle
71+ while its siblings were still running.
72+
73+ ### Safety
74+
75+ - ** Connecting a provider verifies the token can actually be used.** OAuth
76+ onboarding completed on tokens carrying no API scope, so the first real request
77+ failed in a way that looked like a Corbits bug. Onboarding now probes the
78+ provider and blocks with an actionable message when the token definitively
79+ lacks access — a network failure or rate limit does not block.
80+
81+ - ** Approval volume is measurable.** Every permission ask and how it settled is
82+ recorded — tool, rule, mode, outcome, and timings, with no command text, path,
83+ or argument in the record — with ` bun run scripts/approval-forensics.ts ` to
84+ read it back.
85+
86+
2087- ** Resuming a session no longer shows a blank error when the saved history
2188 has one corrupted line.** A malformed or schema-invalid line anywhere in the
2289 saved transcript used to abort the entire resume load. The TUI's resume view
0 commit comments