acpmux: review boxes get no inbox notice and no other agent's steer
Summary
Review boxes started by lane-place new --review (harness codex-review-box) were getting the inbox notice from #27686 ("[inbox] New messages from other agents in N thread...") steered into their review turn. A coordinator found: "The reviewer then reads the thread instead of reviewing and ends with no SHIP/BLOCK verdict."
With this change a review box has no inbox, and no other agent's message steers into its turn:
review_box.rs: one predicate for "is a review box" (harness ends with-review-box, or a livereview.tag).acpmux ls(cli/ls_table.rs) now uses it too, so the two can't drift apart.hub/inbox.rsinbox_route: a review box takes no inbox item. A message to it goes the way it did before #27686.hub/turns.rs: another agent's message to a review box's running turn never steers in, even though agent sends steer by default. It queues behind the review and runs as a turn of its own after the review ends. That turn's answer goes back to the sender'ssession/prompt, so no sender is left waiting. A steer-only send gets an error withreviewBox: true. The person's own steer and Send now still go in.hub/inbox.rsinbox_review/notice_held: no inbox notice steers into a review box's turn. Messages its inbox took before it became one (areview.tag set later) wait for the turn's end, as an idle chat's do.notice_heldis also checked as the steer is written (steer_end.rs).hub/inbox_digest.rs:session inbox --digestrefuses a review box (inbox_digest.review_box), so each agent message stays its own prompt.- A queued message the person sends with Send now still goes into the turn. That's the person's explicit action, like the person's own steer. The rule is that no other agent's message steers in.
- Queued entries start with
steer: false, and only the person's Send now changes that. So the queued path never steers into the running turn. - The module docs at the top of
inbox.rssay review boxes are left out, and why.
Follows #27686.
Testing
Regression tests in tests/hub_integration/agent_inbox.rs, each committed before its fix:
a_review_box_takes_no_inbox_message_and_no_steer_during_its_review: an agent message to a review box during its turn makes no inbox item, no notice and no steer. It runs as its own turn and the sender getsend_turn. A steer-only send and a digest are refused. The same message to an ordinary chat still goes to that chat's inbox.a_review_box_runs_its_first_prompt_from_another_agent_as_its_task: the task lane-place sends a*-review-boxsession as another agent runs as that prompt, with no notice in its place.an_inbox_message_from_before_the_review_tag_never_steers_into_the_review.- Unit test
a_review_box_harness_or_a_review_tag_marks_one.
Command: cmux-ci test -- cargo test -p acpmux --test hub_integration agent_inbox (plus --lib review_box, --lib inbox, --lib ls_table, inbox_digest and cargo clippy -p acpmux --all-targets -- -D warnings).
Observed / Not run
- Observed: rustfmt is clean on the changed files. At 1db550a, clippy
-D warningspassed and all 7agent_inboxtests passed, the new one included (fast-checks runs 41071111850 and 41071584201). The results at the final head are posted as a PR comment. - Not run: the red run at the test-only commits. cmux-ci on a lane VM runs only at the PR's head, so the base failure is from reading the code, not from a run.
Changelog
Fixed: acpmux review boxes no longer get other agents' messages steered into their review.
Agent session: agent session
š¤ Generated with Claude Code