From 12baedf65647dfaa8085cfbfc336a045bda56427 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Mon, 19 Oct 2026 08:40:18 +0200 Subject: [PATCH] test(hosts): include relay coverage in existing CI contracts --- docs/connected-hosts.md | 2 +- packages/server/src/server/connected-hosts/hosts.e2e.test.ts | 4 +++- scripts/ci-workflow.test.mjs | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/connected-hosts.md b/docs/connected-hosts.md index b4b99f6616..28383be16b 100644 --- a/docs/connected-hosts.md +++ b/docs/connected-hosts.md @@ -7,7 +7,7 @@ or through `paseo.hosts`. Consumers select B by its learned `serverId`; manageme ## Ownership and authority -Credentials live in A's `hosts.json`, written atomically with mode `0600`. Discovery returns a safe +Credentials live in A's `hosts.json`, written atomically with mode `0600` on POSIX systems. Discovery returns a safe target description. Replacement inputs never come back through a read API. Keep this file private when collecting diagnostics or backing up daemon state. diff --git a/packages/server/src/server/connected-hosts/hosts.e2e.test.ts b/packages/server/src/server/connected-hosts/hosts.e2e.test.ts index e97efff9a5..5a29a195db 100644 --- a/packages/server/src/server/connected-hosts/hosts.e2e.test.ts +++ b/packages/server/src/server/connected-hosts/hosts.e2e.test.ts @@ -357,7 +357,9 @@ test("disabled host configuration and source survive a fresh daemon instance", a sourceKey: "stable", }); await paseo.hosts.update(host.registrationId, { enabled: false }); - expect((await stat(join(a.paseoHome, "hosts.json"))).mode & 0o777).toBe(0o600); + // Windows exposes inherited ACLs, not POSIX owner/group/other mode bits. + if (process.platform !== "win32") + expect((await stat(join(a.paseoHome, "hosts.json"))).mode & 0o777).toBe(0o600); await a.close(); const restarted = await createTestPaseoDaemon({ paseoHomeRoot: root, cleanup: false }); cleanup.push(() => restarted.close()); diff --git a/scripts/ci-workflow.test.mjs b/scripts/ci-workflow.test.mjs index 50d2ab448b..bd75bc4b16 100644 --- a/scripts/ci-workflow.test.mjs +++ b/scripts/ci-workflow.test.mjs @@ -475,7 +475,7 @@ test("Windows units and integration run independently with complete routed cover assert.doesNotMatch(invocations[0], / -t /); assert.equal( invocations[1], - 'vitest run --maxWorkers=1 src/server/daemon-e2e/git-operations.e2e.test.ts src/server/session.create-agent-worktree-autoarchive.e2e.test.ts src/server/agent/providers/opencode-bridge.local.e2e.test.ts src/server/daemon-e2e/relay-transport.e2e.test.ts -t "merges into|creates a worktree and auto-archives both|versioned runtime|oversized attachments"', + 'vitest run --maxWorkers=1 src/server/daemon-e2e/git-operations.e2e.test.ts src/server/session.create-agent-worktree-autoarchive.e2e.test.ts src/server/agent/providers/opencode-bridge.local.e2e.test.ts src/server/daemon-e2e/relay-transport.e2e.test.ts -t "merges into|creates a worktree and auto-archives both|versioned runtime|oversized attachments|connected hosts"', ); const serverConfig = readFileSync(new URL("packages/server/vitest.config.ts", repoRoot), "utf8"); assert.doesNotMatch(serverConfig, /maxWorkers/);