Repository navigation
🤖 refactor: resolve the workspace model from metadata and an unsent pick - #5901
Closed
ibetitsmike wants to merge 7 commits into
Closed
ibetitsmike wants to merge 7 commits into
ibetitsmike wants to merge 7 commits into
Conversation
The composer, sends, palette, plan handoff, title bar and VS Code composer read the model through the resolver, and a model pick stays in memory until the next send saves it. Agent switches no longer copy a model into the model key, since each agent resolves its own, and removing a provider drops its unsent model picks. Seeding and repair of the old key stay until a later commit deletes them. Stack-Layer: A2c3
Stack-Layer: A2c3
ibetitsmike
added this pull request to stack #5868
October 8, 2026 21:03
This was referenced Oct 8, 2026
The composer's model now resolves from the in-memory unsent picks, and the Storybook test-runner renders all stories of a file in one page, so one story's unsent pick leaked into the next story (App/Astra Pro Desktop started with Pro mode on once the reasoning mode resolves the same way). Reset the picks with the other per-story state. Stack-Layer: A2c3
ibetitsmike
marked this pull request as ready for review
October 8, 2026 21:32
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This was referenced Oct 8, 2026
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 23cfbe5a57
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Stack-Layer: A2c3
A successful send consumed its picks at once, so when the saved settings arrived later (the VS Code metadata pump) or not at all (a failed best-effort save), the composer reverted to the old value. A sent pick now ends when the agent's saved bucket holds it; an unsent pick stays the composer's value even when it equals the saved one. The plan handoff consumes the picks it sends, like a composer send. Legacy workspace ids that start with "__" record model picks as unsent picks. Stack-Layer: A2c3
Unsent picks and cached AI metadata outlived a switch to another server, and another server can reuse a workspace ID, so a pick made on the first server applied to the second one's workspace and its next send saved it there. A switch to another server now clears them before that server's workspaces arrive; a reconnect to the same server keeps them. Stack-Layer: A2c3
resetAiSelectionIntentForTests became an alias of clearAiSelectionState, which the VS Code webview calls on a server switch, so its test-seam comment is gone and check-test-seam-comments flagged the entry as stale. Stack-Layer: A2c3
ibetitsmike
removed this pull request from stack #5868
October 9, 2026 04:49
Contributor
Author
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.
Summary
A workspace's model now comes from the resolver added in #5895 instead of the
model:{workspace}key. The readers that switch are the desktop composer and its sends (useSendMessageOptions),getSendOptionsFromStorage(compaction, resume and the plan handoff), the command palette, the title bar, the streaming barrier, the Tasks settings section,useWorkspaceFallbackModeland the VS Code composer.A model pick in a workspace now stays in memory as an unsent pick until a send saves it to workspace metadata, so it no longer survives a reload. A send marks its picks sent, and a sent pick ends only once the agent's saved settings hold its value, so a failed best-effort save keeps it; the plan handoff ends the picks it sends the same way. The VS Code webview drops unsent picks and cached AI metadata when it switches to another server, which can reuse workspace IDs, and keeps them across a reconnect to the same server. Project, global and draft scopes keep writing their scoped default. Agent switches in
WorkspaceModeAISyncand the plan handoff no longer copy a model into the key, since each agent resolves its own; the sync only records the explicit change for the context-switch warning. Workspace creation stops copying the project model into the new workspace's key. Removing a custom provider also drops that provider's unsent model picks, which would otherwise outrank the repaired settings. Metadata seeding and provider repair of the old key stay until #5907.Stack
Milestone M4 of the server-side settings stack, on top of M3 (#5869 to #5879): per-workspace AI picks (model, thinking level, reasoning mode, agent and Auto routing) are stored in workspace metadata in
config.jsoninstead of per-browser localStorage keys, so every browser shows the same picks. An unsent picker change stays in memory in its tab until a send saves it, and a reload before sending drops it, as the plan accepts. Layer 8 of 20.Testing
modelPreferenceRepair.test.ts): a removed provider's pending pick goes, another provider's stays.useContextSwitchWarning.test.ts) checks the pending pick instead of the key.childGoalBudgetUI test sets its model as a pick. The remainingWorkspaceModeAISynckey checks go in 🤖 tests: delete the WorkspaceModeAISync model key checks #5902.stories/meta.tsx): the test-runner renders all stories of a file in one page, so App/Astra Pro Desktop inherited the previous story's Pro pick once 🤖 refactor: resolve the workspace reasoning mode from metadata and an unsent pick #5904 resolves the reasoning mode the same way (red in CI on 🤖 refactor: resolve the workspace reasoning mode from metadata and an unsent pick #5904 and above and locally, green with the reset).aiSelectionIntent.test.ts), "Implement sends the unsent Exec pick and ends it once it is saved" (ProposePlanToolCall.test.tsx), "persists an explicit model pick until the host's metadata holds it" (vscode/src/webview/App.test.tsx) and "a legacy workspace id that starts with __ records the pick as unsent" (modelChange.test.ts).vscode/src/webview/App.test.tsx).make static-checkand the touched test suites pass at the top of the stack; CI checks each layer on its own.Review record
efe7e29096, because a fork without a message dropped the source's unsent picks (fixed by 🤖 feat: fork a workspace with the source composer's unsent AI picks #5897, 🤖 refactor: resolve the workspace agent from metadata and an unsent pick #5908 and 🤖 refactor: resolve auto routing from the unsent pick, saved flags and agent defaults #5909); everything else passed. Round 2: PASS on80f2b5379e: forks from all five entry points keep the unsent picks, startup removes the retired keys, and the round 1 checks still pass; the plan handoff was not exercised because the mock model cannot propose a plan. The Codex round 1 fixes made since then have no remote UAT yet; that is left to the next UAT round on 🤖 refactor: keep preferences and workspace AI picks on the server #5916.23cfbe5a57: 3 findings: 1 fixed in 3e0b705, 2 declined with reasons in their threads. A 🤖 refactor: keep preferences and workspace AI picks on the server #5916 finding on VS Code server switches is fixed here in 7bea2d5. Mike asked to land the stack as one PR, so further review runs on 🤖 refactor: keep preferences and workspace AI picks on the server #5916.efe7e29096, probe edits in production code).