mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2026-10-27 07:52:03 +00:00
Record that the session agent does not run on Windows at all
The last Windows failure is not a test artefact. Four files die in beforeAll with `listen EACCES ... \agent.sock`: Node on Windows requires a named pipe (\\.\pipe\name) for server.listen(path), and a filesystem path is not a valid endpoint there. No `seedpass agent` means no held seeds, no tokens, no high-risk sessions and no sink delivery on Windows. Excluded in vitest.config.ts rather than skipped test by test, because the reason is one fact about the platform rather than a property of any individual test. Deliberately NOT fixed here. The agent's access control IS the socket's 0600 mode — the trust boundary is "only this user can connect", enforced by the filesystem — and named pipes have a different ACL model. Supporting Windows means answering what that 0600 was buying and how to buy it again, which is a security design decision and should be made rather than improvised at the end of a long session. Recorded in TODO.md as a shipping question now that TypeScript is to be the only implementation: either the agent gains a Windows transport, or the daemon is documented POSIX-only and the Windows CLI works without it. macOS is green. Windows now runs 219 of 332 with the agent suite excluded and the rest passing. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01Vtx94nXDmNgXEeThUZP4QN
This commit is contained in:
1 parent
bea89f1953
commit
269b869538
2 files changed
+46
No files matched your search
@@ -306,6 +306,28 @@ everything still open, in the order it should be tackled.
|
||||
loops so it can be tested without them. The second is the real
|
||||
work.
|
||||
(Recorded 2026-08-20.)
|
||||
- [ ] **THE SESSION AGENT DOES NOT RUN ON WINDOWS.** Found 2026-08-20,
|
||||
the first time the JavaScript suite executed there: four test
|
||||
files die in `beforeAll` with
|
||||
`listen EACCES ... \agent.sock`. Node on Windows requires a named
|
||||
pipe (`\\.\pipe\name`) for `server.listen(path)`; a filesystem
|
||||
path is not a valid endpoint. Nothing about the daemon works
|
||||
there — no `seedpass agent`, so no held seeds, no tokens, no
|
||||
high-risk sessions, no sink delivery.
|
||||
|
||||
This is not a path substitution. The agent's ACCESS CONTROL is the
|
||||
socket's 0600 mode: the trust boundary is "only this user can
|
||||
connect", enforced by the filesystem. Named pipes have their own
|
||||
ACL model, so supporting Windows means answering what the 0600
|
||||
was buying and how to buy it again — a security design question,
|
||||
and it should be decided rather than improvised.
|
||||
|
||||
Until then the four files are excluded on Windows in
|
||||
js/packages/cli/vitest.config.ts, with the reason written there.
|
||||
With TypeScript becoming the only implementation this is a
|
||||
shipping decision: either the agent gains a Windows transport, or
|
||||
SeedPass documents the daemon as POSIX-only and the Windows CLI
|
||||
works without it.
|
||||
- [ ] **Are vault files protected from other users on Windows?**
|
||||
SCOPE GREW 2026-08-20: this is no longer two Python tests. When
|
||||
the JavaScript suite first ran on Windows, eight more `0600`
|
||||
|
||||
@@ -1,4 +1,27 @@
|
||||
import { defineConfig } from "vitest/config";
|
||||
import process from "node:process";
|
||||
|
||||
/**
|
||||
* The agent's transport is a Unix domain socket at a filesystem path, and its
|
||||
* access control IS the socket's 0600 mode. Node on Windows wants a named
|
||||
* pipe (`\\\\.\\pipe\\name`) for `server.listen(path)`, so a path like
|
||||
* `C:\...\agent.sock` fails with EACCES before a single assertion runs —
|
||||
* these four files die in beforeAll.
|
||||
*
|
||||
* Excluded here rather than skipped test by test, because the reason is one
|
||||
* fact about the platform and not a property of any individual test: the
|
||||
* session daemon does not run on Windows today. That is a real gap in a
|
||||
* product about to ship TypeScript as its only implementation, and it is
|
||||
* recorded in TODO.md — supporting it needs a named-pipe transport AND a
|
||||
* Windows answer to what 0600 on the socket was buying, which is a security
|
||||
* design question rather than a path substitution.
|
||||
*/
|
||||
const AGENT_TESTS = [
|
||||
"test/agentSecurity.test.ts",
|
||||
"test/tokens.test.ts",
|
||||
"test/highRisk.test.ts",
|
||||
"test/profiles.test.ts",
|
||||
];
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
@@ -7,5 +30,6 @@ export default defineConfig({
|
||||
// comfortably exceeds the 5s default once several files run in parallel.
|
||||
testTimeout: 60_000,
|
||||
hookTimeout: 60_000,
|
||||
...(process.platform === "win32" ? { exclude: ["**/node_modules/**", ...AGENT_TESTS] } : {}),
|
||||
},
|
||||
});
|
||||
Reference in new issue
Block a user