RUN  v2.1.9 /private/tmp/codegraph-review (node:18313) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18307) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18310) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18310) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18308) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18309) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18308) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18310) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/mcp-subproject-adoption.test.ts (3 tests) 1005ms ✓ MCP workspace sub-project adoption (#1606) + no-default diagnostics (#1607) > adopts the single indexed sub-project below a workspace root as the default project 430ms ✓ MCP workspace sub-project adoption (#1606) + no-default diagnostics (#1607) > lists several indexed sub-projects instead of adopting one, in stderr and in tool responses 341ms ✓ |engine| __tests__/ui-entrypoints-api.test.ts (14 tests) 587ms (node:18310) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/mcp-unindexed.test.ts (8 tests) 1481ms ✓ No-root-index session policy > a query by projectPath reaches an INDEXED sub-project of an unindexed root (monorepo) (#964) 411ms ✓ No-root-index session policy > an INDEXED workspace still gets the full playbook and the explore tool 505ms (node:18481) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/mcp-ppid-watchdog.test.ts (1 test) 953ms ✓ MCP PPID watchdog (#277) > shuts down when its parent is SIGKILL'd and stdin stays open 952ms (node:18539) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/mcp-roots.test.ts (3 tests) 1075ms ✓ MCP project resolution via roots/list (issue #196) > resolves the project from the client roots/list when no rootUri is sent 374ms ✓ MCP project resolution via roots/list (issue #196) > returns an actionable error when there is no rootUri and no roots capability 394ms ✓ MCP project resolution via roots/list (issue #196) > honors an explicit rootUri without asking the client for roots 306ms ✓ |engine| __tests__/mcp-initialize.test.ts (3 tests) 888ms ✓ MCP initialize handshake (issue #172) > sends initialize response BEFORE tryInitializeDefault finishes 369ms (node:18642) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/index-orphan-watchdog.test.ts (1 test) 318ms ✓ index/init orphan supervision (#999) > self-terminates when its parent is SIGKILL'd mid-index 317ms (node:18704) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:18642) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/status-json.test.ts (5 tests) 2412ms ✓ codegraph status --json — CI fields (#329) > getLastIndexedAt() is null before indexing and a recent ms timestamp after 318ms ✓ codegraph status --json — CI fields (#329) > status --json on an INDEXED project reports version + indexPath + a round-trippable lastIndexed 561ms ✓ index completeness marker (index_state) > a clean full index stamps state=complete with reconciled counts 562ms ✓ index completeness marker (index_state) > a run killed mid-index leaves state=indexing, and status --json surfaces it 824ms ✓ |engine| __tests__/cli-ui-command.test.ts (13 tests) 5980ms ✓ codegraph ui — serving > honours --no-open: no browser is launched 1889ms ✓ codegraph ui — serving > opens the browser at the served URL when --no-open is absent 607ms ✓ codegraph ui — serving > CODEGRAPH_BROWSER=none suppresses the launch like --no-open 1321ms ✓ codegraph ui — serving > refuses to move off a port the user pinned with --port 550ms ✓ |engine| __tests__/cli-node-command.test.ts (5 tests) 2253ms ✓ codegraph node — argument handling (#1044) > file mode via -f reads the file (was rejected as "missing required argument") 445ms ✓ codegraph node — argument handling (#1044) > a path-like positional still routes to file mode 416ms ✓ codegraph node — argument handling (#1044) > a bare symbol positional still routes to symbol mode 378ms ✓ codegraph node — symbol pinned to a file includes the body (#1284) > `node -f ` prints the pinned definition WITH its source body 721ms (node:19002) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:19002) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:19030) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:19002) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/mcp-startup-orphan.test.ts (2 tests) 4179ms ✓ startup-orphan backstop (#1185) > a server that never receives MCP traffic shuts itself down 1164ms ✓ startup-orphan backstop (#1185) > a server that got an initialize is never reaped by the backstop 3014ms (node:19002) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/cli-context-command.test.ts (6 tests) 2961ms ✓ codegraph context — registered CLI command (#1611) > --format json emits clean machine-parseable JSON on stdout 708ms ✓ codegraph context — registered CLI command (#1611) > --max-nodes bounds the returned symbol set 533ms ✓ codegraph context — registered CLI command (#1611) > --no-code omits code blocks (the Memorix contract shape) 491ms ✓ codegraph context — registered CLI command (#1611) > defaults to markdown output 580ms ✓ codegraph context — registered CLI command (#1611) > fails cleanly on an uninitialized project 406ms (node:18312) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/index-command.test.ts (5 tests) 11024ms ✓ codegraph index — full re-index keeps the graph populated (#874) > reproduces init's node/edge counts instead of emptying the index 1552ms ✓ codegraph index — full re-index keeps the graph populated (#874) > is idempotent: a second index does not grow the graph 1904ms ✓ codegraph index — full re-index keeps the graph populated (#874) > --quiet path also rebuilds a populated graph 1326ms ✓ codegraph index — recovers a stale/oversized prior index (#1067) > rebuilds to the current disk state, discarding content for files that no longer exist 3591ms ✓ codegraph index — recovers a stale/oversized prior index (#1067) > rebuilds a fresh database rather than clearing the old one in place 2649ms (node:19139) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/cli-unlock.test.ts (2 tests) 1684ms ✓ codegraph unlock — daemon artifact recovery (#1553) > removes indexing and phantom-daemon artifacts, then permits indexing 1403ms ✓ |engine| __tests__/cli-version.test.ts (9 tests) 1526ms ✓ codegraph version affordances > `codegraph -V` prints exactly the package version 311ms ✓ |engine| __tests__/cli-install-init.test.ts (5 tests) 5445ms ✓ codegraph install --init / init --yes (#1578) > install --yes --target none --init builds the current project's index in one command 1257ms ✓ codegraph install --init / init --yes (#1578) > install --init on an already-initialized project reports that and still exits 0 2002ms ✓ codegraph install --init / init --yes (#1578) > install --init refuses an unsafe root (filesystem root) with exit code 1, like init does 306ms ✓ codegraph install --init / init --yes (#1578) > init --yes runs non-interactively with stdin closed and builds the index 1357ms ✓ codegraph install --init / init --yes (#1578) > documents the new flags in --help 521ms (node:19299) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) (node:19329) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/cli-affected-paths.test.ts (1 test) 781ms ✓ codegraph affected — input path normalization (#825) > bare-relative, ./-prefixed, and absolute paths all resolve the same affected test 780ms ✓ |engine| __tests__/cli-query-command.test.ts (2 tests) 674ms ✓ codegraph query — score rendering (#1045) > human output ranks results without rendering a raw score as a percentage 366ms ✓ codegraph query — score rendering (#1045) > --json still carries the raw numeric score for programmatic use 307ms (node:19030) ExperimentalWarning: SQLite is an experimental feature and might change at any time (Use `node --trace-warnings ...` to show where the warning was created) ✓ |engine| __tests__/cli-no-color.test.ts (6 tests) 6544ms ✓ CLI color handling (#1281) > piped stdout gets no ANSI codes by default (status, query, callers, files) 2585ms ✓ CLI color handling (#1281) > NO_COLOR=1 suppresses ANSI codes even when colors are forced on by env 1185ms ✓ CLI color handling (#1281) > FORCE_COLOR=1 emits ANSI codes even though stdout is piped 568ms ✓ CLI color handling (#1281) > --color forces ANSI codes on piped stdout; --no-color wins over FORCE_COLOR 881ms ✓ CLI color handling (#1281) > --color / --no-color are accepted in any argv position (not rejected by subcommands) 313ms ✓ CLI color handling (#1281) > piped `codegraph index` emits plain per-phase lines: no ANSI, no \r rewrites 750ms ✓ |engine| __tests__/mcp-daemon.test.ts (10 tests) 15286ms ✓ Shared MCP daemon (issue #411) > two invocations share ONE detached daemon; both attach as proxies 1115ms ✓ Shared MCP daemon (issue #411) > concurrent launchers converge on a single daemon (lockfile race — must-fix 1) 653ms ✓ Shared MCP daemon (issue #411) > daemon survives the first client dying; a second client keeps working (must-fix 2 / #277) 2238ms ✓ Shared MCP daemon (issue #411) > CODEGRAPH_NO_DAEMON=1 keeps each process independent (no socket/pidfile) 329ms ✓ Shared MCP daemon (issue #411) > clears a stale (dead-pid) lockfile and a fresh daemon takes over 833ms ✓ Shared MCP daemon (issue #411) > takes over after SIGKILL even when the stale PID has been reused (#1553) 1999ms ✓ Shared MCP daemon (issue #411) > proxy falls back to direct mode on a daemon version mismatch 538ms ✓ Shared MCP daemon (issue #411) > does NOT reap a live-but-quiet client on the inactivity backstop (#692) 5355ms ✓ Shared MCP daemon (issue #411) > daemon idle-times-out after the last client disconnects 1461ms ✓ Shared MCP daemon (issue #411) > proxy survives the daemon dying mid-session and keeps serving (#662) 763ms ✓ |engine| __tests__/liveness-watchdog.test.ts (10 tests) 17452ms ✓ liveness watchdog (spawned, real watchdog process) > SIGKILLs a process whose main thread wedges in a sync loop 639ms ✓ liveness watchdog (spawned, real watchdog process) > SIGKILLs a non-allocating wedge under heap pressure (the case worker threads stalled on) 642ms ✓ liveness watchdog (spawned, real watchdog process) > does NOT kill a healthy process that keeps its event loop turning 1546ms ✓ liveness watchdog (spawned, real watchdog process) > does NOT kill a blocked loop while the watched files advance (slow store, not a wedge) 3205ms ✓ liveness watchdog (spawned, real watchdog process) > still kills a blocked loop when the watched files do NOT advance (a true wedge) 689ms ✓ liveness watchdog (spawned, real watchdog process) > kills at the hard cap even with ongoing file activity (bounded deferral) 9006ms ✓ liveness watchdog (spawned, real watchdog process) > does NOT kill a wedged process when CODEGRAPH_NO_WATCHDOG=1 1722ms  Test Files  21 passed (21)  Tests  114 passed (114)  Start at  12:13:20  Duration  17.75s (transform 1.70s, setup 0ms, collect 14.02s, tests 84.51s, environment 7ms, prepare 1.54s) retry exit: 0