Skip to content

fix(tui): drop the engine's status reply to a fleet roster refresh - #7152

Merged
Hmbown merged 1 commit into
codewhale-hq:mainfrom
Lstarsky0:fix/fleet-roster-no-engine-ack
Oct 31, 2026
Merged

Hmbown merged 1 commit into
codewhale-hq:mainfrom
Lstarsky0:fix/fleet-roster-no-engine-ack

Conversation

@Lstarsky0

Copy link
Copy Markdown
Contributor

What and why

Every fleet change ends in Op::SetFleetRoster, and the engine answered each one with a status: "Fleet roster refreshed for subsequent turns". The change itself already has a receipt (the /fleet add|remove note in the transcript, the route editors' toasts, the "Team … profile saved" status), so the engine's line only arrives after it and takes over the footer, where in English it also pushes the Shift+Tab hint off the row. After /fleet add openai mock, before:

Note Added openai/mock to the team My fleet (new personal team, now selected)
…
 ● ask   work (Tab)   Work bar (Ctrl+])                 Fleet roster refreshed for subsequent turns

It was still there 7 seconds later, and with LANG=zh_CN.UTF-8 it is the one English sentence on the screen:

Note 已将 openai/mock 添加到 Fleet My fleet (新的个人 Fleet,已选中)
…
 ● ask  Shift+Tab 切换   work (Tab)   Work bar (Ctrl+]) Fleet roster refreshed for subsequent turns

After:

Note Added openai/mock to the team My fleet (new personal team, now selected)
…
 ● ask  Shift+Tab to change   work (Tab)   Work bar (Ctrl+])
Note 已将 openai/mock 添加到 Fleet My fleet (新的个人 Fleet,已选中)
…
 ● ask  Shift+Tab 切换   work (Tab)   Work bar (Ctrl+])

The engine now stores the roster without sending a status. Nothing reads that message, and the TUI is the only sender of the op. 04de8eb fixed the same kind of ack replacing a host receipt for SetCompaction.

Issue

No-Issue: the engine's ack to a fleet roster refresh replaces the fleet receipts in the footer; I searched and found no issue for it

How I tested it

  • Ran a debug build of this change and one of main at 6dd9af5 in a pseudo-terminal at 100x30 with an empty HOME and a local mock OpenAI-compatible server, typed /fleet add openai mock, and read the screen 0.3 s and 7 s later, in English and with LANG=zh_CN.UTF-8; the rows above come from those runs.
  • cargo nextest run -p codewhale-tui -p codewhale-tui-kit --lib: 13661 of 13663 passed, with the 1606 tests whose names match fleet, roster or engine among them. The 2 failures (status_report_localizes_the_complete_japanese_surface, test_update_model_compaction_budget) also fail on main at 6dd9af5 without this change.
  • cargo fmt --all -- --check, cargo clippy -p codewhale-tui -p codewhale-tui-kit with CI's flags (also on 1.99), cargo check -p codewhale-tui -p codewhale-tui-kit --all-targets and cargo +1.89.0 check -p codewhale-tui -p codewhale-tui-kit: clean.

Checklist

  • One focused change, on 6dd9af5; it merges cleanly into current main
  • cargo fmt --all passes, and tests cover new or changed behavior — cargo fmt passes; no new test, per AGENTS.md, so the runs above stand in for one
  • If this adds or changes a user-facing feature, I updated its docs and its row in docs/features.toml (cargo test -p codewhale-tui --test feature_registry checks it) — n/a

Every fleet change sends Op::SetFleetRoster, and the engine answered
each one with "Fleet roster refreshed for subsequent turns". Each of
those changes already writes its own receipt: the /fleet add|remove
note in the transcript, the toasts from the route editors, the
"Team ... profile saved" status. The engine's line arrived after it and
took over the footer, and in a Chinese UI it left an English sentence
there. 04de8eb fixed the same kind of ack replacing a host receipt for
SetCompaction.

Store the roster without sending a status. Nothing else reads that
message.

Signed-off-by: Lstarsky0 <59827030+Lstarsky0@users.noreply.github.com>
@Lstarsky0
Lstarsky0 requested a review from Hmbown as a code owner October 30, 2026 08:43

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-30T08:45:18.894194Z
We couldn’t complete this review. Comment @codex review to try again.
c1616fc PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the contribution-gate Author not yet in .github/APPROVED_CONTRIBUTORS; a maintainer grants access with /lgtm label Oct 30, 2026
@Hmbown
Hmbown merged commit 88911a3 into codewhale-hq:main Oct 31, 2026
26 of 28 checks passed
Hmbown pushed a commit that referenced this pull request Oct 31, 2026
…urfaces

Changelog lines for #7147, #7146, #7156, #7157, #7158, #7152 and #7150, and
credit for the contributors across CHANGELOG `### Contributors`,
docs/CONTRIBUTORS.md and UNRELEASED_CONTRIBUTORS (adds @luochen211, whose #7150
and #7149 landed). #7149 is a dead-code chore and has no changelog line.

Verified: `python3 scripts/check-contributor-credit.py` reports every contributor
in the window credited on all three surfaces; `scripts/preflight.sh --check`
passes; `sh scripts/sync-changelog.sh` regenerated crates/tui/CHANGELOG.md.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Hmbown pushed a commit that referenced this pull request Oct 31, 2026
`/config stream_chunk_timeout_secs <n>` answers in the transcript with
the new value and whether it was saved, then sends
Op::SetStreamChunkTimeout. The engine answered the op with "Stream
chunk timeout set to <n>s", which repeated that note in the footer and
stayed there; at 80 columns it also pushed the Shift+Tab hint off the
row. It is the same kind of ack that #7152 removed for SetFleetRoster
and 04de8eb for SetCompaction.

Store the timeout without sending a status. Nothing reads that message,
and a runtime thread's config reload, the other sender, already skips
status events that arrive before a turn starts.

Signed-off-by: Lstarsky0 <59827030+Lstarsky0@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contribution-gate Author not yet in .github/APPROVED_CONTRIBUTORS; a maintainer grants access with /lgtm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants