[fix] A cross-modality model switch keeps the warm sandbox - #6374
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. 🗂️ Base branches to auto review (1)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository YAML (base), Organization UI (inherited) Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
e895ed6 to
a0755aa
Compare
d625af8 to
dae0b25
Compare
|
lgtm |
a0755aa to
1deffd7
Compare
dae0b25 to
7ca9a58
Compare
1deffd7 to
e26c79e
Compare
7ca9a58 to
d870e9b
Compare
e26c79e to
8711e25
Compare
d870e9b to
8028321
Compare
Cold/warm audit finding 2. modelCapabilities is the resolved model's input modalities: per-turn data the attachment chain reads from each incoming request, baked into nothing. But it rode the fingerprint and the harnessSession facet, and it changes WITH the model — so switching between a vision model and a text-only model moved two facets, the mixed plan refused the live setModel route, and the switch rebuilt the warm sandbox (fresh Daytona Secrets, the substitution race, ~15s) for nothing. The Pi catalog splits 249 text+image vs 163 text-only models, so this hit ordinary playground use even after #6364. Same treatment as workflowRevision/isDraft in step 1: out of the hash, documented in the volatile list, pinned in both directions (the per-turn-volatile test gains the field; the old changes-the-fingerprint test is reversed with the reason). Claude-Session: https://claude.ai/code/session_014s6jqKCsVKsNMmnrJVJkZt
8711e25 to
4b9a592
Compare
8028321 to
63cd56e
Compare
Context
Cold/warm audit finding 2. Even with the router keying fixed (#6364), switching between a vision model and a text-only model still destroyed the warm sandbox. The request field
modelCapabilities(the resolved model's input modalities) sits in the session fingerprint and theharnessSessionfacet, and it changes with the model. So a cross-modality switch moved two facets, the mixed plan refused the livesetModelroute, and the runner rebuilt: fresh Daytona Secrets, the substitution race of #6362, about 15 seconds. The Pi catalog splits 249 text-and-image models against 163 text-only ones, so this is ordinary playground use.The field is per-turn data: only the attachment-delivery chain reads it, from each incoming request, every turn. Nothing bakes it into the sandbox, the daemon, or the harness session.
Changes
Before: a model switch from
claude-sonnet-5(text+image) to a text-only model planned{model: apply-live, harnessSession: reopen-session}and rebuilt.After: it plans
{model: apply-live}and applies live on the running session.modelCapabilitiesleavesconfigFingerprintand theharnessSessionfacet, with the reason documented in both places, exactly the treatmentworkflowRevisionandisDraftgot in step 1. Attachment behavior is unchanged: the chain keeps reading the incoming request's value each turn.Tests
What to QA
Stacked on #6372.
https://claude.ai/code/session_014s6jqKCsVKsNMmnrJVJkZt