@@ -438,13 +438,29 @@ export function useFreebuffSession(): UseFreebuffSessionResult {
438438 // doesn't bounce a 'landing' restart straight back to 'ended'.
439439 previousStatus = null
440440 if ( mode === 'landing' ) {
441- // Land on the picker without a probe GET. If the preceding
442- // DELETE hasn't propagated, a GET here could still see
443- // queued/active and trip the startup-takeover branch below into
444- // an auto-POST — the exact silent-rejoin this mode exists to
445- // avoid. Polling resumes when the user commits to a model via
446- // joinFreebuffQueue.
441+ // Land on the picker immediately. We can't go through the normal
442+ // tick/apply path because a server-side row that hasn't been
443+ // swept yet would trip the startup-takeover branch into an
444+ // auto-POST — the exact silent-rejoin this mode exists to
445+ // prevent. But the picker still needs live queue depths for its
446+ // "N ahead" hints, so kick off a fire-and-forget GET and extract
447+ // just queueDepthByModel from the response, ignoring whatever
448+ // status it claims. Polling resumes when the user commits to a
449+ // model via joinFreebuffQueue.
447450 apply ( { status : 'none' } )
451+ const fetchController = abortController
452+ callSession ( 'GET' , token , { signal : fetchController . signal } )
453+ . then ( ( response ) => {
454+ if ( cancelled || fetchController . signal . aborted ) return
455+ const depths =
456+ response . status === 'none' || response . status === 'queued'
457+ ? response . queueDepthByModel
458+ : undefined
459+ if ( depths ) apply ( { status : 'none' , queueDepthByModel : depths } )
460+ } )
461+ . catch ( ( ) => {
462+ // Silent — blank hints are acceptable if the fetch fails.
463+ } )
448464 return
449465 }
450466 nextMethod = 'POST'
0 commit comments