Repository navigation
Ask <app>: a question has one surface, the open panel, not a modal card over it - #279
Merged
Merged
Conversation
…anel A question from a turn the person or the app started (the app's conversation, G11) was drawn twice while its "Ask <app>" panel was open: in the panel, with its option buttons, and as the approvals overlay's modal card over everything. While that card was up, approvals::pointer took every press, so the panel's own buttons answered nothing; only typing the answer in the panel worked (instrument run, scenario S8, frame 22). As app_chat and the README document, the panel shows and answers its conversation's questions. The overlay's card now leaves them to it: approvals::view::card_question picks the oldest open app question except those of the app whose panel is open (app_chat::shown_app). The card still asks another app's question, and this one as soon as the panel closes. The question model and its routing are unchanged. Tests: approvals (the card's choice with and without an open panel), app_chat (shown_app follows open and close), and the two-lane scenario (the real kernel's person-lane question has no card while Ask News is open). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ymote
force-pushed
the
fix/ask-panel-question-once
branch
from
October 2, 2026 18:09
81aaccb to
1c9621c
Compare
Contributor
Author
|
Local CI passed on 1c9621c ( GitHub would run for this PR: desktop.yml, phone.yml, apps.yml. Merged on this local pass (macOS runner queue); GitHub CI runs on the merge commit on main.
Skipped (these did NOT pass; (!) marks a skip that blocks tools/ci-local-merge.sh):
Notes:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A headless instrument run of the desktop shell (main f52620c, scenario S8, frame 22) found a question from News's agent in the person's lane drawn twice while "Ask News" was open. It showed in the panel, with its Team/Everyone buttons, and again as the approvals overlay's modal card over everything. While that card was up,
approvals::pointertook every press, so the panel's own buttons did nothing and no answer reached the model. Only typing the answer in the panel worked.Cause.
approvals::view::frame()gave the card the oldest open question of any app's conversation (questions::open_in_apps()). It did that whether or not the app's open panel already showed the question:app_chat::snapshot()lists the same open questions.Fix.
app_chatand the README ("Talking to an app's agent yourself") already say where these questions belong: questions from turns the person or the app started are shown and answered in the panel. So the card now leaves them to the panel.approvals::view::card_question(open, app_chat::shown_app())picks the oldest open app question that is not the open panel's app's.questions(the model, its routing, the one answer path) and the approval routing are unchanged.approvals::view,questionsandapp_chatnow say this.Tests (Linux build host, from
phone/; this branch alone):cargo test --locked --features mobile-apps -p octosense-shell approvals: 59 passed, including the newthe_overlay_leaves_the_open_panels_questions_to_the_panel.… app_chat: 9 passed.shown_appfollows open and close (reopening_the_panel_keeps_the_persons_rows_and_the_live_follower).… system_chat: 65 passed.… questions: 10 passed.phone.ymlruns it (cargo test --locked --features mobile-apps -p octosense-shell, withOCTOS_SHELL_TEST_KERNEL): 776 passed.OCTOS_SCENARIO_TEST_KERNEL=… --lib host_tools::scenario_tests -- --test-threads=1): 5 passed. The main scenario now checks that the person-lane question has a card while no panel is open, and none while Ask News is open.Instrument (the same harness and scenarios as the report, on the Linux build host; before = main, after = this branch):
free_text).selected_labels: ["Team"]reached the model (frames 22–23). The system agent's question still goes to the system chat (frames 24–25).Overlap. This branch is on main 4f73ab3, after #272, #273 and #274 merged; the rebase had no conflicts. #274 added asserts to other tests in
app_chat/tests.rs. The open #230 and #255 also touch the approvals code, in other hunks; both merge with this branch cleanly. The four fixes from the same run are independent, and each pair merges without conflicts: this one, #280, #281 and #282.🤖 Generated with Claude Code