Skip to content

fix(server): preserve queued model settings when steering - #24731

Closed
PixPMusic wants to merge 1 commit into
pingdotgg:mainfrom
PixPMusic:fix/sync-thread-model-settings
Closed

PixPMusic wants to merge 1 commit into
pingdotgg:mainfrom
PixPMusic:fix/sync-thread-model-settings

Conversation

@PixPMusic

@PixPMusic PixPMusic commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Promoting a queued message to Steer discarded the model selection saved with that message and reused the thread's current selection. With two clients, queuing Medium while Ultra was running left the sending composer on Medium and the other client on Ultra; promotion never made Medium durable.

Change

Pass the queued run's selection into the existing steering transition. The provider's transition policy still decides whether to apply it next turn or restart. Codex keeps its active turn and native subagents while saving the selected settings for the next turn. This shared server path covers every client without changing contracts or picker state.

Scope and approval

Submitted under the small, focused fix for an obvious bug exception, without a prior issue or discussion. The queue already stores the selected model and options; promotion alone discarded them. This restores that existing selection through the existing provider transition policy. The change is limited to the incorrect selection argument and its regression test, with a reproduced two-client failure and before/after evidence.

Verification

  • Added a regression that failed on the base: expected Medium, received the previous effort. It now passes and verifies the message steers once, its queued run retires, and the active run keeps its original selection without restarting.
  • Original focused steering and Claude automatic-delivery suites: 18 tests passed.
  • vp run check:changed passed on rebased head ebf9980d72 (base main at 1eb4071a49): format, lint, knip, GraphQL generation, affected typechecks, and 26 nearby tests. Existing lint warnings remain. Verification was limited to two CPU cores.
  • Two independent preview browser profiles against isolated copied state: reproduce the mismatch, promote Medium from the other profile, observe the first client update to Medium, and retain Medium through later tool activity and completion. Both temporary model overrides clear.

Browser captures below were recorded on the original revision 88d3f83. git range-diff confirms the fix and regression test are unchanged by the rebase.

Observing client before Observing client after
Before: the promoted message leaves the observing client on Ultra After: the observing client follows the queued Medium selection

Before recording · After recording. The recordings show the observing client while the other profile clicks Steer; same thread, light theme, and 1280 × 800 CSS viewport.

The reporter confirmed the original reproduction: queue a message with Medium selected, then click Steer while Ultra is running, with no message sent from the observing client. This fixes that path. Ordinary idle cross-client sends stayed synchronized on current main, which already includes #20886. Native mobile, the Electron shell, and relay/tunnel connections were not exercised; all use this server command.

Model: GPT-6.1 Sol | Harness: Codex in T3 Code

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 25, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 88d3f83

Macroscope's review found this PR approvable — This is a small, self-contained server bug fix that preserves the model settings attached to a queued message when it is promoted to steering. The added integration test covers the regression and confirms the active run remains intact while the queued settings become durable.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 88d3f83 and ebf9980.

Files selected for processing: 1
  • apps/server/src/orchestration-v2/Orchestrator.ts

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

Walkthrough

Queued message promotion to Steer now uses the queued run’s model selection. An integration test checks the promoted message, model selections, turn count, and queued-run cancellation.

Changes: Queued message steering

Layer / File(s) Summary
Steer promotion and regression coverage
apps/server/src/orchestration-v2/Orchestrator.ts, apps/server/src/orchestration-v2/SteeringCompletion.integration.test.ts
Promotion passes the queued run’s model selection. The integration test checks that the message is steered without starting another turn, the thread adopts the queued selection, the active run retains its selection, and the queued run is cancelled.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Possibly related PRs

Suggested labels: bugfix

Suggested reviewers: juliusmarminge

Merge Risk: Minimal · up to ebf99

No actionable merge-blocking risk remains from the reviewed change.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title is concise, specific, and accurately describes the primary server-side fix for preserving queued model settings during steering.
Description check Passed The description includes complete Problem, Change, Scope and approval, and Verification sections. It explains the bug, fix, approval exception, focused regression coverage, broader checks, browser evi…
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.
Full details: Description check

Explanation

The description includes complete Problem, Change, Scope and approval, and Verification sections. It explains the bug, fix, approval exception, focused regression coverage, broader checks, browser evidence, limitations, and agent details.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@PixPMusic
PixPMusic force-pushed the fix/sync-thread-model-settings branch from 88d3f83 to ebf9980 Compare October 25, 2026 19:00
GigaZoro pushed a commit to GigaZoro/CodeShip that referenced this pull request Oct 30, 2026
…ingdotgg#24731)

Cherry-picked from pingdotgg#24731

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@maria-rcks

maria-rcks commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

Verified unchanged head ebf9980d72fce95439e575fca23c070a8de471a2 on Linux with system Chrome and repository Playwright. Created a real git project and threads through the web app, using real Codex gpt-6.1-sol turns through the local proxy. No mocks or seeded conversation data.

  • Reproduced on github/main at 8b74a69019: start Ultra, queue Medium, promote from an independent observing client. The message steers, but the durable thread selection and observing composer remain Ultra.
  • On the PR, the same promotion changes the observing composer and durable thread selection to Medium. The original Ultra run retains its run id and settings, the queued run becomes cancelled, and Codex acknowledges the steering marker without restarting the active turn.
  • A fresh browser context loads Medium from the server. The active turn completes with BASELINE_READY STEER_MEDIUM. A subsequent idle send completes with NEXT_TURN_MEDIUM, and its persisted run uses Medium. Cancelling another queued message through the second client also works without changing the selection.
  • Blacksmith: vp test run apps/server/src/orchestration-v2/SteeringCompletion.integration.test.ts, 14 tests passed. Existing head CI reports 29 successful checks. No code changes were required.

Main after promotion:

main observing client remains Ultra

PR after promotion:

pr observing client follows queued Medium settings

main promotion recording

pr promotion recording

completed steering and subsequent medium turn

Read-only server projection transcript. Recordings were trimmed, inspected, and played through with seeking after upload. Animated copies are embedded because GitHub strips external video players. The main and PR have different UI revisions; both use the same repository, initial prompt, model, and effort transition.

Not verified

Native iOS/Android, Electron shell, macOS/Windows, relay/tunnel connections, other providers, switching model families, and preservation of native subagents were not exercised on this Linux VM. The real provider check covered Codex effort changes and the shared server promotion path.

@t3dotgg

t3dotgg commented Nov 1, 2026

Copy link
Copy Markdown
Member

Note

🤖 GPT-6.1 Terra [1m] responding on behalf of Theo

Closing because main now passes the queued run’s model selection when promoting a message to Steer. The merged change is identical to this PR’s production diff and includes a regression test. #23240 Orchestrator.ts

@t3dotgg t3dotgg closed this Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants