From 39d02ae0bcecc6a15fd1a37cf4eedb069c8137df Mon Sep 17 00:00:00 2001 From: OrcaWin Date: Tue, 3 Nov 2026 09:25:28 -0800 Subject: [PATCH] test: remove 49 low-value test declarations (#37856) --- config/flaky-test-pattern-baseline.txt | 4 +- config/scripts/ci-shard-timings.json | 4 - .../scripts/node-server-fast-runners.test.mjs | 9 -- ...orcad-terminal-smoke-change-scope.test.mjs | 28 ---- config/scripts/release-rc-history.test.mjs | 13 -- .../typecheck-project-coverage.test.mjs | 33 ----- .../windows-cmd-shim-spawn-boundary.test.mjs | 108 --------------- config/scripts/wsl-e2e-lane-contract.test.mjs | 44 ------- src/cli/automation-format.test.ts | 19 --- .../orchestration-check-identity.test.ts | 33 ----- .../plugin-authoring/plugin-templates.test.ts | 16 --- .../orchestration-recovery-command.test.ts | 15 --- .../agent-hooks/wsl-hook-relay-launch.test.ts | 30 +---- ...on-parse-cache-antigravity-upgrade.test.ts | 42 +----- ...ude-descendant-escalation-boundary.test.ts | 7 - ...tartup-device-attributes-responder.test.ts | 4 - src/main/daemon/terminal-host-startup.test.ts | 39 ------ .../spawned-command-tree-kill.test.ts | 10 -- ...ected-worktree-scan-listing-distro.test.ts | 44 +------ .../workers/plugin-host-panel-methods.test.ts | 8 -- .../workers/plugin-resident-worker.test.ts | 14 +- .../conda-activation-env.test.ts | 8 -- .../runtime-worktree-create-git.test.ts | 21 +-- ...ed-claude-thinking-display-refusal.test.ts | 24 ---- .../skill-wsl-provider-detection.test.ts | 42 ------ .../desktop-integration/system-fonts.test.ts | 124 ------------------ src/main/wsl/execution/wsl-runner.wsl.test.ts | 23 ---- .../AutomationsSettingsPane.test.tsx | 51 ------- .../WorktreeWslHostStartMenuItem.test.tsx | 54 -------- .../painted-cold-restore-ack.test.ts | 14 -- ...ktree-live-terminal-surface-owners.test.ts | 10 -- .../input/native-chat-paste-bytes.test.ts | 5 - .../testing/orca-testing-hooks.test.ts | 7 - 33 files changed, 9 insertions(+), 898 deletions(-) delete mode 100644 config/scripts/windows-cmd-shim-spawn-boundary.test.mjs delete mode 100644 src/main/window/desktop-integration/system-fonts.test.ts delete mode 100644 src/renderer/src/components/settings/automations/AutomationsSettingsPane.test.tsx delete mode 100644 src/renderer/src/components/sidebar/WorktreeWslHostStartMenuItem.test.tsx diff --git a/config/flaky-test-pattern-baseline.txt b/config/flaky-test-pattern-baseline.txt index c7580151108..22336334441 100644 --- a/config/flaky-test-pattern-baseline.txt +++ b/config/flaky-test-pattern-baseline.txt @@ -1005,7 +1005,7 @@ 2 test-no-wall-clock:src/main/windows/windows-pty-job.win32.test.ts 1 test-no-wall-clock:src/main/workspaces/removal/worktree-removal-close-records.test.ts 3 test-no-wall-clock:src/main/wsl/orcad/wsl-orcad-real-distro-lane.test.ts -4 test-no-wall-clock:src/main/wsl/execution/wsl-runner.wsl.test.ts +2 test-no-wall-clock:src/main/wsl/execution/wsl-runner.wsl.test.ts 1 test-no-wall-clock:src/renderer/src/app-shell/visible-review-reporting.test.ts 7 test-no-wall-clock:src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.behavior.test.tsx 8 test-no-wall-clock:src/renderer/src/components/worktree-jump/WorktreeJumpPalette.recent-tabs.test.tsx @@ -1261,7 +1261,7 @@ 1 test-timeout-needs-reason:src/main/windows/windows-msys-job.win32.test.ts 6 test-timeout-needs-reason:src/main/windows/windows-pty-job.win32.test.ts 8 test-timeout-needs-reason:src/main/worker-thread-child-process/worker-thread-child-process.test.ts -6 test-timeout-needs-reason:src/main/wsl/execution/wsl-runner.wsl.test.ts +4 test-timeout-needs-reason:src/main/wsl/execution/wsl-runner.wsl.test.ts 4 test-timeout-needs-reason:src/packages/process-host/src/run-process.test.ts 5 test-timeout-needs-reason:src/renderer/src/components/sidebar/WorktreeCard.compact-hover.test.tsx 2 test-timeout-needs-reason:src/renderer/src/components/sidebar/WorktreeCard.host-badge-toggle.test.tsx diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json index 29e111adff4..336e030b7ec 100644 --- a/config/scripts/ci-shard-timings.json +++ b/config/scripts/ci-shard-timings.json @@ -437,7 +437,6 @@ "config/scripts/win-crash-survival-e2e.test.mjs": 565, "config/scripts/win32-test-lane-registration.test.mjs": 3507, "config/scripts/windows-bin-spawn-predicate.test.mjs": 125, - "config/scripts/windows-cmd-shim-spawn-boundary.test.mjs": 2077, "config/scripts/windows-native-batch-reference-policy.test.ts": 363, "config/scripts/windows-native-preparation-benchmark.test.mjs": 284, "config/scripts/windows-native-toolchain-routing.test.mjs": 88, @@ -6780,7 +6779,6 @@ "src/main/stats/agent-session-stats-feed.test.ts": 79, "src/main/stats/agent-session-transition-recorder.test.ts": 722, "src/main/stats/collector-async-save.test.ts": 497, - "src/main/window/desktop-integration/system-fonts.test.ts": 77, "src/main/power/system-power-lifecycle.test.ts": 42, "src/main/power/system-resume-broadcast.test.ts": 67, "src/main/telemetry/burst-cap.test.ts": 177, @@ -8814,7 +8812,6 @@ "src/renderer/src/components/settings/appearance/chat/AppearanceChatSection.test.tsx": 1633, "src/renderer/src/components/settings/appearance/AppearancePane.test.tsx": 2066, "src/renderer/src/components/settings/artifacts/ArtifactsSettingsPane.test.tsx": 862, - "src/renderer/src/components/settings/automations/AutomationsSettingsPane.test.tsx": 602, "src/renderer/src/components/settings/browser/routing/BrowserClientHostedRemoteSetting.test.tsx": 841, "src/renderer/src/components/settings/browser/BrowserPane.search-catalog.test.tsx": 774, "src/renderer/src/components/settings/browser/profiles/BrowserProfileRow.google-cookie-clear.test.tsx": 27636, @@ -9054,7 +9051,6 @@ "src/renderer/src/components/sidebar/WorktreeReferenceStack.test.tsx": 530, "src/renderer/src/components/sidebar/WorktreeTitleInlineRename.editor-lifecycle.test.tsx": 407, "src/renderer/src/components/sidebar/WorktreeVisibilityDialog.test.tsx": 2602, - "src/renderer/src/components/sidebar/WorktreeWslHostStartMenuItem.test.tsx": 491, "src/renderer/src/components/sidebar/add-remote-host-ssh-actions.test.ts": 232, "src/renderer/src/components/sidebar/add-repo-browse-authority.test.ts": 57, "src/renderer/src/components/sidebar/add-repo-existing-workspaces-telemetry.test.ts": 52, diff --git a/config/scripts/node-server-fast-runners.test.mjs b/config/scripts/node-server-fast-runners.test.mjs index 8e20b148705..77f72503fac 100644 --- a/config/scripts/node-server-fast-runners.test.mjs +++ b/config/scripts/node-server-fast-runners.test.mjs @@ -14,15 +14,6 @@ function runnerFor(job, os, fast, event = 'workflow_dispatch') { }).coerceString() } -it('defaults reusable and manual qualification to Blacksmith', () => { - for (const trigger of ['workflow_call', 'workflow_dispatch']) { - expect(workflow.on[trigger].inputs.fast_runners).toMatchObject({ - type: 'boolean', - default: true - }) - } -}) - it.each([ ['ubuntu-22.04', 'blacksmith-8vcpu-ubuntu-2204'], ['ubuntu-24.04-arm', 'blacksmith-8vcpu-ubuntu-2404-arm'], diff --git a/config/scripts/orcad-terminal-smoke-change-scope.test.mjs b/config/scripts/orcad-terminal-smoke-change-scope.test.mjs index e4ccff97d17..04d048c2c45 100644 --- a/config/scripts/orcad-terminal-smoke-change-scope.test.mjs +++ b/config/scripts/orcad-terminal-smoke-change-scope.test.mjs @@ -1,6 +1,4 @@ -import { readFileSync } from 'node:fs' import { beforeAll, describe, expect, it } from 'vitest' -import { parse } from 'yaml' import { classifyOrcadTerminalSmokeChanges, collectOrcadTerminalSmokeInputs @@ -87,29 +85,3 @@ describe('the actual terminal smoke dependency graph', () => { ).toBe(true) }) }) - -it('only skips the unchanged smoke after a successful diff and dependency analysis', () => { - const workflow = parse( - readFileSync(new URL('../../.github/workflows/pr.yml', import.meta.url), 'utf8') - ) - const steps = workflow.jobs.preflight.steps - const scope = steps.find((candidate) => candidate.id === 'orcad-smoke-scope') - expect(scope.env).toEqual({ BASE_SHA: '${{ github.event.pull_request.base.sha }}' }) - // HEAD^1 bypasses merge-base lookup, permitting shallow checkout; payload head SHA is unused (see localization gate). - expect(scope.run).toContain('node config/scripts/git-pull-request-diff-base.mjs "$BASE_SHA"') - expect(scope.run).toContain('git diff --name-only --no-renames -z "$DIFF_BASE" HEAD') - expect(scope.run).not.toContain('--diff-filter') - expect(scope.run).toMatch( - /&& \[ "\$scope" = false \]; then[\s\S]*run=false[\s\S]*else\s+echo 'run=true'/ - ) - // orcad refuses to build without the page, so the page builds exactly when the smoke runs. - const gated = "steps.orcad-smoke-scope.outputs.run == 'true'" - const page = steps.find( - (candidate) => candidate.uses === './.github/actions/build-mobile-web-bundle' - ) - const smoke = steps.find((candidate) => candidate.name === 'Boot orcad and round-trip a terminal') - expect(page.if).toBe(gated) - expect(smoke.if).toBe(gated) - expect(smoke.run).toBe('pnpm run smoke:orcad-terminal') - expect(steps.indexOf(page)).toBeLessThan(steps.indexOf(smoke)) -}) diff --git a/config/scripts/release-rc-history.test.mjs b/config/scripts/release-rc-history.test.mjs index bf1e1bd62ae..6727a631e48 100644 --- a/config/scripts/release-rc-history.test.mjs +++ b/config/scripts/release-rc-history.test.mjs @@ -76,19 +76,6 @@ describe('release RC history', () => { }) }) - it('keeps RC numbers monotonic after a stale tag is deleted', () => { - withGitRepo((repo) => { - commit(repo, 'initial') - commit(repo, 'release: v1.4.36-rc.5') - git(repo, ['tag', 'v1.4.36-rc.5']) - commit(repo, 'release: v1.4.36-rc.6') - git(repo, ['tag', 'v1.4.36-rc.6']) - git(repo, ['tag', '--delete', 'v1.4.36-rc.6']) - - expect(highestRcForBase('1.4.36', { cwd: repo })).toBe(6) - }) - }) - it('considers origin/main when releasing from an older ref', () => { withGitRepo((repo) => { commit(repo, 'initial') diff --git a/config/scripts/typecheck-project-coverage.test.mjs b/config/scripts/typecheck-project-coverage.test.mjs index 3e92bc294e0..ca4171badbf 100644 --- a/config/scripts/typecheck-project-coverage.test.mjs +++ b/config/scripts/typecheck-project-coverage.test.mjs @@ -37,39 +37,6 @@ describe('typecheck project coverage', () => { expect(tests.filter((file) => !project.files.has(resolve(root, file)))).toEqual([]) }) - it('assigns cross-process integrations and their producer fixture to the mixed project', () => { - const files = [ - 'src/renderer/src/components/task-page/linear/task-page-linear-detail-query.test.tsx', - 'src/renderer/src/components/terminal-pane/pty-agent-pane-launch.test.ts', - 'src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.picker.test.tsx', - 'src/renderer/src/components/github-item-dialog/load-item-details/work-item-details-target-contract.test.tsx', - 'src/renderer/src/runtime/observed-provider-accounts.test.tsx', - 'src/renderer/src/components/status-bar/ClaudeSwitcherMenu.observation.test.tsx', - 'src/renderer/src/components/status-bar/ClaudeSwitcherMenu.owner-lifetime.test.tsx', - 'src/renderer/src/runtime/provider-account-observation.test-fixture.ts' - ] - for (const file of files) { - expect( - projects - .filter((project) => project.files.has(resolve(root, file))) - .map((project) => project.config), - file - ).toEqual(['config/tsconfig.test.pane-launch.json']) - } - for (const config of ['config/tsconfig.web.json', 'config/tsconfig.tc.web.json']) { - const parsed = ts.readConfigFile(resolve(root, config), ts.sys.readFile) - expect(parsed.error).toBeUndefined() - expect(parsed.config.exclude).toEqual( - expect.arrayContaining(files.map((file) => `../${file}`)) - ) - } - const combined = projects.find( - (project) => project.config === 'config/tsconfig.test.pane-launch.json' - ) - expect(combined.files.has(resolve(root, 'src/types/build-constants.d.ts'))).toBe(true) - expect(combined.files.has(resolve(root, 'src/renderer/src/env.d.ts'))).toBe(true) - }) - it('checks every shared test exactly once, in the scheduled Node project', () => { const tests = typedFiles('src/shared').filter(isTest) expect(tests.length).toBeGreaterThan(0) diff --git a/config/scripts/windows-cmd-shim-spawn-boundary.test.mjs b/config/scripts/windows-cmd-shim-spawn-boundary.test.mjs deleted file mode 100644 index 927675a3e30..00000000000 --- a/config/scripts/windows-cmd-shim-spawn-boundary.test.mjs +++ /dev/null @@ -1,108 +0,0 @@ -import { readdirSync, readFileSync } from 'node:fs' -import path from 'node:path' -import { describe, expect, it } from 'vitest' -import { hasNodeModulesBinSpawn } from './windows-bin-spawn-predicate.mjs' -import { hasWindowsNativeBatchReferenceViolation } from './windows-native-batch-reference-policy' - -/** - * Resolve package bins under process.execPath (see oxc-cli-invocation.mjs). - * The legacy list only shrinks; reviewed native compiler references use process-host. - * The literal check catches quoted .cmd/.bat paths, excluding drive letters and - * templates; comment-only lines are dropped, but trailing comments fail closed. - * The AST check catches spawn/spawnSync/execFile/execFileSync first arguments - * containing node_modules/.bin: literals, templates, concatenation, join/resolve, - * local variable initializers and ternaries. It does not follow imports, function - * returns, assignments, destructuring, aliased spawn names or computed members. - * Names are matched without scope/import resolution; shadowed names and non-path - * join/resolve calls can fail closed. Package paths fold dot segments. - * Neither check proves a Windows branch or an actual unsafe spawn. - */ -const WINDOWS_SHIM_LITERAL = /['"][\w./\\-]*\.(?:cmd|bat)['"]/gi - -const SCANNED_ROOTS = ['config/scripts', 'tests/tools'] - -/** Scripts that still name a batch shim, held as data so it reads as the list it is. */ -const WINDOWS_SHIM_SPAWN_ALLOWLIST = [ - // Owns the pnpm invocation decision for every other script. - 'config/scripts/pnpm-cli-invocation.mjs', - 'config/scripts/pnpm-cli-invocation.test.mjs', - // Write or assert on shim files rather than spawning one. - 'config/scripts/dev-cli-terminal-wrapper.mjs', - 'config/scripts/dev-cli-terminal-wrapper.test.mjs', - 'config/scripts/live-remote-freeze-rpc.mjs', - 'config/scripts/pty-transcript-secret-scan.test.mjs', - 'config/scripts/remote-agent-session-authority-repro.mjs', - // Platform-local build paths; the win32 branch is dead code on both. - 'config/scripts/build-mac-local.mjs', - 'config/scripts/build-linux-local.mjs', - 'config/scripts/build-linux-local.test.mjs', - // Benchmarks, repros and e2e drivers — developer-invoked or Linux-only in CI. - 'config/scripts/run-ephemeral-vm-runtime-store-rollback-repro.mjs', - 'config/scripts/run-multi-client-navigation-e2e.mjs', - 'config/scripts/run-ssh-staged-upload-reliability.mjs', - 'config/scripts/run-terminal-ibus-hangul-e2e.mjs', - 'config/scripts/run-terminal-scale-perf-e2e.mjs', - 'tests/tools/benchmarks/startup-time-bench.mjs', - 'tests/tools/benchmarks/worktree-deletion-dev-bench.mjs', - 'tests/tools/repro-terminal-send-submit.mjs' -] - -/** Drop comment-only lines so prose about the old idiom is not an offender. */ -function codeText(contents) { - return contents - .split('\n') - .filter((line) => !/^\s*(?:\/\/|\/\*|\*)/.test(line)) - .join('\n') -} - -// Why recursive: a future config/scripts// would otherwise escape silently. -function collectScripts(directory, repoRoot, found = []) { - for (const entry of readdirSync(directory, { withFileTypes: true })) { - const full = path.join(directory, entry.name) - if (entry.isDirectory()) { - if (entry.name !== 'node_modules') { - collectScripts(full, repoRoot, found) - } - continue - } - if (/\.[cm]?js$/.test(entry.name)) { - found.push(path.relative(repoRoot, full).split(path.sep).join('/')) - } - } - return found -} - -describe('windows batch shim spawn boundary', () => { - const repoRoot = path.resolve(import.meta.dirname, '..', '..') - const scripts = SCANNED_ROOTS.flatMap((root) => - collectScripts(path.join(repoRoot, root), repoRoot) - ) - const offenders = scripts.filter((relativePath) => { - const contents = readFileSync(path.join(repoRoot, relativePath), 'utf8') - const literals = [...codeText(contents).matchAll(WINDOWS_SHIM_LITERAL)].map((match) => - match[0].slice(1, -1) - ) - return ( - hasWindowsNativeBatchReferenceViolation(relativePath, contents, literals) || - hasNodeModulesBinSpawn(contents) - ) - }) - - it('scans a plausible number of scripts', () => { - // A broken root or extension filter would make the guard silently vacuous. - expect(scripts.length).toBeGreaterThan(100) - }) - - it('has no unlisted script naming a Windows batch shim or spawning a package bin shim', () => { - const unlisted = offenders.filter((name) => !WINDOWS_SHIM_SPAWN_ALLOWLIST.includes(name)) - expect( - unlisted, - 'Resolve package shims to their real executable. Fixed native compiler batch runners must pass the scoped process-host policy.' - ).toEqual([]) - }) - - it('has no stale allowlist entry', () => { - const stale = WINDOWS_SHIM_SPAWN_ALLOWLIST.filter((name) => !offenders.includes(name)) - expect(stale, 'Script no longer matches either shim predicate — delete the line.').toEqual([]) - }) -}) diff --git a/config/scripts/wsl-e2e-lane-contract.test.mjs b/config/scripts/wsl-e2e-lane-contract.test.mjs index e30f7a8cc11..65454fd2e8b 100644 --- a/config/scripts/wsl-e2e-lane-contract.test.mjs +++ b/config/scripts/wsl-e2e-lane-contract.test.mjs @@ -1,10 +1,6 @@ -import { readFileSync } from 'node:fs' import { describe, expect, it } from 'vitest' -import { parse } from 'yaml' import { hasWslSourceChange, selectPrE2eSpecs } from './pr-e2e-source-routing.mjs' -const read = (path) => readFileSync(new URL(`../../${path}`, import.meta.url), 'utf8') - describe('real WSL terminal lane', () => { it.each([ 'config/scripts/verify-wsl-e2e-participation.mjs', @@ -40,44 +36,4 @@ describe('real WSL terminal lane', () => { ])('excludes unrelated or unit-only change %s', (path) => { expect(hasWslSourceChange([path])).toBe(false) }) - - it('runs the reusable lane at the immutable PR head', () => { - const pr = parse(read('.github/workflows/pr.yml')) - expect(pr.jobs.windows_wsl.if).toBe("needs.code_paths.outputs.wsl_source_changed == 'true'") - expect(pr.jobs.windows_wsl.with.ref).toBe('${{ github.event.pull_request.head.sha }}') - const detector = pr.jobs['code_paths'].steps.find( - (step) => step.name === 'Filter changed E2E specs' - ) - expect(detector.run).toContain( - 'WSL_CHANGED="$(git diff --name-only --no-renames --diff-filter=ACDMR' - ) - expect(detector.run).toContain( - '"$WSL_CHANGED" | node config/scripts/pr-e2e-source-routing.mjs --wsl-source' - ) - const workflow = parse(read('.github/workflows/windows-wsl-e2e.yml')) - const steps = workflow.jobs['wsl-terminal'].steps - expect(steps[0].with.ref).toBe('${{ inputs.ref || github.sha }}') - expect(steps.some((step) => step.uses === './.github/actions/setup-wsl-test-runtime')).toBe( - true - ) - const exercise = steps.find((step) => step.name === 'Exercise real WSL launch and paste') - expect(exercise.run.split(/\s+/).filter((arg) => arg.startsWith('--repeat-each='))).toEqual([ - '--repeat-each=3' - ]) - expect(exercise.run).toContain('--grep "WSL"') - const receipt = steps.find((step) => step.name === 'Require all nine WSL executions') - expect(receipt.if).toBe('always()') - expect(receipt.run).toBe( - 'node config/scripts/verify-wsl-e2e-participation.mjs test-results/wsl-results.json' - ) - // E9: the guard terminates only the distro this job imported, and must prove it ran. - const guard = steps.find( - (step) => step.name === 'Guard that background work never starts the stopped WSL distro' - ) - expect(guard.env.ORCA_E2E_WSL_TERMINATE_DISTRO).toBe('Ubuntu') - expect(guard.run).toContain('tests/e2e/wsl-bridge-no-background-boot.spec.ts') - expect(guard.run).toContain('--repeat-each=3') - const guardReceipt = steps.find((step) => step.name === 'Require all three E9 guard executions') - expect(guardReceipt.if).toBe('always()') - }) }) diff --git a/src/cli/automation-format.test.ts b/src/cli/automation-format.test.ts index 6103f82063d..56c0bf5d20a 100644 --- a/src/cli/automation-format.test.ts +++ b/src/cli/automation-format.test.ts @@ -58,15 +58,6 @@ describe('formatAutomationShow reports the host the authority projects', () => { expect(output).toContain('target: ssh:box-1') }) - it('names the local host for a self-owned automation', () => { - const output = formatAutomationShow({ - automation: automation({ executionTargetType: 'local', executionTargetId: 'local' }), - owner: { selector: { kind: 'self' } } - }) - - expect(output).toContain('host: self') - }) - it('omits the host line when the authority reports no owner', () => { const output = formatAutomationShow({ automation: automation() }) @@ -76,16 +67,6 @@ describe('formatAutomationShow reports the host the authority projects', () => { }) describe('formatAutomationShow reports the saved setup choice', () => { - it.each([ - ['run', 'setup: run'], - ['skip', 'setup: skip'], - [undefined, 'setup: not set'] - ] as const)('shows saved %s as %s for new-per-run automations', (setupDecision, line) => { - const output = formatAutomationShow({ automation: automation({ setupDecision }) }) - - expect(output.split('\n')).toContain(line) - }) - it('omits setup for existing-workspace automations', () => { const output = formatAutomationShow({ automation: automation({ workspaceMode: 'existing', workspaceId: 'wt-1' }) diff --git a/src/cli/handlers/orchestration-check-identity.test.ts b/src/cli/handlers/orchestration-check-identity.test.ts index d6c6a1d6f7f..f2b806ec4f9 100644 --- a/src/cli/handlers/orchestration-check-identity.test.ts +++ b/src/cli/handlers/orchestration-check-identity.test.ts @@ -82,37 +82,4 @@ describe('orchestration check identity', () => { }) ) }) - - it('preserves the pinned legacy --inject check signature', async () => { - process.env.ORCA_TERMINAL_HANDLE = 'term_legacy_worker' - - await invokeCheck( - new Map([ - ['unread', true], - ['inject', true] - ]) - ) - - expect(callMock).toHaveBeenCalledWith( - 'orchestration.check', - expect.objectContaining({ - terminal: 'term_legacy_worker', - unread: true, - inject: true - }) - ) - }) - - it('surfaces a stale --terminal refusal instead of an empty inbox', async () => { - callMock.mockRejectedValue( - Object.assign(new Error('Terminal term_gone has no live pane bound to a Run'), { - code: 'stable_pane_required' - }) - ) - - await expect( - invokeCheck(new Map([['terminal', 'term_gone']])) - ).rejects.toMatchObject({ code: 'stable_pane_required' }) - expect(printResultMock).not.toHaveBeenCalled() - }) }) diff --git a/src/cli/plugin-authoring/plugin-templates.test.ts b/src/cli/plugin-authoring/plugin-templates.test.ts index b1855f618c6..29d6ada7955 100644 --- a/src/cli/plugin-authoring/plugin-templates.test.ts +++ b/src/cli/plugin-authoring/plugin-templates.test.ts @@ -60,22 +60,6 @@ describe('orca plugin create templates', () => { } ) - it('components writes a build-less TSX panel and its gitignored typings', async () => { - const dir = join(await tempRoot(), 'todo-panel') - const created = await createPluginFromTemplate({ dir, template: 'components' }) - expect(created.files).toEqual( - expect.arrayContaining(['orca-plugin.json', 'src/panel.tsx', 'tsconfig.json', '.gitignore']) - ) - expect(created.files.some((file) => file.startsWith('dist/') || file.includes('build'))).toBe( - false - ) - expect(created.typeFiles).toContain('.orca/types/orca/index.d.ts') - expect(JSON.parse(await readFile(join(dir, 'tsconfig.json'), 'utf8')).extends).toBe( - './.orca/types/tsconfig.json' - ) - expect(await readFile(join(dir, '.gitignore'), 'utf8')).toContain('.orca/') - }) - it('refuses a non-empty folder and never overwrites', async () => { const dir = await tempRoot() await writeFile(join(dir, 'keep.txt'), 'mine') diff --git a/src/cli/runtime/orchestration-recovery-command.test.ts b/src/cli/runtime/orchestration-recovery-command.test.ts index 96c78edb50c..7f8873f6831 100644 --- a/src/cli/runtime/orchestration-recovery-command.test.ts +++ b/src/cli/runtime/orchestration-recovery-command.test.ts @@ -72,21 +72,6 @@ describe('orchestration recovery command identity', () => { ]) }) - it.each([ - [ - 'gate-create', - 'orchestration.gateCreate', - ['orchestration', 'gate-create', '--task', 'task_1', '--question', 'ship?'] - ], - [ - 'worker-retain', - 'orchestration.workerRetain', - ['orchestration', 'worker-retain', '--dispatch', 'dispatch_1', '--json'] - ] - ] as const)('preserves exact raw argv for %s recovery', (_name, method, args) => { - expect(buildOrchestrationRecoveryCommand(method, {}, 'orca', args)).toEqual(['orca', ...args]) - }) - it.each([ ['split', ['orchestration', 'send', '--pairing-code', 'secret', '--subject', 'status']], ['equals', ['orchestration', 'send', '--pairing-code=secret', '--subject', 'status']], diff --git a/src/main/agent-hooks/wsl-hook-relay-launch.test.ts b/src/main/agent-hooks/wsl-hook-relay-launch.test.ts index b78a9ab61d5..4f4a337e9a9 100644 --- a/src/main/agent-hooks/wsl-hook-relay-launch.test.ts +++ b/src/main/agent-hooks/wsl-hook-relay-launch.test.ts @@ -18,11 +18,7 @@ vi.mock('../wsl/execution/wsl-executable-path', () => ({ resolveWslExecutablePath: () => 'C:\\Windows\\System32\\wsl.exe' })) -import { - buildGuestLaunchScript, - resolveWslHookRelayBundle, - spawnWslRelayProcess -} from './wsl-hook-relay-launch' +import { spawnWslRelayProcess } from './wsl-hook-relay-launch' import { orcadPosixNodeRuntimeGlobs } from '../managed-server/install/orcad-node-runtime-globs' describe('spawnWslRelayProcess', () => { @@ -57,14 +53,6 @@ describe('spawnWslRelayProcess', () => { }) describe('buildGuestLaunchScript', () => { - it('falls back to orcad pinned runtimes only after every system node candidate', () => { - const forLine = buildGuestLaunchScript('1.2.3') - .split('\n') - .find((line) => line.startsWith('for c in ')) - const [orcadRuntime, orcadMachineRuntimes] = orcadPosixNodeRuntimeGlobs() - expect(forLine).toContain(`"$HOME/.local/bin/node" ${orcadRuntime} ${orcadMachineRuntimes}; do`) - }) - it.skipIf(process.platform === 'win32')( 'expands the orcad runtime globs to the store and machine-home runtimes', () => { @@ -94,19 +82,3 @@ describe('buildGuestLaunchScript', () => { } ) }) - -describe('resolveWslHookRelayBundle', () => { - it('stamps the launcher revision so a launcher change gets a fresh guest dir', () => { - const relayRoot = mkdtempSync(join(tmpdir(), 'wsl-relay-bundle-')) - vi.stubEnv('ORCA_RELAY_PATH', relayRoot) - try { - mkdirSync(join(relayRoot, 'wsl')) - writeFileSync(join(relayRoot, 'wsl', 'wsl-agent-hook-relay.js'), '') - writeFileSync(join(relayRoot, 'wsl', '.version'), '0.1.0+abc\n') - expect(resolveWslHookRelayBundle()?.version).toMatch(/^0\.1\.0\+abc\.[0-9a-f]{8}$/) - } finally { - vi.unstubAllEnvs() - rmSync(relayRoot, { recursive: true, force: true }) - } - }) -}) diff --git a/src/main/ai-vault/parse-cache/session-parse-cache-antigravity-upgrade.test.ts b/src/main/ai-vault/parse-cache/session-parse-cache-antigravity-upgrade.test.ts index 5ebc173a6f3..f7632d7ef54 100644 --- a/src/main/ai-vault/parse-cache/session-parse-cache-antigravity-upgrade.test.ts +++ b/src/main/ai-vault/parse-cache/session-parse-cache-antigravity-upgrade.test.ts @@ -1,4 +1,4 @@ -import { mkdtemp, rm, stat, writeFile } from 'node:fs/promises' +import { mkdtemp, rm, stat } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' @@ -8,12 +8,8 @@ import { resetSessionParseCachePersistenceForTests } from './session-parse-cache-persistence' import { createSessionParseStats, parseAgentSessionFileCached } from './session-scanner-parse-cache' -import { - resetSessionParseCacheForTests, - getSessionParseCacheEntry -} from './session-parse-cache-store' +import { resetSessionParseCacheForTests } from './session-parse-cache-store' -import { createAntigravityWorkspaceResolver } from '../scanners/antigravity/session-scanner-antigravity-history' import { writeAntigravityTranscript } from '../session-scanner-test-fixtures' import type { SessionFileCandidate } from '../session-scanner-types' @@ -51,40 +47,6 @@ async function candidate(): Promise { } } -it('reparses an unchanged pre-fix cached Antigravity transcript after an update', async () => { - const input = await candidate() - await parseAgentSessionFileCached(input, 'linux') - const { - resume: _resume, - foldSession: _fold, - ...entry - } = getSessionParseCacheEntry(input.file.path)! - const staleSession = entry.session && { ...entry.session, antigravityOpeningPrompt: undefined } - const entries = [[input.file.path, { ...entry, session: staleSession }]] - const cacheFile = join(root ?? '', 'cache.json') - await writeFile(cacheFile, JSON.stringify({ schemaVersion: 3, appVersion: 'pre-fix', entries })) - resetSessionParseCacheForTests() - initSessionParseCachePersistence({ filePath: cacheFile, appVersion: 'fixed' }) - const stats = createSessionParseStats() - const session = await parseAgentSessionFileCached(input, 'linux', stats) - expect(stats.fullParses).toBe(1) - expect(stats.reused).toBe(0) - if (!session) { - throw new Error('Missing reparsed session') - } - expect(session.previewMessagesTruncated).toBe(true) - const resolver = createAntigravityWorkspaceResolver(async (path) => - path === 'history.jsonl' - ? JSON.stringify({ - display: 'Original request', - timestamp: Date.parse('2026-07-15T11:39:10Z'), - workspace: '/repo/original' - }) - : null - ) - expect((await resolver.enrich(session, 'history.jsonl')).cwd).toBe('/repo/original') -}) - it('retains the opening identity in current caches without retaining full prompt text', async () => { const input = await candidate() const cacheFile = join(root ?? '', 'cache.json') diff --git a/src/main/claude/claude-descendant-escalation-boundary.test.ts b/src/main/claude/claude-descendant-escalation-boundary.test.ts index 41a906bab72..31eeaf0eebd 100644 --- a/src/main/claude/claude-descendant-escalation-boundary.test.ts +++ b/src/main/claude/claude-descendant-escalation-boundary.test.ts @@ -91,13 +91,6 @@ describe('Claude descendant forced-sweep fence', () => { expect(killedPids(calls)).toEqual([...EARLIER_BORN, ...WALK_SECOND_BORN]) }) - it('still escalates descendants born before the walk that first saw them', async () => { - const onlyEarlier = [{ pids: EARLIER_BORN, startedAt: EARLIER_SECOND }] - const calls = await sweep([walk(WALK_MS + 42, onlyEarlier)], onlyEarlier) - - expect(killedPids(calls)).toEqual(EARLIER_BORN) - }) - it('withholds the sweep from a row no walk re-derived, on its start second alone', async () => { const retained = { pids: [900], startedAt: WALK_SECOND } const firstWalk = walk(WALK_MS + 42, [...LIVE_TREE, retained]) diff --git a/src/main/daemon/startup-device-attributes-responder.test.ts b/src/main/daemon/startup-device-attributes-responder.test.ts index 4a4f4a61eca..c7dc22b1f95 100644 --- a/src/main/daemon/startup-device-attributes-responder.test.ts +++ b/src/main/daemon/startup-device-attributes-responder.test.ts @@ -102,10 +102,6 @@ describe('startup device attributes responder', () => { expect(registered).toHaveLength(0) expect(replies).toEqual([]) }) - - it('reports the same primary attributes the renderer would, so consuming the query is transparent', () => { - expect(STARTUP_DA1_RESPONSE).toBe('\x1b[?1;2c') - }) }) describe('startup device attributes query filter', () => { diff --git a/src/main/daemon/terminal-host-startup.test.ts b/src/main/daemon/terminal-host-startup.test.ts index f38ac9b8cf3..5550b9c0e1b 100644 --- a/src/main/daemon/terminal-host-startup.test.ts +++ b/src/main/daemon/terminal-host-startup.test.ts @@ -68,45 +68,6 @@ describe('TerminalHost startup command delivery logging', () => { }) }) - const delivery = (): Record => - events.find((e) => e.event === 'startup-command-delivery')?.details ?? {} - - it('records a written startup command', async () => { - await host.createOrAttach({ - sessionId: 'delivery-written', - cols: 80, - rows: 24, - command: 'codex', - shellReadySupported: false, - streamClient: { onData: vi.fn(), onExit: vi.fn() } - }) - expect(delivery()).toMatchObject({ written: true, hasCommand: true, commandLength: 5 }) - }) - - it('records a session created with no startup command at all', async () => { - await host.createOrAttach({ - sessionId: 'delivery-none', - cols: 80, - rows: 24, - shellReadySupported: false, - streamClient: { onData: vi.fn(), onExit: vi.fn() } - }) - expect(delivery()).toMatchObject({ written: false, hasCommand: false, commandLength: 0 }) - expect(sub.write).not.toHaveBeenCalled() - }) - - it('never logs the command text, which can carry credentials', async () => { - await host.createOrAttach({ - sessionId: 'delivery-secret', - cols: 80, - rows: 24, - command: 'deploy --token=hunter2', - shellReadySupported: false, - streamClient: { onData: vi.fn(), onExit: vi.fn() } - }) - expect(JSON.stringify(delivery())).not.toContain('hunter2') - }) - it('still delivers the command when the diagnostic sink throws', async () => { host = new TerminalHost({ spawnSubprocess: () => sub, diff --git a/src/main/git/command-runner/spawned-command-tree-kill.test.ts b/src/main/git/command-runner/spawned-command-tree-kill.test.ts index 78b48819431..bd9085976a4 100644 --- a/src/main/git/command-runner/spawned-command-tree-kill.test.ts +++ b/src/main/git/command-runner/spawned-command-tree-kill.test.ts @@ -84,16 +84,6 @@ describe('Git command tree termination', () => { await pending expect(child.kill).not.toHaveBeenCalled() }) - - it('preserves handle termination on POSIX', async () => { - Object.defineProperty(process, 'platform', { value: 'linux', configurable: true }) - const child = childWithPid(1234) - - await killSpawnedCommandTree(child) - - expect(child.kill).toHaveBeenCalledOnce() - expect(spawnMock).not.toHaveBeenCalled() - }) it.skipIf(originalPlatform !== 'win32').each([0, 128])( 'does not taskkill an actual native Windows child after exit %i', async (exitCode) => { diff --git a/src/main/ipc/worktrees/listing/detected-worktree-scan-listing-distro.test.ts b/src/main/ipc/worktrees/listing/detected-worktree-scan-listing-distro.test.ts index da7447cb55c..83b91b10184 100644 --- a/src/main/ipc/worktrees/listing/detected-worktree-scan-listing-distro.test.ts +++ b/src/main/ipc/worktrees/listing/detected-worktree-scan-listing-distro.test.ts @@ -27,11 +27,8 @@ vi.mock('../../../workspaces/catalog/worktree-lineage-pruning', () => ({ pruneLineageForMissingRepoWorktrees: vi.fn() })) -const { - __resetDetectedWorktreeScanCacheForTests, - applyFreshDetectedWorktreeScanSideEffects, - listDetectedGitWorktrees -} = await import('./detected-worktree-scan-cache') +const { __resetDetectedWorktreeScanCacheForTests, listDetectedGitWorktrees } = + await import('./detected-worktree-scan-cache') const { WslDistroStoppedError } = await import('../../../wsl/filesystem/wsl-unc-access-gate') const repo: Repo = { @@ -41,46 +38,9 @@ const repo: Repo = { badgeColor: '#000', addedAt: 0 } -const worktree = { path: '/repos/one-feature', head: 'abc', branch: 'feature', isBare: false } // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: a first local scan reads only this store method; routing, listing and registration are mocked. const store = { captureNativeLocalWorktreeMetadataScanExpectation: vi.fn() } as unknown as Store -async function scanAndRegister(): Promise { - const scan = await listDetectedGitWorktrees(store, repo) - await applyFreshDetectedWorktreeScanSideEffects(store, repo, scan.gitWorktrees, undefined, { - sideEffectToken: scan.sideEffectToken, - hygieneDue: false - }) -} - -describe('detected worktree scan root registration', () => { - beforeEach(() => { - vi.resetAllMocks() - mocks.list.mockResolvedValue([{ ...worktree, isMainWorktree: false }]) - __resetDetectedWorktreeScanCacheForTests() - }) - - it('records the distro whose Git listed the scan', async () => { - mocks.gitOptions.mockReturnValue({ wslDistro: 'Ubuntu-24.04' }) - await scanAndRegister() - - expect(mocks.registerRoots).toHaveBeenCalledWith( - store, - repo, - [repo.path, worktree.path], - expect.objectContaining({ wslDistro: 'Ubuntu-24.04' }) - ) - }) - - it('records host Git for a scan listed without a distro', async () => { - mocks.gitOptions.mockReturnValue({}) - await scanAndRegister() - - expect(mocks.registerRoots).toHaveBeenCalledTimes(1) - expect(mocks.registerRoots.mock.calls[0]?.[3]?.wslDistro).toBeUndefined() - }) -}) - // A stopped distro fails the scan as unavailable, so rows are kept, instead of booting it (E9). describe('detected worktree scan for a stopped WSL distro', () => { const originalPlatform = Object.getOwnPropertyDescriptor(process, 'platform') diff --git a/src/main/plugins/workers/plugin-host-panel-methods.test.ts b/src/main/plugins/workers/plugin-host-panel-methods.test.ts index a997a331661..259ec135c27 100644 --- a/src/main/plugins/workers/plugin-host-panel-methods.test.ts +++ b/src/main/plugins/workers/plugin-host-panel-methods.test.ts @@ -104,14 +104,6 @@ describe('panel storage and settings', () => { expect(panels.dataChanged).not.toHaveBeenCalled() }) - it('tells panels and the worker after a write lands', async () => { - const panels = bridge() - await expect( - call('storage.set', { key: 'todos', value: [1] }, { panels }) - ).resolves.toMatchObject({ ok: true }) - expect(panels.dataChanged).toHaveBeenCalledWith('acme.todos', 'storage', 'todos') - }) - it('keeps the capability gate for panels', async () => { await expect(call('storage.get', { key: 'todos' }, { grants: [] })).resolves.toMatchObject({ code: 'capability_denied' diff --git a/src/main/plugins/workers/plugin-resident-worker.test.ts b/src/main/plugins/workers/plugin-resident-worker.test.ts index 194db47c410..f36a4e90844 100644 --- a/src/main/plugins/workers/plugin-resident-worker.test.ts +++ b/src/main/plugins/workers/plugin-resident-worker.test.ts @@ -4,10 +4,7 @@ import type { ValidDiscoveredPlugin } from '../plugin-discovery' import type { PluginWorkerHandle } from './plugin-host-process' import { PluginWorkerManager } from './plugin-worker-manager' import { buildPluginWorkerSpawnSpec } from './plugin-worker-spawn-spec' -import { - createPluginResidentWorkerWarmer, - pluginNeedsResidentWorker -} from './plugin-resident-worker' +import { createPluginResidentWorkerWarmer } from './plugin-resident-worker' function plugin( pluginKey: string, @@ -53,15 +50,6 @@ function worker(): PluginWorkerHandle { const meter = { statusBarItems: [{ id: 'usage' }] } describe('resident plugin workers', () => { - it('needs a resident worker for hooks or status bar items, only with a worker entry', () => { - expect(pluginNeedsResidentWorker(plugin('a', meter).manifest)).toBe(true) - expect( - pluginNeedsResidentWorker(plugin('a', { hooks: [{ event: 'terminal.send' }] }).manifest) - ).toBe(true) - expect(pluginNeedsResidentWorker(plugin('a', {}).manifest)).toBe(false) - expect(pluginNeedsResidentWorker(plugin('a', meter, { main: false }).manifest)).toBe(false) - }) - it('starts a status bar plugin once per approved revision while it is enabled', () => { let plugins = [plugin('acme.meter', meter), plugin('acme.plain', {})] const enabled = new Set(['acme.meter', 'acme.plain']) diff --git a/src/main/pty/shell-startup/conda-activation-env.test.ts b/src/main/pty/shell-startup/conda-activation-env.test.ts index 3ee75fdf284..fa666501363 100644 --- a/src/main/pty/shell-startup/conda-activation-env.test.ts +++ b/src/main/pty/shell-startup/conda-activation-env.test.ts @@ -104,14 +104,6 @@ describe('dropIncoherentCondaActivationEnv', () => { }) }) - it('leaves an environment with no conda state alone', () => { - const env: Record = { PATH: '/usr/bin', HOME: '/home/dev' } - - dropIncoherentCondaActivationEnv(env, 'linux') - - expect(env).toEqual({ PATH: '/usr/bin', HOME: '/home/dev' }) - }) - it('ignores a non-numeric sentinel rather than guessing', () => { const env: Record = { CONDA_SHLVL: 'weird', CONDA_DEFAULT_ENV: 'base' } diff --git a/src/main/runtime/runtime-worktree-create-git.test.ts b/src/main/runtime/runtime-worktree-create-git.test.ts index 3e32ff785dc..3ee923d3ba8 100644 --- a/src/main/runtime/runtime-worktree-create-git.test.ts +++ b/src/main/runtime/runtime-worktree-create-git.test.ts @@ -17,10 +17,7 @@ vi.mock('../github/client', async (importOriginal) => ({ getPRForBranch: getPRForBranchMock })) -import { - canCheckoutExistingLocalBranch, - getLocalGitHubPrForBranch -} from './runtime-worktree-create-git' +import { canCheckoutExistingLocalBranch } from './runtime-worktree-create-git' beforeEach(() => { getPRForBranchMock.mockReset() @@ -99,19 +96,3 @@ describe('explicit local branch reuse on the execution host', () => { expect(worktrees).not.toHaveBeenCalled() }) }) - -describe('getLocalGitHubPrForBranch', () => { - it('routes the PR lookup through the WSL distro', async () => { - await getLocalGitHubPrForBranch('/repo', 'app', { wslDistro: 'Ubuntu' }) - - expect(getPRForBranchMock).toHaveBeenCalledWith('/repo', 'app', null, null, null, { - localGitExecOptions: { wslDistro: 'Ubuntu' } - }) - }) - - it('uses the plain lookup without project git options', async () => { - await getLocalGitHubPrForBranch('/repo', 'app', {}) - - expect(getPRForBranchMock).toHaveBeenCalledWith('/repo', 'app') - }) -}) diff --git a/src/main/runtime/structured-claude-thinking-display-refusal.test.ts b/src/main/runtime/structured-claude-thinking-display-refusal.test.ts index d33b5a8dccd..a23a6857d41 100644 --- a/src/main/runtime/structured-claude-thinking-display-refusal.test.ts +++ b/src/main/runtime/structured-claude-thinking-display-refusal.test.ts @@ -5,7 +5,6 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { CLAUDE_STRUCTURED_BASE_OPTIONS } from '../claude/structured/launch/claude-structured-launch-resolution' -import { fakeClaude } from '../claude/structured/claude-structured-session-test-support' import { CLAUDE_THINKING_DISPLAY_FLAG, createClaudeCliFlagSupport @@ -79,29 +78,6 @@ describe('a Claude CLI that refuses the thinking-display flag', () => { expect(probe).toHaveBeenCalledTimes(1) }) - it('hands the session whether its close was the one Orca began', async () => { - const claude = fakeClaude() - const support = createClaudeCliFlagSupport({ - probe: async () => '2.1.280', - keyOf: async () => null, - budgetMs: 1_000, - now: () => performance.now() - }) - const { openConnection } = openClaudeConnectionOf({ - claudeCliFlags: support, - openClaudeConnection: claude.openConnection - }) - const onExit = vi.fn() - await openConnection!( - { pathToClaudeCodeExecutable: FAKE_CLI, options: {}, cwd: '/w' }, - { onExit } - ) - const exited = new Error('closed') - claude.connections[0]!.handlers.onExit?.(exited, { expected: true }) - // Without it, a Stop's own exit would read as the child exiting on its own. - expect(onExit).toHaveBeenCalledWith(exited, { expected: true }) - }) - it('records nothing when the start failed for another reason', async () => { const { support, launch } = await startRefusing('claude: not signed in\n') await expect(support.check(CLAUDE_THINKING_DISPLAY_FLAG, launch)).resolves.toBe('supported') diff --git a/src/main/skills/skill-wsl-provider-detection.test.ts b/src/main/skills/skill-wsl-provider-detection.test.ts index 3f2fee1a681..a5d010a0a36 100644 --- a/src/main/skills/skill-wsl-provider-detection.test.ts +++ b/src/main/skills/skill-wsl-provider-detection.test.ts @@ -3,12 +3,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' const runWslProcessMock = vi.hoisted(() => vi.fn()) vi.mock('../wsl/execution/wsl-runner', () => ({ runWslProcess: runWslProcessMock })) -import { SKILL_INSTALL_PROVIDERS } from '../../shared/skill-install-providers' -import { getTuiAgentDetectCommands, TUI_AGENT_CONFIG } from '../../shared/tui-agent-config' import { detectSkillProvidersInWsl } from './skill-wsl-provider-detection' -type RunWslProcessSpec = { distro: string; loginPath: string; script: string } - describe('detectSkillProvidersInWsl', () => { beforeEach(() => { runWslProcessMock.mockReset() @@ -18,24 +14,6 @@ describe('detectSkillProvidersInWsl', () => { vi.restoreAllMocks() }) - it('asks for the login PATH so a nvm/mise-only install is still found (regression)', async () => { - // Without login-shell PATH, nvm-installed agents look absent under bare sh -c. - runWslProcessMock.mockResolvedValue({ - environmentResolved: true, - code: 0, - stdout: 'codex\n', - stderr: '', - timedOut: false - }) - - const found = await detectSkillProvidersInWsl('Ubuntu') - - const [spec] = runWslProcessMock.mock.calls.at(-1) as [RunWslProcessSpec] - expect(spec.loginPath).toBe('preferred') - expect(spec.distro).toBe('Ubuntu') - expect(found).toEqual(['codex']) - }) - it('parses both providers when present', async () => { runWslProcessMock.mockResolvedValue({ environmentResolved: true, @@ -50,26 +28,6 @@ describe('detectSkillProvidersInWsl', () => { expect(found.toSorted()).toEqual(['claude', 'codex']) }) - it('probes every install provider by the commands Orca detects it with', async () => { - runWslProcessMock.mockResolvedValue({ - environmentResolved: true, - code: 0, - stdout: 'cursor-agent\n', - stderr: '', - timedOut: false - }) - - const found = await detectSkillProvidersInWsl('Ubuntu') - - const [spec] = runWslProcessMock.mock.calls.at(-1) as [RunWslProcessSpec] - for (const provider of SKILL_INSTALL_PROVIDERS) { - for (const command of getTuiAgentDetectCommands(TUI_AGENT_CONFIG[provider.id])) { - expect(spec.script, provider.id).toContain(`'${command}'`) - } - } - expect(found).toEqual(['cursor']) - }) - it('ignores stray output that is not a recognized provider name', async () => { runWslProcessMock.mockResolvedValue({ environmentResolved: true, diff --git a/src/main/window/desktop-integration/system-fonts.test.ts b/src/main/window/desktop-integration/system-fonts.test.ts deleted file mode 100644 index 6e4400bfdad..00000000000 --- a/src/main/window/desktop-integration/system-fonts.test.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { afterEach, describe, expect, it, vi } from 'vitest' - -import type { ProcessResult, ProcessSpec } from '@orca/process-host/process-spec' - -const { runProcessMock } = vi.hoisted(() => ({ - runProcessMock: vi.fn<(spec: ProcessSpec) => Promise>() -})) - -// Verify discovery's process options; spawning and console hiding belong to runProcess. -vi.mock('@orca/process-host', () => ({ - runProcess: runProcessMock -})) - -const ok = (stdout: string): ProcessResult => ({ - code: 0, - signal: null, - stdout, - stderr: '', - timedOut: false -}) - -const timedOut: ProcessResult = { - code: null, - signal: 'SIGTERM', - stdout: '', - stderr: '', - timedOut: true -} - -async function withPlatform(platform: NodeJS.Platform, fn: () => Promise): Promise { - const originalPlatform = process.platform - Object.defineProperty(process, 'platform', { configurable: true, value: platform }) - try { - return await fn() - } finally { - Object.defineProperty(process, 'platform', { configurable: true, value: originalPlatform }) - } -} - -describe('listSystemFontFamilies', () => { - afterEach(() => { - vi.resetModules() - runProcessMock.mockReset() - }) - - it('sets UTF-8 stdout encoding as the first statement of the Windows font script', async () => { - await withPlatform('win32', async () => { - runProcessMock.mockResolvedValue(ok('Consolas\n')) - const { listSystemFontFamilies } = await import('./system-fonts') - await listSystemFontFamilies() - - const args = runProcessMock.mock.calls[0]?.[0].args ?? [] - const script = args[args.indexOf('-Command') + 1] ?? '' - // Output before this statement would still use the OEM encoding. - expect(script.trim().split(/\r?\n/)[0]).toBe( - '[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)' - ) - }) - }) - - it('spawns the Windows font script without an -ExecutionPolicy switch', async () => { - await withPlatform('win32', async () => { - runProcessMock.mockResolvedValue(ok('Consolas\n')) - const { listSystemFontFamilies } = await import('./system-fonts') - await listSystemFontFamilies() - - const args = runProcessMock.mock.calls[0]?.[0].args ?? [] - expect(args).toContain('-Command') - expect(args).not.toContain('-ExecutionPolicy') - expect(args).not.toContain('Bypass') - }) - }) - - it('runs PowerShell by absolute path on Windows', async () => { - await withPlatform('win32', async () => { - runProcessMock.mockResolvedValue(ok('Consolas\n')) - const { listSystemFontFamilies } = await import('./system-fonts') - await listSystemFontFamilies() - - const program = runProcessMock.mock.calls[0]?.[0].program ?? '' - expect(program).toMatch(/^[A-Za-z]:[\\/]/) - expect(program.toLowerCase()).toContain('system32') - expect(program.toLowerCase()).toContain('powershell.exe') - }) - }) - - it('returns no fonts when the platform font command never exits', async () => { - runProcessMock.mockResolvedValue(timedOut) - - const { listSystemFontFamilies } = await import('./system-fonts') - await expect(listSystemFontFamilies()).resolves.toEqual([]) - }) - - it('returns no fonts when the platform font command reports failure', async () => { - runProcessMock.mockResolvedValue({ - code: 1, - signal: null, - stdout: '', - stderr: 'nope', - timedOut: false - }) - - const { listSystemFontFamilies } = await import('./system-fonts') - await expect(listSystemFontFamilies()).resolves.toEqual([]) - }) - - const platformTimeouts: [NodeJS.Platform, number][] = [ - ['darwin', 45_000], - ['linux', 15_000], - ['win32', 15_000] - ] - it.each(platformTimeouts)( - 'asks for the %s font command timeout of %dms', - async (platform, timeoutMs) => { - await withPlatform(platform, async () => { - runProcessMock.mockResolvedValue(ok('Consolas\n')) - const { listSystemFontFamilies } = await import('./system-fonts') - await listSystemFontFamilies() - - expect(runProcessMock.mock.calls[0]?.[0].timeoutMs).toBe(timeoutMs) - }) - } - ) -}) diff --git a/src/main/wsl/execution/wsl-runner.wsl.test.ts b/src/main/wsl/execution/wsl-runner.wsl.test.ts index 416f8bd7a3b..0475b81c43a 100644 --- a/src/main/wsl/execution/wsl-runner.wsl.test.ts +++ b/src/main/wsl/execution/wsl-runner.wsl.test.ts @@ -49,29 +49,6 @@ describeOnWsl('runWslProcess against a real distro', () => { expect(elapsed).toBeLessThan(20_000) }, 60_000) - it('second probe-lane call does not pay the login shell again', async () => { - const started = Date.now() - await runWslProcess({ - loginPath: 'preferred', - distro: DISTRO, - program: '/bin/true', - timeoutMs: 15_000 - }) - expect(Date.now() - started).toBeLessThan(5_000) - }, 30_000) - - it('interactive lane strips the distro banner from parsed stdout', async () => { - // Fence stock Ubuntu rc hints out of stdout before parsing (#11327/#11823). - const result = await runWslProcess({ - loginPath: 'preferred', - distro: DISTRO, - program: '/bin/echo', - args: ['ORCA_PAYLOAD'], - timeoutMs: 60_000 - }) - expect(result.stdout.trim()).toBe('ORCA_PAYLOAD') - }, 90_000) - it('a script with quotes and $ arrives byte-identical', async () => { // Preserve $2 and embedded quotes; -- expansion/base64-eval wrappers broke both (#12964/#14292). const script = [ diff --git a/src/renderer/src/components/settings/automations/AutomationsSettingsPane.test.tsx b/src/renderer/src/components/settings/automations/AutomationsSettingsPane.test.tsx deleted file mode 100644 index 8f106d38709..00000000000 --- a/src/renderer/src/components/settings/automations/AutomationsSettingsPane.test.tsx +++ /dev/null @@ -1,51 +0,0 @@ -// @vitest-environment happy-dom - -import '@testing-library/jest-dom/vitest' -import { cleanup, render, screen } from '@testing-library/react' -import userEvent from '@testing-library/user-event' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { getDefaultSettings } from '../../../../../shared/constants' - -const mocks = vi.hoisted(() => ({ - openAutomationsPage: vi.fn() -})) - -vi.mock('@/i18n/i18n', () => ({ - translate: (_key: string, fallback: string) => fallback -})) - -vi.mock('@/store/index', () => ({ - useAppStore: (selector: (state: Record) => unknown) => - selector({ openAutomationsPage: mocks.openAutomationsPage }) -})) - -import { AutomationsSettingsPane } from './AutomationsSettingsPane' - -describe('AutomationsSettingsPane', () => { - beforeEach(() => { - mocks.openAutomationsPage.mockReset() - }) - - afterEach(cleanup) - - it('controls sidebar visibility and opens Automations', async () => { - const user = userEvent.setup() - const updateSettings = vi.fn() - render( - - ) - - const toggle = screen.getByRole('switch', { name: 'Show Automations Button' }) - expect(toggle).toHaveAttribute('aria-checked', 'false') - await user.click(toggle) - expect(updateSettings).toHaveBeenCalledWith({ showAutomationsButton: true }) - - const openButton = screen.getByRole('button', { name: /Open Automations/ }) - expect(openButton).toBeEnabled() - await user.click(openButton) - expect(mocks.openAutomationsPage).toHaveBeenCalledOnce() - }) -}) diff --git a/src/renderer/src/components/sidebar/WorktreeWslHostStartMenuItem.test.tsx b/src/renderer/src/components/sidebar/WorktreeWslHostStartMenuItem.test.tsx deleted file mode 100644 index baade4a31ec..00000000000 --- a/src/renderer/src/components/sidebar/WorktreeWslHostStartMenuItem.test.tsx +++ /dev/null @@ -1,54 +0,0 @@ -// @vitest-environment happy-dom - -import { cleanup, fireEvent, render } from '@testing-library/react' -import { afterEach, describe, expect, it, vi } from 'vitest' -import { DropdownMenu, DropdownMenuContent } from '@/components/ui/dropdown-menu' -import type { StoppedWslHost } from '../wsl-host-stopped/use-stopped-wsl-host' -import { WorktreeWslHostStartMenuItem } from './WorktreeWslHostStartMenuItem' - -const mocks = vi.hoisted(() => { - const stopped: { current: StoppedWslHost | null } = { current: null } - return { - stopped, - start: vi.fn<(environmentId: string) => Promise>() - } -}) - -vi.mock('../wsl-host-stopped/use-stopped-wsl-host', () => ({ - useStoppedWslHost: () => mocks.stopped.current -})) -vi.mock('@/lib/wsl-host-user-start', () => ({ - startWslHostAndReloadProjects: mocks.start -})) - -function renderMenu() { - return render( - - - - - - ) -} - -afterEach(() => { - cleanup() - mocks.stopped.current = null - mocks.start.mockReset() -}) - -describe('WorktreeWslHostStartMenuItem', () => { - it('offers Start for a workspace on a stopped distro, and boots only on select (E9)', () => { - mocks.stopped.current = { environmentId: 'wsl:ubuntu', distro: 'Ubuntu' } - mocks.start.mockResolvedValue(true) - const view = renderMenu() - expect(mocks.start).not.toHaveBeenCalled() - fireEvent.click(view.getByRole('menuitem', { name: 'Start Ubuntu' })) - expect(mocks.start).toHaveBeenCalledWith('wsl:ubuntu') - }) - - it('adds nothing for a workspace whose host is not stopped', () => { - const view = renderMenu() - expect(view.queryByRole('menuitem')).toBeNull() - }) -}) diff --git a/src/renderer/src/components/terminal-pane/pty-connection/painted-cold-restore-ack.test.ts b/src/renderer/src/components/terminal-pane/pty-connection/painted-cold-restore-ack.test.ts index ecafc44de9f..3c5df9cad84 100644 --- a/src/renderer/src/components/terminal-pane/pty-connection/painted-cold-restore-ack.test.ts +++ b/src/renderer/src/components/terminal-pane/pty-connection/painted-cold-restore-ack.test.ts @@ -24,20 +24,6 @@ describe('ackPaintedColdRestore', () => { vi.unstubAllGlobals() }) - it('acks by terminal only with the switch off', async () => { - await ackWithSwitch(false, 'pty-1') - expect(ackColdRestore).toHaveBeenCalledWith('pty-1') - }) - - it('names the painted pane in the layout-owner build', async () => { - await ackWithSwitch(true, 'pty-1') - expect(ackColdRestore).toHaveBeenCalledWith('pty-1', { - worktreeId: 'repo::/wt', - tabId: 'tab-1', - leafId: 'leaf-1' - }) - }) - it('never acks a paired server’s terminal, whose host owns its restore', async () => { const { toRemoteRuntimePtyId } = await import('../../../../../shared/remote-runtime/remote-runtime-pty-id') diff --git a/src/renderer/src/lib/worktree-live-terminal-surface-owners.test.ts b/src/renderer/src/lib/worktree-live-terminal-surface-owners.test.ts index 5a1bc532dc8..f2a53a33d78 100644 --- a/src/renderer/src/lib/worktree-live-terminal-surface-owners.test.ts +++ b/src/renderer/src/lib/worktree-live-terminal-surface-owners.test.ts @@ -29,16 +29,6 @@ afterEach(() => { }) describe('live terminal surface owners', () => { - it('records the exact pane the host binds a live PTY to', () => { - const owners = indexLiveTerminalSurfaceOwners([summary({})], WORKTREE_ID) - - expect(owners.get(`${WORKTREE_ID}@@live-agent`)).toEqual({ - paneKey: `tab-live:${LEAF_ID}`, - ptyId: `${WORKTREE_ID}@@live-agent`, - tabId: 'tab-live' - }) - }) - it.each([false, true])( 'rejects conflicting owned and orphan rows (orphan first: %s)', (orphanFirst) => { diff --git a/src/shared/native-chat/input/native-chat-paste-bytes.test.ts b/src/shared/native-chat/input/native-chat-paste-bytes.test.ts index c821d13009a..bb7c5cad670 100644 --- a/src/shared/native-chat/input/native-chat-paste-bytes.test.ts +++ b/src/shared/native-chat/input/native-chat-paste-bytes.test.ts @@ -8,11 +8,6 @@ const BEGIN = '\x1b[200~' const END = '\x1b[201~' describe('buildNativeChatPasteBytes', () => { - it('single-line text has no trailing submit (Enter is written separately)', () => { - expect(buildNativeChatPasteBytes('hello world')).toBe('hello world') - expect(buildNativeChatPasteBytes('hello world')).not.toContain('\r') - }) - it('multi-line text is bracketed-paste wrapped with NO trailing submit', () => { const text = 'line one\r\nline two\nline three' expect(buildNativeChatPasteBytes(text)).toBe(`${BEGIN}line one\rline two\rline three${END}`) diff --git a/src/shared/plugins/declarative/testing/orca-testing-hooks.test.ts b/src/shared/plugins/declarative/testing/orca-testing-hooks.test.ts index b6f1c8d834e..dbe2b415f1a 100644 --- a/src/shared/plugins/declarative/testing/orca-testing-hooks.test.ts +++ b/src/shared/plugins/declarative/testing/orca-testing-hooks.test.ts @@ -1,6 +1,4 @@ import { describe, expect, it } from 'vitest' -import { z } from 'zod' -import { acknowledgesByDefault } from './testing-host' import { mountWorker } from './orca-testing' type HookOrca = { @@ -39,11 +37,6 @@ describe('orca/testing hooks', () => { }) }) - it('answers fire-and-forget host methods with success by default', () => { - expect(acknowledgesByDefault({ result: z.object({ ok: z.literal(true) }) })).toBe(true) - expect(acknowledgesByDefault({ result: z.object({ delivered: z.boolean() }) })).toBe(false) - }) - it('fires editor.save.before and returns the text the worker wrote', async () => { const formatter = { default(orca: {