@@ -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
24116A bug-fix release on the OpenTUI cutover. Most of these faults had no visible
0 commit comments