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


> @relayflows/sdk@2.0.8 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.64s

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


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


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


 RUN  v2.1.9 /Users/khaliqgant/fl-slice-S/packages/sdk

stdout | tests/live-kernel.test.ts
LIVE_KERNEL relayflowd=/Users/khaliqgant/.relayflows-toolchain/target/2945819964/debug/relayflowd
LIVE_KERNEL flows=/Users/khaliqgant/fl-slice-S/packages/sdk/dist/cli.js

 ✓ tests/cli.test.ts (63 tests) 12160ms
   ✓ flows check CLI > binds a checked relative wrapper to the flow directory for worker execution 1247ms
   ✓ flows check CLI > uses the raw Claude adapter model flag instead of accepting auth status as model proof 333ms
   ✓ flows check CLI > refuses a typo model before probing or contacting relayflowd 667ms
   ✓ flows check CLI > maps every input refusal path to its declared kind without raw exceptions 1598ms
   ✓ flows run/resume CLI over the journal protocol > parses run options, submits the kernel dialect, and exits 0 on success 651ms
   ✓ flows run/resume CLI over the journal protocol > exits 1 and emits the declared completionReason for a failed run 484ms
   ✓ flows run/resume CLI over the journal protocol > exits 3 and names the parked llm step 657ms
   ✓ flows run/resume CLI over the journal protocol > reports a needs_human agent step as parked for human recovery 644ms
   ✓ flows run/resume CLI over the journal protocol > follows a dispatched worker step instead of reporting a protocol error 548ms
   ✓ flows run/resume CLI over the journal protocol > bounds a worker wait by its lease and reports what it is waiting for 550ms
   ✓ flows run/resume CLI over the journal protocol > resumes a parked run from snapshot step types without reading journal sequence one 459ms
   ✓ flows run/resume CLI over the journal protocol > maps only run_not_found resumes to exit 2 1517ms
 ✓ tests/observer-link.test.ts (39 tests) 332ms
 ✓ tests/preflight.test.ts (27 tests) 144ms
 ✓ tests/daemon-lifecycle.test.ts (42 tests) 84ms
 ✓ tests/authored-flow.test.ts (25 tests) 840ms
 ✓ tests/worker-cli.test.ts (13 tests) 22490ms
   ✓ custom wrapper execution identity > passes an explicit safe environment at identification and execution 383ms
   ✓ custom wrapper execution identity > refuses a wrapper symlink retarget before delivering private values 365ms
   ✓ custom wrapper execution identity > bounds wrapper execution after acknowledgement 419ms
   ✓ custom wrapper execution identity > bounds captured wrapper output 433ms
   ✓ custom wrapper execution identity > refuses a duplicate execute protocol frame 435ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when a conforming wrapper leaks a stdio pipe to a background helper 1954ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when the leaked helper inherits stderr only 1929ms
   ✓ custom wrapper execution bounds are reader-owned > resolves when a wrapper leaks a stdio pipe and exits before identifying 3257ms
   ✓ custom wrapper execution bounds are reader-owned > journals a completionReason at the default bound when a wrapper leaks a stdio pipe 11263ms
   ✓ custom wrapper execution bounds are reader-owned > accepts an execute token and an over-8KiB payload flushed in one write 391ms
   ✓ custom wrapper execution bounds are reader-owned > accepts the same over-8KiB payload whether or not it coalesces with the execute token 865ms
   ✓ custom wrapper execution bounds are reader-owned > still bounds an un-terminated handshake buffer and names the bound 375ms
   ✓ delivers the journaled memory pack to the real wrapper and excludes its charge from completion usage 418ms
 ✓ tests/mcp.test.ts (30 tests) 10785ms
   ✓ MCP preflight and transports > flows check refuses an undeclared server with exit 2 and no daemon 878ms
   ✓ MCP preflight and transports > flows check reports a refusing server and leaves no PID 994ms
   ✓ MCP preflight and transports > kills a SIGTERM-resistant silent child after a parent-owned handshake deadline 1316ms
   ✓ MCP preflight and transports > reaps a SIGTERM-resistant descendant with inherit stdio before cleanup finishes 1327ms
   ✓ MCP preflight and transports > reaps a SIGTERM-resistant descendant with ignore stdio before cleanup finishes 2063ms
   ✓ MCP preflight and transports > reports malformed connection configuration as config_invalid 864ms
   ✓ authored MCP effects against the real kernel > journals one MCP receipt per call with args, result, stable logical key, and a confirmed effect 680ms
   ✓ authored MCP effects against the real kernel > reports a dropped tool connection as a failed CLI run 1078ms
   ✓ authored MCP effects against the real kernel > journals drop/echo failure as worker_error with diagnostic mcp_disconnected 387ms
 ✓ tests/validate.test.ts (68 tests) 50ms
 ✓ tests/journal-client.test.ts (14 tests) 120ms
 ✓ tests/tick-source.test.ts (33 tests) 58ms
 ✓ tests/verb-field-lint.test.ts (78 tests) 812ms
 ✓ tests/cloud-run.test.ts (47 tests) 203ms
 ✓ tests/authored-flow-lifecycle-executor.test.ts (27 tests) 703ms
 ✓ tests/cli-replay.test.ts (36 tests) 2245ms
   ✓ flows replay > --json is byte-identical across two CLI invocations (diff) 1629ms
stdout | tests/live-kernel.test.ts > built flows CLI against live relayflowd > hn-monitor analyze-story reaches done through the real Claude analyzer CLI
LIVE_ANALYZER ready: claude -p --model claude-haiku-4-5-20251001 round-trip OK

 ✓ tests/tick-runner.test.ts (22 tests) 5740ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms fractional as an invocation error 987ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms exponent notation as an invocation error 782ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms hex as an invocation error 792ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms trailing text as an invocation error 888ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > refuses --interval-ms empty as an invocation error 1153ms
   ✓ CLI argument parsing refuses coercion rather than accepting it > accepts an exact integer and proceeds past parsing 819ms
stdout | tests/live-kernel.test.ts > built flows CLI against live relayflowd > hn-monitor analyze-story reaches done through the real Claude analyzer CLI
LIVE_ANALYZER analysis: {"reasoning":"This story is directly relevant to AI agents and automation, describing an agent system that autonomously performs software development tasks (opening and reviewing pull requests), which is a core application of agentic AI systems.","relevance_score":10,"story_title":"Show HN: an agent that opens and reviews its own pull requests [wake-nonce-7f3a91c4]"}

 ✓ tests/stop-process-group.test.ts (6 tests) 7833ms
   ✓ every stop reaches the process group, not just the direct child > exits the run after an execution-timeout stop 968ms
   ✓ every stop reaches the process group, not just the direct child > exits the run after a protocol terminate stop 776ms
   ✓ every stop reaches the process group, not just the direct child > kills a SIGTERM-deaf grandchild after a protocol terminate stop 2006ms
   ✓ every stop reaches the process group, not just the direct child > kills a SIGTERM-deaf grandchild after an execution-timeout stop 2203ms
   ✓ every stop reaches the process group, not just the direct child > holds the loop open long enough for the escalation to run 1393ms
   ✓ every stop reaches the process group, not just the direct child > terminate() forces a group that outlives SIGTERM 487ms
 ✓ tests/gate-contract.test.ts (20 tests) 385ms
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=88815 run=01M290SXJQ9EFTBB2HFXT2C6HT while step=two state=Running

 ✓ tests/cli-hn-monitor.test.ts (16 tests) 155ms
 ✓ tests/live-kernel.test.ts (31 tests) 85264ms
   ✓ built flows CLI against live relayflowd > twenty-six-step reuses 25 durable completions after editing the failed final step 6153ms
   ✓ built flows CLI against live relayflowd > runs rung (a), parks rung (b), and keeps JSON report-shaped 8140ms
   ✓ built flows CLI against live relayflowd > allows a deterministic run to exceed the bounded request timeout 33383ms
   ✓ built flows CLI against live relayflowd > follows a live worker dispatch through flows run 1687ms
   ✓ built flows CLI against live relayflowd > runs an agent CLI end to end through the SDK worker 492ms
   ✓ built flows CLI against live relayflowd > f.agent lowers to a real agent step and dispatches through a live worker 848ms
   ✓ built flows CLI against live relayflowd > f.agent's default flowPath anchors on cwd, not cwd's parent 835ms
   ✓ built flows CLI against live relayflowd > can always get a parked run to a late-attaching worker 5712ms
   ✓ built flows CLI against live relayflowd > reports a real manual-recovery NeedsHuman state as parked 1701ms
   ✓ built flows CLI against live relayflowd > runs hn-monitor analyze-story end-to-end via a stub agent CLI (gate 2 clause 2 demo) 401ms
   ✓ built flows CLI against live relayflowd > hn-monitor analyze-story FAILS verification when the CLI omits required schema fields 388ms
   ✓ built flows CLI against live relayflowd > AgentWorker exposes wake_context to the CLI via RELAYFLOW_WAKE_CONTEXT env var (real analyzer prerequisite) 422ms
   ✓ built flows CLI against live relayflowd > AgentWorker passes a declared model to an identified wrapper as RELAYFLOW_MODEL 814ms
   ✓ built flows CLI against live relayflowd > AgentWorker refuses a nonconforming journal-submitted wrapper before exposing RELAYFLOW_MODEL 581ms
   ✓ built flows CLI against live relayflowd > AgentWorker executes the raw claude adapter with its real model flag 446ms
   ✓ built flows CLI against live relayflowd > AgentWorker executes the raw codex adapter with its real model flag 402ms
   ✓ built flows CLI against live relayflowd > hn-monitor analyze-story reaches done through the real Claude analyzer CLI 11818ms
   ✓ built flows CLI against live relayflowd > preflights before journaling and names an unreachable socket 3033ms
   ✓ built flows CLI against live relayflowd > starts exactly one daemon when two runs race for one empty data dir 2186ms
   ✓ surface resume after a real daemon kill > resumes a three-step run with each successful completion exactly once 3305ms
   ✓ a relayflow can be scheduled: tick source against live relayflowd > a tick spawns a real run whose step reports the SCHEDULED instant 385ms
 ✓ tests/authored-flow-slack.test.ts (6 tests) 4011ms
   ✓ authored Slack helper effects > journals exactly one effect with the authored params and typed receipt, without network 385ms
   ✓ authored Slack helper effects > replays after SIGKILL before confirm with the same token and one successful completion 1378ms
   ✓ authored Slack helper effects > replays after SIGKILL before complete with the same token and one successful completion 1216ms
   ✓ authored Slack helper effects > writes two files for two calls and supports dm, reply, and react 990ms
 ✓ tests/bundle.test.ts (21 tests) 15537ms
   ✓ immutable bundles > returns exit 2 naming a byte-flipped payload and refuses to reuse corruption 792ms
   ✓ immutable bundles > builds and verifies the canonical YAML fixture through the compiled CLI 2598ms
   ✓ immutable bundles > emits the ephemeral warning on CLI stderr and uses the default output directory 1737ms
   ✓ immutable bundles > preserves quoted asset words and executable permissions 346ms
   ✓ immutable bundles > refuses build-provable CLI resolution errors without environment probes 745ms
   ✓ immutable bundles > builds a standalone TS fixture twice with identical executable hashes 4762ms
   ✓ immutable bundles > refuses to label installed dependency drift with lockfile pins 701ms
   ✓ immutable bundles > refuses invalid CLI arguments %j 710ms
   ✓ immutable bundles > refuses invalid CLI arguments "--out" 772ms
   ✓ immutable bundles > refuses invalid CLI arguments "--verify" 688ms
   ✓ immutable bundles > refuses invalid CLI arguments "--verify" 744ms
   ✓ immutable bundles > refuses invalid CLI arguments "--out" 704ms
 ✓ tests/daemon-lifecycle-live.test.ts (9 tests) 17465ms
   ✓ 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 1853ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > polls, bounded, for a daemon that holds the lock before it binds 2114ms
   ✓ flows run against a data dir with no daemon (§6 test 7) > attaches to a serving daemon that has not published a connection file 1366ms
   ✓ 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 2949ms
   ✓ 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 3104ms
   ✓ concurrent invocations against one empty data dir (§6 test 15) > ends with exactly one daemon owning the socket, and both runs succeed 1833ms
   ✓ refusals from a spawn that cannot produce a daemon > names relayflowd_not_found rather than falling through to PATH 1358ms
   ✓ refusals from a spawn that cannot produce a daemon > names daemon_start_failed and quotes the daemon log when startup dies 1426ms
   ✓ refusals from a spawn that cannot produce a daemon > refuses a daemon speaking another protocol version instead of binding over it 1459ms
 ✓ tests/authored-helpers.test.ts (6 tests) 11228ms
   ✓ lowers the named acceptance helpers and Slack to confirmed journal effects 1060ms
   ✓ runs every available provider through the real kernel and resumes completed effects without a second write 7221ms
   ✓ replays after SIGKILL before confirm with the same token and one successful completion 1232ms
   ✓ replays after SIGKILL before complete with the same token and one successful completion 1157ms
   ✓ journals provider failure with worker_error and never confirms the effect 546ms
 ✓ tests/backlog-picker.test.ts (14 tests) 184ms
 ✓ tests/backlog-picker-flow.test.ts (6 tests) 969ms
   ✓ backlog-picker flow > emit-package describes the entry select-entry chose, even if the backlog changes between them 359ms
   ✓ backlog-picker flow > does not emit a stale entry left by a previous run 434ms
 ✓ tests/flow-executor-chain.test.ts (12 tests) 14212ms
   ✓ flow executor LLM and output-binding chain > runs f.llm -> f.agent -> f.run with schema-verified journal output and the exact allowed model 1724ms
   ✓ flow executor LLM and output-binding chain > fails invalid LLM output before the next step: not JSON 995ms
   ✓ flow executor LLM and output-binding chain > fails invalid LLM output before the next step: {"message":7} 1011ms
   ✓ flow executor LLM and output-binding chain > retains tagged-template text output 818ms
   ✓ flow executor LLM and output-binding chain > preserves JSON values without promoting them to process wrappers: null 809ms
   ✓ flow executor LLM and output-binding chain > preserves JSON values without promoting them to process wrappers: [1,2] 721ms
   ✓ flow executor LLM and output-binding chain > preserves JSON values without promoting them to process wrappers: "hello" 931ms
   ✓ flow executor LLM and output-binding chain > runs the authored LLM path through the built flows CLI 1920ms
   ✓ flow executor LLM and output-binding chain > passes a declarative verified value through an agent into a deterministic artifact 1065ms
   ✓ flow executor LLM and output-binding chain > journals a missing optional field as a failure before the consuming command executes 844ms
   ✓ flow executor LLM and output-binding chain > flows run consumes YAML bindings and resume reuses the original journal output 3318ms
 ✓ tests/authored-flow-operation.test.ts (23 tests) 643ms
   ✓ completes the gate in linear time over a body with 30000 ordinary awaits 473ms
 ✓ tests/direct-input.test.ts (4 tests) 15281ms
   ✓ direct .flow.ts input through the built CLI and live runtime > executes inline and file JSON input through relayflowd 4115ms
   ✓ direct .flow.ts input through the built CLI and live runtime > refuses missing and malformed input before contacting relayflowd 7872ms
   ✓ direct .flow.ts input through the built CLI and live runtime > does not run the authored body before daemon availability 1883ms
   ✓ direct .flow.ts input through the built CLI and live runtime > refuses oversized file input before contacting relayflowd 1409ms
 ✓ tests/work-package-consumer.test.ts (13 tests) 755ms
   ✓ the Garden join: picker output feeds the consumer > accepts a package the picker actually emits, and refuses one lacking a definition of done 742ms
 ❯ tests/cli-watch.test.ts (10 tests | 2 failed) 32431ms
   ✓ flows check --watch > rechecks syntax errors, clears once, and returns the last refusal on Ctrl-C 1796ms
   × flows check --watch > streams JSON lines without ANSI, recovers after atomic saves, and exits zero after repair 5163ms
     → Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
   ✓ flows check --watch > coalesces 20 concurrent saves into at most two rechecks 2982ms
   ✓ flows check --watch > watches transitive relative use imports, cycles, and nearest config changes 3819ms
   × flows check --watch > refreshes the import graph and notices missing imports being created 5143ms
     → Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
   ✓ flows check --watch > reloads authored TypeScript instead of reusing the first imported definition 5160ms
   ✓ flows check --watch > detects a nearer config appearing and falls back after it is deleted 3870ms
   ✓ flows check --watch > keeps watching after the target is deleted and recreated 3688ms
   ✓ flows check --watch > queues changes during a slow check without overlapping checks 804ms
 ✓ tests/spec-parity.test.ts (31 tests) 881ms
 ✓ tests/helpers-fanout.test.ts (96 tests) 877ms
 ✓ tests/worker-lease.test.ts (7 tests) 16ms
 ✓ tests/typed-output.test.ts (14 tests) 535ms
 ✓ tests/webhook-live.test.ts (3 tests) 7722ms
   ✓ flows serve-webhook writes JSON before the daemon starts, then journals and archives exactly once 2284ms
   ✓ replays a dropped file after SIGKILL before spawn 999ms
   ✓ resumes the same journal after SIGKILL after spawn and before acknowledgement 4437ms
 ✓ tests/effect-channel.test.ts (5 tests) 670ms
 ✓ tests/mcp-lifecycle.test.ts (4 tests) 14ms
 ✓ tests/model-selection.test.ts (10 tests) 39ms
 ✓ tests/json-schema-bound.test.ts (71 tests) 7573ms
   ✓ JSON Schema termination bound > walks a deep schema with an explicit stack rather than recursion 6347ms
 ✓ tests/relayflowd-path.test.ts (10 tests) 11ms
 ✓ tests/f-memory.test.ts (7 tests) 2782ms
   ✓ reads the seeded local SQLite database with cloud unused and fallback disabled 561ms
   ✓ cannot widen script scope using a raw project option or another flow name 397ms
   ✓ attaches read helpers without journaling read steps 375ms
   ✓ refuses missing, corrupt, and directory database paths before body or journal activity 363ms
   ✓ detects direct memory use before running earlier body effects 348ms
   ✓ maps an unavailable provider probe to memory_unreachable 359ms
   ✓ fails closed for deferred writes, agent scope, disabled script memory, and reads after done 377ms
 ✓ tests/webhook.test.ts (6 tests) 181ms
 ✓ tests/yaml-local-agent-live.test.ts (7 tests) 9924ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked step CLI and model and journals done 1254ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked named CLI and model and journals done 1435ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked flow CLI and model and journals done 1398ms
   ✓ YAML --local-agent through the built CLI and real daemon > runs with the checked project CLI and model and journals done 1681ms
   ✓ YAML --local-agent through the built CLI and real daemon > still parks without --local-agent 1354ms
   ✓ YAML --local-agent through the built CLI and real daemon > reports the agent process failure 1507ms
   ✓ YAML --local-agent through the built CLI and real daemon > preserves declared workspace surfaces that the local worker cannot pin 1294ms
 ✓ tests/local-dev-ux.test.ts (8 tests) 87ms
 ✓ tests/dependency-validation.test.ts (6 tests) 1609ms
   ✓ dependency validation > accepts a valid 10,000-step reverse chain through every direct public boundary 760ms
   ✓ dependency validation > bounds the author-facing path for a 10,000-step cycle 767ms
 ✓ tests/input-binding.test.ts (12 tests) 860ms
   ✓ declarative output binding > compiles YAML selectors into durable input and implicit dependency edges 381ms
 ✓ tests/deterministic-llm.test.ts (5 tests) 81ms
 ✓ tests/bin.test.ts (7 tests) 3148ms
   ✓ built flows binary > refuses through a symlink to the built artifact 516ms
   ✓ built flows binary > refuses through a symlinked directory component 410ms
   ✓ built flows binary > classifies a signal-terminated auth probe as probe_failed 378ms
   ✓ built flows binary > classifies an unavailable PATH resolver as probe_failed 415ms
   ✓ built flows binary > does not describe a present non-executable CLI as missing 503ms
   ✓ built flows binary > runs one auth probe for three steps sharing a flow CLI 923ms
 ✓ tests/scope-compiler.test.ts (25 tests) 38ms
 ✓ tests/budget-attribution.test.ts (4 tests) 11ms
 ✓ tests/hn-poller.test.ts (6 tests) 15ms
 ✓ tests/dir-watcher-poller.test.ts (6 tests) 5ms
 ✓ tests/hello-deterministic.test.ts (5 tests) 53ms
 ✓ tests/budget-preflight.test.ts (16 tests) 26ms
 ✓ tests/work-package-validator.test.ts (7 tests) 14ms
 ✓ tests/classify-outcome.test.ts (2 tests) 2242ms
   ✓ classifyOutcome > gives up and reports when a running run never becomes classifiable 2081ms
 ↓ tests/real-cli-adapters.test.ts (3 tests | 3 skipped)
 ✓ tests/model-pricing.test.ts (8 tests) 10ms
 ✓ tests/authored-use-loader.test.ts (5 tests) 127ms
 ✓ tests/memoization.test.ts (57 tests) 821ms
   ✓ refuses invalid reuse invocation "run" 686ms
 ✓ tests/parse-json-output.test.ts (7 tests) 8ms
 ✓ tests/cli-adapter.test.ts (3 tests) 11ms
 ✓ tests/journal-client-completion.test.ts (4 tests) 124ms
 ✓ tests/worker-cli-abort.test.ts (2 tests) 2777ms
   ✓ stops claude and its process group when lease ownership is lost 1397ms
   ✓ stops wrapper.mjs and its process group when lease ownership is lost 1379ms
 ✓ tests/direct-run-failure.test.ts (6 tests) 17ms
 ✓ tests/budget-authored-live.test.ts (2 tests) 754ms
   ✓ authored budgets through the live kernel > retains the first completion and journals refusal of the next authored step 365ms
   ✓ authored budgets through the live kernel > permits done after the last valid step crosses the limit 387ms
 ✓ tests/local-agent-live.test.ts (5 tests) 45262ms
   ✓ built CLI local agent against a real daemon > dispatches through the wrapper and keeps --json stdout report-shaped 1983ms
   ✓ built CLI local agent against a real daemon > runs beyond the initial 30-second lease without a second invocation 36925ms
   ✓ built CLI local agent against a real daemon > renders actual agent completion in text output 2472ms
   ✓ built CLI local agent against a real daemon > returns a failed run when the agent process fails 2334ms
   ✓ built CLI local agent against a real daemon > refuses a workspace it cannot pin before invoking the agent 1545ms
 ✓ tests/slack-writeback.test.ts (1 test) 271ms
 ✓ tests/placement.test.ts (54 tests) 42ms
 ✓ tests/memory.test.ts (18 tests) 19ms
 ✓ tests/cli-progress-wait.test.ts (2 tests) 1368ms
   ✓ run starts the wait clock on its first observed lease 866ms
   ✓ resume starts the wait clock on its first observed lease 501ms
 ✓ tests/worker-platform.test.ts (1 test) 7ms

⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯

 FAIL  tests/cli-watch.test.ts > flows check --watch > streams JSON lines without ANSI, recovers after atomic saves, and exits zero after repair
 FAIL  tests/cli-watch.test.ts > flows check --watch > refreshes the import graph and notices missing imports being created
Error: Test timed out in 5000ms.
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯

 Test Files  1 failed | 70 passed | 1 skipped (72)
      Tests  2 failed | 1314 passed | 3 skipped (1319)
   Start at  21:57:14
   Duration  210.15s (transform 2.98s, setup 0ms, collect 31.33s, tests 354.15s, environment 24ms, prepare 9.76s)

