Skip to content

Commit bb39c08

Browse files
committed
Write the 0.2.92 changelog and release notes
Second sweep over the OpenTUI cutover plus the rebuilt model surface. Several entries are behaviour that had been fixed once and lost when the renderer was replaced, so the notes say what changed for the operator rather than which branch restored it.
1 parent d168cd7 commit bb39c08

2 files changed

Lines changed: 187 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,98 @@ Format loosely follows [Keep a Changelog](https://keepachangelog.com/). Versions
1919
- Live OTEL collector verify (Phoenix or equivalent) against the merged sink.
2020
- Dogfood session migrate: new session under `~/.corbits/projects`, one legacy `.agent-state` migrate, write under state root still asks.
2121

22+
## [0.2.92] - 2026-08-07
23+
24+
A second sweep over the OpenTUI cutover, plus a rebuilt model surface. Two of
25+
these faults could end a session outright, and several were behaviour that had
26+
been fixed once already and lost when the renderer was replaced.
27+
28+
### Model selection
29+
30+
The picker lists providers first and descends into models on select, with
31+
Escape returning to the provider level. Recents and favourites stay flat at the
32+
top, and each account appears as its own row.
33+
34+
- **Model tiers are gone.** `settings.tiers`, `profile.tier`, and the
35+
`task(tier=)` argument no longer exist, and `/fast`, `/standard`, and
36+
`/clever` are retired rather than remapped — a tier was a per-name fallback
37+
chain, which neither a favourite nor a pinned model expresses. Per-agent
38+
selection continues through `profile.inference`. A settings file containing
39+
`tiers` still loads; the key is dropped on save. (CL-5591)
40+
- **The context meter was wrong by nearly four times** for any provider with a
41+
custom name. An account-qualified identity did not match the registry, so a
42+
500k window read as the 128k default. Resolution now tries the identity as
43+
given, the bare model id, and the canonical provider/model form, and marks a
44+
figure as estimated only when it genuinely falls back. (CL-5587)
45+
- The current model is read from the live session rather than inferred from the
46+
most recent pick, which mislabelled any session that never opened the picker.
47+
(CL-5597)
48+
49+
### Sessions could be killed outright
50+
51+
- **Switching models poisoned the conversation permanently.** A reasoning
52+
signature issued by one provider was replayed to another that could not
53+
decrypt it, and every subsequent turn failed with HTTP 400. Signatures now
54+
carry the provider that issued them, so two backends sharing a model name
55+
cannot replay each other's. Switching accounts on the same provider still
56+
preserves reasoning continuity. (CL-5592, CL-5594)
57+
- **A model that fell into a loop ran unbounded.** Repetition is detected by
58+
character period within a streaming cycle, and by comparing cycle
59+
fingerprints across tool calls, so a loop that emits a tool call each pass is
60+
still caught. Ordinary narration repeated before successive tool calls is
61+
not. (CL-5577)
62+
63+
### The screen
64+
65+
- Plugin diagnostics wrote raw to stderr and corrupted the frame. They now go
66+
through the log sink, and the warnings that used to vanish with them are
67+
surfaced where the operator can see them. (CL-5411)
68+
- The provider setup screen garbled its own text on short terminals — rows were
69+
compressed into one another instead of clipping. (CL-5363)
70+
- The command palette matches the prompt box width, drops its marker column,
71+
kind column, and title rule, and marks the selected row by colour rather than
72+
a grey band. (CL-5581, CL-5582, CL-5583, CL-5584)
73+
- An open overlay reserves its own border, title, and content rows before any
74+
other chrome is allowed to starve it. (CL-5584)
75+
- **`/resume` was offering sessions that did not exist.** Demo fixture data was
76+
shipping in the production bundle and rendering whenever a dependency was
77+
missing. A missing dependency now produces an honest empty state. (CL-5596)
78+
- Dialog choices read as plain English rather than internal names. (CL-5586)
79+
80+
### Context and state
81+
82+
- Compaction stopped hollowing out the turns it had just decided to keep. A file
83+
edit inside the recent window keeps its content. (CL-5595)
84+
- `run.json` is finalized when the process crashes, without reading from disk on
85+
the crash path. (CL-5574)
86+
- An `@`-mentioned file outside the workspace is inlined once rather than
87+
blocked, gated by the sensitive-path list and a total byte cap. That list now
88+
covers shell histories, system credential files, keychains, browser cookie and
89+
login stores, and cloud credentials. (CL-5479)
90+
91+
### Agents and the machine
92+
93+
- **An agent could rewrite your global git configuration to push**, altering
94+
every repository on the machine. That now requires operator approval, and a
95+
scoped push path applies credentials per invocation with nothing written to
96+
any config file. (CL-4762)
97+
- `present`, `manage_goal`, `manage_tasks`, and `lsp` are advertised only when
98+
they apply. (CL-5588)
99+
- Live progress appears on a dispatched sub-agent's transcript row. (CL-5576)
100+
- The most recently queued message can be cancelled. (CL-5572)
101+
102+
### Development
103+
104+
- **The test suite only passed in one order.** Bun mutates the namespace object
105+
returned by `await import()` when a module is later mocked, so the usual
106+
capture-then-restore idiom silently reinstalled the mock process-wide. Under
107+
randomized order the suite produced over a hundred failures; it now passes
108+
across every seed tried, and CI runs a fixed seed on each change plus a
109+
rotating seed nightly. (CL-5579)
110+
- `docs/TUI.md` states how the terminal UI is meant to look and behave —
111+
overlays, selectors, the palette, the prompt box, scrolling, and key macros.
112+
Nine documents describing the finished migration are retired.
113+
22114
## [0.2.91] - 2026-08-07
23115

24116
A bug-fix release on the OpenTUI cutover. Most of these faults had no visible

docs/release-notes-0.2.92.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
## A rebuilt model surface, and two bugs that could end a session
2+
3+
This is the second sweep over the OpenTUI cutover. Several of these were
4+
behaviour that had been fixed once already and lost when the renderer was
5+
replaced — the fix lived in a file the cutover deleted, so the bug came back
6+
without anyone changing it.
7+
8+
### Picking a model
9+
10+
The picker now lists providers, and you descend into one to choose a model.
11+
Escape steps back out to the provider level rather than closing. Recents and
12+
favourites stay flat at the top so a model you already use is one keystroke
13+
away, and each account gets its own row instead of being flattened into a
14+
single combined list.
15+
16+
**Model tiers are gone.** `/fast`, `/standard`, and `/clever` are retired
17+
rather than remapped, because a tier was a fallback chain of providers rather
18+
than a single model — neither a favourite nor a pinned model says the same
19+
thing. Per-agent selection still works through the agent's own inference
20+
setting. A settings file that still contains tiers loads fine; the key is
21+
dropped the next time settings are saved.
22+
23+
**The context meter was reading nearly four times low** for anyone on a
24+
custom-named provider. A 500k window showed as the 128k default, so the meter
25+
looked comfortable while the real context filled. It now recognises
26+
account-qualified model names, and only marks a figure as estimated when it is
27+
genuinely guessing.
28+
29+
The model marked as current is the one the session is actually running. It used
30+
to be inferred from the most recent pick, which meant any session that never
31+
opened the picker showed the wrong one.
32+
33+
### Two ways a session could die
34+
35+
**Switching models used to poison the conversation permanently.** Reasoning
36+
state issued by one provider was replayed to another that could not read it,
37+
and every turn after that failed. Reasoning state now travels with the provider
38+
that produced it. Switching between accounts on the same provider still keeps
39+
reasoning continuity.
40+
41+
**A model that fell into a loop ran until you stopped it.** Repetition is now
42+
detected inside a single streaming stretch, and by comparing successive
43+
stretches across tool calls — so a model that loops while calling a tool each
44+
pass is still caught. Ordinary narration repeated before successive tool calls
45+
is left alone.
46+
47+
### The screen
48+
49+
- Plugin diagnostics were writing straight to the terminal and corrupting the
50+
display. They go to the log now, and the warnings that used to disappear
51+
along with them are surfaced where you can see them.
52+
- The provider setup screen garbled its own text on a short terminal, with rows
53+
compressed into one another instead of clipping.
54+
- The command palette matches the prompt box width, loses its marker column,
55+
kind column and title rule, and marks the selected row by colour instead of a
56+
grey band.
57+
- An overlay reserves room for its own frame before anything else is allowed to
58+
squeeze it.
59+
- **`/resume` was offering sessions that did not exist.** Demo placeholder data
60+
was shipping in the product and appeared whenever something failed to load.
61+
A missing dependency now shows an honest empty state.
62+
- Dialogs describe their choices in plain English.
63+
64+
### Context and files
65+
66+
- Compaction stopped hollowing out the turns it had just decided to keep, so a
67+
file you edited two turns ago is still there when you ask about it.
68+
- A crash finalizes the session record instead of leaving it marked running.
69+
- Mentioning a file outside your workspace inlines it once rather than refusing.
70+
Sensitive files stay blocked, and that list now covers shell history, system
71+
credentials, keychains, browser cookie and password stores, and cloud
72+
credentials.
73+
74+
### Your machine
75+
76+
**An agent could rewrite your global git configuration in order to push**,
77+
which changes every repository on the machine and outlives the session. That
78+
now asks you first, and there is a scoped push path that applies credentials
79+
for a single command without writing to any config file.
80+
81+
Tools that only apply sometimes — `present`, goal and task management, and LSP —
82+
are only offered when they apply. A dispatched sub-agent shows live progress on
83+
its own row. The most recently queued message can be cancelled.
84+
85+
### Underneath
86+
87+
The test suite only passed in one order. Under a randomized order it produced
88+
over a hundred failures, because a mocking idiom used throughout was silently
89+
leaving mocks installed for every file that ran afterwards. It now passes in any
90+
order, and CI checks a fixed order on every change plus a random one nightly.
91+
92+
There is also now a written specification for how the terminal UI is meant to
93+
look and behave, covering overlays, selectors, the palette, the prompt box,
94+
scrolling and key macros. Nine documents describing the finished migration have
95+
been retired.

0 commit comments

Comments
 (0)