From fe7fe49cee7c2b6f56a5e3738485bf75e2ee2379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Thu, 20 Aug 2026 00:32:44 +0000 Subject: [PATCH] chat: stop reassigning a live session to fable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit three defects, one shape: the code has two names for "which session is this", and every guard checked the one no caller uses. `fable` is the FIRST entry in the claude-code catalogue, so it is what ModelSelector picks whenever it decides a conversation needs a default. On a key without fable entitlement that lands as a 429, after a real mid-session switch — the reported header read OPUSPLAN → FABLE. 1. the settings default was applied to RESUMED chats. the guard was `!initialSessionId`, and no chat caller passes that when resuming — the id arrives as `options.resumeSessionId`, and ChatPanelWrapper goes as far as `resume ? undefined : sessionKey`. so a user's default model was written over sessions that already had one. both names are checked now. 2. `hasStarted` was `!!preloadedMessages?.length`, which is FALSE for the first frames of a resumed chat — before its messages arrive. ModelSelector reads "not started" as permission to pick a default, so a reload reassigned live sessions during that window. a session id is known on the first render and a chat that has one is by definition not new. 3. harness lock. `crossesHarness` returned false when the current harness was unknown, which reads as "nothing crosses" and is the opposite of what is known — with no current harness, everything might. so a started session offered a switch to opencode while its model was still resolving, a switch that cannot work: it hands a `ses_…` id to `claude --resume` and dispatches to the wrong sidecar. unknown is not permission; the strip locks until the answer arrives. the settings themselves were never wrong — chat.defaultModel reads claude-code/opus on the affected server. nothing was ever reading it for the sessions that got reassigned. --- public/fofos-favicon-lean.ico | Bin 0 -> 15086 bytes public/fofos-favicon.ico | Bin 0 -> 120333 bytes public/fofos-logo-saffron.png | Bin 0 -> 12754 bytes .../Chat/components/ModelSelector.test.tsx | 29 ++++++++++++- .../apps/Chat/components/ModelSelector.tsx | 17 +++++++- .../officerdev/src/hooks/useChat.ts | 39 ++++++++++++++---- 6 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 public/fofos-favicon-lean.ico create mode 100644 public/fofos-favicon.ico create mode 100644 public/fofos-logo-saffron.png diff --git a/public/fofos-favicon-lean.ico b/public/fofos-favicon-lean.ico new file mode 100644 index 0000000000000000000000000000000000000000..36c2eaddb8ee8ea26943a090b0168e8f5b96e059 GIT binary patch literal 15086 zcmeI(ca)aZoxt&DU}P|&fS@1>Gaw2U6e}yD4%LbsQ7lZ38p|3>l!!*;rP$C|vzA?r zVmE6<*BGL)jJ+pu)nLT|D|RD_1vKC9jgJtb=Fn)rA;adJXY^xJm8vi+@ZwTw{X&E^G zdhCV6VgKE5Dn`L|*$o$AU0BDpbqubD?`C(*hHJbFPJ?T`2^^p8O@(y^!Ff!?*08SQ zUlTuq<9Gea<8M#eei#ea#(6jv-(7EPhE3tR*w&6X0Osuk_nzx(9pCRz3@hU9gT2uP zyJ8ypVjL#Gvg>18IL9MlImh98jfCsqJ3bc6p?Umi#Pn2}SB|IUin!y>>qpsmCUorP zIgXCV%UZ5T_c`jfB_8D?-*8zhk322GWZHw&j^}AGp`t;};h$B=k%kho9keT#g%XJ${87aVze|!}tU4!PT(tRJebQ zp9kBV3D3?9RB#aX!YFu;xUXvAn*6_Yk2FH}=p;OikMZUAXbF9Pf)DXFUc&A09J}|L z=TXF6bJxy#-{-i$sqfDipYPH$p6@F|_+G!M?st{{#W#$_{3&p+JN7PcueLV6#pJz? zPnS}rwYq<6`a87!8+hmMi<2-Ht<^Wr``7WWiFs(P?49KK8S3ZAeM>19^_}l?@LXSk zJMacvwmoGmSwz`1{G4<@r!2oNUPYQ8@dc#UBih}F_-n0{wa$z9 zDQe-p>N|E^1K@r2KB8^IORysH_T!?AXTlxu7ScKq_x`fpdT41(OGx*gjD2R=74Q(E zjR;-ao8Vf+TqEp6n*4k?3Z6mhJ&8KRu)h|X4*Q;t=qC+llkVqPf6Q;8%rm6bBF163 z4qDo4zaxE>q^$j}g-Lh-k75M8qyGfQQ9<7J*9M+E6#1@6OY8eM>0QwqFCd+p@ypN# zc^`y*;9f14dzZ9fh;r811LZbvA#FKahYv9rQO9si`~(}9(!K8=LAhVgSS@OSd%g$9e-0Ya0nxs5{w1vA=jR%TJim{)SIX@*73G|_ z@pAqTNsBf-2j%>DzL7l7s%5>WT$jj8L%%avW-87v;?aIOM$g^2QvSs}r)?ScZt8{2 zP+l+F*b~wInZ%?1V&aa`HSr9({_P6a5JtH)e1i0Tu)X7PX%Ub14V_=q*}s&3YLXXa z9wV&_M#23U>4x4X`y$%++Qo=x9<+K%z(F&xp>xy0{;_iCgW z*5fbu4BH_;$%dGKa=Q+Cp5?AYjMMrb;Zw}T&2X>G zfn^=HWxHZDoTr~FEv@kfq+7@R66fCYds>n1zE~0I_{a0y+W5V%7Qi-B?(tf6`eqOPH5svFz` zO-S>MFTsytTQwMt!>}`a_p4zHqV65Udm!&Sh9A#_&ab6)O4s#8%4}#I{|w>0oo9J` zmhFQsc(jFl%X>#{gs+V$Y1{O3U|Gj83zqKy=j^$$57)tSTpmNzdxgB2*c{D$74cOG zUF&k)d8Dlg`|%De=f|^i+XC+Id|gW8KetrZ^LIaPh417gc&4Mh2%WEUs$gwYqujo0 zKON~iiu$jTzAhZswTSeV!q>?6jJk(bg6q06{H%2ytn(iJR6Kh|T52cK-1`@!FRIWy z?qqEo`)+VOqFx$$=M07K>#SDFSl)Z*WSjusQd_fH+{*EM+?X`jX| ze;V?;CmlFx`Q9PyiOKK|F4vD|?~@U*&cvmZn@OJQZMmtXav$(~ELKGH9br4t2E%<6 zeHuOt-(B<2jTgL6j>6Meg0x;a?)cpg*7aT~=llF32Ea0o$Iqj*+?7Ro^H?H6dW@+z z@duN7rzCk%#`ksz9*6J8v3p0mK52hx+b5a+8aE%WMhvc(mbXnfoNhVCWn- zh4s$HNSHnvu9tPkBdxOq&v)ZXLt!bB-t}K-#N_w$rc@AhT7x}vrE-K~O&d1mW_G#FN+c6gT-A|Bpy)^E3s_18}7RtKsybmqo9&vnzoiGW0 zC-FYr8*LFoh&Ek6_ry&oe}D1$4h%
    )t)y(c_h>3Gw)_4h;6v!Az0<-LcGMtMyg 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

    C4E7j8i4PMRY&yk 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

    (F?e%j7@r zj-*A)^7wC%;~RCw)?un~2lWMb9+U2&)9ZCb__rMd;9%bjcbC@;fJ^(i`Aex`=76Zn z`_J@#b?3i((CwW!Ibd=3-Ae#aDNjh)`W+7uF`fSXjR9E6J51ZOcnuCqn`Esvg#X+S zc!|?PYGFTVh7hu+q#;Py{Jq9E-j`#P8(Gu?*+=$hNCSEnm4=GGHBvw(UYg97Q^lj=lm)r2w?G=a265NHt&?H);Nt@`xfP2*83-Vd_t4U zsP3YxJ!+m=ukmSVOMhz?;rpfDrMXxYOT3;guif#B@jo{Idq1oUiVghgzuKJh&;W+a zA1t`OYSDiLepbgXI;{GXAc?-lIrlN=Y3c9%3INDVgF|RQ9~t&1`$J)Ba|mFK_`|2p zxw*&q^DWC!1F90|4i|F(Ro{rC`Y>Sm8UX^e03-ca=j!Ol=LPz`Hi_7nBN3+2?neA7 zx1(LfkkOwRX)avA3j3oW?Y{}|J?llnmY1xPPP*9_uI~(5`zz-&k#h* zsOZzO6`*xzc-yPxodyvhoN@RWs|^s!$XVrw56onhZ5MRJ{h-M?8;d2zKYVDVQns5bk#Wi~zRB`o2c# z5|_Y(PeVEjwRgW~Y{K2&Hb=pKdw0Xl;Pgy%hy>(h)_VG^83erDk<{hLruiQOq5Ftf z*Z)EH!A%Z3Zng=Gc0V=VWBJ68#ji8VO$2BFqOzZ<0kHoe9pa?99tM)+p3Nz-D8n?w zxx=XXt*y~S0KgjnX_QNP>us8Q?@AAFG8Rh7GXUuFdYt*#ACi=2ll78IDF4Z>{1M1>cWqhR0Wbvxbc&84} zYK#r7XAa^@*3a$;86hq?=q0-?y`hx(>^TNQ1O)~_QG2$XGmg(8k@>{5T6}J&VO(td zF@g+{ZSX#jIa=MA!g!g*@edQn)C67nCI{5(2z?CEQTKS4zzzafD;}9TjR}0iNa0N4 z9WsMcR%#S{%a`$%JH?Vr6uX><-xZp(1up_FqapWh8+=v8Ix5G5X?lP=uSMoNWYA*+98NL^B*Gm~rm4_+;dU~gn}%YW zXzly%(E3Y!L?5%o=&l2wBfJqKP!|@m_7AbP#3__?6Uh7{K?m00@Ykk?pIw&4Qqo`h z-CWo{j!V-F!m4GD`l^Re{jviGJ_|kV%~r+6`8Os&MDE*BBPJljVITF6Ly+EM&vggJ z6zh1G?uj<$_aR9RNK7eU3@s|TA@$e=k7o;5{Oaa`6FcrUWCfRBl(U;ie};lxVer1@}HJ2fafM%4nnHR6j1bGG|2M=GnAH zo+jG6pT^nWOkYBG0Kim9XDDcqN*c9BY_426E#f{!DcIGbC#IOtZg^a%>*HIQ$zbjq15T>(J@&(N0dlOpan*n$ zgn)zIWS455fGIX=dyKvWG{euW;y2_#?>wiiT?B2z6?ni&X6u9@V2s`VPSFF$TkQHN z2XGV}+CS)FQVqHnTp2f_VUk()Gs1_9%>shea=oyE9|9#^)sM z#+**_jZEsbgB04vLDM))auo{8!Frub*MWpAnnX0%X}SnX&qgt4gpD+dJ_deV*OstQ zceq^~n1Q1R{0u7#|5&U_pM@TDyEh6cI%){m#@&wWb({z2p!^$5el|UVX3da%2846o zj56-kb~B;p`H{Q=Ms-o#i!b941wZafI1M`Po4YwCKPyixYZ@3=(obZsRP(C;a!%{q zjrT%gU-MuZ*C$n9!A(31-u~{^v)J?AaTs<6NTB?4>VIh#tnDEiUq1ghkrjkH{y}>C uJS6nKW`-i`d1;ApG8Kk7UC-hYqj0BLaru^JJh;Qs~SW*H9v literal 0 HcmV?d00001 diff --git a/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.test.tsx b/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.test.tsx index 51a0a164..a349246f 100644 --- a/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.test.tsx +++ b/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.test.tsx @@ -1,4 +1,4 @@ -import { describe, expect, test } from 'bun:test'; +import { describe, expect, mock, test } from 'bun:test'; import { render, screen } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { ModelOption } from 'state/useModels'; @@ -127,3 +127,30 @@ describe('ModelSelector display of an unknown model', () => { expect(screen.queryByTitle('claude-code/opus')).toBeNull(); }); }); + +describe('a live session whose model has not resolved yet', () => { + // Reported 2026-08-19 from a fresh server: a chat running `opusplan` came back as `fable` after a + // reload, and the header showed a real mid-session switch (`OPUSPLAN → FABLE`) followed by a 429 on a + // key with no fable entitlement. `fable` is simply the FIRST entry in the claude-code catalogue, so it + // is whatever this component picks when it decides a conversation needs a default. + test('does not invent a model for a conversation that has started', () => { + const onModelChange = mock(() => {}); + mount({ selectedModel: null, model: null, hasStarted: true, onModelChange }); + // The old behaviour was `onModelChange('claude-code/fable')` — a confident wrong answer about a + // session it knows nothing about. An unset picker is the honest one. + expect(onModelChange).not.toHaveBeenCalled(); + }); + + test('still picks a default for a composer that has NOT started', () => { + const onModelChange = mock(() => {}); + mount({ selectedModel: null, model: null, hasStarted: false, onModelChange }); + expect(onModelChange).toHaveBeenCalled(); + }); + + // Unknown harness is not permission to switch harness: handing a `ses_…` id to `claude --resume` + // dispatches to the wrong sidecar, which is why this is pinned rather than left to read nicely. + test('offers no harness switch while the harness is unknown', () => { + mount({ selectedModel: null, model: null, hasStarted: true }); + expect(screen.queryByRole('button', { name: /^openai$/i })).toBeNull(); + }); +}); diff --git a/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.tsx b/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.tsx index 34a021fd..53c038b4 100644 --- a/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.tsx +++ b/src/workspaces/officerdev/src/apps/Chat/components/ModelSelector.tsx @@ -113,9 +113,22 @@ export function ModelSelector({ const harnessOf = (id: string) => (id.startsWith('claude-code') ? 'claude-code' : 'opencode'); const currentHarness = displayModel ? harnessOf(displayModel) : null; + /* + A started conversation whose model has NOT resolved yet. + + `crossesHarness` used to return false here, which reads as "nothing crosses the harness" and is the + opposite of what is known: with no current harness, EVERY provider might cross it. So a live session + offered a switch to opencode during the window before its model arrived — a switch that cannot work, + because it hands a `ses_…` id to `claude --resume` and dispatches to the wrong sidecar. + + Unknown is not permission. The strip locks until the answer arrives. + */ + const harnessUnknown = hasStarted && !currentHarness; + /** Would picking this provider move the conversation to the other sidecar? */ const crossesHarness = (provider: string) => { - if (!hasStarted || !currentHarness) return false; + if (!hasStarted) return false; + if (!currentHarness) return true; // unknown — refuse rather than guess const target = availableModels.find((m) => m.provider === provider); return !!target && harnessOf(target.id) !== currentHarness; }; @@ -123,7 +136,7 @@ export function ModelSelector({ // The provider strip still collapses to a label when there is nothing to choose between — but now that // means "one harness on offer", not "you have already sent a message". const selectableProviders = providers.filter((p) => !crossesHarness(p)); - const providerStripLocked = isBusy || selectableProviders.length < 2; + const providerStripLocked = isBusy || harnessUnknown || selectableProviders.length < 2; const handleProviderClick = (provider: string) => { if (isBusy || crossesHarness(provider)) return; diff --git a/src/workspaces/officerdev/src/hooks/useChat.ts b/src/workspaces/officerdev/src/hooks/useChat.ts index 68bd0cd3..7f397701 100644 --- a/src/workspaces/officerdev/src/hooks/useChat.ts +++ b/src/workspaces/officerdev/src/hooks/useChat.ts @@ -112,19 +112,42 @@ export function useChat(initialSessionId?: string, initialModel?: string | null, const cursorRef = useRef(0); const sendRef = useRef<(d: Record) => void>(() => {}); - // Track if session has started (first message sent) - const [hasStarted, setHasStarted] = useState(!!preloadedMessages?.length); + /* + Has this conversation already happened? + + `!!preloadedMessages?.length` alone was wrong for the window that matters. A resumed chat renders + before its messages arrive, so for those first frames `hasStarted` was FALSE on a conversation with a + hundred turns behind it — and `ModelSelector` treats "not started" as permission to pick a default. + The catalogue's first entry is `fable`, so that is what a reload reassigned live sessions to, and the + change propagated to the running session as a real model switch (`OPUSPLAN → FABLE` in the header, + followed by a 429 on a key with no fable entitlement). + + A session id is the earlier and more reliable signal: it is known on the first render, and a chat that + has one is by definition not new. + */ + const [hasStarted, setHasStarted] = useState(!!preloadedMessages?.length || !!resumeSessionId || !!initialSessionId); // Get user settings for default model const { settings } = useSettings(); - // Set default model from settings when starting a new chat (no initialSessionId, no initialModel) + /* + The settings default, for a genuinely NEW chat only. + + This guarded on `initialSessionId`, which no chat caller ever passes when resuming — the id arrives as + `options.resumeSessionId`, and `ChatPanelWrapper` goes as far as `resume ? undefined : sessionKey`. + So the guard was true for every resumed conversation and the user's default was applied on top of a + session that already had a model of its own. + + Both names mean "this conversation exists", so both are checked. They are separate parameters for + reasons that have nothing to do with this question. + */ + const existingSessionId = initialSessionId ?? resumeSessionId; + useEffect(() => { - if (!initialSessionId && !initialModel) { - const defaultModel = (projectScoped && settings?.chat?.defaultProjectModel) || settings?.chat?.defaultModel; - if (defaultModel) setSelectedModel(defaultModel); - } - }, [initialSessionId, initialModel, settings, projectScoped]); + if (existingSessionId || initialModel) return; + const defaultModel = (projectScoped && settings?.chat?.defaultProjectModel) || settings?.chat?.defaultModel; + if (defaultModel) setSelectedModel(defaultModel); + }, [existingSessionId, initialModel, settings, projectScoped]); // Sync selectedModel when initialModel changes (e.g. resuming a session) useEffect(() => {