@@ -11,7 +11,7 @@ matching `## [X.Y.Z]` section (plus install instructions). Do not maintain
1111parallel copies under ` docs/ ` or ` scripts/notes/ ` . At cut time: rename
1212` ## [Unreleased] ` to ` ## [X.Y.Z] - YYYY-MM-DD ` , then run the release script.
1313
14- ## [ Unreleased ]
14+ ## [ 0.2.104 ] - 2026-08-23
1515
1616### TUI
1717
@@ -23,12 +23,81 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
2323 unchanged. Assistant mid-turn text continues to grow the open streaming
2424 assistant row from ` inference.text.delta ` .
2525
26- ### Fixed
26+ - ** Live agents sit in a chrome strip above the prompt.** Running and
27+ finished workers no longer compete with the transcript for vertical
28+ space; the strip stays parked over the input, finished rows linger
29+ briefly, then it clears when idle. Transcript task-row rewrites pause
30+ while the strip owns live status.
31+
32+ ### Tools
33+
34+ - ** ` edit_file ` filler args no longer count as a second mode.** Models pad
35+ the unused mode with ` start_line: 0 ` / ` end_line: 0 ` / ` old_string: "" ` .
36+ Those now count as absent, so substring vs line-range is chosen from the
37+ real fields. Mixed-mode calls still reject, and the error names exactly
38+ which fields to drop so a retry can differ.
39+
40+ - ** ` task ` rejections name only the missing field.** A typed brief that
41+ omitted ` prompt ` used to be told both ` description ` and ` prompt ` were
42+ required, so the model retried the identical call. The error now names
43+ the actual gap and echoes the valid field back.
44+
45+ - ** Truncation no longer promises a retrievable remainder.** Tool results
46+ cut at 80,000 chars now say the discarded tail is gone and re-running
47+ yields the same cut, instead of pointing at a ` tool-output:/// ` blob that
48+ only held the truncated text.
49+
50+ ### Sub-agents
51+
52+ - ** Parents and the TUI see why a child stopped.** Forced stops (repetition,
53+ stall, deadline, turn-budget, no-progress, operator cancel, thrash) carry
54+ a machine-readable ` Stopped: ` line on the report and a reason on the
55+ child's session. Fleet rows announce ` <lane> stopped — <reason> ` instead
56+ of a silent done/cancelled.
57+
58+ - ** Repetition detection covers short-phrase, counter, emoji, and
59+ zero-width floods.** The periodic window floor drops to 8 chars (with a
60+ higher repeat bar so healthy lists stay quiet). A digit-folded pass
61+ catches incrementing counters and fence/emoji floods; a contentless-growth
62+ check flags streams of invisibles that used to normalize to healthy text.
63+
64+ ### Providers
65+
66+ - ** Cross-provider replay no longer 400s the rest of the session.**
67+ Switching model/provider mid-session used to replay foreign thinking
68+ signatures and output-only blocks the new adapter cannot encode. Every
69+ adapter now sanitizes persisted history before ` buildRequest ` : drop
70+ unmappable blocks, strip foreign signatures, and synthesize dangling
71+ ` tool_result ` s.
72+
73+ - ** Grok and OpenAI Responses set ` prompt_cache_key ` per session.** Codex
74+ already did; xAI and Go Responses did not, so Grok threads cached at
75+ ~ 66–72% versus Codex's 92%+. Parent and each sub-agent thread get a
76+ stable, distinct key.
77+
78+ - ** TUI first inference waits for Codex instructions refresh.** The TUI
79+ used to fire the refresh un-awaited, so turn 2's request prefix could
80+ change under a live cache key and force a full miss. Delivery now waits
81+ for that promise (non-Codex profiles skip it; a failed refresh still
82+ falls back to cached/bundled copy).
2783
2884- ** Codex Responses no longer sends ` reasoning.summary: "auto" ` .** ChatGPT
2985 Codex rejects that value for gpt-5.6-terra / gpt-5.3-codex family models
3086 (HTTP 400 at turn 0). The adapter now sends ` { effort } ` only, matching
31- Codex CLI catalog ` default_reasoning_summary=none ` (CL-6893).
87+ Codex CLI catalog ` default_reasoning_summary=none ` .
88+
89+ - ** Codex native tools proxy onto Corbits tools.** ` apply_patch ` ,
90+ ` exec_command ` , and ` update_plan ` from Codex-family models land on the
91+ real file, shell, and ` manage_tasks ` handlers instead of being rejected
92+ as unknown names.
93+
94+ ### CI
95+
96+ - ** Required checks are ` prettier ` , ` eslint ` , ` typecheck ` , and
97+ ` build-and-test ` .** The old combined ` lint ` job (cached, continue-on-error)
98+ never reported the status contexts the main ruleset required, so every PR
99+ sat blocked. Lint result caches are gone in CI; local ` bun run lint ` still
100+ uses ` --cache ` .
32101
33102## [ 0.2.103] - 2026-08-23
34103
0 commit comments