From 42cc863bf2ef0862397d4da9ab280b78fc290e80 Mon Sep 17 00:00:00 2001 From: Alessandro Costa Date: Wed, 1 Apr 2026 22:40:05 -0300 Subject: [PATCH] fix: address CodeRabbit review on PR #1569 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Critical: - migrations: change version 8 → 25 to avoid collision with MigrationRunner.addObservationHierarchicalFields (uses version 8) - SessionRoutes: remove duplicate imports that prevent compilation Major: - SessionRoutes: call applyTierRouting() before every generator spawn (stale-recovery and crash-recovery paths were missing it) - applyTierRouting: clear session.modelOverride at top before re-evaluating to prevent stale tier from persisting across spawns Co-Authored-By: Claude Opus 4.6 (1M context) --- src/services/sqlite/migrations.ts | 2 +- src/services/worker/http/routes/SessionRoutes.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/services/sqlite/migrations.ts b/src/services/sqlite/migrations.ts index 7005d76e..5be21f6a 100644 --- a/src/services/sqlite/migrations.ts +++ b/src/services/sqlite/migrations.ts @@ -519,7 +519,7 @@ export const migration007: Migration = { * explicit retrieval). Foundation for future Thompson Sampling optimization. */ export const migration008: Migration = { - version: 8, + version: 25, up: (db: Database) => { db.run(` CREATE TABLE IF NOT EXISTS observation_feedback ( diff --git a/src/services/worker/http/routes/SessionRoutes.ts b/src/services/worker/http/routes/SessionRoutes.ts index f7def963..9db84dc2 100644 --- a/src/services/worker/http/routes/SessionRoutes.ts +++ b/src/services/worker/http/routes/SessionRoutes.ts @@ -18,8 +18,6 @@ import type { WorkerService } from '../../../worker-service.js'; import { BaseRouteHandler } from '../BaseRouteHandler.js'; import { SessionEventBroadcaster } from '../../events/SessionEventBroadcaster.js'; import { SessionCompletionHandler } from '../../session/SessionCompletionHandler.js'; -import { SettingsDefaultsManager } from '../../../../shared/SettingsDefaultsManager.js'; -import { USER_SETTINGS_PATH } from '../../../../shared/paths.js'; import { PrivacyCheckValidator } from '../../validation/PrivacyCheckValidator.js'; import { SettingsDefaultsManager } from '../../../../shared/SettingsDefaultsManager.js'; import { USER_SETTINGS_PATH } from '../../../../shared/paths.js'; @@ -130,6 +128,7 @@ export class SessionRoutes extends BaseRouteHandler { session.abortController = new AbortController(); session.lastGeneratorActivity = Date.now(); // Start a fresh generator + this.applyTierRouting(session); this.spawnInProgress.set(sessionDbId, true); this.startGeneratorWithProvider(session, selectedProvider, 'stale-recovery'); return; @@ -287,6 +286,7 @@ export class SessionRoutes extends BaseRouteHandler { this.crashRecoveryScheduled.delete(sessionDbId); const stillExists = this.sessionManager.getSession(sessionDbId); if (stillExists && !stillExists.generatorPromise) { + this.applyTierRouting(stillExists); this.startGeneratorWithProvider(stillExists, this.getSelectedProvider(), 'crash-recovery'); } }, backoffMs); @@ -836,6 +836,10 @@ export class SessionRoutes extends BaseRouteHandler { return; } + // Clear stale override before re-evaluating — prevents previous tier + // from persisting when queue composition changes between spawns. + session.modelOverride = undefined; + const pendingStore = this.sessionManager.getPendingMessageStore(); const pending = pendingStore.peekPendingTypes(session.sessionDbId);