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
-**Resuming a session no longer shows a blank error when the saved history
26
+
has one corrupted line.** A malformed or schema-invalid line anywhere in the
27
+
saved transcript used to abort the entire resume load. The TUI's resume view
28
+
now skips just the bad line (logging it) and still shows the rest of the
29
+
history; a corrupt file still surfaces as an error during live conversation
30
+
loading, where correctness matters more than availability.
31
+
32
+
-**Every stop and nudge is now logged, and so is what each dispatch produced.**
33
+
`interventions.jsonl` in the worker's trace dir records each intervention with
34
+
its measured value beside the threshold it crossed, the model family it fired
35
+
on, and the run state at that moment — plus refused parent re-dispatches and,
36
+
now, one outcome record per completed dispatch (the salvage kind or a
37
+
clean-complete marker, plus the dispatch count). `bun run
38
+
scripts/intervention-forensics.ts` aggregates them: counts by family, value
39
+
distribution against threshold, two context columns (stops on runs that had
40
+
already edited files, stops before half the turn budget — not a measured
41
+
false-positive rate), and outcome counts by kind. Threshold changes can now
42
+
cite data instead of judgment.
43
+
44
+
-**Shell file work counts as evidence.** A worker that edited with `sed -i`, a
45
+
heredoc, or `>` redirection had `editedPaths` empty and salvaged as
46
+
`never-edited` — a sticky hard block that then refused the parent an identical
47
+
re-dispatch; one that read with `cat`/`head` salvaged as `incomplete-report`.
48
+
Both are real work classified as no work. `run_shell` commands are now scanned
49
+
for file reads and writes using the same subject expansion the auto-shell
50
+
policy uses, so `bash -c` and `env -S` payloads are inspected rather than
51
+
trusted.
52
+
53
+
-**Re-read pressure no longer stops a worker.** The `reReadLimit` thrash hard
54
+
stop and its soft `re-read-nudge` are removed: reading one file four times
55
+
while editing another, paging a large file, or re-running a grep to verify an
56
+
edit could all end a healthy worker with a sticky hard block that refused
57
+
re-dispatch. Fingerprint period detection already catches a genuinely
58
+
repeating read cycle, on the evidence that it repeats. `src/subagent/thrash.ts`
59
+
now only tracks read/edit evidence for the `intent=implement` and critique
60
+
completeness checks, plus the near-budget wrap-up nudge.
61
+
62
+
## [0.2.105] - 2026-08-23
63
+
64
+
### Permissions
65
+
66
+
-**Every approval ask and how it settles is now logged.**`approvals.jsonl`
67
+
in the session dir records each consequential decision — auto-mode
68
+
allow/deny, or an operator prompt's allow-once / allow-with-scope / deny /
69
+
timeout / abort — with the classifier rule that triggered it, queued /
70
+
displayed / settled timestamps, and shell chain segment count. No command
71
+
text, path, or credential is ever recorded; writes are fire-and-forget and
72
+
never fail a run. `scripts/approval-forensics.ts` aggregates across local
73
+
sessions.
74
+
75
+
### Agent
76
+
77
+
-**Context estimate syncs incrementally on append.**`syncFromTurns` keys
78
+
prefix turns by object identity and estimates only the new suffix. A rewrite,
79
+
shrink, or middle-turn identity break still fully recomputes so image-aging
80
+
cannot leave a stale total.
81
+
-**Thinking-only replay no longer collapses into an identical request.** Assistant turns with no text or tool_call (empty content, leftover thinking/citation) are replaced with a stable `[thinking-only turn omitted]` marker so the turn is kept, roles still alternate, and the next `buildRequest` body differs from the previous one.
82
+
23
83
-**Compaction keeps scored work, not retry loops.** Errored tool results are no
24
84
longer auto-pinned; identical errors collapse to one representative. Anchors
25
85
are scored (writes, successful task completions, plan updates) and pair
26
86
closures count against `maxAnchorTurns`. The LLM summary is workflow-aware
27
87
and skips degenerate assistant text.
28
88
89
+
-**Prefix-stable summaries and growth hysteresis.** Existing compacted user
90
+
turns stay byte-identical across later passes; new folds become later summary
91
+
turns with an assistant spacer so the prompt prefix can stay in the KV cache.
92
+
After a compact that remains over the high watermark, the governor waits for
93
+
usage to grow by 10% of the window before re-arming. Overflow recovery still
94
+
compacts immediately.
95
+
29
96
### Plugins
30
97
31
98
-**`run_shell` no longer defaults to a 15s timeout.** Omitted timeout arms no
@@ -40,6 +107,21 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
40
107
unset; values must still be integers ≥1. `task(maxTurns)`, profile
41
108
`maxTurns`, and `settings.subagentMaxTurns` may exceed 100 for long jobs.
42
109
110
+
### Internal
111
+
112
+
-**`inference.error` partials keep the provider error.**`partial.jsonl`
113
+
records for `inference-error` now include `error` (`category`, `message`,
114
+
`statusCode` when present) even when the cycle streamed no text.
115
+
-**Exec `turnsUsed` follows the run-sink.** Mid-run and terminal `run.json`
116
+
snapshots use `getTurnCount()` the same way the TUI does, instead of
117
+
writing the initial zero until send finishes.
118
+
119
+
### Docs
120
+
121
+
-**`latest` is a symlink, not a session.** Naive globs of a project
122
+
sessions directory double-count unless they skip `latest` (`listSessions`
0 commit comments