From 7b3d359851c00c567a73f48010934912a7998957 Mon Sep 17 00:00:00 2001 From: Neil Date: Sun, 18 Oct 2026 03:26:33 -0700 Subject: [PATCH] refactor(managed-server): move orcad activation into src/main/managed-server/activation/ First slice of the desktop side of managed orcad leaving src/main/ssh. git mv plus import and path-literal rewrites; host-lane workflow filters and the cross-host prefix list gain the new folder. --- .github/workflows/ssh-hostile-hosts.yml | 1 + .github/workflows/ssh-windows-hosts.yml | 1 + .github/workflows/wsl-orcad-e2e.yml | 2 + config/scripts/ci-shard-timings.json | 12 ++--- config/scripts/node-server-qualification.mjs | 1 + .../orcad-activation-crash-recovery.test.ts | 52 ++++++++++--------- .../orcad-activation-fence-generation.test.ts | 14 ++--- .../orcad-activation-fence-hold.test.ts | 2 +- .../orcad-activation-fence-hold.ts | 6 +-- .../orcad-activation-fence-scope.ts | 4 +- .../activation}/orcad-activation-gate.test.ts | 6 +-- .../activation}/orcad-activation-gate.ts | 2 +- .../orcad-activation-host-test-harness.ts | 4 +- .../activation}/orcad-activation-lock.ts | 18 +++---- .../orcad-activation-outcome-log.ts | 2 +- .../orcad-activation-record-store.ts | 8 +-- .../orcad-activation-record.test.ts | 0 .../activation}/orcad-activation-record.ts | 2 +- .../activation}/orcad-activation-recovery.ts | 16 +++--- .../orcad-activation-transaction-schema.ts | 4 +- .../orcad-activation-transaction-store.ts | 4 +- ...rcad-activation-transaction-transitions.ts | 0 .../orcad-activation-transaction.test.ts | 14 ++--- .../orcad-activation-transaction.ts | 10 ++-- ...untime-daemon-adoption.integration.test.ts | 5 +- .../ssh/managed-server-update-check.test.ts | 2 +- src/main/ssh/managed-server-update-check.ts | 2 +- src/main/ssh/orcad-active-readiness.ts | 5 +- .../ssh/orcad-candidate-launch-verdict.ts | 7 ++- src/main/ssh/orcad-decommission-recovery.ts | 4 +- ...ecommission-released-peer-recovery.test.ts | 10 ++-- .../orcad-decommission-transaction.test.ts | 4 +- .../ssh/orcad-decommission-transaction.ts | 4 +- ...cad-exited-own-fence-mutation-race.test.ts | 2 +- src/main/ssh/orcad-exited-own-fence.test.ts | 6 ++- src/main/ssh/orcad-exited-own-lock.ts | 2 +- .../orcad-fence-lost-classification.test.ts | 2 +- src/main/ssh/orcad-gc-transaction-pins.ts | 8 +-- src/main/ssh/orcad-host-version-admission.ts | 2 +- src/main/ssh/orcad-incumbent-recovery.ts | 4 +- src/main/ssh/orcad-installed-activation.ts | 12 ++--- .../ssh/orcad-interrupted-candidate-resume.ts | 10 ++-- src/main/ssh/orcad-machine-home.ts | 2 +- .../ssh/orcad-managed-auto-update.test.ts | 5 +- src/main/ssh/orcad-managed-auto-update.ts | 4 +- .../ssh/orcad-managed-launch-session.test.ts | 4 +- src/main/ssh/orcad-managed-launch-session.ts | 7 ++- src/main/ssh/orcad-managed-runtime-context.ts | 2 +- src/main/ssh/orcad-managed-version-gc.test.ts | 4 +- src/main/ssh/orcad-managed-version-gc.ts | 2 +- src/main/ssh/orcad-managed-wake.test.ts | 2 +- src/main/ssh/orcad-managed-wake.ts | 12 ++--- src/main/ssh/orcad-recovery-slot.ts | 4 +- src/main/ssh/orcad-remote-context.ts | 4 +- .../ssh/orcad-remote-decommission.test.ts | 10 ++-- src/main/ssh/orcad-remote-decommission.ts | 12 ++--- src/main/ssh/orcad-remote-deploy.test.ts | 8 +-- src/main/ssh/orcad-remote-deploy.ts | 12 ++--- src/main/ssh/orcad-remote-gc.test.ts | 6 +-- src/main/ssh/orcad-remote-gc.ts | 5 +- src/main/ssh/orcad-remote-install.ts | 2 +- .../orcad-remote-lifecycle-windows.test.ts | 2 +- src/main/ssh/orcad-remote-primitives.test.ts | 4 +- src/main/ssh/orcad-remote-rollback.test.ts | 7 ++- src/main/ssh/orcad-remote-rollback.ts | 14 ++--- src/main/ssh/orcad-remote-runtime-control.ts | 2 +- .../orcad-remote-windows-decommission.test.ts | 5 +- src/main/ssh/orcad-remote-windows-node.ts | 2 +- src/main/ssh/orcad-rollback-transition.ts | 12 ++--- .../orcad-running-version-adoption.test.ts | 8 +-- .../ssh/orcad-running-version-adoption.ts | 6 +-- .../ssh/orcad-runtime-decommission.test.ts | 8 +-- src/main/ssh/orcad-runtime-decommission.ts | 6 +-- src/main/ssh/orcad-runtime-deployment.test.ts | 14 +++-- src/main/ssh/orcad-runtime-deployment.ts | 4 +- .../ssh/orcad-runtime-maintenance.test.ts | 6 ++- src/main/ssh/orcad-runtime-maintenance.ts | 2 +- src/main/ssh/orcad-runtime-status.ts | 4 +- src/main/ssh/orcad-state-mutation-exec.ts | 5 +- ...cad-state-mutation-fence-heartbeat.test.ts | 4 +- .../ssh/orcad-state-mutation-timeout.test.ts | 9 +++- src/main/ssh/orcad-state-snapshot.ts | 2 +- .../ssh/orcad-terminal-census-client.test.ts | 5 +- src/main/ssh/orcad-terminal-census-client.ts | 2 +- src/main/ssh/orcad-transaction-incumbent.ts | 4 +- .../ssh/orcad-unreachable-setup-release.ts | 6 +-- .../ssh/orcad-unreachable-setup-stop.test.ts | 6 +-- src/main/ssh/orcad-update-plan.test.ts | 2 +- src/main/ssh/orcad-update-plan.ts | 2 +- .../ssh/orcad-windows-host-fence-ops.test.ts | 5 +- src/main/ssh/orcad-windows-host-fence-ops.ts | 2 +- src/main/ssh/orcad-windows-host-lane.test.ts | 2 +- src/main/ssh/orcad-windows-host-state-ops.ts | 5 +- ...erver-on-connect-stopped-elsewhere.test.ts | 2 +- .../ssh/ssh-hostile-host-managed-orcad.ts | 2 +- src/main/wsl/wsl-orcad-deploy.test.ts | 6 +-- src/main/wsl/wsl-orcad-deploy.ts | 4 +- src/main/wsl/wsl-orcad-incumbent.test.ts | 2 +- .../wsl/wsl-orcad-instance-adoption.test.ts | 10 ++-- src/main/wsl/wsl-orcad-instance-adoption.ts | 12 ++--- 100 files changed, 329 insertions(+), 259 deletions(-) rename src/main/{ssh => managed-server/activation}/orcad-activation-crash-recovery.test.ts (90%) rename src/main/{ssh => managed-server/activation}/orcad-activation-fence-generation.test.ts (94%) rename src/main/{ssh => managed-server/activation}/orcad-activation-fence-hold.test.ts (98%) rename src/main/{ssh => managed-server/activation}/orcad-activation-fence-hold.ts (93%) rename src/main/{ssh => managed-server/activation}/orcad-activation-fence-scope.ts (95%) rename src/main/{ssh => managed-server/activation}/orcad-activation-gate.test.ts (96%) rename src/main/{ssh => managed-server/activation}/orcad-activation-gate.ts (98%) rename src/main/{ssh => managed-server/activation}/orcad-activation-host-test-harness.ts (98%) rename src/main/{ssh => managed-server/activation}/orcad-activation-lock.ts (95%) rename src/main/{ssh => managed-server/activation}/orcad-activation-outcome-log.ts (92%) rename src/main/{ssh => managed-server/activation}/orcad-activation-record-store.ts (90%) rename src/main/{ssh => managed-server/activation}/orcad-activation-record.test.ts (100%) rename src/main/{ssh => managed-server/activation}/orcad-activation-record.ts (99%) rename src/main/{ssh => managed-server/activation}/orcad-activation-recovery.ts (90%) rename src/main/{ssh => managed-server/activation}/orcad-activation-transaction-schema.ts (97%) rename src/main/{ssh => managed-server/activation}/orcad-activation-transaction-store.ts (93%) rename src/main/{ssh => managed-server/activation}/orcad-activation-transaction-transitions.ts (100%) rename src/main/{ssh => managed-server/activation}/orcad-activation-transaction.test.ts (95%) rename src/main/{ssh => managed-server/activation}/orcad-activation-transaction.ts (96%) diff --git a/.github/workflows/ssh-hostile-hosts.yml b/.github/workflows/ssh-hostile-hosts.yml index b504deb8c18d..07f685868a3b 100644 --- a/.github/workflows/ssh-hostile-hosts.yml +++ b/.github/workflows/ssh-hostile-hosts.yml @@ -13,6 +13,7 @@ on: - 'src/main/ssh/remote-*' - 'src/main/ssh/*runtime*' - 'src/main/ssh/orcad-*' + - 'src/main/managed-server/**' - 'src/main/orcad/orcad-artifact-materializer.ts' - 'src/main/orcad/orcad-host-unavailable.ts' - 'src/main/node-runtime/**' diff --git a/.github/workflows/ssh-windows-hosts.yml b/.github/workflows/ssh-windows-hosts.yml index ea3b7750662c..24d71d26747a 100644 --- a/.github/workflows/ssh-windows-hosts.yml +++ b/.github/workflows/ssh-windows-hosts.yml @@ -11,6 +11,7 @@ on: - 'src/main/ssh/remote-*' - 'src/main/ssh/*runtime*' - 'src/main/ssh/orcad-*' + - 'src/main/managed-server/**' - 'src/main/orcad/orcad-artifact-materializer.ts' - 'src/main/orcad/orcad-host-unavailable.ts' - 'src/main/node-runtime/**' diff --git a/.github/workflows/wsl-orcad-e2e.yml b/.github/workflows/wsl-orcad-e2e.yml index 9a23e8d4e495..659eaade82d5 100644 --- a/.github/workflows/wsl-orcad-e2e.yml +++ b/.github/workflows/wsl-orcad-e2e.yml @@ -14,7 +14,9 @@ on: - 'src/main/wsl/wsl-orcad-real-distro-lane.test.ts' # This lane executes only the real distro test above. - 'src/main/ssh/orcad-*' + - 'src/main/managed-server/**' - '!src/main/ssh/orcad-*.test.ts' + - '!src/main/managed-server/**/*.test.ts' - 'src/main/ssh/remote-install-transport.ts' # orcad-entry runs this on every boot of the orcad the lane launches in the distro. - 'src/main/orcad/orcad-wsl-*' diff --git a/config/scripts/ci-shard-timings.json b/config/scripts/ci-shard-timings.json index fa0e016c3141..4267443f0921 100644 --- a/config/scripts/ci-shard-timings.json +++ b/config/scripts/ci-shard-timings.json @@ -5586,13 +5586,13 @@ "src/main/ssh/legacy-relay/legacy-relay-endpoints.test.ts": 173, "src/main/ssh/legacy-relay/legacy-relay-target-bridge.test.ts": 74, "src/main/ssh/managed-server-fence-recheck.test.ts": 484, - "src/main/ssh/orcad-activation-crash-recovery.test.ts": 1032, - "src/main/ssh/orcad-activation-fence-generation.test.ts": 826, - "src/main/ssh/orcad-activation-fence-hold.test.ts": 397, - "src/main/ssh/orcad-activation-gate.test.ts": 40, + "src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts": 1032, + "src/main/managed-server/activation/orcad-activation-fence-generation.test.ts": 826, + "src/main/managed-server/activation/orcad-activation-fence-hold.test.ts": 397, + "src/main/managed-server/activation/orcad-activation-gate.test.ts": 40, "src/main/ssh/orcad-activation-outcome-log.test.ts": 40, - "src/main/ssh/orcad-activation-record.test.ts": 245, - "src/main/ssh/orcad-activation-transaction.test.ts": 451, + "src/main/managed-server/activation/orcad-activation-record.test.ts": 245, + "src/main/managed-server/activation/orcad-activation-transaction.test.ts": 451, "src/main/ssh/orcad-decommission-released-peer-recovery.test.ts": 266, "src/main/ssh/orcad-decommission-transaction.test.ts": 309, "src/main/ssh/orcad-deployment-target.test.ts": 263, diff --git a/config/scripts/node-server-qualification.mjs b/config/scripts/node-server-qualification.mjs index f636d78f83c1..c1564275baff 100644 --- a/config/scripts/node-server-qualification.mjs +++ b/config/scripts/node-server-qualification.mjs @@ -19,6 +19,7 @@ const BUILD_PREFIXES = [ // A remote target's OS does not identify the client platform that builds its commands. const CROSS_HOST_PREFIXES = [ 'src/main/ssh/', + 'src/main/managed-server/', 'src/main/node-runtime/', 'src/main/orcad/orcad-artifact-materializer.ts', 'src/main/orcad/orcad-host-unavailable.ts', diff --git a/src/main/ssh/orcad-activation-crash-recovery.test.ts b/src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts similarity index 90% rename from src/main/ssh/orcad-activation-crash-recovery.test.ts rename to src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts index 807d3e1e7724..4bca87058206 100644 --- a/src/main/ssh/orcad-activation-crash-recovery.test.ts +++ b/src/main/managed-server/activation/orcad-activation-crash-recovery.test.ts @@ -1,8 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type * as ExecCommandModule from './remote-exec-command' -import type * as RecordFile from './orcad-remote-record-file' -import type * as InstallLock from './remote-install-lock' -import type * as VersionedInstall from './remote-versioned-install' +import type * as ExecCommandModule from '../../ssh/remote-exec-command' +import type * as RecordFile from '../../ssh/orcad-remote-record-file' +import type * as InstallLock from '../../ssh/remote-install-lock' +import type * as VersionedInstall from '../../ssh/remote-versioned-install' import type * as Crypto from 'node:crypto' const uuid = vi.hoisted((): { fixed: string | null } => ({ fixed: null })) @@ -11,44 +11,44 @@ vi.mock('node:crypto', async (importOriginal) => { return { ...actual, randomUUID: () => uuid.fixed ?? actual.randomUUID() } }) -vi.mock('./remote-exec-command', async (importOriginal) => ({ +vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn() })) -vi.mock('./ssh-connection-utils', () => ({ +vi.mock('../../ssh/ssh-connection-utils', () => ({ shellEscape: (s: string) => `'${s}'` })) -vi.mock('./remote-install-lock', async (importOriginal) => ({ +vi.mock('../../ssh/remote-install-lock', async (importOriginal) => ({ ...(await importOriginal()), acquireInstallLock: vi.fn() })) -vi.mock('./orcad-remote-record-file', async (importOriginal) => ({ +vi.mock('../../ssh/orcad-remote-record-file', async (importOriginal) => ({ ...(await importOriginal()), writeAtomicOrcadRemoteRecord: vi.fn() })) -vi.mock('./remote-versioned-install', async (importOriginal) => ({ +vi.mock('../../ssh/remote-versioned-install', async (importOriginal) => ({ ...(await importOriginal()), readLocalFullVersion: () => '0.2.0+bb01' })) -vi.mock('./orcad-remote-install', () => ({ installOrcadBundle: vi.fn() })) -vi.mock('./orcad-remote-preflight', () => ({ +vi.mock('../../ssh/orcad-remote-install', () => ({ installOrcadBundle: vi.fn() })) +vi.mock('../../ssh/orcad-remote-preflight', () => ({ preflightInstalledOrcad: vi.fn() })) -vi.mock('./orcad-local-build-hash', () => ({ +vi.mock('../../ssh/orcad-local-build-hash', () => ({ computeLocalOrcadBuildHash: () => 'abc123def4567890' })) -import { execCommand } from './remote-exec-command' -import { acquireInstallLock } from './remote-install-lock' -import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file' -import { deployOrcad } from './orcad-remote-deploy' -import { rollbackOrcad } from './orcad-remote-rollback' +import { execCommand } from '../../ssh/remote-exec-command' +import { acquireInstallLock } from '../../ssh/remote-install-lock' +import { writeAtomicOrcadRemoteRecord } from '../../ssh/orcad-remote-record-file' +import { deployOrcad } from '../../ssh/orcad-remote-deploy' +import { rollbackOrcad } from '../../ssh/orcad-remote-rollback' import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' -import { wakeStoppedManagedOrcad } from './orcad-managed-wake' -import { planManagedOrcadAutoUpdate } from './orcad-managed-auto-update' +import { wakeStoppedManagedOrcad } from '../../ssh/orcad-managed-wake' +import { planManagedOrcadAutoUpdate } from '../../ssh/orcad-managed-auto-update' import { parseOrcadActivationRecord } from './orcad-activation-record' -import { getRemoteHostPlatform } from './ssh-remote-platform' -import type { OrcadHostTransport } from './orcad-host-transport' +import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' import { BUILD_HASH, FakeOrcadHost, @@ -110,8 +110,9 @@ beforeEach(() => { vi.mocked(execCommand).mockImplementation(async (_conn, command) => host.exec(command)) vi.mocked(acquireInstallLock).mockImplementation(async (_conn, dir, _host, options) => { if (!host.acquireFence(options)) { - const { RemoteInstallLockBusyError } = - await vi.importActual('./remote-install-lock') + const { RemoteInstallLockBusyError } = await vi.importActual( + '../../ssh/remote-install-lock' + ) throw new RemoteInstallLockBusyError(dir, 0) } }) @@ -363,8 +364,9 @@ describe('recovery refusals keep the fence', () => { host.crashAt = null const journal = host.journal expect(journal).not.toBeNull() - const { RemoteInstallLockBusyError } = - await vi.importActual('./remote-install-lock') + const { RemoteInstallLockBusyError } = await vi.importActual( + '../../ssh/remote-install-lock' + ) vi.mocked(acquireInstallLock).mockRejectedValueOnce(new RemoteInstallLockBusyError('/l', 0)) expect(await recoverInterruptedOrcadActivation({ ...slot })).toMatchObject({ outcome: 'pending' diff --git a/src/main/ssh/orcad-activation-fence-generation.test.ts b/src/main/managed-server/activation/orcad-activation-fence-generation.test.ts similarity index 94% rename from src/main/ssh/orcad-activation-fence-generation.test.ts rename to src/main/managed-server/activation/orcad-activation-fence-generation.test.ts index 441efdce5192..f7487890577c 100644 --- a/src/main/ssh/orcad-activation-fence-generation.test.ts +++ b/src/main/managed-server/activation/orcad-activation-fence-generation.test.ts @@ -11,18 +11,18 @@ import { import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' -import type * as ExecCommandModule from './remote-exec-command' +import type * as ExecCommandModule from '../../ssh/remote-exec-command' // Every remote command runs in a real local shell, so the host-side checks are the real ones. const shell = vi.hoisted((): { env: NodeJS.ProcessEnv | undefined } => ({ env: undefined })) -vi.mock('./remote-exec-command', async (importOriginal) => { +vi.mock('../../ssh/remote-exec-command', async (importOriginal) => { const { runProcess } = await import('@orca/process-host') return { ...(await importOriginal()), execCommand: async (_conn: unknown, command: string) => { const result = await runProcess({ program: '/bin/sh', args: ['-c', command], env: shell.env }) if (result.code !== 0) { - const { sshCommandExitError } = await import('./remote-exec-command') + const { sshCommandExitError } = await import('../../ssh/remote-exec-command') throw sshCommandExitError(command, result.code ?? 1, result.stdout) } return result.stdout @@ -32,11 +32,11 @@ vi.mock('./remote-exec-command', async (importOriginal) => { const { withOrcadActivationLock } = await import('./orcad-activation-lock') const { orcadActivationFenceRefusal } = await import('./orcad-activation-fence-hold') -const { execOrcadRemote } = await import('./orcad-remote-runtime-control') +const { execOrcadRemote } = await import('../../ssh/orcad-remote-runtime-control') const { OrcadFenceLostError, runWithOrcadFence } = await import('./orcad-activation-fence-scope') -const { execOrcadStateMutation } = await import('./orcad-state-mutation-exec') -const { clearOrcadStateSnapshotMembersCommand } = await import('./orcad-state-snapshot') -const { getRemoteHostPlatform } = await import('./ssh-remote-platform') +const { execOrcadStateMutation } = await import('../../ssh/orcad-state-mutation-exec') +const { clearOrcadStateSnapshotMembersCommand } = await import('../../ssh/orcad-state-snapshot') +const { getRemoteHostPlatform } = await import('../../ssh/ssh-remote-platform') const homes: string[] = [] afterEach(() => { diff --git a/src/main/ssh/orcad-activation-fence-hold.test.ts b/src/main/managed-server/activation/orcad-activation-fence-hold.test.ts similarity index 98% rename from src/main/ssh/orcad-activation-fence-hold.test.ts rename to src/main/managed-server/activation/orcad-activation-fence-hold.test.ts index b52cb0582278..f811f3ab2bc9 100644 --- a/src/main/ssh/orcad-activation-fence-hold.test.ts +++ b/src/main/managed-server/activation/orcad-activation-fence-hold.test.ts @@ -6,7 +6,7 @@ const mocks = vi.hoisted(() => ({ fence: vi.fn(), takeover: vi.fn() })) -vi.mock('./remote-install-lock', () => ({ +vi.mock('../../ssh/remote-install-lock', () => ({ isRelayInstallLockStale: mocks.stale, RELAY_INSTALL_LOCK_NAME: '.install-lock' })) diff --git a/src/main/ssh/orcad-activation-fence-hold.ts b/src/main/managed-server/activation/orcad-activation-fence-hold.ts similarity index 93% rename from src/main/ssh/orcad-activation-fence-hold.ts rename to src/main/managed-server/activation/orcad-activation-fence-hold.ts index ce7f9bff2319..fccdc3a0d659 100644 --- a/src/main/ssh/orcad-activation-fence-hold.ts +++ b/src/main/managed-server/activation/orcad-activation-fence-hold.ts @@ -11,9 +11,9 @@ import { } from './orcad-activation-lock' import { readOrcadActivationTransaction } from './orcad-activation-transaction-store' import { orcadActivationFenceLockDir } from './orcad-activation-transaction' -import { isRelayInstallLockStale } from './remote-install-lock' -import { findExitedOwnLockToken } from './orcad-exited-own-lock' -import { orcadRemoteBaseDir } from './orcad-remote-windows-node' +import { isRelayInstallLockStale } from '../../ssh/remote-install-lock' +import { findExitedOwnLockToken } from '../../ssh/orcad-exited-own-lock' +import { orcadRemoteBaseDir } from '../../ssh/orcad-remote-windows-node' export const ORCAD_ACTIVATION_FENCE_BUSY_CODE = 'orcad_activation_fence_busy' const ORCAD_ACTIVATION_RECOVERY_REQUIRED_CODE = 'orcad_activation_recovery_required' diff --git a/src/main/ssh/orcad-activation-fence-scope.ts b/src/main/managed-server/activation/orcad-activation-fence-scope.ts similarity index 95% rename from src/main/ssh/orcad-activation-fence-scope.ts rename to src/main/managed-server/activation/orcad-activation-fence-scope.ts index 7f3915cd3872..13504db08348 100644 --- a/src/main/ssh/orcad-activation-fence-scope.ts +++ b/src/main/managed-server/activation/orcad-activation-fence-scope.ts @@ -8,8 +8,8 @@ * launching, mutating state, or deleting the successor's fence and journal. */ import { AsyncLocalStorage } from 'node:async_hooks' -import { shellEscape } from './ssh-connection-utils' -import { isSshCommandExitError } from './remote-exec-command' +import { shellEscape } from '../../ssh/ssh-connection-utils' +import { isSshCommandExitError } from '../../ssh/remote-exec-command' export const ORCAD_FENCE_OWNER_FILENAME = '.orca-fence-owner' export const ORCAD_FENCE_LOST_MARKER = '__ORCAD_FENCE_LOST__' diff --git a/src/main/ssh/orcad-activation-gate.test.ts b/src/main/managed-server/activation/orcad-activation-gate.test.ts similarity index 96% rename from src/main/ssh/orcad-activation-gate.test.ts rename to src/main/managed-server/activation/orcad-activation-gate.test.ts index fcd53b3a4e34..d446fc78f061 100644 --- a/src/main/ssh/orcad-activation-gate.test.ts +++ b/src/main/managed-server/activation/orcad-activation-gate.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest' import { evaluateOrcadActivation } from './orcad-activation-gate' -import { classifyOrcadHostUnavailable } from '../orcad/orcad-host-unavailable' -import type { ServeReadiness } from '../server/serve-readiness' -import type { OrcadHealth, TerminalDaemonHealth } from '../orcad/orcad-health' +import { classifyOrcadHostUnavailable } from '../../orcad/orcad-host-unavailable' +import type { ServeReadiness } from '../../server/serve-readiness' +import type { OrcadHealth, TerminalDaemonHealth } from '../../orcad/orcad-health' const EXPECTED = { buildHash: 'abc123def4567890', fullVersion: '0.2.0+bb01' } diff --git a/src/main/ssh/orcad-activation-gate.ts b/src/main/managed-server/activation/orcad-activation-gate.ts similarity index 98% rename from src/main/ssh/orcad-activation-gate.ts rename to src/main/managed-server/activation/orcad-activation-gate.ts index 2f4892bf0ddd..cc0251c876e9 100644 --- a/src/main/ssh/orcad-activation-gate.ts +++ b/src/main/managed-server/activation/orcad-activation-gate.ts @@ -12,7 +12,7 @@ * version is still active; nothing was lost. Activating on a bad verdict is what loses * things. */ -import type { ServeReadiness } from '../server/serve-readiness' +import type { ServeReadiness } from '../../server/serve-readiness' type OrcadActivationRejectCode = | 'orcad_activation_no_readiness' diff --git a/src/main/ssh/orcad-activation-host-test-harness.ts b/src/main/managed-server/activation/orcad-activation-host-test-harness.ts similarity index 98% rename from src/main/ssh/orcad-activation-host-test-harness.ts rename to src/main/managed-server/activation/orcad-activation-host-test-harness.ts index 02219159913e..08aa143edee3 100644 --- a/src/main/ssh/orcad-activation-host-test-harness.ts +++ b/src/main/managed-server/activation/orcad-activation-host-test-harness.ts @@ -9,8 +9,8 @@ import { withActivatedVersion, type OrcadActivationRecord } from './orcad-activation-record' -import { isSnapshotCaptureCommand } from './orcad-snapshot-capture-command' -import { sshCommandExitError } from './remote-exec-command' +import { isSnapshotCaptureCommand } from '../../ssh/orcad-snapshot-capture-command' +import { sshCommandExitError } from '../../ssh/remote-exec-command' export const OLD = '0.1.0+aa01' export const NEW = '0.2.0+bb01' diff --git a/src/main/ssh/orcad-activation-lock.ts b/src/main/managed-server/activation/orcad-activation-lock.ts similarity index 95% rename from src/main/ssh/orcad-activation-lock.ts rename to src/main/managed-server/activation/orcad-activation-lock.ts index a05f068ab8e8..06f07b0f5727 100644 --- a/src/main/ssh/orcad-activation-lock.ts +++ b/src/main/managed-server/activation/orcad-activation-lock.ts @@ -11,24 +11,24 @@ import { execOrcadRemote, withoutAbortSignal, type OrcadRemoteExecTarget -} from './orcad-remote-runtime-control' -import { isUnconfirmedSshCommandTermination } from './remote-exec-command' -import { acquireInstallLock, RemoteInstallLockBusyError } from './remote-install-lock' +} from '../../ssh/orcad-remote-runtime-control' +import { isUnconfirmedSshCommandTermination } from '../../ssh/remote-exec-command' +import { acquireInstallLock, RemoteInstallLockBusyError } from '../../ssh/remote-install-lock' import { orphanInstallLockCommand, probeInstallLockExistsCommand -} from './remote-install-lock-commands' -import { shellEscape } from './ssh-connection-utils' +} from '../../ssh/remote-install-lock-commands' +import { shellEscape } from '../../ssh/ssh-connection-utils' import { ORCAD_FENCE_OWNER_FILENAME, posixOrcadFenceOwnedTest, runWithOrcadFence, type OrcadFence } from './orcad-activation-fence-scope' -import { orcadRemoteBaseDir, orcadWindowsHomeOpCommand } from './orcad-remote-windows-node' -import { forgetHeldOrcadFence, rememberHeldOrcadFence } from './orcad-held-fence-tokens' -import { exitedOwnLockProof } from './orcad-exited-own-lock' -import { isWindowsRemoteHost } from './ssh-remote-platform' +import { orcadRemoteBaseDir, orcadWindowsHomeOpCommand } from '../../ssh/orcad-remote-windows-node' +import { forgetHeldOrcadFence, rememberHeldOrcadFence } from '../../ssh/orcad-held-fence-tokens' +import { exitedOwnLockProof } from '../../ssh/orcad-exited-own-lock' +import { isWindowsRemoteHost } from '../../ssh/ssh-remote-platform' import { orcadActivationFenceLockDir, orcadActivationTransactionPath, diff --git a/src/main/ssh/orcad-activation-outcome-log.ts b/src/main/managed-server/activation/orcad-activation-outcome-log.ts similarity index 92% rename from src/main/ssh/orcad-activation-outcome-log.ts rename to src/main/managed-server/activation/orcad-activation-outcome-log.ts index b5bc98031f18..b9c993f82791 100644 --- a/src/main/ssh/orcad-activation-outcome-log.ts +++ b/src/main/managed-server/activation/orcad-activation-outcome-log.ts @@ -2,7 +2,7 @@ * The app log line for an update or rollback that did not go through. Status keeps only the * latest deferral, so without this the first refusal's code and reason are lost (BUG-17). */ -import { errorMessage } from '../../shared/error-message' +import { errorMessage } from '../../../shared/error-message' type Unsettled = { outcome: string; code?: string; reason?: string } diff --git a/src/main/ssh/orcad-activation-record-store.ts b/src/main/managed-server/activation/orcad-activation-record-store.ts similarity index 90% rename from src/main/ssh/orcad-activation-record-store.ts rename to src/main/managed-server/activation/orcad-activation-record-store.ts index 62df0f1bf1b9..4b5e220c7e98 100644 --- a/src/main/ssh/orcad-activation-record-store.ts +++ b/src/main/managed-server/activation/orcad-activation-record-store.ts @@ -5,8 +5,8 @@ * unreadable record must fail loudly in both: treating "I cannot parse this" as "nothing is * activated" would deploy over a live install and lose its rollback target. */ -import type { OrcadHostTransport } from './orcad-host-transport' -import { RELAY_REMOTE_DIR } from './remote-frame-protocol' +import type { OrcadHostTransport } from '../../ssh/orcad-host-transport' +import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol' import { ORCAD_ACTIVATION_FILENAME, emptyOrcadActivationRecord, @@ -15,11 +15,11 @@ import { type OrcadActivationReadResult, type OrcadActivationRecord } from './orcad-activation-record' -import { joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform' +import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' import { readBoundedOrcadRemoteRecord, writeAtomicOrcadRemoteRecord -} from './orcad-remote-record-file' +} from '../../ssh/orcad-remote-record-file' const ORCAD_ACTIVATION_RECORD_MAX_BYTES = 64 * 1024 diff --git a/src/main/ssh/orcad-activation-record.test.ts b/src/main/managed-server/activation/orcad-activation-record.test.ts similarity index 100% rename from src/main/ssh/orcad-activation-record.test.ts rename to src/main/managed-server/activation/orcad-activation-record.test.ts diff --git a/src/main/ssh/orcad-activation-record.ts b/src/main/managed-server/activation/orcad-activation-record.ts similarity index 99% rename from src/main/ssh/orcad-activation-record.ts rename to src/main/managed-server/activation/orcad-activation-record.ts index 203e6408515b..1f3ad7749a32 100644 --- a/src/main/ssh/orcad-activation-record.ts +++ b/src/main/managed-server/activation/orcad-activation-record.ts @@ -10,7 +10,7 @@ * It lives beside the version dirs (`~/.orca-remote/orcad-active.json`), not inside one, * because it has to outlive whichever version GC removes. */ -import { remoteInstallDirName, ORCAD_INSTALL_MODEL } from './remote-install-model' +import { remoteInstallDirName, ORCAD_INSTALL_MODEL } from '../../ssh/remote-install-model' export const ORCAD_ACTIVATION_FILENAME = 'orcad-active.json' export const ORCAD_ACTIVATION_SCHEMA_VERSION = 1 diff --git a/src/main/ssh/orcad-activation-recovery.ts b/src/main/managed-server/activation/orcad-activation-recovery.ts similarity index 90% rename from src/main/ssh/orcad-activation-recovery.ts rename to src/main/managed-server/activation/orcad-activation-recovery.ts index 8e89d33740e7..fa82acb7bf2f 100644 --- a/src/main/ssh/orcad-activation-recovery.ts +++ b/src/main/managed-server/activation/orcad-activation-recovery.ts @@ -3,7 +3,7 @@ * unverifiable failure left fenced. Either way the host ends serving exactly the slot its * activation record names, or the fence stays for an operator. */ -import type { ServeReadiness } from '../server/serve-readiness' +import type { ServeReadiness } from '../../server/serve-readiness' import { planOrcadTransactionRecovery, type OrcadActivationTransaction @@ -17,16 +17,16 @@ import { orcadActivationFenceExists, withStaleOrcadActivationRecoveryLock } from './orcad-activation-lock' -import { RemoteInstallLockBusyError } from './remote-install-lock' -import { ensureOrcadSlotServing, resolveOrcadSlotIdentity } from './orcad-recovery-slot' -import { reconcileOrcadDecommission } from './orcad-decommission-recovery' +import { RemoteInstallLockBusyError } from '../../ssh/remote-install-lock' +import { ensureOrcadSlotServing, resolveOrcadSlotIdentity } from '../../ssh/orcad-recovery-slot' +import { reconcileOrcadDecommission } from '../../ssh/orcad-decommission-recovery' import { recoverOrcadIncumbent, type OrcadIncumbentRecoveryOptions -} from './orcad-incumbent-recovery' -import type { OrcadManagedRefusal } from '../../shared/orcad-managed-runtime' -import { resumeInterruptedOrcadCandidate } from './orcad-interrupted-candidate-resume' -import { errorMessage } from '../../shared/error-message' +} from '../../ssh/orcad-incumbent-recovery' +import type { OrcadManagedRefusal } from '../../../shared/orcad-managed-runtime' +import { resumeInterruptedOrcadCandidate } from '../../ssh/orcad-interrupted-candidate-resume' +import { errorMessage } from '../../../shared/error-message' export type OrcadActivationRecoveryResult = | { outcome: 'none' } diff --git a/src/main/ssh/orcad-activation-transaction-schema.ts b/src/main/managed-server/activation/orcad-activation-transaction-schema.ts similarity index 97% rename from src/main/ssh/orcad-activation-transaction-schema.ts rename to src/main/managed-server/activation/orcad-activation-transaction-schema.ts index 5846dd9fe49a..4f7d8f9b854d 100644 --- a/src/main/ssh/orcad-activation-transaction-schema.ts +++ b/src/main/managed-server/activation/orcad-activation-transaction-schema.ts @@ -1,10 +1,10 @@ import { z } from 'zod' -import { OrcadManagedStopRequestSchema } from '../../shared/orcad-stop-request' +import { OrcadManagedStopRequestSchema } from '../../../shared/orcad-stop-request' import { ORCAD_INSTALL_MODEL, remoteInstallDirName, remoteInstallVersionDirRegex -} from './remote-install-model' +} from '../../ssh/remote-install-model' export const ORCAD_ACTIVATION_TRANSACTION_SCHEMA_VERSION = 1 diff --git a/src/main/ssh/orcad-activation-transaction-store.ts b/src/main/managed-server/activation/orcad-activation-transaction-store.ts similarity index 93% rename from src/main/ssh/orcad-activation-transaction-store.ts rename to src/main/managed-server/activation/orcad-activation-transaction-store.ts index 372dbaba021a..4fa43ac4cf49 100644 --- a/src/main/ssh/orcad-activation-transaction-store.ts +++ b/src/main/managed-server/activation/orcad-activation-transaction-store.ts @@ -7,8 +7,8 @@ import { import { readBoundedOrcadRemoteRecord, writeAtomicOrcadRemoteRecord -} from './orcad-remote-record-file' -import type { OrcadRemoteExecTarget } from './orcad-remote-runtime-control' +} from '../../ssh/orcad-remote-record-file' +import type { OrcadRemoteExecTarget } from '../../ssh/orcad-remote-runtime-control' import { currentOrcadFence } from './orcad-activation-fence-scope' const ORCAD_ACTIVATION_TRANSACTION_MAX_BYTES = 64 * 1024 diff --git a/src/main/ssh/orcad-activation-transaction-transitions.ts b/src/main/managed-server/activation/orcad-activation-transaction-transitions.ts similarity index 100% rename from src/main/ssh/orcad-activation-transaction-transitions.ts rename to src/main/managed-server/activation/orcad-activation-transaction-transitions.ts diff --git a/src/main/ssh/orcad-activation-transaction.test.ts b/src/main/managed-server/activation/orcad-activation-transaction.test.ts similarity index 95% rename from src/main/ssh/orcad-activation-transaction.test.ts rename to src/main/managed-server/activation/orcad-activation-transaction.test.ts index 751b311f9259..4804a2100d0c 100644 --- a/src/main/ssh/orcad-activation-transaction.test.ts +++ b/src/main/managed-server/activation/orcad-activation-transaction.test.ts @@ -1,18 +1,18 @@ import { describe, expect, it, vi } from 'vitest' -import type * as ExecCommandModule from './remote-exec-command' -import type * as InstallLock from './remote-install-lock' +import type * as ExecCommandModule from '../../ssh/remote-exec-command' +import type * as InstallLock from '../../ssh/remote-install-lock' -vi.mock('./remote-exec-command', async (importOriginal) => ({ +vi.mock('../../ssh/remote-exec-command', async (importOriginal) => ({ ...(await importOriginal()), execCommand: vi.fn().mockResolvedValue('') })) -vi.mock('./remote-install-lock', async (importOriginal) => ({ +vi.mock('../../ssh/remote-install-lock', async (importOriginal) => ({ ...(await importOriginal()), acquireInstallLock: vi.fn().mockResolvedValue(undefined) })) -import { execCommand } from './remote-exec-command' -import { acquireInstallLock, RemoteInstallLockBusyError } from './remote-install-lock' +import { execCommand } from '../../ssh/remote-exec-command' +import { acquireInstallLock, RemoteInstallLockBusyError } from '../../ssh/remote-install-lock' import { parseOrcadActivationTransaction, planOrcadTransactionRecovery, @@ -35,7 +35,7 @@ import { } from './orcad-activation-lock' import { FakeOrcadHost, NEW, OLD } from './orcad-activation-host-test-harness' import { withRolledBackVersion } from './orcad-activation-record' -import { getRemoteHostPlatform } from './ssh-remote-platform' +import { getRemoteHostPlatform } from '../../ssh/ssh-remote-platform' const T = new Date('2026-02-02T00:00:00.000Z') const ID = '7f1c2a7e-6c1b-4a8e-9f0e-0a1b2c3d4e5f' diff --git a/src/main/ssh/orcad-activation-transaction.ts b/src/main/managed-server/activation/orcad-activation-transaction.ts similarity index 96% rename from src/main/ssh/orcad-activation-transaction.ts rename to src/main/managed-server/activation/orcad-activation-transaction.ts index 84dd8be2e5c0..75d346c036ff 100644 --- a/src/main/ssh/orcad-activation-transaction.ts +++ b/src/main/managed-server/activation/orcad-activation-transaction.ts @@ -22,11 +22,11 @@ import { planOrcadDecommissionRecovery, type OrcadDecommissionRecoveryPlan, type OrcadDecommissionTransaction -} from './orcad-decommission-transaction' -import { errorMessage } from '../../shared/error-message' -import { RELAY_INSTALL_LOCK_NAME } from '../../shared/relay-install-lock-name' -import { RELAY_REMOTE_DIR } from './remote-frame-protocol' -import { joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform' +} from '../../ssh/orcad-decommission-transaction' +import { errorMessage } from '../../../shared/error-message' +import { RELAY_INSTALL_LOCK_NAME } from '../../../shared/relay-install-lock-name' +import { RELAY_REMOTE_DIR } from '../../ssh/remote-frame-protocol' +import { joinRemotePath, type RemoteHostPlatform } from '../../ssh/ssh-remote-platform' export const ORCAD_ACTIVATION_TRANSACTION_FILENAME = 'transaction.json' export const ORCAD_ACTIVATION_TRANSACTION_DIRNAME = '.orcad-activation-transaction' diff --git a/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts b/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts index 213667c0fe16..6a3ecdb01baa 100644 --- a/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts +++ b/src/main/orcad/orcad-cross-runtime-daemon-adoption.integration.test.ts @@ -41,7 +41,10 @@ import { getOrcaProfileStateDatabaseFile } from '../orca-profiles/profile-storage-paths' import type { SshConnection } from '../ssh/ssh-connection' -import { emptyOrcadActivationRecord, orcadGcPinnedDirNames } from '../ssh/orcad-activation-record' +import { + emptyOrcadActivationRecord, + orcadGcPinnedDirNames +} from '../managed-server/activation/orcad-activation-record' import { gcOldOrcadVersions } from '../ssh/orcad-remote-gc' import { ORCAD_PID_FILENAME, ORCAD_READINESS_FILENAME } from '../ssh/orcad-remote-host-support' import { orcadLaunchCommand, parseOrcadReadinessOutput } from '../ssh/orcad-remote-launch' diff --git a/src/main/ssh/managed-server-update-check.test.ts b/src/main/ssh/managed-server-update-check.test.ts index 4dd9d2676d27..e5345b04a49e 100644 --- a/src/main/ssh/managed-server-update-check.test.ts +++ b/src/main/ssh/managed-server-update-check.test.ts @@ -5,7 +5,7 @@ import { type ManagedServerUpdateDeps } from './managed-server-update-check' import type { ManagedOrcadAutoUpdateOutcome } from './orcad-managed-auto-update' -import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from './orcad-activation-fence-hold' +import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../managed-server/activation/orcad-activation-fence-hold' // The retry decision is read under the host's lifecycle lock, so the stub's last call answers it. const failedBeforeOf = (autoUpdate: ManagedServerUpdateDeps['autoUpdate']) => diff --git a/src/main/ssh/managed-server-update-check.ts b/src/main/ssh/managed-server-update-check.ts index 14bfcd67d7f6..7ce58599464e 100644 --- a/src/main/ssh/managed-server-update-check.ts +++ b/src/main/ssh/managed-server-update-check.ts @@ -5,7 +5,7 @@ import type { SshManagedServerUpdateNote, SshTarget } from '../../shared/ssh-types' import type { ManagedOrcadAutoUpdateOutcome } from './orcad-managed-auto-update' import type { HostServerUpdateReason } from './ssh-host-server-connect-events' -import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from './orcad-activation-fence-hold' +import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../managed-server/activation/orcad-activation-fence-hold' export type ManagedServerUpdateDeps = { /** Runs the Managed servers update when the host is behind this app; `onUpdating` fires first. */ diff --git a/src/main/ssh/orcad-active-readiness.ts b/src/main/ssh/orcad-active-readiness.ts index 6a475f661a28..b732efc1a228 100644 --- a/src/main/ssh/orcad-active-readiness.ts +++ b/src/main/ssh/orcad-active-readiness.ts @@ -1,5 +1,8 @@ /** Proving that the orcad an activation record names is the one actually serving. */ -import { evaluateOrcadActivation, type OrcadActivationExpectation } from './orcad-activation-gate' +import { + evaluateOrcadActivation, + type OrcadActivationExpectation +} from '../managed-server/activation/orcad-activation-gate' import { orcadLivenessProbeCommand, parseOrcadLiveness, diff --git a/src/main/ssh/orcad-candidate-launch-verdict.ts b/src/main/ssh/orcad-candidate-launch-verdict.ts index 986dfd814938..ab9bb3a91aec 100644 --- a/src/main/ssh/orcad-candidate-launch-verdict.ts +++ b/src/main/ssh/orcad-candidate-launch-verdict.ts @@ -1,5 +1,8 @@ -import { evaluateOrcadActivation, type OrcadActivationVerdict } from './orcad-activation-gate' -import { orcadActivationTransactionRoot } from './orcad-activation-transaction' +import { + evaluateOrcadActivation, + type OrcadActivationVerdict +} from '../managed-server/activation/orcad-activation-gate' +import { orcadActivationTransactionRoot } from '../managed-server/activation/orcad-activation-transaction' import type { OrcadReadinessParse } from './orcad-remote-launch' import { launchOrcadAndAwaitReadiness, diff --git a/src/main/ssh/orcad-decommission-recovery.ts b/src/main/ssh/orcad-decommission-recovery.ts index 6e259d6fd233..033d7ec6c807 100644 --- a/src/main/ssh/orcad-decommission-recovery.ts +++ b/src/main/ssh/orcad-decommission-recovery.ts @@ -1,6 +1,6 @@ /** Recovering an interrupted decommission from its journal entry; see orcad-decommission-transaction. */ -import { writeOrcadActivationRecord } from './orcad-activation-record-store' -import type { OrcadActivationRecoveryResult } from './orcad-activation-recovery' +import { writeOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' +import type { OrcadActivationRecoveryResult } from '../managed-server/activation/orcad-activation-recovery' import type { OrcadDecommissionRecoveryPlan } from './orcad-decommission-transaction' import { settleOrcadDecommissionStop } from './orcad-decommission-stop' import { diff --git a/src/main/ssh/orcad-decommission-released-peer-recovery.test.ts b/src/main/ssh/orcad-decommission-released-peer-recovery.test.ts index d0de2cb603c5..cb1ccb6744e8 100644 --- a/src/main/ssh/orcad-decommission-released-peer-recovery.test.ts +++ b/src/main/ssh/orcad-decommission-released-peer-recovery.test.ts @@ -8,18 +8,22 @@ import { coreOrcadActivationRecord, serializeOrcadActivationRecord, type OrcadActivationRecord -} from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' import { parseOrcadActivationTransaction, serializeOrcadActivationTransaction -} from './orcad-activation-transaction' +} from '../managed-server/activation/orcad-activation-transaction' import { createOrcadDecommissionTransaction, withOrcadDecommissionProcessExited, withOrcadDecommissionStopDispatched, type OrcadDecommissionTransaction } from './orcad-decommission-transaction' -import { FakeOrcadHost, NEW, OLD } from './orcad-activation-host-test-harness' +import { + FakeOrcadHost, + NEW, + OLD +} from '../managed-server/activation/orcad-activation-host-test-harness' import { compareAppVersions } from '../../shared/app-version' import type { OrcadManagedStopRequest } from '../../shared/orcad-stop-request' diff --git a/src/main/ssh/orcad-decommission-transaction.test.ts b/src/main/ssh/orcad-decommission-transaction.test.ts index 8bee8d3d0845..03b1d656f5ec 100644 --- a/src/main/ssh/orcad-decommission-transaction.test.ts +++ b/src/main/ssh/orcad-decommission-transaction.test.ts @@ -3,14 +3,14 @@ import { parseOrcadActivationTransaction, planOrcadTransactionRecovery, serializeOrcadActivationTransaction -} from './orcad-activation-transaction' +} from '../managed-server/activation/orcad-activation-transaction' import { committedOrcadDecommissionRecord, createOrcadDecommissionTransaction, withOrcadDecommissionProcessExited, withOrcadDecommissionStopDispatched } from './orcad-decommission-transaction' -import { FakeOrcadHost, NEW } from './orcad-activation-host-test-harness' +import { FakeOrcadHost, NEW } from '../managed-server/activation/orcad-activation-host-test-harness' import type { OrcadManagedStopRequest } from '../../shared/orcad-stop-request' const T = new Date('2026-02-02T00:00:00.000Z') diff --git a/src/main/ssh/orcad-decommission-transaction.ts b/src/main/ssh/orcad-decommission-transaction.ts index 7d402bb90a2a..c76c0a2640c6 100644 --- a/src/main/ssh/orcad-decommission-transaction.ts +++ b/src/main/ssh/orcad-decommission-transaction.ts @@ -11,8 +11,8 @@ import { withDeactivatedVersion, withDeactivatedVersionCommitted, type OrcadActivationRecord -} from './orcad-activation-record' -import { ORCAD_ACTIVATION_TRANSACTION_SCHEMA_VERSION } from './orcad-activation-transaction-schema' +} from '../managed-server/activation/orcad-activation-record' +import { ORCAD_ACTIVATION_TRANSACTION_SCHEMA_VERSION } from '../managed-server/activation/orcad-activation-transaction-schema' import type { OrcadManagedStopRequest } from '../../shared/orcad-stop-request' export type OrcadDecommissionTransaction = { diff --git a/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts b/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts index c579c74794a9..ee49fecde486 100644 --- a/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts +++ b/src/main/ssh/orcad-exited-own-fence-mutation-race.test.ts @@ -29,7 +29,7 @@ const { initOrcadHeldFenceTokenFile, ORCAD_HELD_FENCE_TOKENS_FILE_NAME } = const { tryStealInstallLockCommand } = await import('./remote-install-lock-commands') const { serializedStateMutationCommand } = await import('./orcad-state-snapshot') const { ORCAD_FENCE_LOST_EXIT, ORCAD_FENCE_LOST_MARKER } = - await import('./orcad-activation-fence-scope') + await import('../managed-server/activation/orcad-activation-fence-scope') const { getRemoteHostPlatform } = await import('./ssh-remote-platform') const OWNER = '.orca-fence-owner' diff --git a/src/main/ssh/orcad-exited-own-fence.test.ts b/src/main/ssh/orcad-exited-own-fence.test.ts index 13771c314187..084db7fe9f6f 100644 --- a/src/main/ssh/orcad-exited-own-fence.test.ts +++ b/src/main/ssh/orcad-exited-own-fence.test.ts @@ -30,8 +30,10 @@ vi.mock('./remote-exec-command', async (importOriginal) => { } }) -const { orcadActivationFenceRefusal } = await import('./orcad-activation-fence-hold') -const { withOrcadActivationLock } = await import('./orcad-activation-lock') +const { orcadActivationFenceRefusal } = + await import('../managed-server/activation/orcad-activation-fence-hold') +const { withOrcadActivationLock } = + await import('../managed-server/activation/orcad-activation-lock') const { initOrcadHeldFenceTokenFile, ORCAD_HELD_FENCE_TOKENS_FILE_NAME } = await import('./orcad-held-fence-tokens') const { getRemoteHostPlatform } = await import('./ssh-remote-platform') diff --git a/src/main/ssh/orcad-exited-own-lock.ts b/src/main/ssh/orcad-exited-own-lock.ts index 30c267256176..c5f63ebcc2c4 100644 --- a/src/main/ssh/orcad-exited-own-lock.ts +++ b/src/main/ssh/orcad-exited-own-lock.ts @@ -10,7 +10,7 @@ import { ORCAD_FENCE_OWNER_FILENAME, posixOrcadFenceOwnedTest -} from './orcad-activation-fence-scope' +} from '../managed-server/activation/orcad-activation-fence-scope' import { forgetHeldOrcadFence, orcadFenceTokensHeldByExitedProcesses diff --git a/src/main/ssh/orcad-fence-lost-classification.test.ts b/src/main/ssh/orcad-fence-lost-classification.test.ts index de7c71293bd5..f5e89e595082 100644 --- a/src/main/ssh/orcad-fence-lost-classification.test.ts +++ b/src/main/ssh/orcad-fence-lost-classification.test.ts @@ -9,7 +9,7 @@ import { isOrcadFenceLost, posixOrcadFenceGuard, runWithOrcadFence -} from './orcad-activation-fence-scope' +} from '../managed-server/activation/orcad-activation-fence-scope' import { isUnconfirmedSshCommandTermination, sshCommandExitError } from './remote-exec-command' import { getRemoteHostPlatform } from './ssh-remote-platform' import type { OrcadHostTransport } from './orcad-host-transport' diff --git a/src/main/ssh/orcad-gc-transaction-pins.ts b/src/main/ssh/orcad-gc-transaction-pins.ts index cb9e802c397d..1c91fdbc71a9 100644 --- a/src/main/ssh/orcad-gc-transaction-pins.ts +++ b/src/main/ssh/orcad-gc-transaction-pins.ts @@ -5,10 +5,10 @@ * A held fence without a journal, or a journal this client cannot read, means a transaction * this client cannot see into, so GC keeps everything rather than guess. */ -import { orcadInstallDirNames } from './orcad-activation-record' -import type { OrcadActivationTransaction } from './orcad-activation-transaction' -import { readOrcadActivationTransaction } from './orcad-activation-transaction-store' -import { orcadActivationFenceExists } from './orcad-activation-lock' +import { orcadInstallDirNames } from '../managed-server/activation/orcad-activation-record' +import type { OrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction' +import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' +import { orcadActivationFenceExists } from '../managed-server/activation/orcad-activation-lock' import { isUnconfirmedSshCommandTermination } from './remote-exec-command' import type { OrcadRemoteExecTarget } from './orcad-remote-runtime-control' diff --git a/src/main/ssh/orcad-host-version-admission.ts b/src/main/ssh/orcad-host-version-admission.ts index 18a0e7686be4..b8e0dd862de4 100644 --- a/src/main/ssh/orcad-host-version-admission.ts +++ b/src/main/ssh/orcad-host-version-admission.ts @@ -3,7 +3,7 @@ * state a newer Orca's orcad may already have migrated. */ import { compareAppVersions } from '../../shared/app-version' -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' export type OrcadHostVersionRefusal = 'host-newer' diff --git a/src/main/ssh/orcad-incumbent-recovery.ts b/src/main/ssh/orcad-incumbent-recovery.ts index f550a5856223..492a447ca85e 100644 --- a/src/main/ssh/orcad-incumbent-recovery.ts +++ b/src/main/ssh/orcad-incumbent-recovery.ts @@ -10,8 +10,8 @@ import { execOrcadStateMutation } from './orcad-state-mutation-exec' import { orcadRemoteBaseDir } from './orcad-remote-windows-node' import type { ServeReadiness } from '../server/serve-readiness' import { RELAY_REMOTE_DIR } from './remote-frame-protocol' -import { ORCAD_STATE_SNAPSHOT_DIR } from './orcad-activation-record' -import type { OrcadSnapshotVerdict } from './orcad-activation-transaction' +import { ORCAD_STATE_SNAPSHOT_DIR } from '../managed-server/activation/orcad-activation-record' +import type { OrcadSnapshotVerdict } from '../managed-server/activation/orcad-activation-transaction' import { clearOrcadStateSnapshotMembersCommand, compareOrcadStateSnapshotCommand, diff --git a/src/main/ssh/orcad-installed-activation.ts b/src/main/ssh/orcad-installed-activation.ts index ff372de3db79..558a2af33191 100644 --- a/src/main/ssh/orcad-installed-activation.ts +++ b/src/main/ssh/orcad-installed-activation.ts @@ -13,11 +13,11 @@ import { withActivatedVersion, type OrcadActivationRecord, type OrcadStateSnapshot -} from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' import { readOrcadActivationRecord, writeOrcadActivationRecord -} from './orcad-activation-record-store' +} from '../managed-server/activation/orcad-activation-record-store' import { launchAndJudgeOrcadSlot } from './orcad-candidate-launch-verdict' import { planOrcadUpdate } from './orcad-update-plan' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' @@ -31,15 +31,15 @@ import { import { joinRemotePath } from './ssh-remote-platform' import { computeLocalOrcadBuildHash } from './orcad-local-build-hash' import { preflightInstalledOrcad } from './orcad-remote-preflight' -import type { OrcadActivationLockControl } from './orcad-activation-lock' -import type { OrcadActivateTransaction } from './orcad-activation-transaction' +import type { OrcadActivationLockControl } from '../managed-server/activation/orcad-activation-lock' +import type { OrcadActivateTransaction } from '../managed-server/activation/orcad-activation-transaction' import { createOrcadActivationTransaction, withOrcadActivationCandidateReady, withOrcadActivationIncumbentStopped, withOrcadActivationSnapshot -} from './orcad-activation-transaction-transitions' -import { writeOrcadActivationTransaction } from './orcad-activation-transaction-store' +} from '../managed-server/activation/orcad-activation-transaction-transitions' +import { writeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' import { execOrcadRemoteOr, withoutAbortSignal } from './orcad-remote-runtime-control' import { execOrcadStateMutationOr } from './orcad-state-mutation-exec' import { diff --git a/src/main/ssh/orcad-interrupted-candidate-resume.ts b/src/main/ssh/orcad-interrupted-candidate-resume.ts index 8123c9a3b3d7..f3a428b86fc0 100644 --- a/src/main/ssh/orcad-interrupted-candidate-resume.ts +++ b/src/main/ssh/orcad-interrupted-candidate-resume.ts @@ -5,11 +5,11 @@ * leave the host serving nothing until an operator accepts losing that state (P1-A). */ import type { ServeReadiness } from '../server/serve-readiness' -import { withActivatedVersion } from './orcad-activation-record' -import { writeOrcadActivationRecord } from './orcad-activation-record-store' -import type { OrcadActivateTransaction } from './orcad-activation-transaction' -import { writeOrcadActivationTransaction } from './orcad-activation-transaction-store' -import { withOrcadActivationCandidateReady } from './orcad-activation-transaction-transitions' +import { withActivatedVersion } from '../managed-server/activation/orcad-activation-record' +import { writeOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' +import type { OrcadActivateTransaction } from '../managed-server/activation/orcad-activation-transaction' +import { writeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' +import { withOrcadActivationCandidateReady } from '../managed-server/activation/orcad-activation-transaction-transitions' import { OrcadActiveReadinessError } from './orcad-active-readiness' import { orcadLivenessProvenExited } from './orcad-remote-launch' import { diff --git a/src/main/ssh/orcad-machine-home.ts b/src/main/ssh/orcad-machine-home.ts index 1cd5142f8f16..34f6ce777c61 100644 --- a/src/main/ssh/orcad-machine-home.ts +++ b/src/main/ssh/orcad-machine-home.ts @@ -13,7 +13,7 @@ import { createHash } from 'node:crypto' import { shellEscape } from './ssh-connection-utils' import { RELAY_REMOTE_DIR } from './remote-frame-protocol' -import { ORCAD_ACTIVATION_FILENAME } from './orcad-activation-record' +import { ORCAD_ACTIVATION_FILENAME } from '../managed-server/activation/orcad-activation-record' import { parseDarwinPlatformUuid } from '../persistence/profile-state/profile-state-access-identity' import { joinRemotePath, diff --git a/src/main/ssh/orcad-managed-auto-update.test.ts b/src/main/ssh/orcad-managed-auto-update.test.ts index 54f60a1647bb..f2fae59649f5 100644 --- a/src/main/ssh/orcad-managed-auto-update.test.ts +++ b/src/main/ssh/orcad-managed-auto-update.test.ts @@ -1,5 +1,8 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { emptyOrcadActivationRecord, type OrcadActivationRecord } from './orcad-activation-record' +import { + emptyOrcadActivationRecord, + type OrcadActivationRecord +} from '../managed-server/activation/orcad-activation-record' import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable' const mocks = vi.hoisted(() => { diff --git a/src/main/ssh/orcad-managed-auto-update.ts b/src/main/ssh/orcad-managed-auto-update.ts index 738fd6105558..d63fd9e5efd2 100644 --- a/src/main/ssh/orcad-managed-auto-update.ts +++ b/src/main/ssh/orcad-managed-auto-update.ts @@ -5,7 +5,7 @@ * terminals, and a rejected candidate is restored through the activation journal, so the old * version keeps serving. A host a newer Orca activated is never downgraded. */ -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { refuseOrcadHostDowngrade, type OrcadHostVersionRefusal @@ -16,7 +16,7 @@ import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable' import { findIncompleteManagedOrcadMigration } from './orcad-managed-migration-status' -import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from './orcad-activation-fence-hold' +import { ORCAD_ACTIVATION_FENCE_BUSY_CODE } from '../managed-server/activation/orcad-activation-fence-hold' import { resolveLinkedOrcadContext } from './orcad-managed-runtime-context' import { runManagedOrcadUpdate, withManagedOrcadLifecycle } from './orcad-runtime-maintenance' import type { OrcadUpdateDeferCode } from './orcad-update-plan' diff --git a/src/main/ssh/orcad-managed-launch-session.test.ts b/src/main/ssh/orcad-managed-launch-session.test.ts index d728aeae892a..c6fdb38dfa07 100644 --- a/src/main/ssh/orcad-managed-launch-session.test.ts +++ b/src/main/ssh/orcad-managed-launch-session.test.ts @@ -58,11 +58,11 @@ vi.mock('./orcad-remote-context', () => ({ }) })) vi.mock('./orcad-ssh-host-transport', () => ({ sshOrcadHostTransport: (c: unknown) => c })) -vi.mock('./orcad-activation-lock', () => ({ +vi.mock('../managed-server/activation/orcad-activation-lock', () => ({ withOrcadActivationLock: (_slot: unknown, run: (lock: unknown) => Promise) => run({ retain: mocks.retain }) })) -vi.mock('./orcad-activation-record-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: async () => ({ active: mocks.active.current }) })) vi.mock('./orcad-managed-remote-stop', () => ({ diff --git a/src/main/ssh/orcad-managed-launch-session.ts b/src/main/ssh/orcad-managed-launch-session.ts index f5038f7e7e31..16ff35a780ac 100644 --- a/src/main/ssh/orcad-managed-launch-session.ts +++ b/src/main/ssh/orcad-managed-launch-session.ts @@ -4,8 +4,11 @@ */ import { randomUUID } from 'node:crypto' import type { OrcadManagedRestartResult } from '../../shared/orcad-managed-runtime' -import { withOrcadActivationLock, type OrcadActivationLockControl } from './orcad-activation-lock' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import { + withOrcadActivationLock, + type OrcadActivationLockControl +} from '../managed-server/activation/orcad-activation-lock' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { orcadLaunchSshSessionProbeCommand, parseOrcadLaunchSshSession, diff --git a/src/main/ssh/orcad-managed-runtime-context.ts b/src/main/ssh/orcad-managed-runtime-context.ts index 4bffee94983c..c9b086895afa 100644 --- a/src/main/ssh/orcad-managed-runtime-context.ts +++ b/src/main/ssh/orcad-managed-runtime-context.ts @@ -9,7 +9,7 @@ import type { ServeReadiness } from '../server/serve-readiness' import { computeLocalOrcadBuildHash } from './orcad-local-build-hash' import { sshOrcadHostTransport } from './orcad-ssh-host-transport' import type { OrcadHostTarget } from './orcad-host-transport' -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { refuseOrcadHostDowngrade } from './orcad-host-version-admission' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' import { probeActiveOrcadReadiness } from './orcad-active-readiness' diff --git a/src/main/ssh/orcad-managed-version-gc.test.ts b/src/main/ssh/orcad-managed-version-gc.test.ts index 1f93e2dbe39c..3605f1a161bf 100644 --- a/src/main/ssh/orcad-managed-version-gc.test.ts +++ b/src/main/ssh/orcad-managed-version-gc.test.ts @@ -8,7 +8,9 @@ const { gcMock, readRecordMock } = vi.hoisted(() => ({ })) vi.mock('./orcad-remote-gc', () => ({ gcOldOrcadVersions: gcMock })) -vi.mock('./orcad-activation-record-store', () => ({ readOrcadActivationRecord: readRecordMock })) +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ + readOrcadActivationRecord: readRecordMock +})) import { provenLiveDaemonVersion, pruneManagedOrcadVersions } from './orcad-managed-version-gc' diff --git a/src/main/ssh/orcad-managed-version-gc.ts b/src/main/ssh/orcad-managed-version-gc.ts index 6757817881fe..5bc678c8a3ab 100644 --- a/src/main/ssh/orcad-managed-version-gc.ts +++ b/src/main/ssh/orcad-managed-version-gc.ts @@ -6,7 +6,7 @@ */ import type { NodeRuntimeTarget } from '../../shared/node-runtime-pin' import type { ServeReadiness } from '../server/serve-readiness' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { orcadSlotDir, type OrcadSlotOptions } from './orcad-recovery-slot' import { gcOldOrcadVersions } from './orcad-remote-gc' import { nodeRuntimeStorePins } from './pinned-runtime-host-target' diff --git a/src/main/ssh/orcad-managed-wake.test.ts b/src/main/ssh/orcad-managed-wake.test.ts index d01c5e34c1be..28d740ce7ac5 100644 --- a/src/main/ssh/orcad-managed-wake.test.ts +++ b/src/main/ssh/orcad-managed-wake.test.ts @@ -17,7 +17,7 @@ import { acquireInstallLock, RemoteInstallLockBusyError } from './remote-install import { wakeStoppedManagedOrcad } from './orcad-managed-wake' import { getRemoteHostPlatform } from './ssh-remote-platform' import type { OrcadHostTransport } from './orcad-host-transport' -import { FakeOrcadHost, OLD } from './orcad-activation-host-test-harness' +import { FakeOrcadHost, OLD } from '../managed-server/activation/orcad-activation-host-test-harness' import { ORCAD_E2E_IDLE_TIMEOUT_ENV, ORCAD_MANAGED_ACTIVATION_ROOT_ENV diff --git a/src/main/ssh/orcad-managed-wake.ts b/src/main/ssh/orcad-managed-wake.ts index 2de82fee3747..74af22509f82 100644 --- a/src/main/ssh/orcad-managed-wake.ts +++ b/src/main/ssh/orcad-managed-wake.ts @@ -3,25 +3,25 @@ * that stopped itself after idling. A stopped server is just "not running": it is neither a * failure nor evidence about terminals, which the daemon owns and which outlive orcad. */ -import { ORCAD_FENCE_OWNER_FILENAME } from './orcad-activation-fence-scope' +import { ORCAD_FENCE_OWNER_FILENAME } from '../managed-server/activation/orcad-activation-fence-scope' import type { ServeReadiness } from '../server/serve-readiness' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { randomUUID } from 'node:crypto' import { orcadActivationFenceExists, releaseOrcadActivationFence, withOrcadActivationLock -} from './orcad-activation-lock' +} from '../managed-server/activation/orcad-activation-lock' import { orcadLivenessProvenExited } from './orcad-remote-launch' import { readBoundedOrcadRemoteRecord } from './orcad-remote-record-file' -import { orcadActivationFenceLockDir } from './orcad-activation-transaction' +import { orcadActivationFenceLockDir } from '../managed-server/activation/orcad-activation-transaction' import { joinRemotePath } from './ssh-remote-platform' -import { readOrcadActivationTransaction } from './orcad-activation-transaction-store' +import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' import { ORCAD_RECOVERY_UNVERIFIABLE_CODE, recoverInterruptedOrcadActivation -} from './orcad-activation-recovery' +} from '../managed-server/activation/orcad-activation-recovery' import { ensureOrcadSlotServing, orcadSlotDir, diff --git a/src/main/ssh/orcad-recovery-slot.ts b/src/main/ssh/orcad-recovery-slot.ts index 2ce642f48519..5c87af887bc7 100644 --- a/src/main/ssh/orcad-recovery-slot.ts +++ b/src/main/ssh/orcad-recovery-slot.ts @@ -5,7 +5,7 @@ * that could not answer is `unverifiable` — never a reason to start a second slot. */ import type { ServeReadiness } from '../server/serve-readiness' -import type { OrcadActivationExpectation } from './orcad-activation-gate' +import type { OrcadActivationExpectation } from '../managed-server/activation/orcad-activation-gate' import { ORCAD_INSTALL_MODEL } from './remote-install-model' import { computeRemoteInstallDir } from './remote-versioned-install' import { readRemoteOrcadBuildHash } from './orcad-remote-build-hash' @@ -26,7 +26,7 @@ import { type OrcadStopOutcome } from './orcad-remote-process-control' import { execOrcadRemote, type OrcadRemoteExecTarget } from './orcad-remote-runtime-control' -import { orcadActivationTransactionRoot } from './orcad-activation-transaction' +import { orcadActivationTransactionRoot } from '../managed-server/activation/orcad-activation-transaction' import { initialOrcadActivationAdmissionCommand, parseInitialOrcadActivationAdmission diff --git a/src/main/ssh/orcad-remote-context.ts b/src/main/ssh/orcad-remote-context.ts index ea99255fb235..a5318365d163 100644 --- a/src/main/ssh/orcad-remote-context.ts +++ b/src/main/ssh/orcad-remote-context.ts @@ -1,8 +1,8 @@ /** Everything a managed-orcad operation needs to know about one host (SSH or WSL) before it acts. */ import type { NodeRuntimeTarget } from '../../shared/node-runtime-pin' import type { SshTarget } from '../../shared/ssh-types' -import type { OrcadActivationRecord } from './orcad-activation-record' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { resolveOrcadRuntimeTarget } from './orcad-runtime-target' import { prepareWindowsOrcadHost } from './orcad-windows-host-preparation' import { diff --git a/src/main/ssh/orcad-remote-decommission.test.ts b/src/main/ssh/orcad-remote-decommission.test.ts index 92a573f82388..777e1bb0ea32 100644 --- a/src/main/ssh/orcad-remote-decommission.test.ts +++ b/src/main/ssh/orcad-remote-decommission.test.ts @@ -21,11 +21,15 @@ import { execCommand } from './remote-exec-command' import { acquireInstallLock } from './remote-install-lock' import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file' import { decommissionRemoteOrcad } from './orcad-remote-decommission' -import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' -import { parseOrcadActivationRecord } from './orcad-activation-record' +import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' +import { parseOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { getRemoteHostPlatform } from './ssh-remote-platform' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' -import { FakeOrcadHost, OLD, type CrashMode } from './orcad-activation-host-test-harness' +import { + FakeOrcadHost, + OLD, + type CrashMode +} from '../managed-server/activation/orcad-activation-host-test-harness' let host = new FakeOrcadHost() diff --git a/src/main/ssh/orcad-remote-decommission.ts b/src/main/ssh/orcad-remote-decommission.ts index c7db6960dd0b..700fd2e79adc 100644 --- a/src/main/ssh/orcad-remote-decommission.ts +++ b/src/main/ssh/orcad-remote-decommission.ts @@ -8,15 +8,15 @@ * fence. Windows runs the same steps: the request is a staged file and exit proof is orcad's own. */ import { randomUUID } from 'node:crypto' -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { readOrcadActivationRecord, writeOrcadActivationRecord -} from './orcad-activation-record-store' -import { sameOrcadActivationRecord } from './orcad-activation-transaction' -import { writeOrcadActivationTransaction } from './orcad-activation-transaction-store' -import { withOrcadActivationLock } from './orcad-activation-lock' -import { orcadActivationFenceRefusal } from './orcad-activation-fence-hold' +} from '../managed-server/activation/orcad-activation-record-store' +import { sameOrcadActivationRecord } from '../managed-server/activation/orcad-activation-transaction' +import { writeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' +import { withOrcadActivationLock } from '../managed-server/activation/orcad-activation-lock' +import { orcadActivationFenceRefusal } from '../managed-server/activation/orcad-activation-fence-hold' import { committedOrcadDecommissionRecord, createOrcadDecommissionTransaction, diff --git a/src/main/ssh/orcad-remote-deploy.test.ts b/src/main/ssh/orcad-remote-deploy.test.ts index 0fdfd61c70bc..9c93276ceb66 100644 --- a/src/main/ssh/orcad-remote-deploy.test.ts +++ b/src/main/ssh/orcad-remote-deploy.test.ts @@ -49,14 +49,14 @@ import { withActivatedVersion, withDeactivatedVersionCommitted, type OrcadActivationRecord -} from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from './orcad-installed-activation' import { getRemoteHostPlatform } from './ssh-remote-platform' -import { isReadinessRead } from './orcad-activation-host-test-harness' +import { isReadinessRead } from '../managed-server/activation/orcad-activation-host-test-harness' import { isSnapshotCaptureCommand } from './orcad-snapshot-capture-command' import { NODE_RUNTIME_PIN } from '../../shared/node-runtime-pin' -import { serializeOrcadActivationTransaction } from './orcad-activation-transaction' -import { createOrcadActivationTransaction } from './orcad-activation-transaction-transitions' +import { serializeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction' +import { createOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-transitions' const mockExec = vi.mocked(execCommand) const NEW_VERSION = '0.2.0+bb0100000000' diff --git a/src/main/ssh/orcad-remote-deploy.ts b/src/main/ssh/orcad-remote-deploy.ts index 8e4e791df556..b46bec81f4c4 100644 --- a/src/main/ssh/orcad-remote-deploy.ts +++ b/src/main/ssh/orcad-remote-deploy.ts @@ -6,14 +6,14 @@ * Every activation runs under the host's activation fence and journal * (`orcad-activation-lock.ts`), so an interrupted one is recoverable to exactly one slot. */ -import { logOrcadActivationOutcome } from './orcad-activation-outcome-log' +import { logOrcadActivationOutcome } from '../managed-server/activation/orcad-activation-outcome-log' import { join } from 'node:path' import type { OrcadHostTransport } from './orcad-host-transport' import { ORCAD_INSTALL_MODEL } from './remote-install-model' import { computeRemoteInstallDir, readLocalFullVersion } from './remote-versioned-install' -import { readOrcadActivationRecord } from './orcad-activation-record-store' -import type { OrcadActivationRecord } from './orcad-activation-record' -import type { OrcadActivationVerdict } from './orcad-activation-gate' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' +import type { OrcadActivationVerdict } from '../managed-server/activation/orcad-activation-gate' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' import type { RemoteHostPlatform } from './ssh-remote-platform' import { installOrcadBundle } from './orcad-remote-install' @@ -28,9 +28,9 @@ import { orcadActivationFenceExists, resolveOrcadActivationReadinessTimeout, withOrcadActivationLock -} from './orcad-activation-lock' +} from '../managed-server/activation/orcad-activation-lock' import { activateInstalledOrcad } from './orcad-installed-activation' -import { orcadActivationFenceRefusal } from './orcad-activation-fence-hold' +import { orcadActivationFenceRefusal } from '../managed-server/activation/orcad-activation-fence-hold' export type OrcadDeployOptions = { conn: OrcadHostTransport diff --git a/src/main/ssh/orcad-remote-gc.test.ts b/src/main/ssh/orcad-remote-gc.test.ts index a2475a57e436..1f8e487dbacf 100644 --- a/src/main/ssh/orcad-remote-gc.test.ts +++ b/src/main/ssh/orcad-remote-gc.test.ts @@ -23,9 +23,9 @@ vi.mock('./remote-install-lock', () => ({ import { execCommand } from './remote-exec-command' import { gcOldOrcadVersions } from './orcad-remote-gc' -import { emptyOrcadActivationRecord } from './orcad-activation-record' -import { serializeOrcadActivationTransaction } from './orcad-activation-transaction' -import { createOrcadActivationTransaction } from './orcad-activation-transaction-transitions' +import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' +import { serializeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction' +import { createOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-transitions' import { getRemoteHostPlatform } from './ssh-remote-platform' import type { OrcadHostTransport } from './orcad-host-transport' diff --git a/src/main/ssh/orcad-remote-gc.ts b/src/main/ssh/orcad-remote-gc.ts index 7f3132e6af7e..f9577050610e 100644 --- a/src/main/ssh/orcad-remote-gc.ts +++ b/src/main/ssh/orcad-remote-gc.ts @@ -17,7 +17,10 @@ import type { OrcadHostTransport } from './orcad-host-transport' import { execCommand, isUnconfirmedSshCommandTermination } from './remote-exec-command' import { ORCAD_INSTALL_MODEL } from './remote-install-model' import { gcOldRemoteInstallVersions } from './remote-install-gc' -import { orcadGcPinnedDirNames, type OrcadActivationRecord } from './orcad-activation-record' +import { + orcadGcPinnedDirNames, + type OrcadActivationRecord +} from '../managed-server/activation/orcad-activation-record' import { ORCAD_NEVER_LAUNCHED, orcadLivenessAnswerBlocksGc, diff --git a/src/main/ssh/orcad-remote-install.ts b/src/main/ssh/orcad-remote-install.ts index fec878a0f1f3..1cfcd479a7e2 100644 --- a/src/main/ssh/orcad-remote-install.ts +++ b/src/main/ssh/orcad-remote-install.ts @@ -10,7 +10,7 @@ import type { OrcadHostTransport } from './orcad-host-transport' import { joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform' import { ORCAD_INSTALL_MODEL } from './remote-install-model' import { acquireInstallLock } from './remote-install-lock' -import { ORCAD_FENCE_OWNER_FILENAME } from './orcad-activation-fence-scope' +import { ORCAD_FENCE_OWNER_FILENAME } from '../managed-server/activation/orcad-activation-fence-scope' import { forgetHeldOrcadFence, rememberHeldOrcadFence } from './orcad-held-fence-tokens' import { exitedOwnLockProof } from './orcad-exited-own-lock' import { orcadWindowsBaseDir } from './orcad-remote-windows-node' diff --git a/src/main/ssh/orcad-remote-lifecycle-windows.test.ts b/src/main/ssh/orcad-remote-lifecycle-windows.test.ts index 37dde091cdea..12a8dd15cad5 100644 --- a/src/main/ssh/orcad-remote-lifecycle-windows.test.ts +++ b/src/main/ssh/orcad-remote-lifecycle-windows.test.ts @@ -53,7 +53,7 @@ vi.mock('./remote-versioned-install', async (importOriginal) => ({ import { execCommand } from './remote-exec-command' import { deployOrcad, type OrcadDeployOptions } from './orcad-remote-deploy' import { rollbackOrcad } from './orcad-remote-rollback' -import { emptyOrcadActivationRecord } from './orcad-activation-record' +import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file' import { getRemoteHostPlatform } from './ssh-remote-platform' import { NODE_RUNTIME_PIN } from '../../shared/node-runtime-pin' diff --git a/src/main/ssh/orcad-remote-primitives.test.ts b/src/main/ssh/orcad-remote-primitives.test.ts index 19050482b3d2..c63847077330 100644 --- a/src/main/ssh/orcad-remote-primitives.test.ts +++ b/src/main/ssh/orcad-remote-primitives.test.ts @@ -24,8 +24,8 @@ import { import { readOrcadActivationRecord, writeOrcadActivationRecord -} from './orcad-activation-record-store' -import { emptyOrcadActivationRecord } from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record-store' +import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { readRemoteOrcadBuildHash } from './orcad-remote-build-hash' import { launchOrcadSlotAndAwaitReadiness, diff --git a/src/main/ssh/orcad-remote-rollback.test.ts b/src/main/ssh/orcad-remote-rollback.test.ts index f8ab1821a8f2..74bbaff2a9f9 100644 --- a/src/main/ssh/orcad-remote-rollback.test.ts +++ b/src/main/ssh/orcad-remote-rollback.test.ts @@ -55,9 +55,12 @@ vi.mock('./orcad-rollback-terminal-barrier', async (importOriginal) => ({ import { execCommand } from './remote-exec-command' import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file' import { rollbackOrcad, type OrcadRollbackOptions } from './orcad-remote-rollback' -import { emptyOrcadActivationRecord, type OrcadActivationRecord } from './orcad-activation-record' +import { + emptyOrcadActivationRecord, + type OrcadActivationRecord +} from '../managed-server/activation/orcad-activation-record' import { getRemoteHostPlatform } from './ssh-remote-platform' -import { isReadinessRead } from './orcad-activation-host-test-harness' +import { isReadinessRead } from '../managed-server/activation/orcad-activation-host-test-harness' import { isSnapshotCaptureCommand } from './orcad-snapshot-capture-command' const mockExec = vi.mocked(execCommand) diff --git a/src/main/ssh/orcad-remote-rollback.ts b/src/main/ssh/orcad-remote-rollback.ts index 7693d14a70be..f4b5b89528d1 100644 --- a/src/main/ssh/orcad-remote-rollback.ts +++ b/src/main/ssh/orcad-remote-rollback.ts @@ -13,20 +13,20 @@ * before restoring would let the old build migrate the new build's state. The rescue copy of * the newer state, and the journal under the activation fence, make each step undoable. */ -import { logOrcadActivationOutcome } from './orcad-activation-outcome-log' +import { logOrcadActivationOutcome } from '../managed-server/activation/orcad-activation-outcome-log' import type { OrcadHostTransport } from './orcad-host-transport' -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' -import type { OrcadActivationVerdict } from './orcad-activation-gate' +import type { OrcadActivationVerdict } from '../managed-server/activation/orcad-activation-gate' import type { OrcadDaemonProtocolFacts } from './orcad-daemon-protocol-crossing' -import { readOrcadActivationRecord } from './orcad-activation-record-store' -import { sameOrcadActivationRecord } from './orcad-activation-transaction' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' +import { sameOrcadActivationRecord } from '../managed-server/activation/orcad-activation-transaction' import type { RemoteHostPlatform } from './ssh-remote-platform' import { resolveOrcadActivationReadinessTimeout, withOrcadActivationLock -} from './orcad-activation-lock' -import { orcadActivationFenceRefusal } from './orcad-activation-fence-hold' +} from '../managed-server/activation/orcad-activation-lock' +import { orcadActivationFenceRefusal } from '../managed-server/activation/orcad-activation-fence-hold' import { ORCAD_STARTUP_READINESS_TIMEOUT_MS } from '../../shared/orcad-profile-preflight' import { rollbackOrcadLocked } from './orcad-rollback-transition' diff --git a/src/main/ssh/orcad-remote-runtime-control.ts b/src/main/ssh/orcad-remote-runtime-control.ts index 258c0faed738..3a883aee799a 100644 --- a/src/main/ssh/orcad-remote-runtime-control.ts +++ b/src/main/ssh/orcad-remote-runtime-control.ts @@ -26,7 +26,7 @@ import { isOrcadFenceLost, OrcadFenceLostError, posixOrcadFenceGuard -} from './orcad-activation-fence-scope' +} from '../managed-server/activation/orcad-activation-fence-scope' import { orcadWindowsHomeOpCommand } from './orcad-remote-windows-node' import { ORCAD_WINDOWS_FENCE_ARG } from './orcad-windows-host-fence-ops' import { isWindowsRemoteHost, type RemoteHostPlatform } from './ssh-remote-platform' diff --git a/src/main/ssh/orcad-remote-windows-decommission.test.ts b/src/main/ssh/orcad-remote-windows-decommission.test.ts index b7a0ad8c44bf..0e25878eb2ef 100644 --- a/src/main/ssh/orcad-remote-windows-decommission.test.ts +++ b/src/main/ssh/orcad-remote-windows-decommission.test.ts @@ -30,7 +30,10 @@ import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file' import { gcOldRemoteInstallVersions } from './remote-install-gc' import { decommissionRemoteOrcad } from './orcad-remote-decommission' import { gcOldOrcadVersions } from './orcad-remote-gc' -import { emptyOrcadActivationRecord, withActivatedVersion } from './orcad-activation-record' +import { + emptyOrcadActivationRecord, + withActivatedVersion +} from '../managed-server/activation/orcad-activation-record' import { getRemoteHostPlatform } from './ssh-remote-platform' const mockExec = vi.mocked(execCommand) diff --git a/src/main/ssh/orcad-remote-windows-node.ts b/src/main/ssh/orcad-remote-windows-node.ts index 336cc6f59676..485fb05d5324 100644 --- a/src/main/ssh/orcad-remote-windows-node.ts +++ b/src/main/ssh/orcad-remote-windows-node.ts @@ -9,7 +9,7 @@ * `powershell.exe -Command`, which both shells pass through intact. Anything else is refused * rather than encoded (docs/reference/windows-edr-posture.md). */ -import { currentOrcadFence } from './orcad-activation-fence-scope' +import { currentOrcadFence } from '../managed-server/activation/orcad-activation-fence-scope' import { ORCAD_WINDOWS_FENCE_ARG } from './orcad-windows-host-fence-ops' import { ORCAD_NODE_RUNTIME_DIR_PREFIX, diff --git a/src/main/ssh/orcad-rollback-transition.ts b/src/main/ssh/orcad-rollback-transition.ts index cdbd1d9140d6..6750218b5060 100644 --- a/src/main/ssh/orcad-rollback-transition.ts +++ b/src/main/ssh/orcad-rollback-transition.ts @@ -3,8 +3,8 @@ import { orcadRemoteBaseDir } from './orcad-remote-windows-node' import { randomUUID } from 'node:crypto' import type { OrcadRollbackOptions, OrcadRollbackResult } from './orcad-remote-rollback' import { isUnconfirmedSshCommandTermination } from './remote-exec-command' -import { withRolledBackVersion } from './orcad-activation-record' -import { writeOrcadActivationRecord } from './orcad-activation-record-store' +import { withRolledBackVersion } from '../managed-server/activation/orcad-activation-record' +import { writeOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { launchAndJudgeOrcadSlot } from './orcad-candidate-launch-verdict' import { assessOrcadRollback } from './orcad-update-plan' import { ORCAD_LOG_FILENAME } from './orcad-remote-host-support' @@ -20,17 +20,17 @@ import { restoreOrcadStateSnapshotCommand } from './orcad-state-snapshot' import { joinRemotePath } from './ssh-remote-platform' -import type { OrcadActivationLockControl } from './orcad-activation-lock' +import type { OrcadActivationLockControl } from '../managed-server/activation/orcad-activation-lock' import { rollbackStartingState, type OrcadRollbackTransaction -} from './orcad-activation-transaction' +} from '../managed-server/activation/orcad-activation-transaction' import { createOrcadRollbackTransaction, withOrcadRollbackPhase, withOrcadRollbackRescue -} from './orcad-activation-transaction-transitions' -import { writeOrcadActivationTransaction } from './orcad-activation-transaction-store' +} from '../managed-server/activation/orcad-activation-transaction-transitions' +import { writeOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' import { execOrcadRemoteOr, withoutAbortSignal } from './orcad-remote-runtime-control' import { execOrcadStateMutationOr } from './orcad-state-mutation-exec' import { diff --git a/src/main/ssh/orcad-running-version-adoption.test.ts b/src/main/ssh/orcad-running-version-adoption.test.ts index ebe5aac9de7e..8daaf8212f77 100644 --- a/src/main/ssh/orcad-running-version-adoption.test.ts +++ b/src/main/ssh/orcad-running-version-adoption.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import type { OrcadSlotOptions } from './orcad-recovery-slot' import { getRemoteHostPlatform } from './ssh-remote-platform' @@ -11,12 +11,14 @@ const mocks = vi.hoisted(() => ({ fenceRefusal: vi.fn() })) -vi.mock('./orcad-activation-fence-hold', () => ({ +vi.mock('../managed-server/activation/orcad-activation-fence-hold', () => ({ orcadActivationFenceRefusal: mocks.fenceRefusal })) vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) -vi.mock('./orcad-activation-record-store', () => ({ readOrcadActivationRecord: mocks.readRecord })) +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ + readOrcadActivationRecord: mocks.readRecord +})) vi.mock('./orcad-remote-build-hash', () => ({ readRemoteOrcadBuildHash: async () => 'hash' })) vi.mock('./orcad-active-readiness', async (importOriginal) => ({ ...(await importOriginal>()), diff --git a/src/main/ssh/orcad-running-version-adoption.ts b/src/main/ssh/orcad-running-version-adoption.ts index 66c509307c67..57052fc12e87 100644 --- a/src/main/ssh/orcad-running-version-adoption.ts +++ b/src/main/ssh/orcad-running-version-adoption.ts @@ -5,10 +5,10 @@ */ import type { ServeReadiness } from '../server/serve-readiness' import type { OrcadManagedDeferral } from '../../shared/orcad-managed-runtime' -import { orcadActivationFenceRefusal } from './orcad-activation-fence-hold' +import { orcadActivationFenceRefusal } from '../managed-server/activation/orcad-activation-fence-hold' import { OrcadActiveReadinessError, probeActiveOrcadReadiness } from './orcad-active-readiness' -import type { OrcadActivationRecord } from './orcad-activation-record' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { wakeStoppedManagedOrcad } from './orcad-managed-wake' import { resolveOrcadSlotIdentity, type OrcadSlotOptions } from './orcad-recovery-slot' diff --git a/src/main/ssh/orcad-runtime-decommission.test.ts b/src/main/ssh/orcad-runtime-decommission.test.ts index 30a0dbb14e74..bdf03dabc70b 100644 --- a/src/main/ssh/orcad-runtime-decommission.test.ts +++ b/src/main/ssh/orcad-runtime-decommission.test.ts @@ -36,11 +36,13 @@ vi.mock('./ssh-target-registry', () => ({ vi.mock('./orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) vi.mock('./orcad-terminal-census-client', () => ({ collectManagedTerminalCensus: mocks.census })) vi.mock('./orcad-remote-decommission', () => ({ decommissionRemoteOrcad: mocks.decommission })) -vi.mock('./orcad-activation-recovery', () => ({ recoverInterruptedOrcadActivation: mocks.recover })) -vi.mock('./orcad-activation-transaction-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-recovery', () => ({ + recoverInterruptedOrcadActivation: mocks.recover +})) +vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: async () => mocks.state.transaction })) -vi.mock('./orcad-activation-lock', () => ({ +vi.mock('../managed-server/activation/orcad-activation-lock', () => ({ withStaleOrcadActivationRecoveryLock: async ( _options: unknown, run: (lock: { retain: () => void }) => Promise diff --git a/src/main/ssh/orcad-runtime-decommission.ts b/src/main/ssh/orcad-runtime-decommission.ts index 115654f0c557..ba463729a79f 100644 --- a/src/main/ssh/orcad-runtime-decommission.ts +++ b/src/main/ssh/orcad-runtime-decommission.ts @@ -13,9 +13,9 @@ import type { KnownRuntimeEnvironment, OrcadSshDeploymentLink } from '../../shared/runtime-environments' -import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' -import { withStaleOrcadActivationRecoveryLock } from './orcad-activation-lock' -import { readOrcadActivationTransaction } from './orcad-activation-transaction-store' +import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' +import { withStaleOrcadActivationRecoveryLock } from '../managed-server/activation/orcad-activation-lock' +import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' import { reconcileOrcadDecommission } from './orcad-decommission-recovery' import { cancelRemoteOrcadManagedStop } from './orcad-managed-remote-stop' import { diff --git a/src/main/ssh/orcad-runtime-deployment.test.ts b/src/main/ssh/orcad-runtime-deployment.test.ts index f04ab66bb94c..8a53279a0b1e 100644 --- a/src/main/ssh/orcad-runtime-deployment.test.ts +++ b/src/main/ssh/orcad-runtime-deployment.test.ts @@ -16,7 +16,7 @@ import { withDeactivatedVersion, withDeactivatedVersionCommitted, type OrcadActivationRecord -} from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' import { ORCAD_ACTIVATION_POLICY_REFUSED_CODE } from './orcad-installed-activation' import type { OrcadDeployOptions } from './orcad-remote-deploy' @@ -46,9 +46,13 @@ vi.mock('./ssh-target-registry', () => ({ getSshTargetRegistryStore: () => mocks.state.store })) vi.mock('./orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) -vi.mock('./orcad-activation-recovery', () => ({ recoverInterruptedOrcadActivation: mocks.recover })) -vi.mock('./orcad-activation-record-store', () => ({ readOrcadActivationRecord: mocks.readRecord })) -vi.mock('./orcad-activation-transaction-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-recovery', () => ({ + recoverInterruptedOrcadActivation: mocks.recover +})) +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ + readOrcadActivationRecord: mocks.readRecord +})) +vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: mocks.readTransaction })) vi.mock('./orcad-remote-deploy', () => ({ deployOrcad: mocks.deploy })) @@ -56,7 +60,7 @@ vi.mock('../orcad/orcad-artifact-materializer', () => ({ materializeOrcadArtifact: async () => '/local/orcad' })) vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) -vi.mock('./orcad-activation-fence-hold', () => ({ +vi.mock('../managed-server/activation/orcad-activation-fence-hold', () => ({ orcadActivationFenceRefusal: mocks.fenceRefusal })) vi.mock('./orcad-remote-build-hash', () => ({ diff --git a/src/main/ssh/orcad-runtime-deployment.ts b/src/main/ssh/orcad-runtime-deployment.ts index cb7ba55d5309..b9cb0d0e7271 100644 --- a/src/main/ssh/orcad-runtime-deployment.ts +++ b/src/main/ssh/orcad-runtime-deployment.ts @@ -22,9 +22,9 @@ import { ensureOrcadManagedTunnel, startOrcadManagedTunnel } from './orcad-managed-tunnel' -import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' +import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' import { wakeAlreadyActiveOrcad } from './orcad-already-active-wake' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { resolveOrcadRemoteContext, type OrcadRemoteContext } from './orcad-remote-context' import { deployOrcad } from './orcad-remote-deploy' import { diff --git a/src/main/ssh/orcad-runtime-maintenance.test.ts b/src/main/ssh/orcad-runtime-maintenance.test.ts index ace1868b1645..c7f1ce3e3f08 100644 --- a/src/main/ssh/orcad-runtime-maintenance.test.ts +++ b/src/main/ssh/orcad-runtime-maintenance.test.ts @@ -37,7 +37,9 @@ vi.mock('./orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.reso vi.mock('./orcad-terminal-census-client', () => ({ collectManagedTerminalCensus: mocks.census })) vi.mock('./orcad-remote-deploy', () => ({ deployOrcad: mocks.deploy })) vi.mock('./orcad-remote-rollback', () => ({ rollbackOrcad: mocks.rollback })) -vi.mock('./orcad-activation-recovery', () => ({ recoverInterruptedOrcadActivation: mocks.recover })) +vi.mock('../managed-server/activation/orcad-activation-recovery', () => ({ + recoverInterruptedOrcadActivation: mocks.recover +})) vi.mock('./orcad-active-readiness', () => ({ probeActiveOrcadReadiness: mocks.probe })) vi.mock('./orcad-remote-build-hash', () => ({ readRemoteOrcadBuildHash: mocks.buildHash })) vi.mock('../orcad/orcad-artifact-materializer', () => ({ @@ -52,7 +54,7 @@ vi.mock('./orcad-managed-wake', () => ({ wakeStoppedManagedOrcad: mocks.wake })) vi.mock('./orcad-managed-migration-status', () => ({ findIncompleteManagedOrcadMigration: mocks.pendingMigration })) -vi.mock('./orcad-activation-transaction-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: async () => null })) diff --git a/src/main/ssh/orcad-runtime-maintenance.ts b/src/main/ssh/orcad-runtime-maintenance.ts index 452368413060..94a15135463f 100644 --- a/src/main/ssh/orcad-runtime-maintenance.ts +++ b/src/main/ssh/orcad-runtime-maintenance.ts @@ -17,7 +17,7 @@ import type { } from '../../shared/orcad-managed-runtime' import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' import type { ServeReadiness } from '../server/serve-readiness' -import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' +import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' import { probeActiveOrcadReadiness } from './orcad-active-readiness' import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' import { CURRENT_ORCAD_DAEMON_PROTOCOL } from './orcad-daemon-protocol-crossing' diff --git a/src/main/ssh/orcad-runtime-status.ts b/src/main/ssh/orcad-runtime-status.ts index 191a2e569be4..49c3391d86c2 100644 --- a/src/main/ssh/orcad-runtime-status.ts +++ b/src/main/ssh/orcad-runtime-status.ts @@ -1,7 +1,7 @@ import type { OrcadManagedRuntimeStatus } from '../../shared/orcad-managed-runtime' import { runTargetLifecycle } from '../ipc/ssh-target-lifecycle-queue' -import type { OrcadActivationTransaction } from './orcad-activation-transaction' -import { readOrcadActivationTransaction } from './orcad-activation-transaction-store' +import type { OrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction' +import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' import { requireManagedOrcadEnvironment, resolveLinkedOrcadContext diff --git a/src/main/ssh/orcad-state-mutation-exec.ts b/src/main/ssh/orcad-state-mutation-exec.ts index e9b1a1143ce2..ac5de59ef060 100644 --- a/src/main/ssh/orcad-state-mutation-exec.ts +++ b/src/main/ssh/orcad-state-mutation-exec.ts @@ -13,7 +13,10 @@ import { } from './orcad-state-snapshot-members' import type { OrcadRemoteExecTarget } from './orcad-remote-runtime-control' import { execCommand, isUnconfirmedSshCommandTermination } from './remote-exec-command' -import { isOrcadFenceLost, OrcadFenceLostError } from './orcad-activation-fence-scope' +import { + isOrcadFenceLost, + OrcadFenceLostError +} from '../managed-server/activation/orcad-activation-fence-scope' // Longer than the host's own deadline, so the host kills the work before the client gives up. export const ORCAD_STATE_MUTATION_CLIENT_TIMEOUT_MS = diff --git a/src/main/ssh/orcad-state-mutation-fence-heartbeat.test.ts b/src/main/ssh/orcad-state-mutation-fence-heartbeat.test.ts index 7804f4e33d57..1489fed011c4 100644 --- a/src/main/ssh/orcad-state-mutation-fence-heartbeat.test.ts +++ b/src/main/ssh/orcad-state-mutation-fence-heartbeat.test.ts @@ -16,9 +16,9 @@ import { join } from 'node:path' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { runProcess, spawnProcess } from '@orca/process-host' import { RELAY_INSTALL_LOCK_NAME } from '../../shared/relay-install-lock-name' -import { ORCAD_ACTIVATION_TRANSACTION_DIRNAME } from './orcad-activation-transaction' +import { ORCAD_ACTIVATION_TRANSACTION_DIRNAME } from '../managed-server/activation/orcad-activation-transaction' import { serializedStateMutationCommand } from './orcad-state-snapshot' -import { ORCAD_FENCE_OWNER_FILENAME } from './orcad-activation-fence-scope' +import { ORCAD_FENCE_OWNER_FILENAME } from '../managed-server/activation/orcad-activation-fence-scope' import { tryStealInstallLockCommand } from './remote-install-lock-commands' import { getRemoteHostPlatform } from './ssh-remote-platform' diff --git a/src/main/ssh/orcad-state-mutation-timeout.test.ts b/src/main/ssh/orcad-state-mutation-timeout.test.ts index 991831858f3f..714b473017ae 100644 --- a/src/main/ssh/orcad-state-mutation-timeout.test.ts +++ b/src/main/ssh/orcad-state-mutation-timeout.test.ts @@ -42,10 +42,15 @@ import { acquireInstallLock } from './remote-install-lock' import { writeAtomicOrcadRemoteRecord } from './orcad-remote-record-file' import { deployOrcad } from './orcad-remote-deploy' import { rollbackOrcad } from './orcad-remote-rollback' -import { recoverInterruptedOrcadActivation } from './orcad-activation-recovery' +import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' import { getRemoteHostPlatform } from './ssh-remote-platform' import type { OrcadHostTransport } from './orcad-host-transport' -import { BUILD_HASH, FakeOrcadHost, NEW, OLD } from './orcad-activation-host-test-harness' +import { + BUILD_HASH, + FakeOrcadHost, + NEW, + OLD +} from '../managed-server/activation/orcad-activation-host-test-harness' import { isSnapshotCaptureCommand } from './orcad-snapshot-capture-command' let host = new FakeOrcadHost() diff --git a/src/main/ssh/orcad-state-snapshot.ts b/src/main/ssh/orcad-state-snapshot.ts index b52f2fdfa53c..375dff84e3d8 100644 --- a/src/main/ssh/orcad-state-snapshot.ts +++ b/src/main/ssh/orcad-state-snapshot.ts @@ -22,7 +22,7 @@ import { posixOrcadFenceGuard, posixOrcadFenceOwnedTest, type OrcadFence -} from './orcad-activation-fence-scope' +} from '../managed-server/activation/orcad-activation-fence-scope' import { shellEscape } from './ssh-connection-utils' import { isWindowsRemoteHost, joinRemotePath, type RemoteHostPlatform } from './ssh-remote-platform' import type { OrcadWindowsHostStateOp } from './orcad-windows-host-state-ops' diff --git a/src/main/ssh/orcad-terminal-census-client.test.ts b/src/main/ssh/orcad-terminal-census-client.test.ts index 8ed563ad120d..894f7c17e88b 100644 --- a/src/main/ssh/orcad-terminal-census-client.test.ts +++ b/src/main/ssh/orcad-terminal-census-client.test.ts @@ -4,7 +4,10 @@ import { createEnvironmentFromPairingOffer, type KnownRuntimeEnvironment } from '../../shared/runtime-environments' -import { emptyOrcadActivationRecord, type OrcadActivationRecord } from './orcad-activation-record' +import { + emptyOrcadActivationRecord, + type OrcadActivationRecord +} from '../managed-server/activation/orcad-activation-record' const mocks = vi.hoisted(() => ({ send: vi.fn(), ensure: vi.fn(), verify: vi.fn() })) vi.mock('../../shared/remote-runtime-client', () => ({ diff --git a/src/main/ssh/orcad-terminal-census-client.ts b/src/main/ssh/orcad-terminal-census-client.ts index fd5547bf0d24..4a0520df2cfa 100644 --- a/src/main/ssh/orcad-terminal-census-client.ts +++ b/src/main/ssh/orcad-terminal-census-client.ts @@ -15,7 +15,7 @@ import { type OrcadTerminalCensus } from '../../shared/orcad-terminal-census' import { sendRemoteRuntimeRequestWithStatusPreflight } from '../../shared/remote-runtime-client' -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { ensureOrcadManagedTunnel } from './orcad-managed-tunnel' import { verifyOrcadManagedServing } from './orcad-managed-serving-verify' diff --git a/src/main/ssh/orcad-transaction-incumbent.ts b/src/main/ssh/orcad-transaction-incumbent.ts index 58de1500a79b..5377dc1fa0b7 100644 --- a/src/main/ssh/orcad-transaction-incumbent.ts +++ b/src/main/ssh/orcad-transaction-incumbent.ts @@ -1,6 +1,6 @@ /** The incumbent slot across a journaled activation or rollback: stop it, then put it back. */ -import type { OrcadActivationLockControl } from './orcad-activation-lock' -import type { OrcadSnapshotVerdict } from './orcad-activation-transaction' +import type { OrcadActivationLockControl } from '../managed-server/activation/orcad-activation-lock' +import type { OrcadSnapshotVerdict } from '../managed-server/activation/orcad-activation-transaction' import { orcadStopFreedTheHost } from './orcad-remote-process-control' import { withoutAbortSignal } from './orcad-remote-runtime-control' import { diff --git a/src/main/ssh/orcad-unreachable-setup-release.ts b/src/main/ssh/orcad-unreachable-setup-release.ts index 7a397c5f5350..199b9254fa6e 100644 --- a/src/main/ssh/orcad-unreachable-setup-release.ts +++ b/src/main/ssh/orcad-unreachable-setup-release.ts @@ -11,12 +11,12 @@ import { findOrcadMigrationSourceCutoverForTarget } from './orcad-migration-cuto import { releaseUndeployedMigrationFence } from './orcad-migration-source-fence' import { closeOrcadManagedTunnel } from './orcad-managed-tunnel' import type { SshTargetOrcadClaims } from './ssh-target-orcad-claims' -import { withOrcadActivationLock } from './orcad-activation-lock' -import { withDeactivatedVersionCommitted } from './orcad-activation-record' +import { withOrcadActivationLock } from '../managed-server/activation/orcad-activation-lock' +import { withDeactivatedVersionCommitted } from '../managed-server/activation/orcad-activation-record' import { readOrcadActivationRecord, writeOrcadActivationRecord -} from './orcad-activation-record-store' +} from '../managed-server/activation/orcad-activation-record-store' import { managedOrcadSlot } from './orcad-managed-runtime-context' import { resolveOrcadRemoteContext } from './orcad-remote-context' import { orcadStopFreedTheHost } from './orcad-remote-process-control' diff --git a/src/main/ssh/orcad-unreachable-setup-stop.test.ts b/src/main/ssh/orcad-unreachable-setup-stop.test.ts index 4d38ca4a3151..3f3cb67ba830 100644 --- a/src/main/ssh/orcad-unreachable-setup-stop.test.ts +++ b/src/main/ssh/orcad-unreachable-setup-stop.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { emptyOrcadActivationRecord } from './orcad-activation-record' +import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' const mocks = vi.hoisted(() => { const record: { active: string | null } = { active: '1.0.0+a' } @@ -32,10 +32,10 @@ vi.mock('./orcad-remote-context', () => ({ userDataDir: '/home/u/.orca' }) })) -vi.mock('./orcad-activation-lock', () => ({ +vi.mock('../managed-server/activation/orcad-activation-lock', () => ({ withOrcadActivationLock: async (_options: unknown, run: () => Promise) => run() })) -vi.mock('./orcad-activation-record-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: async () => ({ ...emptyOrcadActivationRecord(), active: mocks.record.active diff --git a/src/main/ssh/orcad-update-plan.test.ts b/src/main/ssh/orcad-update-plan.test.ts index daa2014a016f..c518c0b3251d 100644 --- a/src/main/ssh/orcad-update-plan.test.ts +++ b/src/main/ssh/orcad-update-plan.test.ts @@ -7,7 +7,7 @@ import { emptyOrcadActivationRecord, type OrcadActivationRecord, type OrcadStateSnapshot -} from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' const PROTOCOL = { protocolVersion: 3, previousProtocolVersions: [1, 2] } diff --git a/src/main/ssh/orcad-update-plan.ts b/src/main/ssh/orcad-update-plan.ts index 9e23f23b1a26..77ea8fa2b3b4 100644 --- a/src/main/ssh/orcad-update-plan.ts +++ b/src/main/ssh/orcad-update-plan.ts @@ -18,7 +18,7 @@ * has no answer that can be computed. That is why rollback is defined against a * pre-activation snapshot rather than against a version comparison. */ -import type { OrcadActivationRecord } from './orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import type { OrcadTerminalCensus } from '../../shared/orcad-terminal-census' import { assessOrcadLiveDaemonCrossing, diff --git a/src/main/ssh/orcad-windows-host-fence-ops.test.ts b/src/main/ssh/orcad-windows-host-fence-ops.test.ts index 493af30a7bf4..64324f0933ee 100644 --- a/src/main/ssh/orcad-windows-host-fence-ops.test.ts +++ b/src/main/ssh/orcad-windows-host-fence-ops.test.ts @@ -12,7 +12,10 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' import { runProcess, spawnProcess } from '@orca/process-host' -import { ORCAD_FENCE_LOST_EXIT, ORCAD_FENCE_LOST_MARKER } from './orcad-activation-fence-scope' +import { + ORCAD_FENCE_LOST_EXIT, + ORCAD_FENCE_LOST_MARKER +} from '../managed-server/activation/orcad-activation-fence-scope' import { ORCAD_WINDOWS_HOST_SCRIPT } from './orcad-windows-host-script' const dirs: string[] = [] diff --git a/src/main/ssh/orcad-windows-host-fence-ops.ts b/src/main/ssh/orcad-windows-host-fence-ops.ts index c794daced6e4..f9be88892712 100644 --- a/src/main/ssh/orcad-windows-host-fence-ops.ts +++ b/src/main/ssh/orcad-windows-host-fence-ops.ts @@ -7,7 +7,7 @@ import { ORCAD_FENCE_LOST_EXIT, ORCAD_FENCE_LOST_MARKER, ORCAD_FENCE_OWNER_FILENAME -} from './orcad-activation-fence-scope' +} from '../managed-server/activation/orcad-activation-fence-scope' import { ORCAD_EXITED_OWN_LOCK_QUIET_SECONDS } from './orcad-state-snapshot-members' export const ORCAD_WINDOWS_FENCE_ARG = '--fence' diff --git a/src/main/ssh/orcad-windows-host-lane.test.ts b/src/main/ssh/orcad-windows-host-lane.test.ts index df02ed2fea0f..71657082614c 100644 --- a/src/main/ssh/orcad-windows-host-lane.test.ts +++ b/src/main/ssh/orcad-windows-host-lane.test.ts @@ -23,7 +23,7 @@ import { deployOrcad } from './orcad-remote-deploy' import { orcadLivenessProbeCommand, parseOrcadLiveness } from './orcad-remote-launch' import { orcadSlotDir, type OrcadSlotOptions } from './orcad-recovery-slot' import { decommissionRemoteOrcad } from './orcad-remote-decommission' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { gcOldOrcadVersions } from './orcad-remote-gc' import { execOrcadRemote } from './orcad-remote-runtime-control' import { orcadWindowsNodeCommandLine } from './orcad-remote-windows-node' diff --git a/src/main/ssh/orcad-windows-host-state-ops.ts b/src/main/ssh/orcad-windows-host-state-ops.ts index be4e962c5d90..51367fdb62ec 100644 --- a/src/main/ssh/orcad-windows-host-state-ops.ts +++ b/src/main/ssh/orcad-windows-host-state-ops.ts @@ -12,7 +12,10 @@ import { PRIMARY_RUNTIME_METADATA_FILE } from '../../shared/runtime-bootstrap' import { ORCAD_LOCK_FILE_NAME } from '../orcad/orcad-instance-lock' import { ORCAD_WINDOWS_PROCESS_TREE_FILENAME } from '../../shared/orcad-artifacts' import { ORCAD_INSTALL_MODEL } from './remote-install-model' -import { ORCAD_FENCE_LOST_EXIT, ORCAD_FENCE_LOST_MARKER } from './orcad-activation-fence-scope' +import { + ORCAD_FENCE_LOST_EXIT, + ORCAD_FENCE_LOST_MARKER +} from '../managed-server/activation/orcad-activation-fence-scope' import { ORCAD_SNAPSHOT_MEMBERS, ORCAD_STATE_MUTATION_BUSY, diff --git a/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts b/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts index dbef2aed6fa1..ff82110f7258 100644 --- a/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts +++ b/src/main/ssh/ssh-host-server-on-connect-stopped-elsewhere.test.ts @@ -5,7 +5,7 @@ import { withDeactivatedVersion, withDeactivatedVersionCommitted, type OrcadActivationRecord -} from './orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' import { planManagedOrcadAutoUpdate } from './orcad-managed-auto-update' import { compareAppVersions } from '../../shared/app-version' import { diff --git a/src/main/ssh/ssh-hostile-host-managed-orcad.ts b/src/main/ssh/ssh-hostile-host-managed-orcad.ts index 513fe7c6b057..a9b54696d9c1 100644 --- a/src/main/ssh/ssh-hostile-host-managed-orcad.ts +++ b/src/main/ssh/ssh-hostile-host-managed-orcad.ts @@ -9,7 +9,7 @@ import { NODE_RUNTIME_ASSETS, pinnedNodeRuntimeAsset } from '../../shared/node-r import { ORCAD_MANAGED_REMOTE_PORT } from '../../shared/orcad-managed-runtime' import { ORCAD_RUNTIMES_DIRNAME } from '../../shared/orcad-artifacts' import type { SshTarget } from '../../shared/ssh-types' -import { readOrcadActivationRecord } from './orcad-activation-record-store' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { classifyOrcadHostUnavailable } from '../orcad/orcad-host-unavailable' import { managedOrcadSlot } from './orcad-managed-runtime-context' import { orcadSlotDir, type OrcadSlotOptions } from './orcad-recovery-slot' diff --git a/src/main/wsl/wsl-orcad-deploy.test.ts b/src/main/wsl/wsl-orcad-deploy.test.ts index a89ed0b3bf72..cdbb9ad172de 100644 --- a/src/main/wsl/wsl-orcad-deploy.test.ts +++ b/src/main/wsl/wsl-orcad-deploy.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import type { OrcadHostTransport } from '../ssh/orcad-host-transport' import type * as ManagedRuntimeContext from '../ssh/orcad-managed-runtime-context' import type * as RemoteVersionedInstall from '../ssh/remote-versioned-install' -import { emptyOrcadActivationRecord } from '../ssh/orcad-activation-record' +import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { getRemoteHostPlatform } from '../ssh/ssh-remote-platform' import type { WslDistroHolder } from './wsl-distro-holder' import type { WslOrcadHostTarget } from './wsl-orcad-host-target' @@ -21,7 +21,7 @@ const mocks = vi.hoisted(() => ({ localVersion: vi.fn(), readRecord: vi.fn() })) -vi.mock('../ssh/orcad-activation-record-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: mocks.readRecord })) vi.mock('../ssh/remote-versioned-install', async (importOriginal) => ({ @@ -35,7 +35,7 @@ vi.mock('../../shared/app-environment', () => ({ })) vi.mock('../ssh/remote-exec-command', () => ({ execCommand: mocks.exec })) vi.mock('../ssh/orcad-remote-context', () => ({ resolveOrcadRemoteContext: mocks.resolveContext })) -vi.mock('../ssh/orcad-activation-recovery', () => ({ +vi.mock('../managed-server/activation/orcad-activation-recovery', () => ({ recoverInterruptedOrcadActivation: mocks.recover })) vi.mock('../orcad/orcad-artifact-materializer', () => ({ diff --git a/src/main/wsl/wsl-orcad-deploy.ts b/src/main/wsl/wsl-orcad-deploy.ts index 32124d546d18..e67833c621e7 100644 --- a/src/main/wsl/wsl-orcad-deploy.ts +++ b/src/main/wsl/wsl-orcad-deploy.ts @@ -7,8 +7,8 @@ import { getAppEnvironment } from '../../shared/app-environment' import { ORCAD_MANAGED_REMOTE_PORT } from '../../shared/orcad-managed-runtime' import type { ServeReadiness } from '../server/serve-readiness' import type { WslHostDeferredUpdate } from '../../shared/wsl-host-types' -import { recoverInterruptedOrcadActivation } from '../ssh/orcad-activation-recovery' -import { readOrcadActivationRecord } from '../ssh/orcad-activation-record-store' +import { recoverInterruptedOrcadActivation } from '../managed-server/activation/orcad-activation-recovery' +import { readOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record-store' import { materializeOrcadArtifact } from '../orcad/orcad-artifact-materializer' import { OrcadHostUnsupportedError } from '../orcad/orcad-host-unavailable' import type { OrcadHostTransport } from '../ssh/orcad-host-transport' diff --git a/src/main/wsl/wsl-orcad-incumbent.test.ts b/src/main/wsl/wsl-orcad-incumbent.test.ts index 07e37ba0cd14..768e43327895 100644 --- a/src/main/wsl/wsl-orcad-incumbent.test.ts +++ b/src/main/wsl/wsl-orcad-incumbent.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest' import { encodePairingOffer } from '../../shared/pairing' -import { emptyOrcadActivationRecord } from '../ssh/orcad-activation-record' +import { emptyOrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import type { OrcadHostTransport } from '../ssh/orcad-host-transport' import type { OrcadRemoteContext } from '../ssh/orcad-remote-context' import type { ServeReadiness } from '../server/serve-readiness' diff --git a/src/main/wsl/wsl-orcad-instance-adoption.test.ts b/src/main/wsl/wsl-orcad-instance-adoption.test.ts index 253b20e0a06e..d531f1951a5f 100644 --- a/src/main/wsl/wsl-orcad-instance-adoption.test.ts +++ b/src/main/wsl/wsl-orcad-instance-adoption.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { emptyOrcadActivationRecord, type OrcadActivationRecord -} from '../ssh/orcad-activation-record' +} from '../managed-server/activation/orcad-activation-record' import type { OrcadSlotOptions } from '../ssh/orcad-recovery-slot' import { getRemoteHostPlatform } from '../ssh/ssh-remote-platform' @@ -70,7 +70,7 @@ vi.mock('../ssh/orcad-recovery-slot', () => ({ buildHash: host.slotBuildHash }) })) -vi.mock('../ssh/orcad-activation-gate', () => ({ +vi.mock('../managed-server/activation/orcad-activation-gate', () => ({ evaluateOrcadActivation: ( readiness: { health?: { buildHash?: string } } | null, expected: { buildHash: string } @@ -79,16 +79,16 @@ vi.mock('../ssh/orcad-activation-gate', () => ({ ? { decision: 'accept' } : { decision: 'reject', reason: 'its build does not match the installed slot.' } })) -vi.mock('../ssh/orcad-activation-record-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-record-store', () => ({ readOrcadActivationRecord: async () => host.record, writeOrcadActivationRecord: async (_slot: unknown, record: unknown) => { host.writes.push(record) } })) -vi.mock('../ssh/orcad-activation-transaction-store', () => ({ +vi.mock('../managed-server/activation/orcad-activation-transaction-store', () => ({ readOrcadActivationTransaction: async () => host.transaction })) -vi.mock('../ssh/orcad-activation-lock', () => ({ +vi.mock('../managed-server/activation/orcad-activation-lock', () => ({ withOrcadActivationLock: async ( _slot: unknown, run: () => Promise, diff --git a/src/main/wsl/wsl-orcad-instance-adoption.ts b/src/main/wsl/wsl-orcad-instance-adoption.ts index 76adab88c673..3b2d359907df 100644 --- a/src/main/wsl/wsl-orcad-instance-adoption.ts +++ b/src/main/wsl/wsl-orcad-instance-adoption.ts @@ -7,15 +7,15 @@ * the activation fence. A different version is then handled by the usual update gate. */ import { ORCAD_LOCK_FILE_NAME, parseOrcadInstanceLockRecord } from '../orcad/orcad-instance-lock' -import type { OrcadActivationRecord } from '../ssh/orcad-activation-record' +import type { OrcadActivationRecord } from '../managed-server/activation/orcad-activation-record' import { readOrcadActivationRecord, writeOrcadActivationRecord -} from '../ssh/orcad-activation-record-store' -import { evaluateOrcadActivation } from '../ssh/orcad-activation-gate' -import { withOrcadActivationLock } from '../ssh/orcad-activation-lock' -import { sameOrcadActivationRecord } from '../ssh/orcad-activation-transaction' -import { readOrcadActivationTransaction } from '../ssh/orcad-activation-transaction-store' +} from '../managed-server/activation/orcad-activation-record-store' +import { evaluateOrcadActivation } from '../managed-server/activation/orcad-activation-gate' +import { withOrcadActivationLock } from '../managed-server/activation/orcad-activation-lock' +import { sameOrcadActivationRecord } from '../managed-server/activation/orcad-activation-transaction' +import { readOrcadActivationTransaction } from '../managed-server/activation/orcad-activation-transaction-store' import { readRemoteOrcadManagedStopTarget } from '../ssh/orcad-managed-remote-stop' import { orcadSlotDir,