$ npx vitest run tests/authored-node-runtime.test.ts tests/babysitter-native-extension.test.ts tests/bundle.test.ts tests/canonical-software-factory.test.ts tests/cli-watch.test.ts tests/communication-mixed-resume.test.ts tests/hosted-base-snapshot.test.ts tests/hosted-extension-isolation.test.ts tests/hosted-extension-protocol.test.ts tests/mcp.test.ts tests/stop-process-group.test.ts tests/stuck-run-triage.test.ts tests/worker-cli.test.ts

 RUN  v2.1.9 /Users/khaliqgant/Projects/AgentWorkforce/flows/packages/sdk

 ❯ tests/hosted-base-snapshot.test.ts (18 tests | 15 failed | 1 skipped) 1008ms
   × hosted base private snapshot > shadows inherited thenables on completed snapshot authority 11ms
     → Hosted base source snapshotting requires Linux.
   × hosted base private snapshot > locks the inherited then slot before authored code can schedule a replacement 3ms
     → Hosted base source snapshotting requires Linux.
   × hosted base private snapshot > keeps the buffered base bytes when the live source changes 1ms
     → Hosted base source snapshotting requires Linux.
   × hosted base private snapshot > keeps source digests sensitive when ambient Array.map is poisoned 1ms
     → Hosted base source snapshotting requires Linux.
   × hosted base private snapshot > defines source entries without consulting inherited numeric setters 3ms
     → promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
   × hosted base private snapshot > uses the module-captured platform during source traversal 1ms
     → promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
   × hosted base private snapshot > shadows native directory arrays before promise resolution can substitute them 1ms
     → Hosted base source snapshotting requires Linux.
   × hosted base private snapshot > excludes project node_modules from the admitted generation 2ms
     → Hosted base source snapshotting requires Linux.
   × hosted base private snapshot > refuses an oversized source file before buffering its contents 4ms
     → expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }
   × hosted base private snapshot > captures conversion and allocation across declarations and source snapshots 5ms
     → expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }
   × hosted base private snapshot > keeps declaration and reviewed-base reads bound after builtin export synchronization 3ms
     → expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }
   × hosted base private snapshot > reads through captured descriptors and charges admitted descriptor sizes 4ms
     → promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
   × hosted base private snapshot > ignores inherited snapshot test hooks when production omits them 1ms
     → promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
   × hosted base private snapshot > bounds a file that grows after its admitted size was checked 1ms
     → expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }
   × hosted base private snapshot > stops streaming project entries at the shared count limit 961ms
     → expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }
 ❯ tests/hosted-extension-isolation.test.ts (22 tests | 12 failed | 3 skipped) 174ms
   × hosted extension capability isolation > resolves locked artifacts without importing extension top-level code 16ms
     → expected [ { …(6) } ] to deeply equal [ { …(6) } ]
   × hosted extension capability isolation > executes the exact capability-only handler for a queued receipt 27ms
     → hosted extension isolation requires Linux
   × hosted extension capability isolation > executes the exact capability-only handler for a duplicate receipt 9ms
     → hosted extension isolation requires Linux
   × hosted extension capability isolation > streams verified bytes when the live store is replaced and no writable staging path exists 17ms
     → promise rejected "Error: hosted extension isolation require… { code: '…' }" instead of resolving
   × hosted extension capability isolation > mounts pinned private Surface bytes when the live package changes before launch 15ms
     → promise rejected "Error: hosted extension isolation require… { code: '…' }" instead of resolving
   × hosted extension capability isolation > refuses oversized Surface files through the bounded descriptor reader 6ms
     → expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_unsupported', …(1) }
   × hosted extension capability isolation > shields verified Surface files before async settlement 5ms
     → promise rejected "Error: hosted extension isolation require… { code: '…' }" instead of resolving
   × hosted extension capability isolation > preserves a typed host refusal while disclosing only a fixed marker to the child 4ms
     → expected Error: hosted extension isolation require… { code: '…' } to be Error: private Cloud policy detail { code: '…' } // Object.is equality
   × hosted extension capability isolation > denies ambient credentials, host files, writes, network, subprocesses, and undeclared context verbs 7ms
     → hosted extension isolation requires Linux
   × hosted extension capability isolation > enforces OS address-space and data bounds on native Buffer allocation 3ms
     → expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_unsupported', …(1) }
   × hosted extension capability isolation > blocks extra handler fields and authority-bearing receipt fields at the parent port 3ms
     → expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension capability isolation > constructs adapter authority with the captured freeze intrinsic 3ms
     → hosted extension isolation requires Linux
 ❯ tests/babysitter-native-extension.test.ts (41 tests | 41 skipped) 681ms
 ❯ tests/authored-node-runtime.test.ts (14 tests | 14 skipped) 52ms
 ❯ tests/stuck-run-triage.test.ts (22 tests | 22 failed) 141ms
   × stuck-run-triage input validation > refuses an 8-character run-id prefix: Cloud has no prefix lookup 3ms
     → expected [Function] to throw error matching /not full Cloud run ids: c649fe14/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage input validation > refuses the whole batch when any id is invalid, rather than dropping it 1ms
     → expected [Function] to throw error matching /not full Cloud run ids: nope!/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage input validation > refuses an empty batch 0ms
     → expected [Function] to throw error matching /needs runIds/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage input validation > refuses a batch too large for the edge step lease 0ms
     → expected [Function] to throw error matching /exceeds the 8 that fit/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage input validation > accepts eight ids — the incident batch is inside the bound 3ms
     → promise rejected "TypeError: expected an @relayflows/surfac…" instead of resolving
   × stuck-run-triage apiUrl > refuses to send the Cloud bearer token to an unapproved origin 0ms
     → expected [Function] to throw error matching /refusing to send the Cloud bearer to…/\ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage apiUrl > refuses a non-URL apiUrl 0ms
     → expected [Function] to throw error matching /is not a URL/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage apiUrl > allows an approved origin and uses it in the curl 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage apiUrl > defaults to production Cloud 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage apiUrl > never publishes a run record the fetch did not produce 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage edge collection > names the Worker on every wrangler invocation 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage edge collection > accepts caller-supplied Workers and rejects option-shaped ones 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage edge collection > falls back when GNU timeout is absent, as it is on macOS 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage edge collection > runs the tails concurrently so wall time does not scale with the batch 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage edge collection > records wrangler's own exit status rather than head's 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage shell text > parses under both sh and bash 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage shell text > collects tails with no GNU timeout on PATH, as on a stock macOS 129ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage agents > declares read-only permissions on every agent 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage agents > tells the forensics agents their evidence is untrusted 0ms
     → expected an @relayflows/surface flow handle
   × stuck-run-triage fan-out > refuses a duplicate run id: two tails would share one evidence file 0ms
     → expected [Function] to throw error matching /duplicate runIds: c649fe14-0c2e-4e51-…/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage fan-out > refuses a duplicate Worker name for the same reason 0ms
     → expected [Function] to throw error matching /duplicate workers: w-one/ but got 'expected an @relayflows/surface flow …'
   × stuck-run-triage fan-out > bounds ids x workers, not just ids 0ms
     → expected [Function] to throw error matching /24 concurrent tails, over the 16/ but got 'expected an @relayflows/surface flow …'
 ❯ tests/canonical-software-factory.test.ts (3 tests | 3 failed) 57ms
   × canonical software-factory metadata contract > opens the actual catalog flow with the ticket title and exactly one GitHub closing line 35ms
     → expected an @relayflows/surface flow handle
   × canonical software-factory metadata contract > normalizes whitespace and caps the title at 240 Unicode code points 21ms
     → expected an @relayflows/surface flow handle
   × canonical software-factory metadata contract > fails closed before push when GitHub identity is missing or the final body duplicates its closing line 0ms
     → expected an @relayflows/surface flow handle
 ❯ tests/communication-mixed-resume.test.ts (1 test | 1 failed) 86ms
   × resumes mixed ordinary and linked agents through the real daemon without stealing peer capacity 86ms
     → {"ok":false,"command":"resume","resolutions":[],"diagnostics":[{"severity":"failure","kind":"protocol_error","message":"relayflowd could not complete the resume request: bad_request: unknown field `required_streams`, expected one of `worker_id`, `step_types`, `capacity`, `pins`"}],"runId":"01M36B92A5PSZYQ4AK0G5F51XC","socketPath":"/var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/relayflowd-1d0c651808a5.sock"}: expected { ok: false, command: 'resume', …(4) } to match object { status: 'completed', …(2) }
(6 matching properties omitted from actual)
 ✓ tests/bundle.test.ts (26 tests) 6547ms
   ✓ immutable bundles > verifies with --verify in any position and answers --json with one object 556ms
   ✓ immutable bundles > builds and verifies the canonical YAML fixture through the compiled CLI 845ms
   ✓ immutable bundles > emits the ephemeral warning on CLI stderr and uses the default output directory 491ms
   ✓ immutable bundles > builds a standalone TS fixture twice with identical executable hashes 2133ms
 ❯ tests/mcp.test.ts (30 tests | 4 skipped) 9628ms
   ✓ MCP preflight and transports > flows check refuses an undeclared server with exit 2 and no daemon 847ms
   ✓ MCP preflight and transports > flows check reports a refusing server and leaves no PID 645ms
   ✓ MCP preflight and transports > kills a SIGTERM-resistant silent child after a parent-owned handshake deadline 1332ms
   ✓ MCP preflight and transports > reaps a SIGTERM-resistant descendant with inherit stdio before cleanup finishes 1141ms
   ✓ MCP preflight and transports > reaps a SIGTERM-resistant descendant with ignore stdio before cleanup finishes 2074ms
   ✓ MCP preflight and transports > reports malformed connection configuration as config_invalid 422ms
 ✓ tests/cli-watch.test.ts (10 tests) 12012ms
   ✓ flows check --watch > rechecks syntax errors, clears once, and returns the last refusal on Ctrl-C 1066ms
   ✓ flows check --watch > streams JSON lines without ANSI, recovers after atomic saves, and exits zero after repair 1413ms
   ✓ flows check --watch > coalesces 20 concurrent saves into at most two rechecks 1456ms
   ✓ flows check --watch > watches transitive relative use imports, cycles, and nearest config changes 1732ms
   ✓ flows check --watch > refreshes the import graph and notices missing imports being created 1831ms
   ✓ flows check --watch > reloads authored TypeScript instead of reusing the first imported definition 1200ms
   ✓ flows check --watch > detects a nearer config appearing and falls back after it is deleted 1248ms
   ✓ flows check --watch > keeps watching after the target is deleted and recreated 1292ms
   ✓ flows check --watch > queues changes during a slow check without overlapping checks 772ms
 ✓ tests/stop-process-group.test.ts (9 tests) 15379ms
   ✓ every stop reaches the process group, not just the direct child > exits the run after an execution-timeout stop 1225ms
   ✓ every stop reaches the process group, not just the direct child > exits the run after a protocol terminate stop 1946ms
   ✓ every stop reaches the process group, not just the direct child > kills a SIGTERM-deaf grandchild after a protocol terminate stop 1790ms
   ✓ every stop reaches the process group, not just the direct child > kills a SIGTERM-deaf grandchild after an execution-timeout stop 2122ms
   ✓ every stop reaches the process group, not just the direct child > holds the loop open long enough for the escalation to run 1120ms
   ✓ every stop reaches the process group, not just the direct child > terminate() forces a group that outlives SIGTERM 303ms
   ✓ a wrapper that exits with no execution deadline still drains > reports the wrapper result and reaps a grandchild holding its pipes 777ms
   ✓ a wrapper that exits with no execution deadline still drains > reaps a SIGTERM-deaf grandchild holding its pipes 1727ms
   ✓ a wrapper that exits with no execution deadline still drains > settles on its own deadline when an escaped holder withholds close 4369ms
 ✓ tests/worker-cli.test.ts (18 tests) 24622ms
   ✓ registered CLI model defaults > passes the same priced Claude default to the real provider invocation 796ms
   ✓ step discovery environment > names the run, step, attempt and an absolute data dir for a direct agent spawn 636ms
   ✓ step discovery environment > exports none of the four without a data dir, even when the worker inherited them 427ms
   ✓ wrapper discovery environment > sets the four names from the dispatch and still refuses ambient values and other secrets 387ms
   ✓ wrapper discovery environment > exports none of the four to a wrapper without a data dir, even when the worker inherited them 338ms
   ✓ custom wrapper execution identity > passes an explicit safe environment at identification and execution 396ms
   ✓ custom wrapper execution identity > refuses a wrapper symlink retarget before delivering private values 392ms
   ✓ custom wrapper execution identity > bounds wrapper execution after acknowledgement 316ms
   ✓ custom wrapper execution identity > bounds captured wrapper output 304ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when a conforming wrapper leaks a stdio pipe to a background helper 1879ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when the leaked helper inherits stderr only 1881ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when a wrapper leaks a stdio pipe and exits before identifying 3430ms
   ✓ custom wrapper execution bounds are reader-owned > journals a completionReason at the default bound when a wrapper leaks a stdio pipe 11390ms
   ✓ custom wrapper execution bounds are reader-owned > accepts an execute token and an over-8KiB payload flushed in one write 379ms
   ✓ custom wrapper execution bounds are reader-owned > accepts the same over-8KiB payload whether or not it coalesces with the execute token 832ms
 ❯ tests/hosted-extension-protocol.test.ts (24 tests | 7 failed | 1 skipped) 40125ms
   × hosted extension hostile protocol > rejects an import-time different PR frame with zero adapter calls 10ms
     → expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension hostile protocol > rejects an import-time different delivery frame with zero adapter calls 4ms
     → expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension hostile protocol > rejects an import-time different event frame with zero adapter calls 4ms
     → expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension hostile protocol > rejects two forged calls after the authoritative first outcome settles 10006ms
     → hostile child did not invoke the adapter
   × hosted extension hostile protocol > waits for a pending adapter to reject after a forged child error 10003ms
     → hostile child did not invoke the adapter
   × hosted extension hostile protocol > waits for a pending adapter to resolve after a forged child error 10005ms
     → hostile child did not invoke the adapter
   × hosted extension hostile protocol > returns a typed adapter rejection even when the hostile child hangs 10009ms
     → hostile child did not invoke the adapter

⎯⎯⎯⎯⎯⎯ Failed Suites 3 ⎯⎯⎯⎯⎯⎯⎯

 FAIL  tests/authored-node-runtime.test.ts [ tests/authored-node-runtime.test.ts ]
AssertionError: expected '1.3.14' to be '1.4.0' // Object.is equality

Expected: "1.4.0"
Received: "1.3.14"

 ❯ tests/authored-node-runtime.test.ts:18:77
     16| 
     17| beforeAll(() => {
     18|   expect(spawnSync(bun, ['--version'], { encoding: 'utf8' }).stdout.tr…
       |                                                                             ^
     19|   expect(existsSync(daemon), 'build the current kernel or set RELAYFLO…
     20|   stage = mkdtempSync(join(tmpdir(), 'authored-standalone-build-'));

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/63]⎯

 FAIL  tests/babysitter-native-extension.test.ts [ tests/babysitter-native-extension.test.ts ]
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.createHostedBaseSnapshot src/hosted-base-snapshot.ts:126:23
 ❯ baseAt src/hosted-extension-runtime.ts:234:20
 ❯ Module.loadHostedExtensionRuntime src/hosted-extension-runtime.ts:90:16
 ❯ composed tests/babysitter-native-extension.test.ts:64:25
 ❯ tests/babysitter-native-extension.test.ts:100:37

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/63]⎯

 FAIL  tests/mcp.test.ts > authored MCP effects against the real kernel
Error: journal client: connect failed: connect ENOENT /var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/relayflowd-59cc00f3b2b2.sock
 ❯ Socket.onError src/journal-client.ts:102:16
    100|         socket.removeAllListeners();
    101|         this.failAll(err);
    102|         reject(new Error(`journal client: connect failed: ${err.messag…
       |                ^
    103|       };
    104|       socket.once('error', onError);

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/63]⎯

⎯⎯⎯⎯⎯⎯ Failed Tests 60 ⎯⎯⎯⎯⎯⎯⎯

 FAIL  tests/canonical-software-factory.test.ts > canonical software-factory metadata contract > opens the actual catalog flow with the ticket title and exactly one GitHub closing line
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ runCanonical tests/canonical-software-factory.test.ts:69:22
     67|   };
     68| 
     69|   const definition = getFlowDefinition(softwareFactory);
       |                      ^
     70|   return definition.body(context as never, { issue, approver: 'khaliq'…
     71|     root,
 ❯ tests/canonical-software-factory.test.ts:82:26

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/63]⎯

 FAIL  tests/canonical-software-factory.test.ts > canonical software-factory metadata contract > normalizes whitespace and caps the title at 240 Unicode code points
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ runCanonical tests/canonical-software-factory.test.ts:69:22
     67|   };
     68| 
     69|   const definition = getFlowDefinition(softwareFactory);
       |                      ^
     70|   return definition.body(context as never, { issue, approver: 'khaliq'…
     71|     root,
 ❯ tests/canonical-software-factory.test.ts:99:26

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/63]⎯

 FAIL  tests/canonical-software-factory.test.ts > canonical software-factory metadata contract > fails closed before push when GitHub identity is missing or the final body duplicates its closing line
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ tests/canonical-software-factory.test.ts:108:24
    106| 
    107|   it('fails closed before push when GitHub identity is missing or the …
    108|     const definition = getFlowDefinition(softwareFactory);
       |                        ^
    109|     const commands: string[] = [];
    110|     let completionReason = '';

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/63]⎯

 FAIL  tests/communication-mixed-resume.test.ts > resumes mixed ordinary and linked agents through the real daemon without stealing peer capacity
AssertionError: {"ok":false,"command":"resume","resolutions":[],"diagnostics":[{"severity":"failure","kind":"protocol_error","message":"relayflowd could not complete the resume request: bad_request: unknown field `required_streams`, expected one of `worker_id`, `step_types`, `capacity`, `pins`"}],"runId":"01M36B92A5PSZYQ4AK0G5F51XC","socketPath":"/var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/relayflowd-1d0c651808a5.sock"}: expected { ok: false, command: 'resume', …(4) } to match object { status: 'completed', …(2) }
(6 matching properties omitted from actual)

- Expected
+ Received

  Object {
-   "completedSteps": 4,
-   "completionReason": "success",
-   "status": "completed",
+   "command": "resume",
+   "diagnostics": Array [
+     Object {
+       "kind": "protocol_error",
+       "message": "relayflowd could not complete the resume request: bad_request: unknown field `required_streams`, expected one of `worker_id`, `step_types`, `capacity`, `pins`",
+       "severity": "failure",
+     },
+   ],
+   "ok": false,
+   "resolutions": Array [],
+   "runId": "01M36B92A5PSZYQ4AK0G5F51XC",
+   "socketPath": "/var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/relayflowd-1d0c651808a5.sock",
  }

 ❯ tests/communication-mixed-resume.test.ts:48:60
     46|     expect(parked.status).toBe('parked');
     47|     const resumed = await resumeFlow(parked.run_id, dataDir, { localAg…
     48|     expect(resumed.report, JSON.stringify(resumed.report)).toMatchObje…
       |                                                            ^
     49|     expect(state.started).toEqual(new Set(['a', 'b']));
     50|     const entries = (await client.journalRead(parked.run_id, 1)).entri…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > shadows inherited thenables on completed snapshot authority
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.createHostedBaseSnapshot src/hosted-base-snapshot.ts:126:23
 ❯ tests/hosted-base-snapshot.test.ts:33:22

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > locks the inherited then slot before authored code can schedule a replacement
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.createHostedBaseSnapshot src/hosted-base-snapshot.ts:126:23
 ❯ tests/hosted-base-snapshot.test.ts:58:22

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > keeps the buffered base bytes when the live source changes
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.createHostedBaseSnapshot src/hosted-base-snapshot.ts:126:23
 ❯ tests/hosted-base-snapshot.test.ts:65:22

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > keeps source digests sensitive when ambient Array.map is poisoned
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.hostedBaseSourceDigest src/hosted-base-snapshot.ts:166:29
 ❯ tests/hosted-base-snapshot.test.ts:78:26

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > defines source entries without consulting inherited numeric setters
AssertionError: promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
 ❯ tests/hosted-base-snapshot.test.ts:118:75
    116|         },
    117|       });
    118|       await expect(hostedBaseSourceDigest([{ root: project, prefix: ''…
       |                                                                           ^
    119|     } finally {
    120|       if (previous === undefined) delete (Array.prototype as unknown a…

Caused by: Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.hostedBaseSourceDigest src/hosted-base-snapshot.ts:166:29
 ❯ tests/hosted-base-snapshot.test.ts:118:20

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_source_invalid' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > uses the module-captured platform during source traversal
AssertionError: promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
 ❯ tests/hosted-base-snapshot.test.ts:142:75
    140|         },
    141|       });
    142|       await expect(hostedBaseSourceDigest([{ root: project, prefix: ''…
       |                                                                           ^
    143|     } finally {
    144|       Object.defineProperty(process, 'platform', descriptor);

Caused by: Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.hostedBaseSourceDigest src/hosted-base-snapshot.ts:166:29
 ❯ tests/hosted-base-snapshot.test.ts:142:20

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_source_invalid' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > shadows native directory arrays before promise resolution can substitute them
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.createHostedBaseSnapshot src/hosted-base-snapshot.ts:126:23
 ❯ tests/hosted-base-snapshot.test.ts:168:18

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > excludes project node_modules from the admitted generation
Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
    348| 
    349| function invalid(message: string): PluginError {
    350|   return new PluginError('plugin_source_invalid', message);
       |          ^
    351| }
    352| 
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.createHostedBaseSnapshot src/hosted-base-snapshot.ts:126:23
 ❯ tests/hosted-base-snapshot.test.ts:184:22

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > refuses an oversized source file before buffering its contents
AssertionError: expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_source_invalid",
-   "message": StringContaining "snapshot entry or byte limit",
  }

 ❯ tests/hosted-base-snapshot.test.ts:200:5
    198|     writeFileSync(oversized, '');
    199|     truncateSync(oversized, 64 * 1024 * 1024 + 1);
    200|     await expect(createHostedBaseSnapshot(flowPath)).rejects.toMatchOb…
       |     ^
    201|       code: 'plugin_source_invalid',
    202|       message: expect.stringContaining('snapshot entry or byte limit'),

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > captures conversion and allocation across declarations and source snapshots
AssertionError: expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_source_invalid",
-   "message": StringContaining "reviewed Software Factory base source",
  }

 ❯ tests/hosted-base-snapshot.test.ts:247:7
    245|         return allocUnsafe(size);
    246|       }) as typeof Buffer.allocUnsafe;
    247|       await expect(loadHostedExtensionRuntime(flowPath)).rejects.toMat…
       |       ^
    248|         code: 'plugin_source_invalid',
    249|         message: expect.stringContaining('reviewed Software Factory ba…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > keeps declaration and reviewed-base reads bound after builtin export synchronization
AssertionError: expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_source_invalid",
-   "message": StringContaining "reviewed Software Factory base source",
  }

 ❯ tests/hosted-base-snapshot.test.ts:321:7
    319|       }
    320|       syncBuiltinESMExports();
    321|       await expect(loadHostedExtensionRuntime(flowPath)).rejects.toMat…
       |       ^
    322|         code: 'plugin_source_invalid',
    323|         message: expect.stringContaining('reviewed Software Factory ba…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > reads through captured descriptors and charges admitted descriptor sizes
AssertionError: promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
 ❯ tests/hosted-base-snapshot.test.ts:380:75
    378|         },
    379|       });
    380|       await expect(hostedBaseSourceDigest([{ root: project, prefix: ''…
       |                                                                           ^
    381|     } finally {
    382|       fileHandlePrototype.read = fileHandleRead;

Caused by: Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.hostedBaseSourceDigest src/hosted-base-snapshot.ts:166:29
 ❯ tests/hosted-base-snapshot.test.ts:380:20

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_source_invalid' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > ignores inherited snapshot test hooks when production omits them
AssertionError: promise rejected "Error: Hosted base source snapshotting re… { code: '…' }" instead of resolving
 ❯ tests/hosted-base-snapshot.test.ts:403:75
    401|         });
    402|       }
    403|       await expect(hostedBaseSourceDigest([{ root: project, prefix: ''…
       |                                                                           ^
    404|     } finally {
    405|       for (let index = 0; index < names.length; index += 1) {

Caused by: Error: Hosted base source snapshotting requires Linux.
 ❯ invalid src/hosted-base-snapshot.ts:350:10
 ❯ readTree src/hosted-base-snapshot.ts:235:11
 ❯ readAuthorityFiles src/hosted-base-snapshot.ts:181:31
 ❯ Module.hostedBaseSourceDigest src/hosted-base-snapshot.ts:166:29
 ❯ tests/hosted-base-snapshot.test.ts:403:20

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_source_invalid' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > bounds a file that grows after its admitted size was checked
AssertionError: expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_source_invalid",
-   "message": StringContaining "changed while reading \"raced.bin\"",
  }

 ❯ tests/hosted-base-snapshot.test.ts:418:5
    416|     const raced = join(project, 'raced.bin');
    417|     writeFileSync(raced, 'small');
    418|     await expect(
       |     ^
    419|       hostedBaseSourceDigest([{ root: project, prefix: '' }], {
    420|         afterStat: async path => {

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/63]⎯

 FAIL  tests/hosted-base-snapshot.test.ts > hosted base private snapshot > stops streaming project entries at the shared count limit
AssertionError: expected Error: Hosted base source snapshotting re… { code: '…' } to match object { code: 'plugin_source_invalid', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_source_invalid",
-   "message": StringContaining "snapshot entry or byte limit",
  }

 ❯ tests/hosted-base-snapshot.test.ts:467:5
    465|       writeFileSync(join(project, `empty-${index}.txt`), '');
    466|     }
    467|     await expect(createHostedBaseSnapshot(flowPath)).rejects.toMatchOb…
       |     ^
    468|       code: 'plugin_source_invalid',
    469|       message: expect.stringContaining('snapshot entry or byte limit'),

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > resolves locked artifacts without importing extension top-level code
AssertionError: expected [ { …(6) } ] to deeply equal [ { …(6) } ]

- Expected
+ Received

  Array [
    Object {
      "digest": "b816d7a5647f967d5253cd481a86f5c6894f0952e4223db114185ef3193f9107",
-     "directory": "/var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/hosted-extension-test-9oxlGe/.flows/plugins/babysitter@sha256:b816d7a5647f967d5253cd481a86f5c6894f0952e4223db114185ef3193f9107",
+     "directory": "/private/var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/hosted-extension-test-9oxlGe/.flows/plugins/babysitter@sha256:b816d7a5647f967d5253cd481a86f5c6894f0952e4223db114185ef3193f9107",
      "manifestSha256": "5681622ac4930a1b9c7eda1736b52111e7ae8711c0a29eed0db00bb639fc7375",
      "name": "babysitter",
      "ref": "github:AgentWorkforce/flows@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#extensions/babysitter",
      "version": "0.2.0",
    },
  ]

 ❯ tests/hosted-extension-isolation.test.ts:159:70
    157|     const flowPath = join(root, 'software-factory.flow.ts');
    158|     writeFileSync(flowPath, 'export default {};');
    159|     expect((await loadHostedExtensionArtifacts(flowPath)).artifacts).t…
       |                                                                      ^
    160|     expect(() => readFileSync(marker)).toThrow();
    161|   });

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > executes the exact capability-only handler for a queued receipt
 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > executes the exact capability-only handler for a duplicate receipt
Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
    486| 
    487| function unsupported(message: string): never {
    488|   throw new PluginError('plugin_unsupported', message);
       |         ^
    489| }
    490| 
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-isolation.test.ts:221:26

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > streams verified bytes when the live store is replaced and no writable staging path exists
AssertionError: promise rejected "Error: hosted extension isolation require… { code: '…' }" instead of resolving
 ❯ tests/hosted-extension-isolation.test.ts:431:7
    429|         return { receiptId: 'receipt-1', status: 'queued' };
    430|       } },
    431|     })).resolves.toEqual({ completionReason: 'success', capabilityCall…
       |       ^
    432|     expect(calls).toBe(1);
    433|     expect(readFileSync(join(installed.directory, 'babysitter.flow.ts'…

Caused by: Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-isolation.test.ts:424:18

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > mounts pinned private Surface bytes when the live package changes before launch
AssertionError: promise rejected "Error: hosted extension isolation require… { code: '…' }" instead of resolving
 ❯ tests/hosted-extension-isolation.test.ts:456:7
    454|         return { receiptId: 'receipt-1', status: 'queued' };
    455|       } },
    456|     })).resolves.toEqual({ completionReason: 'success', capabilityCall…
       |       ^
    457|     expect(calls).toBe(1);
    458|     expect(readFileSync(join(surfaceRoot, 'dist/flow.js'), 'utf8')).to…

Caused by: Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-isolation.test.ts:443:18

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > refuses oversized Surface files through the bounded descriptor reader
AssertionError: expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_unsupported', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_unsupported",
-   "message": StringContaining "cannot read pinned Surface runtime flow.js",
  }

 ❯ tests/hosted-extension-isolation.test.ts:489:5
    487|     });
    488|     let calls = 0;
    489|     await expect(runVerifiedNativeExtensionSandbox({
       |     ^
    490|       artifact: await artifact(),
    491|       manifest: validateFlowExtensionManifest(manifest()),

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > shields verified Surface files before async settlement
AssertionError: promise rejected "Error: hosted extension isolation require… { code: '…' }" instead of resolving
 ❯ tests/hosted-extension-isolation.test.ts:532:9
    530|         surfaceRoot,
    531|         babysitterTurn: { queue: async () => ({ receiptId: 'receipt-1'…
    532|       })).resolves.toEqual({ completionReason: 'success', capabilityCa…
       |         ^
    533|     } finally {
    534|       if (previous === undefined) delete (Array.prototype as { then?: …

Caused by: Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-isolation.test.ts:525:20

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > preserves a typed host refusal while disclosing only a fixed marker to the child
AssertionError: expected Error: hosted extension isolation require… { code: '…' } to be Error: private Cloud policy detail { code: '…' } // Object.is equality

- Expected
+ Received

- [Error: private Cloud policy detail]
+ [Error: hosted extension isolation requires Linux]

 ❯ tests/hosted-extension-isolation.test.ts:560:5
    558|       provider: 'github', eventType: 'pull_request.labeled', deliveryI…
    559|     });
    560|     await expect(runVerifiedNativeExtensionSandbox({
       |     ^
    561|       artifact: await artifact(source), manifest: validateFlowExtensio…
    562|       babysitterTurn: { queue: async () => { throw refusal; } },

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > denies ambient credentials, host files, writes, network, subprocesses, and undeclared context verbs
Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
    486| 
    487| function unsupported(message: string): never {
    488|   throw new PluginError('plugin_unsupported', message);
       |         ^
    489| }
    490| 
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-isolation.test.ts:624:13

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > enforces OS address-space and data bounds on native Buffer allocation
AssertionError: expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_unsupported', …(1) }

- Expected
+ Received

- Object {
+ PluginError {
    "code": "plugin_unsupported",
-   "message": StringMatching /(?:Failed to allocate memory|Array buffer allocation failed)/u,
  }

 ❯ tests/hosted-extension-isolation.test.ts:646:5
    644|     });
    645|     let calls = 0;
    646|     await expect(runVerifiedNativeExtensionSandbox({
       |     ^
    647|       artifact: installed,
    648|       manifest: validateFlowExtensionManifest(manifest()),

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > blocks extra handler fields and authority-bearing receipt fields at the parent port
AssertionError: expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_event_unroutable' }

- Expected
+ Received

- Object {
-   "code": "plugin_event_unroutable",
+ PluginError {
+   "code": "plugin_unsupported",
  }

 ❯ tests/hosted-extension-isolation.test.ts:675:5
    673|     });
    674|     let calls = 0;
    675|     await expect(runVerifiedNativeExtensionSandbox({
       |     ^
    676|       artifact: await artifact(source), manifest: validateFlowExtensio…
    677|       babysitterTurn: { queue: async () => { calls += 1; return { rece…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/63]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > constructs adapter authority with the captured freeze intrinsic
Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
    486| 
    487| function unsupported(message: string): never {
    488|   throw new PluginError('plugin_unsupported', message);
       |         ^
    489| }
    490| 
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-isolation.test.ts:745:22

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/63]⎯

 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > rejects an import-time different PR frame with zero adapter calls
 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > rejects an import-time different delivery frame with zero adapter calls
 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > rejects an import-time different event frame with zero adapter calls
AssertionError: expected Error: hosted extension isolation require… { code: '…' } to match object { code: 'plugin_event_unroutable' }

- Expected
+ Received

- Object {
-   "code": "plugin_event_unroutable",
+ PluginError {
+   "code": "plugin_unsupported",
  }

 ❯ tests/hosted-extension-protocol.test.ts:430:5
    428|   ])('rejects an import-time %s frame with zero adapter calls', async …
    429|     let calls = 0;
    430|     await expect(runVerifiedNativeExtensionSandbox({
       |     ^
    431|       artifact: await artifact(hostileImport([frame, { type: 'error', …
    432|       manifest: validateFlowExtensionManifest(manifest()), dispatch: d…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/63]⎯

 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > rejects two forged calls after the authoritative first outcome settles
 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > waits for a pending adapter to reject after a forged child error
 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > waits for a pending adapter to resolve after a forged child error
 FAIL  tests/hosted-extension-protocol.test.ts > hosted extension hostile protocol > returns a typed adapter rejection even when the hostile child hangs
Error: hostile child did not invoke the adapter
 ❯ Timeout._onTimeout tests/hosted-extension-protocol.test.ts:118:45
    116| async function waitForInvocation(invoked: Promise<void>): Promise<void…
    117|   await new Promise<void>((resolve, reject) => {
    118|     const timeout = setTimeout(() => reject(new Error('hostile child d…
       |                                             ^
    119|     void invoked.then(() => { clearTimeout(timeout); resolve(); }, rej…
    120|   });

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage input validation > refuses an 8-character run-id prefix: Cloud has no prefix lookup
AssertionError: expected [Function] to throw error matching /not full Cloud run ids: c649fe14/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/not full Cloud run ids: c649fe14/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage input validation > refuses the whole batch when any id is invalid, rather than dropping it
AssertionError: expected [Function] to throw error matching /not full Cloud run ids: nope!/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/not full Cloud run ids: nope!/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage input validation > refuses an empty batch
AssertionError: expected [Function] to throw error matching /needs runIds/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/needs runIds/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage input validation > refuses a batch too large for the edge step lease
AssertionError: expected [Function] to throw error matching /exceeds the 8 that fit/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/exceeds the 8 that fit/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[39/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage input validation > accepts eight ids — the incident batch is inside the bound
AssertionError: promise rejected "TypeError: expected an @relayflows/surfac…" instead of resolving
 ❯ tests/stuck-run-triage.test.ts:62:40
     60|   it('accepts eight ids — the incident batch is inside the bound', asy…
     61|     const ids = Array.from({ length: 8 }, (_, i) => `${ID_A.slice(0, -…
     62|     await expect(drive({ runIds: ids })).resolves.toBeDefined();
       |                                        ^
     63|   });
     64| });

Caused by: TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
 ❯ tests/stuck-run-triage.test.ts:62:18

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[40/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage apiUrl > refuses to send the Cloud bearer token to an unapproved origin
AssertionError: expected [Function] to throw error matching /refusing to send the Cloud bearer to…/\ but got 'expected an @relayflows/surface flow …'

- Expected: 
/refusing to send the Cloud bearer token to https:\/\/evil\.example/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[41/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage apiUrl > refuses a non-URL apiUrl
AssertionError: expected [Function] to throw error matching /is not a URL/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/is not a URL/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[42/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage apiUrl > allows an approved origin and uses it in the curl
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:77:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[43/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage apiUrl > defaults to production Cloud
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:82:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[44/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage apiUrl > never publishes a run record the fetch did not produce
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:89:34

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[45/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage edge collection > names the Worker on every wrangler invocation
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:98:33

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[46/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage edge collection > accepts caller-supplied Workers and rejects option-shaped ones
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:107:33

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[47/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage edge collection > falls back when GNU timeout is absent, as it is on macOS
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:115:33

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[48/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage edge collection > runs the tails concurrently so wall time does not scale with the batch
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:123:33

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[49/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage edge collection > records wrangler's own exit status rather than head's
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:129:33

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[50/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage shell text > parses under both sh and bash
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:137:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[51/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage shell text > collects tails with no GNU timeout on PATH, as on a stock macOS
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:157:33

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[52/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage agents > declares read-only permissions on every agent
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:176:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[53/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage agents > tells the forensics agents their evidence is untrusted
TypeError: expected an @relayflows/surface flow handle
 ❯ Module.getFlowDefinition node_modules/@relayflows/surface/src/flow.ts:149:11
 ❯ drive tests/stuck-run-triage.test.ts:34:9
     32|     done: () => {},
     33|   };
     34|   await getFlowDefinition<StuckRunTriageInput>(triage).body(f as never…
       |         ^
     35|   return rec;
     36| }
 ❯ tests/stuck-run-triage.test.ts:182:23

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[54/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage fan-out > refuses a duplicate run id: two tails would share one evidence file
AssertionError: expected [Function] to throw error matching /duplicate runIds: c649fe14-0c2e-4e51-…/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/duplicate runIds: c649fe14-0c2e-4e51-9a6a-4f0d1b0f77aa/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[55/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage fan-out > refuses a duplicate Worker name for the same reason
AssertionError: expected [Function] to throw error matching /duplicate workers: w-one/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/duplicate workers: w-one/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[56/63]⎯

 FAIL  tests/stuck-run-triage.test.ts > stuck-run-triage fan-out > bounds ids x workers, not just ids
AssertionError: expected [Function] to throw error matching /24 concurrent tails, over the 16/ but got 'expected an @relayflows/surface flow …'

- Expected: 
/24 concurrent tails, over the 16/

+ Received: 
"expected an @relayflows/surface flow handle"

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[57/63]⎯

⎯⎯⎯⎯⎯⎯ Unhandled Errors ⎯⎯⎯⎯⎯⎯

Vitest caught 2 unhandled errors during the test run.
This might cause false positive tests. Resolve unhandled errors to make sure your tests are not affected.

⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
Error: hosted extension isolation requires Linux
 ❯ unsupported src/hosted-extension-sandbox.ts:488:9
    486| 
    487| function unsupported(message: string): never {
    488|   throw new PluginError('plugin_unsupported', message);
       |         ^
    489| }
    490| 
 ❯ Module.runHostedExtensionSandbox src/hosted-extension-sandbox.ts:155:44
 ❯ Module.runVerifiedNativeExtensionSandbox src/hosted-extension-isolation.ts:173:16
 ❯ tests/hosted-extension-protocol.test.ts:454:17
 ❯ node_modules/@vitest/runner/dist/index.js:533:5
 ❯ runTest node_modules/@vitest/runner/dist/index.js:1056:11
 ❯ runSuite node_modules/@vitest/runner/dist/index.js:1205:15
 ❯ runSuite node_modules/@vitest/runner/dist/index.js:1205:15
 ❯ runFiles node_modules/@vitest/runner/dist/index.js:1262:5
 ❯ startTests node_modules/@vitest/runner/dist/index.js:1271:3

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
This error originated in "tests/hosted-extension-protocol.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "rejects two forged calls after the authoritative first outcome settles". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯ Uncaught Exception ⎯⎯⎯⎯⎯
Error: spawn /Users/khaliqgant/Projects/AgentWorkforce/flows/kernel/target/release/relayflowd ENOENT
 ❯ Process.ChildProcess._handle.onexit node:internal/child_process:285:19
 ❯ onErrorNT node:internal/child_process:483:16
 ❯ processTicksAndRejections node:internal/process/task_queues:89:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'spawn /Users/khaliqgant/Projects/AgentWorkforce/flows/kernel/target/release/relayflowd', path: '/Users/khaliqgant/Projects/AgentWorkforce/flows/kernel/target/release/relayflowd', spawnargs: [ '--data-dir', '/var/folders/6d/0x5fkt8d01gfmmjdzkxqzwnh0000gn/T/flows-mcp-daemon-tMydRy', 'serve' ] }
This error originated in "tests/mcp.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "authored MCP effects against the real kernel". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

 Test Files  9 failed | 4 passed (13)
      Tests  60 failed | 114 passed | 64 skipped (238)
     Errors  2 errors
   Start at  22:19:35
   Duration  41.46s (transform 1.57s, setup 0ms, collect 6.50s, tests 110.51s, environment 1ms, prepare 578ms)

exit=1
