Skip to content

Config screen agent row clips its model annotation at 110 columns - #173

Merged
MJohnson459 merged 2 commits into
mainfrom
task-448-config-model-line
Aug 14, 2026
Merged

MJohnson459 merged 2 commits into
mainfrom
task-448-config-model-line

Conversation

@MJohnson459

Copy link
Copy Markdown
Contributor

The Config screen's agent row was one unwrapped line — marker, name, provenance, verbs, then a dim <model … · deep … · plan …> tail — rendered in a Paragraph with no Wrap, so it clipped at the pane's width. Listing every optional verb (#167) grew the built-in claude row from about 98 to about 121 columns, which pushed the model annotation off the end at 110, where it used to fit.

The annotation is the half that cannot be allowed to fall off: it exists so the {model} in the dispatch line below reads without opening voro.toml. It therefore moves onto its own dim continuation line directly under that command, spelled {model}: opus · deep fable · plan fable — anchored to the placeholder it explains rather than trailing a row whose length is set by how many verbs an agent happens to define. The name row keeps marker, name, provenance and the verb list, and now fits well inside an ordinary terminal.

That costs one line per agent carrying a model map, which the pane's fixed 14-line height cap would have paid for by hiding agents off the bottom — the cost the task called out. So the cap goes: the pane sizes to the rows it has and yields height only for what the viewers list below needs to keep a border and a row. That list is a List with a ListState and scrolls with its selection; the agents Paragraph does not, so an agent hidden there is the more expensive truncation.

docs/DESIGN.md §9 records the layout and the reasoning in the Config screen paragraph — why the model map earns a line, and why the pane sizes to its rows rather than to a fixed cap. voro agent list at the shell is untouched; nothing truncates there, so its inline spelling stays as it was.

Verified two ways. In a scratch tmux at 100x30 (per the verify skill, isolated --db and XDG_CONFIG_HOME), the built-in claude row shows [sessions attach resume message(fork) logs stop plan] and, two lines below it, {model}: opus · deep fable · plan fable — the acceptance criterion. With six model-carrying agents configured (17 lines) all six render and the viewers list keeps its three rows; at 60x10 the pane degrades without panicking and viewers still keeps a row. Two ui.rs tests at 100 columns cover both: the existing Config screen test now asserts the verb list and the model line, and a new config_screen_shows_every_agent_it_has asserts six agents all render with the viewers list intact (it fails under the old 14-line cap). cargo test --workspace passes (469 tests), cargo clippy --workspace --all-targets -- -D warnings is clean, cargo fmt --all --check is clean.

Follow-up filed as #450: the agents pane still hides rows it cannot fit with no indication, on a terminal too short to give it the height it wants.

The agent row on the Config screen is one unwrapped line — marker, name,
provenance, verbs, then a dim `<model … · deep … · plan …>` tail — in a
Paragraph with no Wrap, so it clips at the pane's width. Listing every
optional verb (#167) grew the built-in claude row from ~98 to ~121
columns, which pushed the model annotation off the end at 110, where it
used to fit.

The annotation is the half that cannot fall off: it exists so the
`{model}` in the dispatch line below reads without opening voro.toml.
So it moves onto its own dim continuation line directly under that
command, spelled `{model}: opus · deep fable · plan fable` — anchored to
the placeholder it explains rather than trailing a row whose length is
set by how many verbs an agent happens to define.

That costs a line per agent carrying a model map, which the pane's fixed
14-line cap would have paid for by hiding agents off the bottom. The cap
goes: the pane now sizes to the rows it has and yields only what the
viewers list below needs to keep a row. That list scrolls with its
selection and this paragraph does not, so an agent hidden here is the
more expensive truncation.

Verified in a scratch tmux at 100 columns: the built-in claude row shows
every verb and its model map, and six model-carrying agents all render
with the viewers list intact. Covered by two ui tests at that width.
The Config screen test asserted the literal `[sessions attach resume
message(fork) logs stop plan]`, which pinned a template detail rather
than the width it meant to check: #170 dropped `--fork-session` from the
built-in claude `message`, so `verbs()` now reports plain `message` and
the assertion failed on the pull request's merge with main while passing
on the older base the branch was written against.

Both assertions now read the expected text off the rendered agent's own
row — the bracketed verb list from `verbs`, the annotation from `models`
— so the test still fails if the row clips at 100 columns and no longer
fails when a template changes what the row correctly says.
@MJohnson459
MJohnson459 force-pushed the task-448-config-model-line branch from ce52cb7 to b326a07 Compare August 14, 2026 17:21
@MJohnson459
MJohnson459 merged commit 257c171 into main Aug 14, 2026
7 checks passed
@MJohnson459
MJohnson459 deleted the task-448-config-model-line branch August 14, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant