Skip to content

Let phone users choose the next message’s model during a structured reply - #36451

Merged
brennanb2025 merged 2 commits into
mainfrom
brennanb2025/phone-picker-during-reply
Oct 31, 2026
Merged

brennanb2025 merged 2 commits into
mainfrom
brennanb2025/phone-picker-during-reply

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 1 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​82 $\color{#cf222e}{\Huge{\mathbf{−}}}$​19 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​63
Prod 1 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​9 $\color{#cf222e}{\Huge{\mathbf{−}}}$​10 $\color{#cf222e}{\Huge{\mathbf{−}}}$​1

On a phone, model, effort, and speed choices stayed disabled for an entire structured chat reply, preventing users from preparing their next message. The picker applied the terminal command lock to structured choices even though those choices only affect the next message.

Structured chat choices now remain usable during replies, matching desktop. The working notice and accessibility announcement appear only for terminal-backed choices. Existing pending-write, send-in-flight, settable, and readiness checks still apply. Unsettable summary rows also disable navigation to their already-disabled detail controls, following the existing disabled-until-known rule.

Intended differences from the common pattern: terminal-backed choices stay locked during replies because they send commands into the running terminal. Phone pending writes continue to lock the picker as required by the existing phone selection policy. Choices remain host-owned and saved before Send to support shared chats and older paired hosts; no saved fields, wire fields, or capabilities change.

Validation: full review, round 1, with correctness, architecture, reference and readiness checks complete and no defects found. All 100 focused phone/controller/host/legacy-send tests passed; final-head CI passed, including static analysis/typecheck, mobile verification and the mobile web bundle. The native iOS screenshot check passed on the shipped session screen: model, effort and Fast mode choices remain usable during a structured reply, appear in the composer and reach the next send. That screenshot run used a synthetic paired host and no real agents; current and older host message capture is covered by tests and production traces.

Tracked in STA-10852 (phone half).

@brennanb2025
brennanb2025 marked this pull request as ready for review October 30, 2026 21:02
@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 856ca9c8-ace5-4d1b-89b6-b6bc0861fade
Commits

Reviewing files that changed from the base of the PR and between 528757a and 7613d58.

Files selected for processing: 2
  • mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.test.ts
  • mobile/src/session/native-chat/input/MobileNativeChatSessionOptionPickers.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 3 remain after this review.

Walkthrough

The picker now locks non-permission options during a working turn when their transport is not agent-session. Agent-session options and permissions remain available unless an update is pending or a send is in flight. The working notice is suppressed for agent-session options. Tests cover transport-specific availability, busy-state locks, and changes to selections during a reply.

Merge Risk: Minimal · up to 7613d

Reply-time choices apply to the next message. No actionable merge-blocking risk was identified.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main user-facing change: allowing phone users to select the next message's model during a structured reply.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description clearly explains the user-facing change, rationale, implementation constraints, testing, and validation results. It references tracked issue STA-10852 and visual verification, but it d…
Full details: Description check

Explanation

The description clearly explains the user-facing change, rationale, implementation constraints, testing, and validation results. It references tracked issue STA-10852 and visual verification, but it does not include the template headings, an actual issue link, explicit checklist confirmations, or attached before-and-after visual proof.

Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 3 functions across 2 files.

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@brennanb2025

Copy link
Copy Markdown
Contributor Author

On phones, structured chat replies kept model, effort and speed choices disabled for the entire reply. The picker used the terminal command lock even though structured choices prepare the next message. Users can now choose during a structured reply, matching desktop; accepted messages keep the settings already captured for them.

Full review completed in round 1: correctness, architecture, whole-mechanism reference comparison and readiness checklist passed. No code fixes or deferred PR defects. The single main sync produced 51cc8296b059f75e87d516bd5a94784b43f6838b and changed neither reviewed PR file.

Validation: 100 focused tests passed, covering phone controls, next-message capture, host dispatch and older-host send paths. Final-head CI passed, including static analysis/typecheck, mobile verification and the mobile web bundle. Native iOS screenshot check passed on the shipped session route with the hash-validated branch bundle. Model, effort and Fast mode picks stayed enabled during the same running turn, appeared in the composer and reached the next send. The phone run used synthetic paired-host data; its send was deliberately refused after recording the chosen values, and no agent or provider execution is claimed. Real-agent QA is not required for this UI/tests row. Rig processes are stopped, the owned simulator is shut down, real config hashes are unchanged and ticket 3646 is released.

Intended differences from the common pattern remain: terminal-backed choices lock during replies because they write commands into the running terminal; the phone keeps its existing pending-write lock; and host-owned saved choices support shared chats and independently updated hosts. No saved fields, wire fields or capabilities change. Unsettable summary rows now disable navigation to their already-disabled details, following the existing disabled-until-known rule.

Visual observation outside this change: the existing Fast mode switch has a low-contrast track while off. This PR does not change its styling.

For Brennan’s review: the native phone drawer remains usable while the transcript is working. The right image shows GPT-5.4, High effort and Fast mode selected.

During a structured reply Choices prepared for the next message
Native phone picker enabled during a structured reply Native phone picker with GPT-5.4, High effort and Fast mode selected

Composer after closing the drawer shows the selected values and the same working turn. Code spots: reply-time lock, working notice.

@brennanb2025
brennanb2025 merged commit 6e70de5 into main Oct 31, 2026
26 checks passed
@brennanb2025
brennanb2025 deleted the brennanb2025/phone-picker-during-reply branch October 31, 2026 03:58
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