From 4ea5dd6739cb705b332e788cd174a718959e0b1f Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Sun, 12 Jul 2026 21:58:12 -0700 Subject: [PATCH] fix: CLI shouldSuperviseDashboard mock + getCliPackageVersion/isUnresolvedCliPackageVersion + executeRequeueLoopCount + i18n buttonShort (round 9) (#2034) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fixes shard 3 (CLI) + shard 4 (i18n) failures from full-suite run 29223788088. ## Fixes ### CLI (shard 3) — 5 files, ~140 tests - **`bin.test.ts`** — `bin.ts:851` now imports `shouldSuperviseDashboard` and `bin.ts:865` imports `runDashboardSupervised` from `./commands/dashboard.js`. Test mock only exported `runDashboard`. Missing `shouldSuperviseDashboard` → TypeError → caught → `process.exit:1`. Added `shouldSuperviseDashboard: vi.fn(() => false)` + `runDashboardSupervised` to mock + `commandMocks`. - **`daemon/serve/dashboard.test.ts`** — `@fusion/dashboard` barrel (index.ts:115) re-exports `getCliPackageVersion`, `isUnresolvedCliPackageVersion`, `resolveCliPackageVersionInfo`. Added all 3 to each file's `@fusion/dashboard` mock. - **`task.test.ts`** — `executeRequeueLoopCount: 0` added to TaskResetField set by recent commit; retry test assertions needed the new field in both `mockUpdateTask` expectations. ### i18n (shard 4) — 4 locale files - **`settings.reset.buttonShort`** missing from zh-TW, fr, es, ko (zh-CN already had it). ### Engine (shards 1+2) — already fixed in PR #2025 (merged on main) - Run 29223788088 was at commit `b85a6b866` (pre-PR-2025-merge), so engine + i18n `storageMigrationNotice` failures visible in that run are already resolved on main. ## Verification - daemon: 21/21 ✅ | serve: 58/58 ✅ | dashboard: 91/91 ✅ | task retry: 5/5 ✅ - i18n parity + gate-coverage: 7/7 ✅ - Gate (`pnpm test:gate`): exit 0 ✅ - `bin.test.ts`: cannot verify locally (`@agentclientprotocol/sdk` not installed locally; CI resolves from lockfile). Mock exports verified against `dashboard.ts` source. ## Summary by CodeRabbit * **Bug Fixes** * Improved task retry recovery by correctly resetting execution counters. * **Localization** * Added support for shorter reset-button labels in Spanish, French, Korean, and Traditional Chinese. * **Tests** * Updated command and startup checks to reflect current dashboard and version-handling behavior. --- packages/cli/src/__tests__/bin.test.ts | 8 +++++++- packages/cli/src/commands/__tests__/daemon.test.ts | 5 +++++ packages/cli/src/commands/__tests__/dashboard.test.ts | 3 +++ packages/cli/src/commands/__tests__/serve.test.ts | 5 +++++ packages/cli/src/commands/__tests__/task.test.ts | 4 ++++ packages/i18n/locales/es/app.json | 1 + packages/i18n/locales/fr/app.json | 1 + packages/i18n/locales/ko/app.json | 1 + packages/i18n/locales/zh-TW/app.json | 1 + 9 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/__tests__/bin.test.ts b/packages/cli/src/__tests__/bin.test.ts index 4675502cca..62f54dc240 100644 --- a/packages/cli/src/__tests__/bin.test.ts +++ b/packages/cli/src/__tests__/bin.test.ts @@ -5,6 +5,7 @@ import { join } from "node:path"; const commandMocks = vi.hoisted(() => ({ runDashboard: vi.fn(), + runDashboardSupervised: vi.fn(), runServe: vi.fn(), runDaemon: vi.fn(), runDesktop: vi.fn(), @@ -151,7 +152,12 @@ vi.mock("../commands/dashboard-tui/index.js", () => ({ vi.mock("../commands/onboard.js", () => ({ runOnboard: commandMocks.runOnboard })); -vi.mock("../commands/dashboard.js", () => ({ runDashboard: commandMocks.runDashboard })); +vi.mock("../commands/dashboard.js", () => ({ + runDashboard: commandMocks.runDashboard, + // FNXC:CliTests 2026-07-13-08:20: bin.ts now imports shouldSuperviseDashboard (supervision is the default) and runDashboardSupervised from dashboard.js; mock must surface both so the no-args dashboard launch test reaches runDashboard instead of failing on an undefined import. + shouldSuperviseDashboard: vi.fn(() => false), + runDashboardSupervised: commandMocks.runDashboardSupervised, +})); vi.mock("../commands/serve.js", () => ({ runServe: commandMocks.runServe })); vi.mock("../commands/daemon.js", () => ({ runDaemon: commandMocks.runDaemon })); vi.mock("../commands/desktop.js", () => ({ runDesktop: commandMocks.runDesktop })); diff --git a/packages/cli/src/commands/__tests__/daemon.test.ts b/packages/cli/src/commands/__tests__/daemon.test.ts index 2764a34cfd..44e14205b0 100644 --- a/packages/cli/src/commands/__tests__/daemon.test.ts +++ b/packages/cli/src/commands/__tests__/daemon.test.ts @@ -563,6 +563,11 @@ vi.mock("@fusion/core", async (importOriginal) => { }); vi.mock("@fusion/dashboard", () => ({ + // FNXC:CliTests 2026-07-13-08:10: @fusion/dashboard barrel re-exports cli-package-version helpers; mock must surface them for startup model sync. +isUnresolvedCliPackageVersion: vi.fn(() => false), +resolveCliPackageVersionInfo: vi.fn(() => ({ version: "0.0.0-test", isUnresolved: false })), + getCliPackageVersion: vi.fn(() => "0.0.0"), + // FNXC:CliTests 2026-07-13-08:00: getCliPackageVersion added to @fusion/dashboard barrel export; mock must surface it for daemon/serve startup model sync. createServer: mocks.createServerMock, GitHubClient: vi.fn().mockImplementation(function () { return {}; diff --git a/packages/cli/src/commands/__tests__/dashboard.test.ts b/packages/cli/src/commands/__tests__/dashboard.test.ts index 0b59e0a30a..f581654ae9 100644 --- a/packages/cli/src/commands/__tests__/dashboard.test.ts +++ b/packages/cli/src/commands/__tests__/dashboard.test.ts @@ -396,6 +396,9 @@ const mockListen = vi.fn((port: number) => { }); vi.mock("@fusion/dashboard", () => ({ + // FNXC:CliTests 2026-07-13-08:10: @fusion/dashboard barrel re-exports cli-package-version helpers; mock must surface them for startup model sync. +isUnresolvedCliPackageVersion: vi.fn(() => false), +resolveCliPackageVersionInfo: vi.fn(() => ({ version: "0.0.0-test", isUnresolved: false })), createServer: vi.fn((_store: unknown, opts: Record = {}) => { if (!opts.onMerge) { if (opts.engine) { diff --git a/packages/cli/src/commands/__tests__/serve.test.ts b/packages/cli/src/commands/__tests__/serve.test.ts index 2a49f925dd..6e0a8455c8 100644 --- a/packages/cli/src/commands/__tests__/serve.test.ts +++ b/packages/cli/src/commands/__tests__/serve.test.ts @@ -623,6 +623,11 @@ vi.mock("@fusion/core", async (importOriginal) => { }); vi.mock("@fusion/dashboard", () => ({ + // FNXC:CliTests 2026-07-13-08:10: @fusion/dashboard barrel re-exports cli-package-version helpers; mock must surface them for startup model sync. +isUnresolvedCliPackageVersion: vi.fn(() => false), +resolveCliPackageVersionInfo: vi.fn(() => ({ version: "0.0.0-test", isUnresolved: false })), + getCliPackageVersion: vi.fn(() => "0.0.0"), + // FNXC:CliTests 2026-07-13-08:00: getCliPackageVersion added to @fusion/dashboard barrel export; mock must surface it for daemon/serve startup model sync. createServer: mocks.createServerMock, GitHubClient: vi.fn().mockImplementation(function () { return {}; diff --git a/packages/cli/src/commands/__tests__/task.test.ts b/packages/cli/src/commands/__tests__/task.test.ts index b90657bd1a..d7126fc67f 100644 --- a/packages/cli/src/commands/__tests__/task.test.ts +++ b/packages/cli/src/commands/__tests__/task.test.ts @@ -2594,6 +2594,8 @@ describe("runTaskRetry", () => { reviewerContextRetryCount: 0, reviewerFallbackRetryCount: 0, completionHandoffLimboRecoveryCount: 0, + // FNXC:TaskRetry 2026-07-13-08:15: executeRequeueLoopCount added to TaskResetField set; retry must zero it alongside other recovery counters. + executeRequeueLoopCount: 0, graphResumeRetryCount: 0, mergeAuditBounceCount: 0, mergeRetries: 0, @@ -2669,6 +2671,8 @@ describe("runTaskRetry", () => { reviewerContextRetryCount: 0, reviewerFallbackRetryCount: 0, completionHandoffLimboRecoveryCount: 0, + // FNXC:TaskRetry 2026-07-13-08:15: executeRequeueLoopCount added to TaskResetField set; retry must zero it alongside other recovery counters. + executeRequeueLoopCount: 0, graphResumeRetryCount: 0, mergeAuditBounceCount: 0, mergeRetries: 0, diff --git a/packages/i18n/locales/es/app.json b/packages/i18n/locales/es/app.json index 038abbfaf9..55dae2b03f 100644 --- a/packages/i18n/locales/es/app.json +++ b/packages/i18n/locales/es/app.json @@ -6725,6 +6725,7 @@ }, "reset": { "button": "", + "buttonShort": "", "buttonTitle": "", "dialogAriaLabel": "", "dialogTitle": "", diff --git a/packages/i18n/locales/fr/app.json b/packages/i18n/locales/fr/app.json index 39c817757d..2a15ea5a7d 100644 --- a/packages/i18n/locales/fr/app.json +++ b/packages/i18n/locales/fr/app.json @@ -6725,6 +6725,7 @@ }, "reset": { "button": "", + "buttonShort": "", "buttonTitle": "", "dialogAriaLabel": "", "dialogTitle": "", diff --git a/packages/i18n/locales/ko/app.json b/packages/i18n/locales/ko/app.json index bd3f30fccb..9b00789036 100644 --- a/packages/i18n/locales/ko/app.json +++ b/packages/i18n/locales/ko/app.json @@ -6725,6 +6725,7 @@ }, "reset": { "button": "", + "buttonShort": "", "buttonTitle": "", "dialogAriaLabel": "", "dialogTitle": "", diff --git a/packages/i18n/locales/zh-TW/app.json b/packages/i18n/locales/zh-TW/app.json index da823c4252..2d2d2917a3 100644 --- a/packages/i18n/locales/zh-TW/app.json +++ b/packages/i18n/locales/zh-TW/app.json @@ -6725,6 +6725,7 @@ }, "reset": { "button": "", + "buttonShort": "", "buttonTitle": "", "dialogAriaLabel": "", "dialogTitle": "",