this derivation will be built: /nix/store/lff6cwam3ry6m778zz490b5991xwds00-spaces-integration-gateway-unit-test.drv this path will be fetched (34.4 MiB download, 96.3 MiB unpacked): /nix/store/gzh2rx2sjwra135my0jw3va49hm7z4vf-bun-1.3.13 building '/nix/store/lff6cwam3ry6m778zz490b5991xwds00-spaces-integration-gateway-unit-test.drv' spaces-integration-gateway-unit-test> bun test v1.3.13 (bf2e2cec) spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> gateway-core.test.ts: spaces-integration-gateway-unit-test> ✓ discoverTools returns the server's tools with inputSchema as parameters [22.00ms] spaces-integration-gateway-unit-test> ✓ discoverTools resolves [] when the socket is unreachable [8.00ms] spaces-integration-gateway-unit-test> ✓ buildRegistry namespaces tools and precomputes the autoRun verdict [3.00ms] spaces-integration-gateway-unit-test> ✓ loadDefinition parses confirmPreview; absent ⇒ empty map spaces-integration-gateway-unit-test> ✓ buildRegistry carries confirmPreview and hides preview tools from the registry [2.00ms] spaces-integration-gateway-unit-test> integrations: cannot read definition for ghost: Error: ENOENT: no such file or directory, open '/build/gateway-core-test-NORrI5/reg2/ghost.json' spaces-integration-gateway-unit-test> ✓ buildRegistry skips disabled integrations and missing definitions [3.00ms] spaces-integration-gateway-unit-test> integrations: cannot read /build/gateway-core-test-NORrI5/reg3/enabled.json: SyntaxError: JSON Parse error: Expected '}' spaces-integration-gateway-unit-test> ✓ buildRegistry yields nothing when enabled.json is unreadable/malformed spaces-integration-gateway-unit-test> ✓ enabledMtimeMs is 0 when absent, positive once the file exists [1.00ms] spaces-integration-gateway-unit-test> ✓ refreshRegistry rebuilds only when enabled.json's mtime moves spaces-integration-gateway-unit-test> ✓ integrationNames lists each enabled integration once [1.00ms] spaces-integration-gateway-unit-test> ✓ callIntegrationTool: initialize/initialized/tools-call, text concatenated [25.00ms] spaces-integration-gateway-unit-test> ✓ callIntegrationTool: server isError surfaces as isError [3.00ms] spaces-integration-gateway-unit-test> ✓ callIntegrationTool: connection failure resolves unavailable, never throws spaces-integration-gateway-unit-test> ✓ callIntegrationTool: timeout resolves unavailable [206.00ms] spaces-integration-gateway-unit-test> ✓ callIntegrationTool: abort signal resolves unavailable [4.00ms] spaces-integration-gateway-unit-test> ✓ mcpExchange runs the step chain and yields the final reply [2.00ms] spaces-integration-gateway-unit-test> ✓ mcpExchange resolves a failure result, never rejects spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> mcp-server.test.ts: spaces-integration-gateway-unit-test> ✓ advertisedTools maps registry entries to MCP tool descriptors [1.00ms] spaces-integration-gateway-unit-test> ✓ initialize advertises the tool-list-changed capability and marks the session spaces-integration-gateway-unit-test> ✓ notifications/initialized owes no reply spaces-integration-gateway-unit-test> ✓ tools/list returns the aggregated advertised tools spaces-integration-gateway-unit-test> ✓ an unknown method resolves a JSON-RPC method-not-found error spaces-integration-gateway-unit-test> ✓ an autoRun tool forwards immediately with no confirm spaces-integration-gateway-unit-test> ✓ a non-autoRun tool confirmed 'once' forwards but does not persist the grant [1.00ms] spaces-integration-gateway-unit-test> ✓ a non-autoRun tool confirmed 'session' skips the prompt on later calls spaces-integration-gateway-unit-test> ✓ a session grant is scoped to its own session, not shared spaces-integration-gateway-unit-test> ✓ a denied tool is never forwarded and returns the denial spaces-integration-gateway-unit-test> ✓ an unavailable confirm command blocks the call and says nobody was asked spaces-integration-gateway-unit-test> ✓ an unknown tool errors without confirming or forwarding spaces-integration-gateway-unit-test> ✓ confirmPreview output is fetched and passed as the confirm context spaces-integration-gateway-unit-test> ✓ a failed confirmPreview fails closed: surfaces the error, no prompt, no send spaces-integration-gateway-unit-test> ✓ spaces/session is a notification: it owes no reply spaces-integration-gateway-unit-test> ✓ two sessions sharing one key share a session grant [1.00ms] spaces-integration-gateway-unit-test> ✓ distinct keys keep grants isolated spaces-integration-gateway-unit-test> ✓ a bad key (empty / oversized / non-string) does not bind a shared set spaces-integration-gateway-unit-test> ✓ binding sweeps entries idle beyond the TTL spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> confirm.test.ts: spaces-integration-gateway-unit-test> ✓ returns the verdict the command writes to the verdict file [15.00ms] spaces-integration-gateway-unit-test> ✓ tolerates surrounding whitespace/newlines in the verdict [2.00ms] spaces-integration-gateway-unit-test> ✓ passes the request JSON to the command via SPACES_CONFIRM_REQUEST [1.00ms] spaces-integration-gateway-unit-test> integrations: confirm command unavailable: unknown verdict maybe spaces-integration-gateway-unit-test> ✓ reports unavailable when the command writes an unknown token [2.00ms] spaces-integration-gateway-unit-test> integrations: confirm command unavailable: no verdict file spaces-integration-gateway-unit-test> ✓ reports unavailable when the command writes nothing [1.00ms] spaces-integration-gateway-unit-test> integrations: confirm command unavailable: exit 3 spaces-integration-gateway-unit-test> ✓ reports unavailable on a non-zero exit even if a verdict was written [4.00ms] spaces-integration-gateway-unit-test> integrations: confirm command unavailable: SPACES_INTEGRATION_CONFIRM_CMD is empty spaces-integration-gateway-unit-test> ✓ reports unavailable when no confirm command is configured spaces-integration-gateway-unit-test> integrations: confirm command unavailable: spawn failed: ENOENT: no such file or directory, posix_spawn '/build/no-such-confirm-command' spaces-integration-gateway-unit-test> ✓ reports unavailable when the command cannot be spawned [6.00ms] spaces-integration-gateway-unit-test> integrations: confirm command unavailable: no verdict within 200ms spaces-integration-gateway-unit-test> ✓ reports unavailable when the command exceeds the timeout [206.00ms] spaces-integration-gateway-unit-test> ✓ hands the command the user manager's WAYLAND_DISPLAY when its own env has none [37.00ms] spaces-integration-gateway-unit-test> ✓ keeps a display already in the gateway's env [29.00ms] spaces-integration-gateway-unit-test> ✓ ignores a quoted or otherwise non-plain user manager value [13.00ms] spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> connect.test.ts: spaces-integration-gateway-unit-test> ✓ bridges bytes both directions and resolves when the socket closes [17.00ms] spaces-integration-gateway-unit-test> ✓ resolves (never hangs) when the socket is unreachable [1.00ms] spaces-integration-gateway-unit-test> ✓ bridge declares a spaces/session key as its first socket line [3.00ms] spaces-integration-gateway-unit-test> ✓ distinct bridge invocations declare distinct keys [2.00ms] spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> notify.test.ts: spaces-integration-gateway-unit-test> ✓ broadcast sends one tools/list_changed notification per initialized client [13.00ms] spaces-integration-gateway-unit-test> ✓ broadcast skips a client that has not initialized spaces-integration-gateway-unit-test> ✓ broadcast survives a write that throws spaces-integration-gateway-unit-test> ✓ watch reports a change of the file, once per change spaces-integration-gateway-unit-test> ✓ watch reports the file appearing and going away spaces-integration-gateway-unit-test> ✓ a stopped watch schedules no further poll spaces-integration-gateway-unit-test> ✓ watch keeps polling after onChange throws spaces-integration-gateway-unit-test> ✓ the real mtime reader treats a missing file as no file spaces-integration-gateway-unit-test> ✓ an empty path gives an inert watch spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> live-notify.test.ts: spaces-integration-gateway-unit-test> ✓ a live session hears about an integration enabled after it connected [136.00ms] spaces-integration-gateway-unit-test> spaces-integration-gateway-unit-test> 62 pass spaces-integration-gateway-unit-test> 0 fail spaces-integration-gateway-unit-test> 136 expect() calls spaces-integration-gateway-unit-test> Ran 62 tests across 6 files. [901.00ms] post-build step Upload to niks3: ok time=2026-08-28T04:19:09.389Z level=INFO msg="Uploading 0 paths to 127.0.0.1 (1 already cached)" time=2026-08-28T04:19:10.489Z level=INFO msg="Uploading 1 narinfos" time=2026-08-28T04:19:10.809Z level=INFO msg="Upload complete. (1.598s)"