Skip to content

Commit 7ad06eb

Browse files
committed
Cut changelog for 0.2.104
Rename Unreleased to 0.2.104 and record the PRs that landed on main after 0.2.103. Compaction quality (#544) is still open and is not in this cut.
1 parent c148205 commit 7ad06eb

1 file changed

Lines changed: 72 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ matching `## [X.Y.Z]` section (plus install instructions). Do not maintain
1111
parallel 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

Comments
 (0)