$ cd packages/sdk && PATH=/home/daytona/.cargo/bin:$PATH RELAYFLOWD_BIN=/home/daytona/.relayflows-toolchain/target/2962130851/debug/relayflowd npm test

> @relayflows/sdk@2.0.29 test
> sh scripts/test.sh


> @relayflows/sdk@2.0.29 test:prep
> ( cd ../../kernel && sh ../ops/cargo.sh build ) && ( [ ! -d ../../testdata/preflight ] || find ../../testdata/preflight -name '*-cli' -type f -exec chmod +x {} + )

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.07s

> @relayflows/sdk@2.0.29 typecheck
> tsc --noEmit && tsc -p tsconfig.type-tests.json


> @relayflows/sdk@2.0.29 build
> tsc && node scripts/make-cli-executable.mjs


> @relayflows/sdk@2.0.29 typecheck:tests
> tsc -p tsconfig.tests.json


 RUN  v2.1.9 /home/daytona/.relayflow-v2-supervisor/durable/repository/packages/sdk

stdout | tests/live-kernel.test.ts
LIVE_KERNEL relayflowd=/home/daytona/.relayflows-toolchain/target/2962130851/debug/relayflowd
LIVE_KERNEL flows=/home/daytona/.relayflow-v2-supervisor/durable/repository/packages/sdk/dist/cli.js

 ✓ tests/preflight.test.ts (67 tests) 106ms
 ✓ tests/cloud-read.test.ts (41 tests) 48ms
 ✓ tests/cli.test.ts (70 tests) 1661ms
   ✓ flows check CLI > binds a checked relative wrapper to the flow directory for worker execution 429ms
   ✓ flows check CLI > resolves a bare PATH-resolved claude with no declared model, in an isolated PATH 411ms
 ✓ tests/cloud-sync.test.ts (40 tests) 770ms
 ✓ tests/plugin-extension.test.ts (90 tests) 438ms
 ✓ tests/cloud-transcript-codex.test.ts (39 tests) 17ms
 ✓ tests/observer-link.test.ts (39 tests) 135ms
 ❯ tests/hosted-extension-isolation.test.ts (22 tests | 13 failed) 3960ms
   × hosted extension capability isolation > executes the exact capability-only handler for a queued receipt 207ms
     → Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

   × hosted extension capability isolation > executes the exact capability-only handler for a duplicate receipt 212ms
     → Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

   × hosted extension capability isolation > launches through the captured process primitive after builtin export synchronization 221ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   × hosted extension capability isolation > ignores inherited launcher overrides and decodes manifests with the captured Buffer intrinsic 217ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   × hosted extension capability isolation > streams verified bytes when the live store is replaced and no writable staging path exists 239ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   × hosted extension capability isolation > mounts pinned private Surface bytes when the live package changes before launch 217ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   × hosted extension capability isolation > shields verified Surface files before async settlement 240ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   × hosted extension capability isolation > preserves a typed host refusal while disclosing only a fixed marker to the child 221ms
     → expected Error: Hosted extension sandbox exited wi… { 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 214ms
     → Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

   × hosted extension capability isolation > enforces OS address-space and data bounds on native Buffer allocation 214ms
     → expected Error: Hosted extension sandbox exited wi… { 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 223ms
     → expected Error: Hosted extension sandbox exited wi… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension capability isolation > constructs adapter authority with the captured freeze intrinsic 218ms
     → Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

   × hosted extension capability isolation > writes the Surface manifest and protocol without inherited toJSON behavior 299ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   ✓ hosted extension capability isolation > fails closed when the handler omits or repeats the single capability call 690ms
(node:35128) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
 ✓ tests/authored-flow.test.ts (34 tests) 766ms
 ✓ tests/agent-transcript.test.ts (29 tests) 255ms
 ✓ tests/cli-status.test.ts (27 tests) 983ms
   ✓ flows status > resolves the run with no arguments from inside a worker-spawned agent 769ms
 ✓ tests/cloud-run.test.ts (58 tests) 731ms
 ❯ tests/babysitter-native-extension.test.ts (41 tests | 1 failed) 1886ms
   × native Babysitter extension > runs the exact published 2.0.26 native bytes in the isolated capability path 241ms
     → promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
   ✓ native Babysitter extension > checks the reviewed base pin with captured hash methods 308ms
 ✓ tests/relay-cli-surface.test.ts (75 tests) 35ms
 ✓ tests/worker-cli.test.ts (18 tests) 25258ms
   ✓ registered CLI model defaults > passes the same priced Claude default to the real provider invocation 408ms
   ✓ step discovery environment > names the run, step, attempt and an absolute data dir for a direct agent spawn 418ms
   ✓ step discovery environment > exports none of the four without a data dir, even when the worker inherited them 443ms
   ✓ wrapper discovery environment > sets the four names from the dispatch and still refuses ambient values and other secrets 417ms
   ✓ wrapper discovery environment > exports none of the four to a wrapper without a data dir, even when the worker inherited them 430ms
   ✓ custom wrapper execution identity > passes an explicit safe environment at identification and execution 364ms
   ✓ custom wrapper execution identity > refuses a wrapper symlink retarget before delivering private values 383ms
   ✓ custom wrapper execution identity > bounds wrapper execution after acknowledgement 393ms
   ✓ custom wrapper execution identity > bounds captured wrapper output 403ms
   ✓ custom wrapper execution identity > refuses a duplicate execute protocol frame 364ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when a conforming wrapper leaks a stdio pipe to a background helper 1897ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when the leaked helper inherits stderr only 1945ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when a wrapper leaks a stdio pipe and exits before identifying 3573ms
   ✓ custom wrapper execution bounds are reader-owned > journals a completionReason at the default bound when a wrapper leaks a stdio pipe 11572ms
   ✓ custom wrapper execution bounds are reader-owned > accepts an execute token and an over-8KiB payload flushed in one write 366ms
   ✓ custom wrapper execution bounds are reader-owned > accepts the same over-8KiB payload whether or not it coalesces with the execute token 1153ms
   ✓ custom wrapper execution bounds are reader-owned > still bounds an un-terminated handshake buffer and names the bound 372ms
   ✓ delivers the journaled memory pack to the real wrapper and excludes its charge from completion usage 356ms
 ✓ tests/step-failure-diagnostic.test.ts (25 tests) 69ms
 ✓ tests/daemon-lifecycle.test.ts (42 tests) 46ms
 ✓ tests/stop-process-group.test.ts (9 tests) 12850ms
   ✓ every stop reaches the process group, not just the direct child > exits the run after an execution-timeout stop 789ms
   ✓ every stop reaches the process group, not just the direct child > exits the run after a protocol terminate stop 418ms
   ✓ every stop reaches the process group, not just the direct child > kills a SIGTERM-deaf grandchild after a protocol terminate stop 1668ms
   ✓ every stop reaches the process group, not just the direct child > kills a SIGTERM-deaf grandchild after an execution-timeout stop 2050ms
   ✓ every stop reaches the process group, not just the direct child > holds the loop open long enough for the escalation to run 1088ms
   ✓ a wrapper that exits with no execution deadline still drains > reports the wrapper result and reaps a grandchild holding its pipes 662ms
   ✓ a wrapper that exits with no execution deadline still drains > reaps a SIGTERM-deaf grandchild holding its pipes 1652ms
   ✓ a wrapper that exits with no execution deadline still drains > settles on its own deadline when an escaped holder withholds close 4265ms
 ✓ tests/run-state.test.ts (21 tests) 11ms
 ✓ tests/cloud-deploy.test.ts (40 tests) 989ms
stdout | tests/live-kernel.test.ts > surface resume after a real daemon kill > resumes a three-step run with each successful completion exactly once
LIVE_KERNEL kill -9 pid=36640 run=01M36CNPCDT7TPM6F097RN7VQS while step=two state=Running

 ✓ tests/hosted-base-snapshot.test.ts (18 tests) 1960ms
   ✓ hosted base private snapshot > stops streaming project entries at the shared count limit 1876ms
 ❯ tests/live-kernel.test.ts (31 tests | 8 failed) 53101ms
   ✓ built flows CLI against live relayflowd > twenty-six-step reuses 25 durable completions after editing the failed final step 2163ms
   ✓ built flows CLI against live relayflowd > runs rung (a), parks rung (b), and keeps JSON report-shaped 2858ms
   ✓ built flows CLI against live relayflowd > allows a deterministic run to exceed the bounded request timeout 32618ms
   ✓ built flows CLI against live relayflowd > follows a live worker dispatch through flows run 590ms
   ✓ built flows CLI against live relayflowd > runs an agent CLI end to end through the SDK worker 422ms
   ✓ built flows CLI against live relayflowd > f.agent lowers to a real agent step and dispatches through a live worker 541ms
   ✓ built flows CLI against live relayflowd > can always get a parked run to a late-attaching worker 5589ms
   ✓ built flows CLI against live relayflowd > reports a real manual-recovery NeedsHuman state as parked 457ms
   × built flows CLI against live relayflowd > runs hn-monitor analyze-story end-to-end via a stub agent CLI (gate 2 clause 2 demo) 434ms
     → expected { …(12) } to match object { output: { …(3) }, …(1) }
(22 matching properties omitted from actual)
   × built flows CLI against live relayflowd > hn-monitor analyze-story FAILS verification when the CLI omits required schema fields 392ms
     → expected { …(12) } to match object { …(3) }
(21 matching properties omitted from actual)
   × built flows CLI against live relayflowd > agent step preserves the CliResult wrapper as output when the CLI emits non-JSON text 416ms
     → expected null not to be null
   × built flows CLI against live relayflowd > AgentWorker exposes wake_context to the CLI via RELAYFLOW_WAKE_CONTEXT env var (real analyzer prerequisite) 703ms
     → Cannot read properties of null (reading 'story_title')
   × built flows CLI against live relayflowd > AgentWorker leaves RELAYFLOW_WAKE_CONTEXT UNSET when the run has no wake_context (undefined-vs-null pin) 398ms
     → Cannot read properties of null (reading 'env_present')
   ✓ built flows CLI against live relayflowd > AgentWorker passes a declared model to an identified wrapper as RELAYFLOW_MODEL 456ms
   ✓ built flows CLI against live relayflowd > AgentWorker refuses a nonconforming journal-submitted wrapper before exposing RELAYFLOW_MODEL 439ms
   ✓ built flows CLI against live relayflowd > AgentWorker executes the raw claude adapter with its real model flag 419ms
   ✓ built flows CLI against live relayflowd > AgentWorker executes the raw codex adapter with its real model flag 379ms
   × built flows CLI against live relayflowd > AgentWorker leaves RELAYFLOW_MODEL UNSET when the step declares no model 387ms
     → Cannot read properties of null (reading 'story_title')
   × built flows CLI against live relayflowd > hn-monitor analyze-story reaches done through the real Claude analyzer CLI 28ms
     → LIVE_ANALYZER_UNAVAILABLE: "/home/daytona/.relayflow-v2-supervisor/durable/repository/testdata/preflight/analyze-story-claude-cli" does not identify as relayflows-agent-cli-v1 — failing because gate-2 acceptance requires the real analyzer to execute. Set RELAYFLOWS_ALLOW_ANALYZER_SKIP=1 only if this run is not gate evidence.
   ✓ built flows CLI against live relayflowd > preflights before journaling and names an unreachable socket 826ms
   ✓ built flows CLI against live relayflowd > starts exactly one daemon when two runs race for one empty data dir 508ms
   ✓ surface resume after a real daemon kill > resumes a three-step run with each successful completion exactly once 902ms
   × a relayflow can be scheduled: tick source against live relayflowd > a tick spawns a real run whose step reports the SCHEDULED instant 451ms
     → expected null to deeply equal { schedule_id: 'heartbeat-1m', …(3) }
 ❯ tests/hosted-extension-protocol.test.ts (24 tests | 8 failed) 41948ms
   × hosted extension hostile protocol > uses captured JSON intrinsics for the complete parent boundary 221ms
     → Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

   × hosted extension hostile protocol > rejects an import-time different PR frame with zero adapter calls 222ms
     → expected Error: Hosted extension sandbox exited wi… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension hostile protocol > rejects an import-time different delivery frame with zero adapter calls 221ms
     → expected Error: Hosted extension sandbox exited wi… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension hostile protocol > rejects an import-time different event frame with zero adapter calls 219ms
     → expected Error: Hosted extension sandbox exited wi… { code: '…' } to match object { code: 'plugin_event_unroutable' }
   × hosted extension hostile protocol > rejects two forged calls after the authoritative first outcome settles 10148ms
     → hostile child did not invoke the adapter
   × hosted extension hostile protocol > waits for a pending adapter to reject after a forged child error 10142ms
     → hostile child did not invoke the adapter
   × hosted extension hostile protocol > waits for a pending adapter to resolve after a forged child error 10144ms
     → hostile child did not invoke the adapter
   × hosted extension hostile protocol > returns a typed adapter rejection even when the hostile child hangs 10142ms
     → hostile child did not invoke the adapter
 ✓ tests/journal-client.test.ts (17 tests) 79ms
 ✓ tests/authored-root.test.ts (13 tests) 154ms
 ✓ tests/cloud-connect.test.ts (24 tests) 3051ms
   ✓ hosted verbs connect before they submit > flows run --cloud submits once the prompt connected the integration 2128ms
 ✓ tests/flow-extension-compose.test.ts (22 tests) 3765ms
   ✓ composing flow extensions onto a base flow > composes two extensions in declaration order, and the order is the lockfile order 512ms
   ✓ composing flow extensions onto a base flow > flows check reports the composition and keeps the composed triggers deliverable 757ms
 ❯ tests/authored-node-runtime.test.ts (14 tests | 14 skipped) 12ms
 ✓ tests/close-pr-flow.test.ts (28 tests) 318ms
 ✓ tests/validate.test.ts (68 tests) 28ms
 ✓ tests/verb-field-lint.test.ts (96 tests) 312ms
 ✓ tests/bundle.test.ts (26 tests) 8708ms
   ✓ immutable bundles > returns exit 2 naming a byte-flipped payload and refuses to reuse corruption 389ms
   ✓ immutable bundles > verifies with --verify in any position and answers --json with one object 773ms
   ✓ immutable bundles > refuses --out with --verify rather than ignoring the destination 395ms
   ✓ immutable bundles > builds and verifies the canonical YAML fixture through the compiled CLI 1203ms
   ✓ immutable bundles > emits the ephemeral warning on CLI stderr and uses the default output directory 827ms
   ✓ immutable bundles > refuses build-provable CLI resolution errors without environment probes 390ms
   ✓ immutable bundles > builds a standalone TS fixture twice with identical executable hashes 2288ms
   ✓ immutable bundles > refuses to label installed dependency drift with lockfile pins 389ms
   ✓ immutable bundles > refuses invalid CLI arguments %j 406ms
   ✓ immutable bundles > refuses invalid CLI arguments "--out" 375ms
   ✓ immutable bundles > refuses invalid CLI arguments "--verify" 388ms
   ✓ immutable bundles > refuses invalid CLI arguments "--verify" 386ms
   ✓ immutable bundles > refuses invalid CLI arguments "--out" 375ms
 ✓ tests/tick-source.test.ts (33 tests) 27ms
 ✓ tests/authored-step-graph.test.ts (25 tests) 794ms
 ✓ tests/flow-executor-chain.test.ts (14 tests) 9500ms
   ✓ flow executor LLM and output-binding chain > runs f.llm -> f.agent -> f.run with schema-verified journal output and the exact allowed model 810ms
   ✓ flow executor LLM and output-binding chain > runs a dollar-budgeted authored Claude agent with the same default used by preflight 554ms
   ✓ flow executor LLM and output-binding chain > runs the exact authored flagship f.llm -> f.agent -> f.run path through the durable CLI root 1492ms
   ✓ flow executor LLM and output-binding chain > resumes an interrupted durable authored root without replaying completed flagship effects 3301ms
   ✓ flow executor LLM and output-binding chain > passes a declarative verified value through an agent into a deterministic artifact 635ms
   ✓ flow executor LLM and output-binding chain > flows run consumes YAML bindings and resume reuses the original journal output 1025ms
 ✓ tests/agent-relay-transport.test.ts (16 tests) 2217ms
   ✓ Relay completion at the journal boundary > does not complete at readiness and journals exact output, receipt, and priced accounting 1006ms
   ✓ Relay completion at the journal boundary > aborts polling on rejected renewal and never writes a stale completion 1002ms
 ✓ tests/authored-flow-lifecycle-executor.test.ts (27 tests) 579ms
 ✓ tests/pr-review-post.test.ts (21 tests) 2036ms
 ✓ tests/step-failure-excerpt.test.ts (42 tests) 194ms
 ✓ tests/authored-flow-slack.test.ts (7 tests) 1694ms
   ✓ authored Slack helper effects > replays after SIGKILL before confirm with the same token and one successful completion 561ms
   ✓ authored Slack helper effects > replays after SIGKILL before complete with the same token and one successful completion 547ms
 ✓ tests/mcp.test.ts (30 tests) 21251ms
   ✓ MCP preflight and transports > flows check refuses an undeclared server with exit 2 and no daemon 567ms
   ✓ MCP preflight and transports > flows check reports a refusing server and leaves no PID 626ms
   ✓ MCP preflight and transports > kills a SIGTERM-resistant silent child after a parent-owned handshake deadline 1312ms
   ✓ MCP preflight and transports > reaps a SIGTERM-resistant descendant with inherit stdio before cleanup finishes 1111ms
   ✓ MCP preflight and transports > reaps a SIGTERM-resistant descendant with ignore stdio before cleanup finishes 2062ms
   ✓ MCP preflight and transports > reports malformed connection configuration as config_invalid 587ms
   ✓ authored MCP effects against the real kernel > reports a dropped tool connection as a failed CLI run 14082ms
 ✓ tests/authored-step-index.test.ts (17 tests) 24ms
 ✓ tests/tick-runner.test.ts (22 tests) 2398ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms fractional as an invocation error 379ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms exponent notation as an invocation error 381ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms hex as an invocation error 378ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms trailing text as an invocation error 404ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms empty as an invocation error 381ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > accepts an exact integer and proceeds past parsing 391ms
(node:38832) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
 ✓ tests/gate-contract.test.ts (20 tests) 156ms
 ✓ tests/authored-node-result.test.ts (39 tests) 19ms
 ✓ tests/cli-replay.test.ts (37 tests) 1211ms
   ✓ flows replay > --json is byte-identical across two CLI invocations (diff) 788ms
 ✓ tests/authored-human.test.ts (13 tests) 83ms
 ✓ tests/wrapper-execution-duration.test.ts (7 tests) 10824ms
   ✓ keeps the handshake deadline independent of the removed execution deadline 10058ms
   ✓ still lets a lease abort stop an unlimited wrapper before it produces output 509ms
 ✓ tests/direct-input.test.ts (6 tests) 5572ms
   ✓ direct .flow.ts input through the built CLI and live runtime > returns exit 3 for an authored human handoff and persists its outcome 631ms
   ✓ direct .flow.ts input through the built CLI and live runtime > returns exit 1 for an authored step_failed verdict and persists its outcome 621ms
   ✓ direct .flow.ts input through the built CLI and live runtime > executes inline and file JSON input through relayflowd 1888ms
   ✓ direct .flow.ts input through the built CLI and live runtime > refuses missing and malformed input before contacting relayflowd 1512ms
   ✓ direct .flow.ts input through the built CLI and live runtime > does not run the authored body before daemon availability 517ms
   ✓ direct .flow.ts input through the built CLI and live runtime > refuses oversized file input before contacting relayflowd 402ms
 ✓ tests/cloud-schedule.test.ts (17 tests) 5188ms
   ✓ schedule lowering > marks a non-grid cron as Cloud-only rather than approximating it, with a silence budget from its own cadence 3027ms
   ✓ flows check prints declared schedules > shows the lowering for a fixed interval and the Cloud-only note for a real cron 1654ms
 ✓ tests/cli-hn-monitor.test.ts (16 tests) 95ms
 ✓ tests/authored-run-failure-evidence.test.ts (9 tests) 901ms
   ✓ the child index after the process that wrote it is gone > still names every child, with its own run id, after a daemon restart 519ms
 ✓ tests/daemon-lifecycle-live.test.ts (9 tests) 6736ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > cold start spawns exactly one daemon, the run succeeds, and the daemon outlives the CLI 610ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > polls, bounded, for a daemon that holds the lock before it binds 1403ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > attaches to a serving daemon that has not published a connection file 463ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > a second run attaches to the daemon the first one started, spawning nothing 877ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > detects a stale connection file left by a hard kill and starts a fresh daemon 942ms
   ✓ concurrent invocations against one empty data dir (§6 test 15) > ends with exactly one daemon owning the socket, and both runs succeed 1088ms
   ✓ refusals from a spawn that cannot produce a daemon > names relayflowd_not_found rather than falling through to PATH 400ms
   ✓ refusals from a spawn that cannot produce a daemon > names daemon_start_failed and quotes the daemon log when startup dies 507ms
   ✓ refusals from a spawn that cannot produce a daemon > refuses a daemon speaking another protocol version instead of binding over it 444ms
(node:39850) Warning: Transcript tail for run-9/analyze attempt 1 (stdout) could not be written; the step continues without it: EACCES: permission denied, mkdir '/tmp/transcript-tail-Nz5vPK/runs/run-9/steps'
(Use `node --trace-warnings ...` to show where the warning was created)
 ✓ tests/transcript-tail.test.ts (11 tests) 720ms
   ✓ direct agent spawn > tees stdout and stderr into tail files that name the dispatch 313ms
   ✓ direct agent spawn > completes the step when the tail directory cannot be created 325ms
 ✓ tests/authored-agent-artifacts.test.ts (4 tests) 400ms
 ✓ tests/authored-helpers.test.ts (6 tests) 3116ms
   ✓ runs every available provider through the real kernel and resumes completed effects without a second write 1616ms
   ✓ replays after SIGKILL before confirm with the same token and one successful completion 515ms
   ✓ replays after SIGKILL before complete with the same token and one successful completion 525ms
 ✓ tests/authored-flow-operation.test.ts (24 tests) 534ms
 ✓ tests/flow-requirements.test.ts (14 tests) 515ms
   ✓ flows check prints REQUIRES > names the helper, the harness and the mcp server of an authored flow 307ms
 ✓ tests/backlog-picker.test.ts (14 tests) 41ms
 ✓ tests/plugin-store-bounds.test.ts (11 tests) 76ms
 ✓ tests/backlog-picker-flow.test.ts (6 tests) 265ms
 ✓ tests/hosted-extension-protocol-intrinsics.test.ts (6 tests) 13ms
 ✓ tests/preflight-permissions-unenforced.test.ts (17 tests) 256ms
 ✓ tests/wrapper-exit-drain.test.ts (8 tests) 2604ms
   ✓ reports a signalled wrapper death while a pipe is held, with its output intact 381ms
   ✓ lets a lease abort outrank a successful exit still being drained 532ms
 ✓ tests/stuck-run-triage.test.ts (22 tests) 3105ms
   ✓ stuck-run-triage shell text > collects tails with no GNU timeout on PATH, as on a stock macOS 3066ms
 ✓ tests/worker-transcript.test.ts (5 tests) 202ms
 ✓ tests/hosted-extension-routing.test.ts (7 tests) 7ms
 ✓ tests/artifact-gates.test.ts (7 tests) 174ms
 ✓ tests/webhook.test.ts (9 tests) 422ms
   ✓ webhook ingress > checks TS declarations against flows.json without invoking handlers 354ms
 ✓ tests/webhook-live.test.ts (6 tests) 9818ms
   ✓ executes and deduplicates 'app_mention' only for its provider and matching payload 1475ms
   ✓ executes and deduplicates 'reaction_added' only for its provider and matching payload 1457ms
   ✓ executes and deduplicates 'pull_request' only for its provider and matching payload 1444ms
   ✓ flows serve-webhook writes JSON before the daemon starts, then journals and archives exactly once 1480ms
   ✓ replays a dropped file after SIGKILL before spawn 476ms
   ✓ resumes the same journal after SIGKILL after spawn and before acknowledgement 3486ms
 ✓ tests/agent-transcript-live.test.ts (4 tests) 40535ms
   ✓ the transcript digest through the built CLI, a real daemon and the local agent > preserves structured agent failure details and its completed root index 14559ms
   ✓ the transcript digest through the built CLI, a real daemon and the local agent > preserves structured llm failure details and its completed root index 12506ms
   ✓ the transcript digest through the built CLI, a real daemon and the local agent > journals the digest in trajectory_tail on a successful agent step and writes the file it points at 786ms
   ✓ the transcript digest through the built CLI, a real daemon and the local agent > on a failed agent step, names the failure and the transcript in the terminal diagnostic, redacted 12684ms
 ✓ tests/agent-artifacts-live.test.ts (5 tests) 43084ms
   ✓ agent artifacts and gates through the built CLI, a real daemon and the local agent > journals the files the agent wrote, including under a dot-directory, and every artifact gate passes on that journal 1426ms
   ✓ agent artifacts and gates through the built CLI, a real daemon and the local agent > fails the run when the artifact_exists gate names a file the agent did not write 12592ms
   ✓ agent artifacts and gates through the built CLI, a real daemon and the local agent > fails the run with the author reason when a predicate gate returns false, journaling the verdict 13726ms
   ✓ review follow-ups > applies a predicate gate on a helper step too, and journals its verdict 14639ms
   ✓ review follow-ups > records predicate verdicts on the root run so a resume reuses them instead of re-running the closure 701ms
 ✓ tests/authored-step-failed.test.ts (10 tests) 39ms
 ✓ tests/human-live.test.ts (3 tests) 6549ms
   ✓ f.human against a real daemon > parks with the question, refuses wrong answers, records one, and resumes to success 3914ms
   ✓ f.human against a real daemon > a "no" is a value the body branches on: declined, exit 0, no effect 1630ms
   ✓ f.human against a real daemon > refuses to answer a run the daemon does not know 1004ms
 ✓ tests/budget-preflight.test.ts (25 tests) 18ms
 ✓ tests/cli-watch.test.ts (10 tests) 16227ms
   ✓ flows check --watch > rechecks syntax errors, clears once, and returns the last refusal on Ctrl-C 1339ms
   ✓ flows check --watch > streams JSON lines without ANSI, recovers after atomic saves, and exits zero after repair 1866ms
   ✓ flows check --watch > coalesces 20 concurrent saves into at most two rechecks 1833ms
   ✓ flows check --watch > watches transitive relative use imports, cycles, and nearest config changes 2533ms
   ✓ flows check --watch > refreshes the import graph and notices missing imports being created 2461ms
   ✓ flows check --watch > reloads authored TypeScript instead of reusing the first imported definition 1532ms
   ✓ flows check --watch > detects a nearer config appearing and falls back after it is deleted 1928ms
   ✓ flows check --watch > keeps watching after the target is deleted and recreated 1959ms
   ✓ flows check --watch > queues changes during a slow check without overlapping checks 773ms
 ✓ tests/budget-unmetered-live.test.ts (3 tests) 965ms
   ✓ unmetered budget spend through the live kernel > runs an unpriced step under a dollar budget without tripping it, journaling unknown dollars 484ms
 ✓ tests/provider-trigger-contract.test.ts (7 tests) 533ms
   ✓ provider trigger contract > fails `flows check` before deployment and passes once the event is real 346ms
 ✓ tests/work-package-consumer.test.ts (13 tests) 115ms
 ✓ tests/spec-parity.test.ts (31 tests) 351ms
 ✓ tests/helpers-fanout.test.ts (96 tests) 154ms
(node:42697) ExperimentalWarning: SQLite is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
 ✓ tests/authored-step-graph-live.test.ts (1 test) 666ms
   ✓ the authored step DAG through the live kernel > carries labels and predecessors on every index record and journal step, ids unchanged 665ms
 ✓ tests/generate-triggers.test.ts (7 tests) 1091ms
   ✓ discovers new adapters, preserves exact event names, and prefers adapter-local mappings 347ms
 ✓ tests/authored-parallel-agents.test.ts (8 tests) 11697ms
   ✓ authored steps under local workers with capacity > runs more concurrent f.llm calls than the worker holds side by side, never more than its capacity 1223ms
   ✓ authored steps under local workers with capacity > completes more concurrent f.agent calls than the worker holds: the overflow waits for a slot instead of parking 2531ms
   ✓ authored steps under local workers with capacity > runs agents in distinct working directories side by side (the kernel carries cwd) 663ms
   ✓ authored steps under local workers with capacity > serializes agents whose cwd is a symlink alias of the same directory 1068ms
   ✓ authored steps under local workers with capacity > serializes agents whose cwd is a directory nested inside the other 1067ms
   ✓ authored steps under local workers with capacity > never starts queued agents once the body has failed 2053ms
   ✓ authored steps under local workers with capacity > never starts a queued agent when the agent holding the only slot fails 2074ms
   ✓ authored steps under local workers with capacity > parks the overflow when the body is not told the capacity (the defect this closes) 1016ms
 ✓ tests/webhook-hardening.test.ts (11 tests) 55ms
 ✓ tests/human-to.test.ts (8 tests) 9ms
 ✓ tests/plugin-loader.test.ts (9 tests) 193ms
 ✓ tests/pty-sidechannel.test.ts (11 tests) 5689ms
   ✓ view attach preserves worker completion and marks only drive 768ms
   ✓ drive attach preserves worker completion and marks only drive 314ms
   ✓ passthrough attach preserves worker completion and marks only drive 864ms
   ✓ none attach preserves worker completion and marks only drive 785ms
   ✓ none subscriber lets an unattended CLI read EOF 442ms
   ✓ view subscriber lets an unattended CLI read EOF 404ms
   ✓ passthrough subscriber lets an unattended CLI read EOF 403ms
   ✓ incomplete subscriber lets an unattended CLI read EOF 397ms
   ✓ rejects drive after EOF without marking human intervention 717ms
   ✓ delivers all drive bytes in order across child stdin backpressure 592ms
 ✓ tests/worker-lease.test.ts (7 tests) 9ms
 ✓ tests/yaml-helpers.test.ts (33 tests) 70ms
 ✓ tests/authored-agent-permissions.test.ts (26 tests) 739ms
 ✓ tests/deploy.test.ts (11 tests) 5207ms
   ✓ flows deploy file buckets > publishes the full signed layout byte-for-byte and redeploys as a noop 831ms
   ✓ flows deploy file buckets > answers --json with one object per outcome 797ms
   ✓ flows deploy file buckets > reports a refusal as JSON under --json 388ms
   ✓ flows deploy file buckets > refuses a missing local bundle before creating the bucket 387ms
   ✓ flows deploy file buckets > refuses an unreachable bucket before copying 401ms
   ✓ flows deploy file buckets > refuses an unwritable bucket 417ms
   ✓ flows deploy file buckets > refuses local tampering of spec.canonical.json 394ms
   ✓ flows deploy file buckets > refuses local tampering of identity.json 381ms
   ✓ flows deploy file buckets > refuses asset bundles instead of using daemon-relative files 383ms
   ✓ flows deploy file buckets > never labels a corrupt existing deployment as a noop 807ms
 ✓ tests/babysitter-catalog-export.test.ts (14 tests) 825ms
   ✓ Babysitter catalog artifact export > CLI refuses an existing output and leaves no file on validation failure 688ms
 ✓ tests/redact.test.ts (35 tests) 7ms
 ✓ tests/communication.test.ts (10 tests) 13ms
 ✓ tests/worker-lease-lost.test.ts (16 tests) 17ms
 ✓ tests/typed-output.test.ts (14 tests) 199ms
 ✓ tests/canonical-software-factory.test.ts (3 tests) 102ms
 ✓ tests/budget-attribution.test.ts (5 tests) 7ms
 ✓ tests/worker-cli-result-exit.test.ts (5 tests) 32889ms
   ✓ a Claude agent step completes on its result, not only on process exit > settles a hung, successful run within the grace and stops its whole tree 31615ms
   ✓ a Claude agent step completes on its result, not only on process exit > maps an error result on a hung run to a failed exit 31615ms
   ✓ a Claude agent step completes on its result, not only on process exit > leaves a hang before any result to the existing stops 32012ms
   ✓ an agent tree does not outlive the process that spawned it > kills the agent group when the run process is terminated by SIGTERM 795ms
 ✓ tests/effect-channel.test.ts (5 tests) 347ms
 ✓ tests/mcp-lifecycle.test.ts (4 tests) 14ms
 ✓ tests/model-selection.test.ts (10 tests) 17ms
 ✓ tests/json-schema-bound.test.ts (71 tests) 2357ms
   ✓ JSON Schema termination bound > walks a deep schema with an explicit stack rather than recursion 1925ms
 ✓ tests/relayflowd-path.test.ts (10 tests) 6ms
 ✓ tests/agent-artifacts.test.ts (9 tests) 17ms
 ✓ tests/f-memory.test.ts (7 tests) 869ms
 ✓ tests/authored-plugin-effect.test.ts (6 tests) 61ms
 ✓ tests/yaml-local-agent-live.test.ts (7 tests) 4049ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked step CLI and model and journals done 633ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked named CLI and model and journals done 609ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked flow CLI and model and journals done 598ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked project CLI and model and journals done 578ms
   ✓ YAML --local-agent through the built CLI and real daemon > still parks without --local-agent 541ms
   ✓ YAML --local-agent through the built CLI and real daemon > reports the agent process failure 564ms
   ✓ YAML --local-agent through the built CLI and real daemon > preserves declared workspace surfaces that the local worker cannot pin 525ms
 ✓ tests/worker-slots.test.ts (7 tests) 6ms
 ✓ tests/local-dev-ux.test.ts (8 tests) 16ms
 ✓ tests/relay-cli-surface-live.test.ts (3 tests) 387ms
 ✓ tests/authored-declined.test.ts (13 tests) 50ms
 ✓ tests/resume-failure.test.ts (2 tests) 7ms
 ✓ tests/dependency-validation.test.ts (6 tests) 721ms
   ✓ dependency validation > accepts a valid 10,000-step reverse chain through every direct public boundary 374ms
 ✓ tests/worker-lease-lost-live.test.ts (3 tests) 826ms
 ✓ tests/authored-hooks.test.ts (5 tests) 5ms
 ✓ tests/input-binding.test.ts (12 tests) 216ms
 ✓ tests/communication-review.test.ts (5 tests) 323ms
 ✓ tests/yaml-helper-effect.test.ts (4 tests) 78ms
 ✓ tests/deterministic-llm.test.ts (5 tests) 51ms
 ✓ tests/scope-preflight.test.ts (6 tests) 11ms
 ✓ tests/bin.test.ts (7 tests) 2473ms
   ✓ built flows binary > refuses through a symlink to the built artifact 387ms
   ✓ built flows binary > refuses through a symlinked directory component 392ms
   ✓ built flows binary > classifies a signal-terminated auth probe as probe_failed 502ms
   ✓ built flows binary > classifies an unavailable PATH resolver as probe_failed 389ms
   ✓ built flows binary > does not describe a present non-executable CLI as missing 385ms
   ✓ built flows binary > runs one auth probe for three steps sharing a flow CLI 416ms
 ✓ tests/build-gate.test.ts (3 tests) 1153ms
   ✓ flows build gates on flows check green (#318) > refuses a flow with an unresolvable named-agent CLI and leaves no artifacts 390ms
   ✓ flows build gates on flows check green (#318) > --json emits one CheckReport object on stdout on refusal, exits 2, no artifacts 385ms
   ✓ flows build gates on flows check green (#318) > builds the bundle on success (regression: gate must not block valid flows) 377ms
 ✓ tests/scope-compiler.test.ts (25 tests) 10ms
 ✓ tests/run-from-digest.test.ts (6 tests) 4507ms
   ✓ flows run digest input > submits the sealed canonical spec through the normal journal path without checkout 453ms
   ✓ flows run digest input > uses a verified cache hit even after the bucket is removed 403ms
   ✓ flows run digest input > resolves deploy.bucket from flows.json and honors explicit override 1190ms
   ✓ flows run digest input > refuses an unconfigured bucket 816ms
   ✓ flows run digest input > refuses tampered spec.canonical.json before creating run data 835ms
   ✓ flows run digest input > refuses tampered identity.json before creating run data 809ms
 ✓ tests/communication-worker.test.ts (15 tests) 1491ms
 ✓ tests/hn-poller.test.ts (6 tests) 6ms
 ✓ tests/plugin-add.test.ts (7 tests) 1207ms
   ✓ typechecks the augmented verb and rejects unknown namespaces 896ms
 ✓ tests/authored-step-failed-exit.test.ts (3 tests) 10ms
 ✓ tests/direct-run-failure.test.ts (8 tests) 12ms
 ✓ tests/dir-watcher-poller.test.ts (6 tests) 6ms
 ✓ tests/model-pricing.test.ts (10 tests) 5ms
 ✓ tests/yaml-helper-live.test.ts (1 test) 947ms
   ✓ runs compiled YAML helpers through the built CLI and kernel effect journal 946ms
 ✓ tests/provider-trigger-executor.test.ts (4 tests) 200ms
 ✓ tests/transcript-tail-close.test.ts (2 tests) 987ms
   ✓ a stalled transcript-tail close > does not hold the spawn open past its bounded window 477ms
   ✓ a stalled tail close beside a transcript that finished > still journals the transcript pointer 509ms
 ✓ tests/wrapper-artifacts-cwd.test.ts (2 tests) 75ms
 ✓ tests/hello-deterministic.test.ts (5 tests) 17ms
 ✓ tests/transcript-exclusion-timeout.test.ts (1 test) 190ms
 ✓ tests/cli-adapter.test.ts (4 tests) 5ms
 ✓ tests/communication-mixed-resume.test.ts (1 test) 177ms
 ✓ tests/work-package-validator.test.ts (7 tests) 5ms
 ✓ tests/authored-use-loader.test.ts (5 tests) 656ms
 ✓ tests/authored-declined-live.test.ts (1 test) 1681ms
   ✓ runs an input guard and resumes its completed declined root without repeated effects 1680ms
 ✓ tests/cli-answer.test.ts (15 tests) 13ms
 ✓ tests/bundle-preflight.test.ts (4 tests) 941ms
   ✓ bundle execution preflight > ignores surrounding cache configuration on a verified cache hit 457ms
   ✓ bundle execution preflight > uses the built alias for a nameless flow even in a digest-only cache directory 467ms
 ✓ tests/agent-relay-hardening.test.ts (12 tests) 16ms
 ✓ tests/classify-outcome.test.ts (2 tests) 2163ms
   ✓ classifyOutcome > gives up and reports when a running run never becomes classifiable 2009ms
 ✓ tests/communication-preflight.test.ts (13 tests) 33ms
 ↓ tests/real-cli-adapters.test.ts (3 tests | 3 skipped)
 ✓ tests/memoization.test.ts (57 tests) 54ms
 ✓ tests/fs-descriptor.test.ts (1 test) 5ms
 ✓ tests/parse-json-output.test.ts (7 tests) 3ms
 ✓ tests/journal-client-completion.test.ts (4 tests) 100ms
 ✓ tests/worker-cli-abort.test.ts (2 tests) 2518ms
   ✓ stops claude and its process group when lease ownership is lost 1252ms
   ✓ stops wrapper.mjs and its process group when lease ownership is lost 1264ms
 ✓ tests/communication-environment-preflight.test.ts (6 tests) 4ms
 ✓ tests/budget-authored-live.test.ts (2 tests) 155ms
 ✓ tests/slack-writeback.test.ts (1 test) 260ms
 ✓ tests/authored-surface-authority.test.ts (2 tests) 15ms
 ✓ tests/adapters/claude.test.ts (7 tests) 4ms
 ✓ tests/worker-cli-cwd.test.ts (2 tests) 268ms
 ✓ tests/adapters/codex.test.ts (7 tests) 4ms
 ✓ tests/slack-block-kit.test.ts (5 tests) 369ms
 ✓ tests/worker-lease-sweep.test.ts (2 tests) 7ms
 ✓ tests/step-lease.test.ts (36 tests) 66399ms
   ✓ f.run leases against the live kernel > enforces 10000 ms for 'sleep 5; printf ok' 5061ms
   ✓ f.run leases against the live kernel > enforces 40000 ms for 'sleep 31; printf ok' 31057ms
   ✓ f.run leases against the live kernel > enforces 30000 ms for 'sleep 31; printf ok' 30086ms
 ✓ tests/communication-history.test.ts (1 test) 4ms
 ✓ tests/adapters/registry.test.ts (4 tests) 5ms
 ✓ tests/resume-worker-lease.test.ts (2 tests) 5ms
 ✓ tests/direct-run-worker-lease.test.ts (2 tests) 6ms
 ✓ tests/authored-declined-report.test.ts (6 tests) 7ms
 ✓ tests/promise-ancestry.test.ts (2 tests) 290ms
 ✓ tests/communication-refusal.test.ts (1 test) 12ms
 ✓ tests/agent-cwd-validation.test.ts (2 tests) 411ms
   ✓ declarative agent cwd > is refused by `flows check` on a YAML flow before anything runs 408ms
 ✓ tests/catalog-plugins.test.ts (2 tests) 3ms
 ✓ tests/check-command-cwd.test.ts (1 test) 21ms
 ✓ tests/communication-lazy.test.ts (1 test) 4ms
 ✓ tests/cli-progress-wait.test.ts (2 tests) 4ms
 ✓ tests/bundle-transport.test.ts (20 tests) 2687ms
   ✓ digest references > accepts and deploys the build output for hello 486ms
   ✓ digest references > accepts and deploys the build output for Hello 476ms
   ✓ digest references > accepts and deploys the build output for hello.world 444ms
   ✓ digest references > accepts and deploys the build output for hello_world 432ms
   ✓ digest references > accepts and deploys the build output for 123 404ms
   ✓ digest references > accepts and deploys the build output for A_b.c-1 442ms
 ✓ tests/placement.test.ts (54 tests) 19ms
 ✓ tests/canonical-tree.test.ts (1 test) 2ms
 ✓ tests/run-digest-live.test.ts (1 test) 927ms
   ✓ executes a deployed digest on the real kernel after deleting the authoring tree 926ms
 ✓ tests/communication-tools.test.ts (1 test) 76ms
 ✓ tests/authored-admission.test.ts (2 tests) 3ms
 ✓ tests/memory.test.ts (18 tests) 11ms
 ✓ tests/worker-platform.test.ts (1 test) 3ms
 ✓ tests/run-digest.test.ts (4 tests) 1666ms
   ✓ digest run configuration refusals > reports config_invalid before fetching or starting a run for {invalid json 429ms
   ✓ digest run configuration refusals > reports config_invalid before fetching or starting a run for {"deploy":{}} 414ms
   ✓ digest run configuration refusals > reports config_invalid before fetching or starting a run for {"deploy":{"bucket":123}} 384ms
   ✓ digest run configuration refusals > reports config_invalid before fetching or starting a run for {"deploy":{"bucket":""}} 438ms
 ✓ tests/local-agent-live.test.ts (5 tests) 64242ms
   ✓ built CLI local agent against a real daemon > dispatches through the wrapper and keeps --json stdout report-shaped 781ms
   ✓ built CLI local agent against a real daemon > runs beyond the initial 30-second lease without a second invocation 35761ms
   ✓ built CLI local agent against a real daemon > renders actual agent completion in text output 786ms
   ✓ built CLI local agent against a real daemon > returns a failed run when the agent process fails 14863ms
   ✓ built CLI local agent against a real daemon > refuses a workspace it cannot pin before invoking the agent 12050ms

⎯⎯⎯⎯⎯⎯ Failed Suites 1 ⎯⎯⎯⎯⎯⎯⎯

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

Expected: "1.4.0"
Received: "1.3.6"

 ❯ 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/31]⎯

⎯⎯⎯⎯⎯⎯ Failed Tests 30 ⎯⎯⎯⎯⎯⎯⎯

 FAIL  tests/babysitter-native-extension.test.ts > native Babysitter extension > runs the exact published 2.0.26 native bytes in the isolated capability path
AssertionError: promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
 ❯ tests/babysitter-native-extension.test.ts:153:7
    151|         return { receiptId: `bst_${'a'.repeat(64)}`, status: 'queued' …
    152|       } },
    153|     })).resolves.toEqual({ completionReason: 'success', capabilityCall…
       |       ^
    154|     expect(calls).toEqual([{ delivery: {
    155|       deliveryId: 'gh-delivery-7', provider: 'github', eventType: 'pul…

Caused by: Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/31]⎯

 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-protocol.test.ts > hosted extension hostile protocol > uses captured JSON intrinsics for the complete parent boundary
Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
    133|       : new PluginError('plugin_unsupported', 'Hosted capability rejec…
    134|     const refuse = (message: string) => {
    135|       const error = new PluginError('plugin_unsupported', message);
       |                     ^
    136|       CHILD_PROCESS_KILL(child, 'SIGKILL');
    137|       if (capabilityState === 'pending') {
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/31]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > executes the exact capability-only handler for a duplicate receipt
 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > denies ambient credentials, host files, writes, network, subprocesses, and undeclared context verbs
 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > constructs adapter authority with the captured freeze intrinsic
Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
    133|       : new PluginError('plugin_unsupported', 'Hosted capability rejec…
    134|     const refuse = (message: string) => {
    135|       const error = new PluginError('plugin_unsupported', message);
       |                     ^
    136|       CHILD_PROCESS_KILL(child, 'SIGKILL');
    137|       if (capabilityState === 'pending') {
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/31]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > launches through the captured process primitive after builtin export synchronization
AssertionError: promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
 ❯ tests/hosted-extension-isolation.test.ts:283:11
    281|           input: descriptor(),
    282|           babysitterTurn: { queue: async () => ({ receiptId: 'receipt-…
    283|         })).resolves.toEqual({ completionReason: 'success', capability…
       |           ^
    284|       } finally {
    285|         process.execPath = originalExecPath;

Caused by: Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/31]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > ignores inherited launcher overrides and decodes manifests with the captured Buffer intrinsic
AssertionError: promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
 ❯ tests/hosted-extension-isolation.test.ts:373:11
    371|           input: descriptor('delivery-options'),
    372|           babysitterTurn: { queue: async () => ({ receiptId: 'receipt-…
    373|         })).resolves.toEqual({ completionReason: 'success', capability…
       |           ^
    374|       } finally {
    375|         Buffer.prototype.toString = bufferToString;

Caused by: Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/31]⎯

 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 sandbox exited wi… { 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 sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/31]⎯

 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 sandbox exited wi… { 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 sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/31]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > shields verified Surface files before async settlement
AssertionError: promise rejected "Error: Hosted extension sandbox exited wi… { 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 sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/31]⎯

 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 sandbox exited wi… { code: '…' } to be Error: private Cloud policy detail { code: '…' } // Object.is equality

- Expected
+ Received

- [Error: private Cloud policy detail]
+ [Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted
+ ]

 ❯ 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; } },

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/31]⎯

 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 sandbox exited wi… { 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()),

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/31]⎯

 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 sandbox exited wi… { 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…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/31]⎯

 FAIL  tests/hosted-extension-isolation.test.ts > hosted extension capability isolation > writes the Surface manifest and protocol without inherited toJSON behavior
AssertionError: promise rejected "Error: Hosted extension sandbox exited wi… { code: '…' }" instead of resolving
 ❯ tests/hosted-extension-isolation.test.ts:788:11
    786|           babysitterTurn: { queue: async () => ({ receiptId: 'receipt-…
    787|           timeoutMs: 3_000,
    788|         })).resolves.toEqual({ completionReason: 'success', capability…
       |           ^
    789|       } finally {
    790|         if (previous === undefined) delete (Object.prototype as { toJS…

Caused by: Error: Hosted extension sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'plugin_unsupported' }
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/31]⎯

 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 sandbox exited wi… { 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…

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/31]⎯

 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|   });

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > runs hn-monitor analyze-story end-to-end via a stub agent CLI (gate 2 clause 2 demo)
AssertionError: expected { …(12) } to match object { output: { …(3) }, …(1) }
(22 matching properties omitted from actual)

- Expected
+ Received

  Object {
-   "output": Object {
-     "reasoning": "stub agent runtime — deterministic output for gate-2 clause-2 demo",
-     "relevance_score": 5,
-     "story_title": "stub",
-   },
+   "output": null,
    "verification": Object {
-     "gate": "json_schema",
-     "verdict": "pass",
+     "gate": "execution",
+     "verdict": "fail",
    },
  }

 ❯ tests/live-kernel.test.ts:657:36
    655|         && (entry as { step_id?: string }).step_id === 'analyze-story',
    656|     ) as { payload: { output: unknown; verification: unknown } } | und…
    657|     expect(stepCompleted?.payload).toMatchObject({
       |                                    ^
    658|       output: {
    659|         story_title: 'stub',

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > hn-monitor analyze-story FAILS verification when the CLI omits required schema fields
AssertionError: expected { …(12) } to match object { …(3) }
(21 matching properties omitted from actual)

- Expected
+ Received

  Object {
-   "completionReason": "retries_exhausted",
+   "completionReason": "worker_error",
    "output": null,
    "verification": Object {
-     "gate": "json_schema",
+     "gate": "execution",
      "verdict": "fail",
    },
  }

 ❯ tests/live-kernel.test.ts:752:36
    750|     // its verification record names the json_schema rejection. The re…
    751|     // parsed value is nulled before the completion is persisted.
    752|     expect(stepCompleted?.payload).toMatchObject({
       |                                    ^
    753|       completionReason: 'retries_exhausted',
    754|       output: null,

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > agent step preserves the CliResult wrapper as output when the CLI emits non-JSON text
AssertionError: expected null not to be null
 ❯ tests/live-kernel.test.ts:823:24
    821|     // here (parseJsonOutput returned null on non-JSON stdout) and
    822|     // these assertions would all fail.
    823|     expect(output).not.toBeNull();
       |                        ^
    824|     expect(output.exit_code).toBe(0);
    825|     expect(output.stdout_tail).toContain('looked at the story');

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > AgentWorker exposes wake_context to the CLI via RELAYFLOW_WAKE_CONTEXT env var (real analyzer prerequisite)
TypeError: Cannot read properties of null (reading 'story_title')
 ❯ tests/live-kernel.test.ts:891:42
    889|     ) as { payload: { output: { story_title: string; reasoning: string…
    890|     expect(stepCompleted).toBeDefined();
    891|     expect(stepCompleted!.payload.output.story_title).toBe(`echoed:${s…
       |                                          ^
    892|     expect(stepCompleted!.payload.output.reasoning).toContain(String(s…
    893| 

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > AgentWorker leaves RELAYFLOW_WAKE_CONTEXT UNSET when the run has no wake_context (undefined-vs-null pin)
TypeError: Cannot read properties of null (reading 'env_present')
 ❯ tests/live-kernel.test.ts:958:38
    956|     ) as { payload: { output: { env_present: boolean } } } | undefined;
    957|     expect(completed).toBeDefined();
    958|     expect(completed!.payload.output.env_present).toBe(false);
       |                                      ^
    959| 
    960|     delete process.env.RELAYFLOW_WAKE_CONTEXT;

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > AgentWorker leaves RELAYFLOW_MODEL UNSET when the step declares no model
TypeError: Cannot read properties of null (reading 'story_title')
 ❯ tests/live-kernel.test.ts:1194:38
    1192|     expect(completed).toBeDefined();
    1193|     // UNSET, not EMPTY and not the leaked parent value.
    1194|     expect(completed!.payload.output.story_title).toBe('model:UNSET');
       |                                      ^
    1195| 
    1196|     delete process.env.RELAYFLOW_MODEL;

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/31]⎯

 FAIL  tests/live-kernel.test.ts > built flows CLI against live relayflowd > hn-monitor analyze-story reaches done through the real Claude analyzer CLI
Error: LIVE_ANALYZER_UNAVAILABLE: "/home/daytona/.relayflow-v2-supervisor/durable/repository/testdata/preflight/analyze-story-claude-cli" does not identify as relayflows-agent-cli-v1 — failing because gate-2 acceptance requires the real analyzer to execute. Set RELAYFLOWS_ALLOW_ANALYZER_SKIP=1 only if this run is not gate evidence.
 ❯ tests/live-kernel.test.ts:1223:15
    1221|       const notice = `LIVE_ANALYZER_UNAVAILABLE: ${readiness.detail}`;
    1222|       if (process.env['RELAYFLOWS_ALLOW_ANALYZER_SKIP'] !== '1') {
    1223|         throw new Error(
       |               ^
    1224|           `${notice} — failing because gate-2 acceptance requires the …
    1225|           + 'Set RELAYFLOWS_ALLOW_ANALYZER_SKIP=1 only if this run is …

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/31]⎯

 FAIL  tests/live-kernel.test.ts > a relayflow can be scheduled: tick source against live relayflowd > a tick spawns a real run whose step reports the SCHEDULED instant
AssertionError: expected null to deeply equal { schedule_id: 'heartbeat-1m', …(3) }

- Expected: 
Object {
  "lag_ms": 43000,
  "schedule_id": "heartbeat-1m",
  "scheduled_for_ms": 1764000000000,
  "slot": 29400000,
}

+ Received: 
null

 ❯ tests/live-kernel.test.ts:1665:39
    1663|     // The bound: the run reports the grid instant and its own lag, so…
    1664|     // backfilled run can tell it is running for a slot from the past.
    1665|     expect(completed!.payload.output).toEqual({
       |                                       ^
    1666|       schedule_id: 'heartbeat-1m',
    1667|       slot: 29_400_000,

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/31]⎯

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

Vitest caught 1 unhandled error 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 sandbox exited without a valid completion (exit 1): bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted

 ❯ refuse src/hosted-extension-protocol.ts:135:21
    133|       : new PluginError('plugin_unsupported', 'Hosted capability rejec…
    134|     const refuse = (message: string) => {
    135|       const error = new PluginError('plugin_unsupported', message);
       |                     ^
    136|       CHILD_PROCESS_KILL(child, 'SIGKILL');
    137|       if (capabilityState === 'pending') {
 ❯ ChildProcess.<anonymous> src/hosted-extension-protocol.ts:234:21
 ❯ ChildProcess.emit node:events:520:22
 ❯ maybeClose node:internal/child_process:1084:16
 ❯ Process.ChildProcess._handle.onexit node:internal/child_process:304:5

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
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.
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

 Test Files  5 failed | 181 passed | 1 skipped (187)
      Tests  30 failed | 2866 passed | 17 skipped (2913)
     Errors  1 error
   Start at  05:43:08
   Duration  230.04s (transform 3.02s, setup 0ms, collect 49.95s, tests 596.27s, environment 24ms, prepare 7.90s)


Exit code: 1
