=== CodeArts build layer === layer : ut-host commit : e61a432270c0c2ad7413d1c89a0b0b23facab68f publish : .ci-results/publish bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8) === runner === user : root (uid 0) os : Linux 5.10.0-182.0.0.95.r3582_286.hce2.x86_64 x86_64 distro : Ubuntu 24.04.4 LTS pwd : /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository entries : .agents .ci .ci-results .ci-trigger .claude .codearts .dockerignore .env.docker.example .env.example .git .gitattributes .github .gitignore .npmrc CODEOWNERS CONTRIBUTING.md Dockerfile LICENSE README.md README_zh.md Third_Party_Open_Source_Software_Notice.txt apps config docker-compose.yml docs extensions_config.json package.json packages pnpm-lock.yaml pnpm-workspace.yaml scripts services skills test tsconfig.base.json git /usr/bin/git curl /usr/bin/curl wget missing sudo missing apt-get /usr/bin/apt-get node /root/.local/node/bin/node npm /root/.local/node/bin/npm corepack /root/.local/node/bin/corepack python3 /usr/bin/python3 bwrap /usr/bin/bwrap node : v22.19.0 === node (need >= 22.19.0) === present: v22.19.0 === npm registry === configured: https://repo.huaweicloud.com/repository/npm/ === pnpm (pnpm@11.1.2) === already present 11.1.2 === uv (uv@0.9.26) === python : Python 3.12.3 pip : /usr/bin/python3: No module named pip missing already present uv 0.9.26 === bubblewrap === could not clear kernel.apparmor_restrict_unprivileged_userns unavailable; continuing === provisioned === python install mirror: https://registry.npmmirror.com/-/binary/python-build-standalone retargeting services/gateway/uv.lock to https://repo.huaweicloud.com/repository/pypi/simple Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Resolved 33 packages in 982ms retargeting services/paper/uv.lock to https://repo.huaweicloud.com/repository/pypi/simple Using CPython 3.12.3 interpreter at: /usr/bin/python3 Resolved 10 packages in 347ms retargeting services/memory-graph/uv.lock to https://repo.huaweicloud.com/repository/pypi/simple Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Resolved 29 packages in 269ms dependency mirrors: npm=https://repo.huaweicloud.com/repository/npm/, pypi=https://repo.huaweicloud.com/repository/pypi/simple Scope: all 33 workspace projects Lockfile is up to date, resolution step is skipped ╭─────────────────────────────────────────╮ │ │ │ Update available! 11.1.2 → 12.5.1. │ │ Changelog: https://pnpm.io/v/12.5.1 │ │ To update, run: pnpm add -g pnpm │ │ │ ╰─────────────────────────────────────────╯ Progress: resolved 1, reused 0, downloaded 0, added 0 Packages: +345 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Progress: resolved 345, reused 0, downloaded 27, added 4 Progress: resolved 345, reused 0, downloaded 41, added 8 Progress: resolved 345, reused 0, downloaded 216, added 93 Progress: resolved 345, reused 0, downloaded 323, added 138 Progress: resolved 345, reused 0, downloaded 345, added 345, done .../node_modules/@scarf/scarf postinstall$ node ./report.js .../esbuild@0.28.1/node_modules/esbuild postinstall$ node install.js .../esbuild@0.28.1/node_modules/esbuild postinstall: Done .../node_modules/@scarf/scarf postinstall: Done devDependencies: + @babel/parser 7.28.5 + @types/node 26.1.1 + tsx 4.23.1 + typescript 7.0.2 Done in 6.6s using pnpm v11.1.2 $ node .ci/run-layer.mjs ut-host $ pnpm install --frozen-lockfile Scope: all 33 workspace projects Already up to date Done in 624ms using pnpm v11.1.2 $ uv sync --project services/gateway Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Creating virtual environment at: services/gateway/.venv Resolved 33 packages in 1ms Building sciencediscovery-gateway @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/gateway Downloading cryptography (4.5MiB) Downloading pydantic-core (2.0MiB) Downloaded pydantic-core Downloaded cryptography Built sciencediscovery-gateway @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/gateway Prepared 31 packages in 922ms warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 31 packages in 74ms + annotated-types==0.7.0 + anyio==4.14.2 + attrs==26.1.0 + certifi==2026.6.17 + cffi==2.1.0 + click==8.4.2 + cryptography==49.0.0 + h11==0.16.0 + httpcore==1.0.9 + httpx==0.28.1 + httpx-sse==0.4.3 + idna==3.18 + jsonschema==4.26.0 + jsonschema-specifications==2025.9.1 + mcp==1.28.1 + pycparser==3.0 + pydantic==2.13.4 + pydantic-core==2.46.4 + pydantic-settings==2.14.2 + pyjwt==2.13.0 + python-dotenv==1.2.2 + python-multipart==0.0.32 + referencing==0.37.0 + rpds-py==2026.6.3 + sciencediscovery-gateway==0.0.0 (from file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/gateway) + socksio==1.0.0 + sse-starlette==3.3.4 + starlette==1.3.1 + typing-extensions==4.16.0 + typing-inspection==0.4.2 + uvicorn==0.51.0 $ uv sync --project services/paper Using CPython 3.12.3 interpreter at: /usr/bin/python3 Creating virtual environment at: services/paper/.venv Resolved 10 packages in 2ms Downloading pdfminer-six (6.3MiB) Downloading pillow (6.6MiB) Downloading pypdfium2 (3.5MiB) Downloading reportlab (1.9MiB) Downloaded pypdfium2 Downloaded reportlab Downloaded pillow Downloaded pdfminer-six Prepared 6 packages in 408ms warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 9 packages in 40ms + cffi==2.1.0 + charset-normalizer==3.4.9 + cryptography==49.0.0 + pdfminer-six==20260107 + pdfplumber==0.11.10 + pillow==12.3.0 + pycparser==3.0 + pypdfium2==5.11.0 + reportlab==4.5.1 $ pnpm build $ pnpm --recursive build Scope: 32 of 33 workspace projects config build$ tsc -p tsconfig.json packages/operational-logging build$ tsc -p tsconfig.json config build: Done packages/runtime-core build$ tsc -p tsconfig.json packages/operational-logging build: Done packages/sandbox-capability build$ tsc -p tsconfig.json packages/runtime-core build: Done packages/sandbox-capability build: Done packages/schema build$ tsc -p tsconfig.json packages/tools build$ tsc -p tsconfig.json packages/schema build: Done services/launcher build$ tsc -p tsconfig.json services/launcher build: Done packages/tools build: Done packages/cas build$ tsc -p tsconfig.json packages/evolve build$ tsc -p tsconfig.json packages/cas build: Done packages/governance build$ tsc -p tsconfig.json packages/governance build: Done packages/idea-tree build$ tsc -p tsconfig.json packages/evolve build: Done packages/memory build$ tsc -p tsconfig.json packages/memory build: Done packages/model build$ tsc -p tsconfig.json packages/model build: Done packages/idea-tree build: Done packages/context build$ tsc -p tsconfig.json packages/orchestration build$ tsc -p tsconfig.json packages/context build: Done packages/trajectory build$ tsc -p tsconfig.json packages/trajectory build: Done services/runner build$ tsc -p tsconfig.json && node scripts/build-version.mjs packages/orchestration build: Done services/runner build: Runner build: e61a4322-dirty services/runner build: Done packages/executor build$ tsc -p tsconfig.json packages/plugin-sdk build$ tsc -p tsconfig.json packages/executor build: Done packages/workspace build$ tsc -p tsconfig.json packages/plugin-sdk build: Done packages/workspace build: Done packages/artifact-json build$ tsc -p tsconfig.json packages/mcp build$ tsc -p tsconfig.json packages/artifact-json build: Done packages/mcp-sources build$ tsc -p tsconfig.json packages/mcp-sources build: Done packages/plan build$ tsc -p tsconfig.json packages/mcp build: Done packages/scheduler build$ tsc -p tsconfig.json packages/plan build: Done packages/skill build$ tsc -p tsconfig.json packages/scheduler build: Done packages/skill build: Done apps/web build$ vite build packages/data-source build$ tsc -p tsconfig.json apps/web build: vite v8.1.4 building client environment for production... apps/web build:  packages/data-source build: Done apps/web build: transforming...✓ 3701 modules transformed. apps/web build: rendering chunks... apps/web build: computing gzip size... apps/web build: dist/index.html 1.19 kB │ gzip: 0.68 kB apps/web build: dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff 4.42 kB apps/web build: dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 4.92 kB apps/web build: dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 5.20 kB apps/web build: dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 5.46 kB apps/web build: dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff 5.98 kB apps/web build: dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff 6.18 kB apps/web build: dist/assets/KaTeX_Size1-Regular-C195tn64.woff 6.49 kB apps/web build: dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 6.90 kB apps/web build: dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 6.91 kB apps/web build: dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf 7.58 kB apps/web build: dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff 7.65 kB apps/web build: dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff 7.71 kB apps/web build: dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 9.64 kB apps/web build: dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 10.34 kB apps/web build: dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf 10.36 kB apps/web build: dist/assets/KaTeX_Script-Regular-D5yQViql.woff 10.58 kB apps/web build: dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 11.31 kB apps/web build: dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 11.34 kB apps/web build: dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf 11.50 kB apps/web build: dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 12.02 kB apps/web build: dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 12.21 kB apps/web build: dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf 12.22 kB apps/web build: dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff 12.31 kB apps/web build: dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf 12.34 kB apps/web build: dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf 12.36 kB apps/web build: dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff 13.20 kB apps/web build: dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff 13.29 kB apps/web build: dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 13.56 kB apps/web build: dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff 14.11 kB apps/web build: dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff 14.40 kB apps/web build: dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff 16.02 kB apps/web build: dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 16.40 kB apps/web build: dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 16.44 kB apps/web build: dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf 16.64 kB apps/web build: dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 16.78 kB apps/web build: dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 16.98 kB apps/web build: dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff 18.66 kB apps/web build: dist/assets/KaTeX_Math-Italic-DA0__PXp.woff 18.74 kB apps/web build: dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff 19.41 kB apps/web build: dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf 19.43 kB apps/web build: dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf 19.57 kB apps/web build: dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf 19.58 kB apps/web build: dist/assets/KaTeX_Main-Italic-BMLOBm91.woff 19.67 kB apps/web build: dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf 22.36 kB apps/web build: dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf 24.50 kB apps/web build: dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 25.32 kB apps/web build: dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 26.27 kB apps/web build: dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf 27.55 kB apps/web build: dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 28.07 kB apps/web build: dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff 29.91 kB apps/web build: dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff 30.77 kB apps/web build: dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf 31.19 kB apps/web build: dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf 31.30 kB apps/web build: dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf 32.96 kB apps/web build: dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff 33.51 kB apps/web build: dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf 33.58 kB apps/web build: dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf 51.33 kB apps/web build: dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf 53.58 kB apps/web build: dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf 63.63 kB apps/web build: dist/assets/CsvArtifactWindow-BmD41nfJ.css 17.64 kB │ gzip: 3.36 kB apps/web build: dist/assets/MolstarWindow-Df5OawEn.css 69.08 kB │ gzip: 15.74 kB apps/web build: dist/assets/index-D-lFooYG.css 373.34 kB │ gzip: 63.13 kB apps/web build: dist/assets/rolldown-runtime-QTnfLwEv.js 0.69 kB │ gzip: 0.42 kB apps/web build: dist/assets/MemoryGraphExplorer-Cvr9CZD1.js 25.12 kB │ gzip: 7.73 kB apps/web build: dist/assets/CsvArtifactWindow-DhV3Y5Mu.js 74.51 kB │ gzip: 23.75 kB apps/web build: dist/assets/i18n-Dj3qcp0k.js 296.30 kB │ gzip: 90.30 kB apps/web build: dist/assets/index-JtozevyO.js 1,844.93 kB │ gzip: 534.12 kB apps/web build: dist/assets/MolstarWindow-Bpz1q1Xf.js 3,169.53 kB │ gzip: 881.53 kB apps/web build: dist/assets/plotly.min-CglOtY28.js 4,606.23 kB │ gzip: 1,381.80 kB apps/web build: ✓ built in 6.18s apps/web build: [plugin builtin:vite-reporter] apps/web build: (!) Some chunks are larger than 500 kB after minification. Consider: apps/web build: - Using dynamic import() to code-split the application apps/web build: - Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting apps/web build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit. apps/web build: Done packages/artifact-manager build$ tsc -p tsconfig.json packages/artifact-manager build: Done packages/provenance build$ tsc -p tsconfig.json packages/provenance build: Done packages/specialist build$ tsc -p tsconfig.json packages/specialist build: Done services/api build$ tsc -p tsconfig.json services/api build: Done $ pnpm architecture:check $ node --test scripts/*.test.mjs && node scripts/check-architecture.mjs TAP version 13 # Subtest: host injects a callback without a reverse source dependency ok 1 - host injects a callback without a reverse source dependency --- duration_ms: 16.664569 type: 'test' ... # Subtest: static, dynamic, require, re-export and type imports cannot reach the host ok 2 - static, dynamic, require, re-export and type imports cannot reach the host --- duration_ms: 8.50766 type: 'test' ... # Subtest: cycles include type-only source imports and manifest dependencies ok 3 - cycles include type-only source imports and manifest dependencies --- duration_ms: 1.804671 type: 'test' ... # Subtest: private and cross-package relative imports are rejected ok 4 - private and cross-package relative imports are rejected --- duration_ms: 3.948737 type: 'test' ... # Subtest: browser traversal follows helper re-exports and workspace package exports ok 5 - browser traversal follows helper re-exports and workspace package exports --- duration_ms: 1.235357 type: 'test' ... # Subtest: browser type imports are erased but comments are not imports ok 6 - browser type imports are erased but comments are not imports --- duration_ms: 1.274242 type: 'test' ... # Subtest: manifest-only package to host dependency is rejected ok 7 - manifest-only package to host dependency is rejected --- duration_ms: 0.86514 type: 'test' ... # Subtest: legacy allowance is exact and never suppresses cycles or new files ok 8 - legacy allowance is exact and never suppresses cycles or new files --- duration_ms: 0.710253 type: 'test' ... # Subtest: continuations join and comments drop before an instruction is read ok 9 - continuations join and comments drop before an instruction is read --- duration_ms: 3.159165 type: 'test' ... # Subtest: COPY sources exclude the destination, flags, and other build stages ok 10 - COPY sources exclude the destination, flags, and other build stages --- duration_ms: 0.497677 type: 'test' ... # Subtest: RUN bind mounts are context reads unless they name a stage ok 11 - RUN bind mounts are context reads unless they name a stage --- duration_ms: 0.311237 type: 'test' ... # Subtest: a glob is checked down to the segments before the first wildcard ok 12 - a glob is checked down to the segments before the first wildcard --- duration_ms: 0.321665 type: 'test' ... # Subtest: a source that left the tree is reported with the instruction that reads it ok 13 - a source that left the tree is reported with the instruction that reads it --- duration_ms: 0.461121 type: 'test' ... # Subtest: lockfile importers are read as workspace directories ok 14 - lockfile importers are read as workspace directories --- duration_ms: 0.523319 type: 'test' ... # Subtest: every build-context path the product Dockerfile reads exists ok 15 - every build-context path the product Dockerfile reads exists --- duration_ms: 1.18539 type: 'test' ... # Subtest: the product Dockerfile names no workspace manifest by hand ok 16 - the product Dockerfile names no workspace manifest by hand --- duration_ms: 9.210205 type: 'test' ... # Subtest: every workspace project in the lockfile still has its manifest ok 17 - every workspace project in the lockfile still has its manifest --- duration_ms: 13.040961 type: 'test' ... 1..17 # tests 17 # suites 0 # pass 17 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 323.61863 Architecture boundaries OK (276 package source files checked) $ pnpm typecheck $ pnpm --recursive typecheck Scope: 32 of 33 workspace projects config typecheck$ tsc -p tsconfig.json --noEmit packages/operational-logging typecheck$ tsc -p tsconfig.json --noEmit config typecheck: Done packages/runtime-core typecheck$ tsc -p tsconfig.json --noEmit packages/operational-logging typecheck: Done packages/sandbox-capability typecheck$ tsc -p tsconfig.json --noEmit packages/runtime-core typecheck: Done packages/sandbox-capability typecheck: Done packages/schema typecheck$ tsc -p tsconfig.json --noEmit packages/tools typecheck$ tsc -p tsconfig.json --noEmit packages/schema typecheck: Done services/launcher typecheck$ tsc -p tsconfig.json --noEmit services/launcher typecheck: Done packages/tools typecheck: Done packages/cas typecheck$ tsc -p tsconfig.json --noEmit packages/evolve typecheck$ tsc -p tsconfig.json --noEmit packages/cas typecheck: Done packages/governance typecheck$ tsc -p tsconfig.json --noEmit packages/governance typecheck: Done packages/idea-tree typecheck$ tsc -p tsconfig.json --noEmit packages/evolve typecheck: Done packages/memory typecheck$ tsc -p tsconfig.json --noEmit packages/memory typecheck: Done packages/model typecheck$ tsc -p tsconfig.json --noEmit packages/model typecheck: Done packages/idea-tree typecheck: Done packages/context typecheck$ tsc -p tsconfig.json --noEmit packages/orchestration typecheck$ tsc -p tsconfig.json --noEmit packages/context typecheck: Done packages/trajectory typecheck$ tsc -p tsconfig.json --noEmit packages/trajectory typecheck: Done services/runner typecheck$ tsc -p tsconfig.json --noEmit packages/orchestration typecheck: Done services/runner typecheck: Done packages/executor typecheck$ tsc -p tsconfig.json --noEmit packages/plugin-sdk typecheck$ tsc -p tsconfig.json --noEmit packages/executor typecheck: Done packages/workspace typecheck$ tsc -p tsconfig.json --noEmit packages/plugin-sdk typecheck: Done packages/workspace typecheck: Done packages/artifact-json typecheck$ tsc -p tsconfig.json --noEmit packages/mcp typecheck$ tsc -p tsconfig.json --noEmit packages/artifact-json typecheck: Done packages/mcp-sources typecheck$ tsc -p tsconfig.json --noEmit packages/mcp-sources typecheck: Done packages/plan typecheck$ tsc -p tsconfig.json --noEmit packages/mcp typecheck: Done packages/scheduler typecheck$ tsc -p tsconfig.json --noEmit packages/plan typecheck: Done packages/skill typecheck$ tsc -p tsconfig.json --noEmit packages/scheduler typecheck: Done packages/skill typecheck: Done apps/web typecheck$ tsc -p tsconfig.json --noEmit packages/data-source typecheck$ tsc -p tsconfig.json --noEmit packages/data-source typecheck: Done apps/web typecheck: Done packages/artifact-manager typecheck$ tsc -p tsconfig.json --noEmit packages/artifact-manager typecheck: Done packages/provenance typecheck$ tsc -p tsconfig.json --noEmit packages/provenance typecheck: Done packages/specialist typecheck$ tsc -p tsconfig.json --noEmit packages/specialist typecheck: Done services/api typecheck$ tsc -p tsconfig.json --noEmit services/api typecheck: Done $ pnpm ci:selftest $ node --test .ci/*.test.mjs TAP version 13 # Subtest: the newest /merge comment is the one that authorizes the merge ok 1 - the newest /merge comment is the one that authorizes the merge --- duration_ms: 81.447633 type: 'test' ... # Subtest: a comment that only mentions /merge does not authorize anything ok 2 - a comment that only mentions /merge does not authorize anything --- duration_ms: 72.748585 type: 'test' ... # Subtest: a merge request without a /merge comment is refused, not guessed at ok 3 - a merge request without a /merge comment is refused, not guessed at --- duration_ms: 64.952099 type: 'test' ... # Subtest: an anonymous /merge comment cannot stand in for a CODEOWNER ok 4 - an anonymous /merge comment cannot stand in for a CODEOWNER --- duration_ms: 85.185397 type: 'test' ... # Subtest: the merge request's live state is read field by field ok 5 - the merge request's live state is read field by field --- duration_ms: 63.29766 type: 'test' ... # Subtest: one unmet approval rule marks the whole merge request unapproved ok 6 - one unmet approval rule marks the whole merge request unapproved --- duration_ms: 63.540976 type: 'test' ... # Subtest: a merge request that reports no approval rules is not reported as unapproved ok 7 - a merge request that reports no approval rules is not reported as unapproved --- duration_ms: 65.171997 type: 'test' ... # Subtest: the pipeline runs the merge on a build task, not on a pipeline executor ok 8 - the pipeline runs the merge on a build task, not on a pipeline executor --- duration_ms: 11.026489 type: 'test' ... # Subtest: the pipeline names a real build task ok 9 - the pipeline names a real build task --- duration_ms: 1.189595 type: 'test' ... # Subtest: a CODEOWNER's /merge merges and reports the range it landed ok 10 - a CODEOWNER's /merge merges and reports the range it landed --- duration_ms: 340.362621 type: 'test' ... # Subtest: CODEOWNERS is matched without regard to case ok 11 - CODEOWNERS is matched without regard to case --- duration_ms: 434.837985 type: 'test' ... # Subtest: a CODEOWNERS with no owners in it is a broken lookup, not an empty club ok 12 - a CODEOWNERS with no owners in it is a broken lookup, not an empty club --- duration_ms: 354.770586 type: 'test' ... # Subtest: a /merge from outside CODEOWNERS is refused and the branch stays put ok 13 - a /merge from outside CODEOWNERS is refused and the branch stays put --- duration_ms: 289.575559 type: 'test' ... # Subtest: a merge request that moved after the /merge comment is refused ok 14 - a merge request that moved after the /merge comment is refused --- duration_ms: 265.840594 type: 'test' ... # Subtest: draft, closed, merged and conflicting merge requests each say why ok 15 - draft, closed, merged and conflicting merge requests each say why --- duration_ms: 1197.049601 type: 'test' ... # Subtest: an unmet approval rule is forced through and the report says so ok 16 - an unmet approval rule is forced through and the report says so --- duration_ms: 397.715553 type: 'test' ... # Subtest: a rejected merge call is quoted back on the merge request ok 17 - a rejected merge call is quoted back on the merge request --- duration_ms: 416.091783 type: 'test' ... # Subtest: a merge request with no /merge comment at all stops before commenting ok 18 - a merge request with no /merge comment at all stops before commenting --- duration_ms: 134.349478 type: 'test' ... # Subtest: the pipeline sends exactly the values the merge script requires ok 19 - the pipeline sends exactly the values the merge script requires --- duration_ms: 1.852117 type: 'test' ... # Subtest: the checked-in catalog satisfies the whole CI contract ok 20 - the checked-in catalog satisfies the whole CI contract --- duration_ms: 22.271548 type: 'test' ... # Subtest: UT is exactly two tiers and every UT case carries one of them ok 21 - UT is exactly two tiers and every UT case carries one of them --- duration_ms: 0.983772 type: 'test' ... # Subtest: a UT case without a tier tag is rejected ok 22 - a UT case without a tier tag is rejected --- duration_ms: 0.844177 type: 'test' ... # Subtest: a UT case in both tiers is rejected ok 23 - a UT case in both tiers is rejected --- duration_ms: 0.427676 type: 'test' ... # Subtest: an unknown tier value is rejected ok 24 - an unknown tier value is rejected --- duration_ms: 0.502442 type: 'test' ... # Subtest: a non-UT case may not claim a UT tier ok 25 - a non-UT case may not claim a UT tier --- duration_ms: 0.418226 type: 'test' ... # Subtest: a tier whose sandbox requirement disagrees with it is rejected ok 26 - a tier whose sandbox requirement disagrees with it is rejected --- duration_ms: 17.023887 type: 'test' ... # Subtest: the two tiers cover every workspace package that has tests, and none twice ok 27 - the two tiers cover every workspace package that has tests, and none twice --- duration_ms: 32.748595 type: 'test' ... # Subtest: a guest package that is not a workspace project is rejected ok 28 - a guest package that is not a workspace project is rejected --- duration_ms: 15.970644 type: 'test' ... # Subtest: a hand-edited package filter that orphans a package is rejected ok 29 - a hand-edited package filter that orphans a package is rejected --- duration_ms: 8.999266 type: 'test' ... # Subtest: a package claimed by both tiers is rejected ok 30 - a package claimed by both tiers is rejected --- duration_ms: 7.251246 type: 'test' ... # Subtest: the ut aggregate is exactly the host tier followed by the guest tier ok 31 - the ut aggregate is exactly the host tier followed by the guest tier --- duration_ms: 9.733179 type: 'test' ... # Subtest: the guest tier neither installs nor builds ok 32 - the guest tier neither installs nor builds --- duration_ms: 6.807509 type: 'test' ... # Subtest: a third UT entry point outside the two tiers is rejected ok 33 - a third UT entry point outside the two tiers is rejected --- duration_ms: 4.437713 type: 'test' ... # Subtest: no CI script restates a value ci-constants.sh owns ok 34 - no CI script restates a value ci-constants.sh owns --- duration_ms: 32.001501 type: 'test' ... # Subtest: every build task a workflow calls is described in the console mirror ok 35 - every build task a workflow calls is described in the console mirror --- duration_ms: 9.258541 type: 'test' ... # Subtest: every build-task parameter a workflow passes is described in the console mirror ok 36 - every build-task parameter a workflow passes is described in the console mirror --- duration_ms: 3.442372 type: 'test' ... # Subtest: the parameter scan reads a build-task step and not the records it carries ok 37 - the parameter scan reads a build-task step and not the records it carries --- duration_ms: 1.31773 type: 'test' ... # Subtest: the console mirror points at files that exist ok 38 - the console mirror points at files that exist --- duration_ms: 1.514858 type: 'test' ... # Subtest: the host half names both layers it can run ok 39 - the host half names both layers it can run --- duration_ms: 34.357064 type: 'test' ... # Subtest: an unknown layer is refused ok 40 - an unknown layer is refused --- duration_ms: 34.967634 type: 'test' ... # Subtest: the UT guest tier refuses a workspace its host did not build ok 41 - the UT guest tier refuses a workspace its host did not build --- duration_ms: 64.673506 type: 'test' ... # Subtest: the E2E guest refuses a workspace whose host did not prepare .e2e ok 42 - the E2E guest refuses a workspace whose host did not prepare .e2e --- duration_ms: 52.20354 type: 'test' ... # Subtest: the guest disables pnpm's dependency check with the setting pnpm actually reads ok 43 - the guest disables pnpm's dependency check with the setting pnpm actually reads --- duration_ms: 3.41812 type: 'test' ... # Subtest: no workflow step spends the pipeline quota ok 44 - no workflow step spends the pipeline quota --- duration_ms: 2.763028 type: 'test' ... # Subtest: the emulated stack gets a health budget its services can meet ok 45 - the emulated stack gets a health budget its services can meet --- duration_ms: 2.972855 type: 'test' ... # Subtest: the guest reports why an unhealthy stack never came up ok 46 - the guest reports why an unhealthy stack never came up --- duration_ms: 1.141774 type: 'test' ... # Subtest: only the verification job can turn the run red ok 47 - only the verification job can turn the run red --- duration_ms: 1.557199 type: 'test' ... # Subtest: the result comment tells a reader how to re-run, and the trigger makes that true ok 48 - the result comment tells a reader how to re-run, and the trigger makes that true --- duration_ms: 1.265617 type: 'test' ... # Subtest: both guest layers install and build before handing the workspace over ok 49 - both guest layers install and build before handing the workspace over --- duration_ms: 1.286826 type: 'test' ... # Subtest: the disabled E2E layer is neither verified nor reported ok 50 - the disabled E2E layer is neither verified nor reported --- duration_ms: 4.667154 type: 'test' ... # Subtest: the UT guest payload leaves the external dependency tree behind ok 51 - the UT guest payload leaves the external dependency tree behind --- duration_ms: 4.076435 type: 'test' ... # Subtest: each guest layer stops its guest before CodeArts stops the job ok 52 - each guest layer stops its guest before CodeArts stops the job --- duration_ms: 2.180085 type: 'test' ... # Subtest: the packer refuses to build a payload without a dependency tree ok 53 - the packer refuses to build a payload without a dependency tree --- duration_ms: 21.936796 type: 'test' ... 1..53 # tests 53 # suites 0 # pass 53 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 5064.135987 $ pnpm binary:test $ node --test scripts/binary-release/*.test.mjs TAP version 13 # Subtest: selects a pinned native generator for native and cross targets ok 1 - selects a pinned native generator for native and cross targets --- duration_ms: 6.907655 type: 'test' ... # Subtest: rejects unsupported generator hosts before building ok 2 - rejects unsupported generator hosts before building --- duration_ms: 1.499833 type: 'test' ... # Subtest: requires an exact SEA generator Node version ok 3 - requires an exact SEA generator Node version --- duration_ms: 0.548658 type: 'test' ... # Subtest: runs SEA generation with the selected Node executable ok 4 - runs SEA generation with the selected Node executable --- duration_ms: 4.974709 type: 'test' ... # Subtest: passes line-oriented environment records and arguments without eval ok 5 - passes line-oriented environment records and arguments without eval --- duration_ms: 28.442912 type: 'test' ... # Subtest: rejects scripts that resolve outside the checkout ok 6 - rejects scripts that resolve outside the checkout --- duration_ms: 7.186622 type: 'test' ... # Subtest: rejects shell-control environment variables before executing the target ok 7 - rejects shell-control environment variables before executing the target --- duration_ms: 7.493749 type: 'test' ... # Subtest: returns the invoked script's exit status ok 8 - returns the invoked script's exit status --- duration_ms: 8.121618 type: 'test' ... # Subtest: verified binary fetcher reuses a matching local cache object ok 9 - verified binary fetcher reuses a matching local cache object --- duration_ms: 14.445249 type: 'test' ... # Subtest: verified binary fetcher reports a cache-only miss without using a source ok 10 - verified binary fetcher reports a cache-only miss without using a source --- duration_ms: 11.618514 type: 'test' ... # Subtest: verified binary fetcher applies a configurable download time limit ok 11 - verified binary fetcher applies a configurable download time limit --- duration_ms: 17.806349 type: 'test' ... # Subtest: prebuilt QEMU Runner image and workflow share the immutable cache contract ok 12 - prebuilt QEMU Runner image and workflow share the immutable cache contract --- duration_ms: 2.336719 type: 'test' ... # Subtest: the portable QEMU emulator is downloaded, never reassembled ok 13 - the portable QEMU emulator is downloaded, never reassembled --- duration_ms: 1.897514 type: 'test' ... # Managed micromamba download attempt 1/3 failed: Managed micromamba download failed (503); retrying. # Managed micromamba download attempt 2/3 failed: Managed micromamba download failed (503); retrying. # Downloading managed micromamba from conda mirror: https://mirrors.example/conda-forge/linux-aarch64/micromamba-2.8.1-0.tar.bz2 # Checking remote cache: https://cache.example/toolchains/v1/micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Binary remote cache hit: micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Checking remote cache: https://cache.example/toolchains/v1/micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Binary remote cache hit: micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Checking remote cache: https://cache.example/toolchains/v1/micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Binary remote cache miss or invalid entry for micromamba-2.8.1-0-linux-aarch64.tar.bz2: missing # Checking remote cache: https://cache.example/toolchains/v1/micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Binary remote cache miss or invalid entry for micromamba-2.8.1-0-linux-aarch64.tar.bz2: missing # Downloading managed micromamba from conda mirror: https://mirrors.example/conda-forge/linux-aarch64/micromamba-2.8.1-0.tar.bz2 # Checking remote cache: https://cache.example/toolchains/v1/micromamba-2.8.1-0-linux-aarch64.tar.bz2 # Binary remote cache miss or invalid entry for micromamba-2.8.1-0-linux-aarch64.tar.bz2: missing # Downloading managed micromamba from conda mirror: https://mirrors.example/conda-forge/linux-aarch64/micromamba-2.8.1-0.tar.bz2 # Subtest: managed micromamba download retries transient HTTP failures ok 14 - managed micromamba download retries transient HTTP failures --- duration_ms: 55.075378 type: 'test' ... # Subtest: managed micromamba download does not retry permanent HTTP failures ok 15 - managed micromamba download does not retry permanent HTTP failures --- duration_ms: 0.788305 type: 'test' ... # Subtest: managed micromamba download uses and verifies a pinned conda mirror package ok 16 - managed micromamba download uses and verifies a pinned conda mirror package --- duration_ms: 2.81733 type: 'test' ... # Subtest: managed micromamba checks the remote cache before the conda mirror ok 17 - managed micromamba checks the remote cache before the conda mirror --- duration_ms: 1.216641 type: 'test' ... # Subtest: managed micromamba checks the remote cache when no conda mirror is configured ok 18 - managed micromamba checks the remote cache when no conda mirror is configured --- duration_ms: 1.050544 type: 'test' ... # Subtest: managed micromamba falls back to the upstream binary after a cache miss without a mirror ok 19 - managed micromamba falls back to the upstream binary after a cache miss without a mirror --- duration_ms: 1.721183 type: 'test' ... # Subtest: managed micromamba falls back to the conda mirror after a remote cache miss ok 20 - managed micromamba falls back to the conda mirror after a remote cache miss --- duration_ms: 2.138738 type: 'test' ... # Subtest: managed micromamba cache-only mode does not contact a mirror after a miss ok 21 - managed micromamba cache-only mode does not contact a mirror after a miss --- duration_ms: 1.002443 type: 'test' ... # Subtest: managed micromamba download rejects a changed conda mirror package before extraction ok 22 - managed micromamba download rejects a changed conda mirror package before extraction --- duration_ms: 1.179891 type: 'test' ... # Subtest: managed micromamba conda mirror requires a credential-free HTTPS URL ok 23 - managed micromamba conda mirror requires a credential-free HTTPS URL --- duration_ms: 0.55413 type: 'test' ... # Subtest: uses a Python runtime mirror without changing the pinned archive ok 24 - uses a Python runtime mirror without changing the pinned archive --- duration_ms: 7.597116 type: 'test' ... # Subtest: keeps Node runtime downloads on the manifest base URL ok 25 - keeps Node runtime downloads on the manifest base URL --- duration_ms: 2.378281 type: 'test' ... # Subtest: percent-encodes cache object names ok 26 - percent-encodes cache object names --- duration_ms: 0.381514 type: 'test' ... # Checking remote cache: https://cache.example/toolchains/v1/runtime.tar.xz # Binary remote cache hit: runtime.tar.xz # Subtest: downloads a verified runtime from the remote cache before the authoritative source ok 27 - downloads a verified runtime from the remote cache before the authoritative source --- duration_ms: 34.479148 type: 'test' ... # Checking remote cache: https://cache.example/toolchains/v1/runtime.tar.xz # Binary remote cache miss or invalid entry for runtime.tar.xz: Download failed (404): https://cache.example/toolchains/v1/runtime.tar.xz # Downloading authoritative source: https://source.example/runtime.tar.xz # Subtest: falls back to the verified source when the remote cache object is missing ok 28 - falls back to the verified source when the remote cache object is missing --- duration_ms: 6.34489 type: 'test' ... # Checking remote cache: https://cache.example/toolchains/v1/runtime.tar.xz # Binary remote cache miss or invalid entry for runtime.tar.xz: Download failed (404): https://cache.example/toolchains/v1/runtime.tar.xz # Subtest: cache-only runtime downloads fail without contacting the source ok 29 - cache-only runtime downloads fail without contacting the source --- duration_ms: 4.5776 type: 'test' ... # Subtest: the formal workflow consumes caches without owning stable cache uploads ok 30 - the formal workflow consumes caches without owning stable cache uploads --- duration_ms: 30.199663 type: 'test' ... # Subtest: the catalog endpoint comes from the shared external URL registry ok 31 - the catalog endpoint comes from the shared external URL registry --- duration_ms: 15.071002 type: 'test' ... # Subtest: packaging writes the envelope the control API loads ok 32 - packaging writes the envelope the control API loads --- duration_ms: 18.754629 type: 'test' ... # Subtest: a document that is not the catalog is rejected before it can ship ok 33 - a document that is not the catalog is rejected before it can ship --- duration_ms: 0.601762 type: 'test' ... # Subtest: both packaging paths still download the snapshot and assert it is present ok 34 - both packaging paths still download the snapshot and assert it is present --- duration_ms: 4.622389 type: 'test' ... # Subtest: the downloaded document is never committed ok 35 - the downloaded document is never committed --- duration_ms: 2.111472 type: 'test' ... # Subtest: rejects direct and traversing output paths outside the dedicated CI results tree ok 36 - rejects direct and traversing output paths outside the dedicated CI results tree --- duration_ms: 37.004443 type: 'test' ... # Subtest: preserves a provisioning failure through the build log pipeline ok 37 - preserves a provisioning failure through the build log pipeline --- duration_ms: 29.408289 type: 'test' ... # (node:3347) ExperimentalWarning: SQLite is an experimental feature and might change at any time # (Use `node --trace-warnings ...` to show where the warning was created) # Subtest: SEA asset preserves the ESM tree and excludes embedded binaries and tests ok 38 - SEA asset preserves the ESM tree and excludes embedded binaries and tests --- duration_ms: 144.05415 type: 'test' ... # Subtest: standalone Runner SEA starts and authenticates with no Node in PATH ok 39 - standalone Runner SEA starts and authenticates with no Node in PATH # SKIP --- duration_ms: 0.406607 type: 'test' ... # Subtest: accepts ordinary launcher output ok 40 - accepts ordinary launcher output --- duration_ms: 2.447457 type: 'test' ... # Subtest: rejects known SEA startup crash signals ok 41 - rejects known SEA startup crash signals --- duration_ms: 0.577382 type: 'test' ... 1..41 # tests 41 # suites 0 # pass 40 # fail 0 # cancelled 0 # skipped 1 # todo 0 # duration_ms 1234.449798 $ pnpm --recursive --filter !@sciencediscovery/runner test Scope: 31 of 33 workspace projects config test$ node --test packages/operational-logging test$ node --test dist/*.test.js packages/operational-logging test: TAP version 13 config test: TAP version 13 config test: # Subtest: external URL configuration preserves current defaults config test: ok 1 - external URL configuration preserves current defaults config test: --- config test: duration_ms: 1.873523 config test: type: 'test' config test: ... config test: # Subtest: external URL configuration fails clearly for missing keys and template arguments config test: ok 2 - external URL configuration fails clearly for missing keys and template arguments config test: --- config test: duration_ms: 1.841662 config test: type: 'test' config test: ... packages/operational-logging test: # Subtest: filters messages below the configured level config test: 1..2 config test: # tests 2 config test: # suites 0 config test: # pass 2 config test: # fail 0 config test: # cancelled 0 config test: # skipped 0 config test: # todo 0 config test: # duration_ms 191.770201 packages/operational-logging test: ok 1 - filters messages below the configured level packages/operational-logging test: --- packages/operational-logging test: duration_ms: 12.347505 packages/operational-logging test: type: 'test' packages/operational-logging test: ... packages/operational-logging test: # Subtest: rotates logs by size and keeps bounded backups packages/operational-logging test: ok 2 - rotates logs by size and keeps bounded backups packages/operational-logging test: --- packages/operational-logging test: duration_ms: 27.242933 packages/operational-logging test: type: 'test' packages/operational-logging test: ... config test: Done packages/operational-logging test: # Subtest: redacts sensitive keys and credential-like text packages/operational-logging test: ok 3 - redacts sensitive keys and credential-like text packages/operational-logging test: --- packages/operational-logging test: duration_ms: 10.869448 packages/operational-logging test: type: 'test' packages/operational-logging test: ... packages/runtime-core test$ node --test dist/*.test.js packages/operational-logging test: 1..3 packages/operational-logging test: # tests 3 packages/operational-logging test: # suites 0 packages/operational-logging test: # pass 3 packages/operational-logging test: # fail 0 packages/operational-logging test: # cancelled 0 packages/operational-logging test: # skipped 0 packages/operational-logging test: # todo 0 packages/operational-logging test: # duration_ms 234.651215 packages/operational-logging test: Done packages/sandbox-capability test$ node --test dist/*.test.js packages/runtime-core test: TAP version 13 packages/sandbox-capability test: TAP version 13 packages/runtime-core test: # Subtest: runtime-core has no product or third-party runtime dependencies packages/runtime-core test: ok 1 - runtime-core has no product or third-party runtime dependencies packages/runtime-core test: --- packages/runtime-core test: duration_ms: 6.066026 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/sandbox-capability test: # Subtest: sandbox capability detection packages/sandbox-capability test: # Subtest: mounts a fresh procfs by default and binds only as a fallback packages/sandbox-capability test: ok 1 - mounts a fresh procfs by default and binds only as a fallback packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 2.005327 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: probes the real options rather than trusting --help packages/sandbox-capability test: ok 2 - probes the real options rather than trusting --help packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 0.527916 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: keeps both hardenings when the full sandbox launches packages/sandbox-capability test: ok 3 - keeps both hardenings when the full sandbox launches packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 27.89253 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: falls back to binding /proc when a fresh procfs is refused packages/sandbox-capability test: ok 4 - falls back to binding /proc when a fresh procfs is refused packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 18.474814 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: does not fall back when a fresh procfs works packages/sandbox-capability test: ok 5 - does not fall back when a fresh procfs works packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 9.125321 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: resolves both degradations independently when the environment refuses both packages/sandbox-capability test: ok 6 - resolves both degradations independently when the environment refuses both packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 9.010022 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: omits the option on pre-0.8 bubblewrap and says to upgrade packages/sandbox-capability test: ok 7 - omits the option on pre-0.8 bubblewrap and says to upgrade packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 6.526025 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: reports an unusable sandbox when neither /proc shape works packages/sandbox-capability test: ok 8 - reports an unusable sandbox when neither /proc shape works packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 13.312706 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: treats a missing binary as an unusable sandbox instead of throwing packages/sandbox-capability test: ok 9 - treats a missing binary as an unusable sandbox instead of throwing packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 6.221506 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/runtime-core test: # Subtest: durable lifecycle is awaited and a failed commit cannot emit completion packages/runtime-core test: ok 2 - durable lifecycle is awaited and a failed commit cannot emit completion packages/runtime-core test: --- packages/runtime-core test: duration_ms: 5.09141 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: a failed dispatcher settles sibling workspace writers without committing the turn packages/runtime-core test: ok 3 - a failed dispatcher settles sibling workspace writers without committing the turn packages/runtime-core test: --- packages/runtime-core test: duration_ms: 11.785356 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/sandbox-capability test: # Subtest: probes a binary once and reuses the answer packages/sandbox-capability test: ok 10 - probes a binary once and reuses the answer packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 11.187401 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: 1..10 packages/sandbox-capability test: ok 1 - sandbox capability detection packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 113.536001 packages/sandbox-capability test: type: 'suite' packages/sandbox-capability test: ... packages/sandbox-capability test: # Subtest: Seatbelt capability detection packages/sandbox-capability test: # Subtest: runs a real profile probe and reports a usable backend packages/sandbox-capability test: ok 1 - runs a real profile probe and reports a usable backend packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 4.083041 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/runtime-core test: # Subtest: runs model and concurrent tools while committing results in call order packages/sandbox-capability test: # Subtest: reports profile application failures without throwing packages/runtime-core test: ok 4 - runs model and concurrent tools while committing results in call order packages/runtime-core test: --- packages/runtime-core test: duration_ms: 17.738069 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: durable turn commit follows the bounded pool and exclusive barriers packages/sandbox-capability test: ok 2 - reports profile application failures without throwing packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 4.40391 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/runtime-core test: ok 5 - durable turn commit follows the bounded pool and exclusive barriers packages/runtime-core test: --- packages/runtime-core test: duration_ms: 2.368584 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/sandbox-capability test: # Subtest: caches one probe per Seatbelt executable packages/sandbox-capability test: ok 3 - caches one probe per Seatbelt executable packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 10.152178 packages/sandbox-capability test: type: 'test' packages/sandbox-capability test: ... packages/sandbox-capability test: 1..3 packages/sandbox-capability test: ok 2 - Seatbelt capability detection packages/sandbox-capability test: --- packages/sandbox-capability test: duration_ms: 24.71614 packages/sandbox-capability test: type: 'suite' packages/sandbox-capability test: ... packages/sandbox-capability test: 1..2 packages/sandbox-capability test: # tests 13 packages/sandbox-capability test: # suites 2 packages/sandbox-capability test: # pass 13 packages/sandbox-capability test: # fail 0 packages/sandbox-capability test: # cancelled 0 packages/sandbox-capability test: # skipped 0 packages/sandbox-capability test: # todo 0 packages/sandbox-capability test: # duration_ms 221.903821 packages/sandbox-capability test: Done packages/runtime-core test: # Subtest: cancellation drains started writers without committing a partial Step packages/runtime-core test: ok 6 - cancellation drains started writers without committing a partial Step packages/runtime-core test: --- packages/runtime-core test: duration_ms: 1.748976 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: cancellation after a reported model turn still emits model usage packages/runtime-core test: ok 7 - cancellation after a reported model turn still emits model usage packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.718636 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: the max-turn boundary closes every assistant tool call before returning packages/runtime-core test: ok 8 - the max-turn boundary closes every assistant tool call before returning packages/runtime-core test: --- packages/runtime-core test: duration_ms: 47.336442 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: uses assembler history as the next authoritative state packages/runtime-core test: ok 9 - uses assembler history as the next authoritative state packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.525497 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: cancellation is terminal and an AgentLoop executes once packages/runtime-core test: ok 10 - cancellation is terminal and an AgentLoop executes once packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.651101 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: model failure produces one failed terminal state packages/runtime-core test: ok 11 - model failure produces one failed terminal state packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.754857 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: provider input overflow forces one context rebuild and retries the same turn once packages/runtime-core test: ok 12 - provider input overflow forces one context rebuild and retries the same turn once packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.560465 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: a second provider input overflow is surfaced without an infinite recovery loop packages/runtime-core test: ok 13 - a second provider input overflow is surfaced without an infinite recovery loop packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.383375 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: builder validates required ports and freezes the run composition packages/runtime-core test: ok 14 - builder validates required ports and freezes the run composition packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.552749 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: multiple external waits are independent and restore the active phase only after all release packages/runtime-core test: ok 15 - multiple external waits are independent and restore the active phase only after all release packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.628938 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: transition reducer rejects illegal and post-terminal transitions packages/runtime-core test: ok 16 - transition reducer rejects illegal and post-terminal transitions packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.193307 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: observer failures cannot change run control flow or its terminal state packages/runtime-core test: ok 17 - observer failures cannot change run control flow or its terminal state packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.358435 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: model deltas carry a response identity that settles once per invoke attempt packages/runtime-core test: ok 18 - model deltas carry a response identity that settles once per invoke attempt packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.604277 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: a failed or cancelled invoke still settles its response identity packages/runtime-core test: ok 19 - a failed or cancelled invoke still settles its response identity packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.440864 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: input-overflow recovery retries with a new response identity packages/runtime-core test: ok 20 - input-overflow recovery retries with a new response identity packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.525389 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: a recovery attempt settles even when it fails or is cancelled packages/runtime-core test: ok 21 - a recovery attempt settles even when it fails or is cancelled packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.653504 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: rolling pool never exceeds maxParallelToolCalls packages/runtime-core test: ok 22 - rolling pool never exceeds maxParallelToolCalls packages/runtime-core test: --- packages/runtime-core test: duration_ms: 32.009536 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: rolling pool starts the next call as soon as one slot becomes free packages/runtime-core test: ok 23 - rolling pool starts the next call as soon as one slot becomes free packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.98479 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: out-of-order completion still commits in model order packages/runtime-core test: ok 24 - out-of-order completion still commits in model order packages/runtime-core test: --- packages/runtime-core test: duration_ms: 1.569162 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: exclusive calls drain the pool and bar later calls packages/runtime-core test: ok 25 - exclusive calls drain the pool and bar later calls packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.757357 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: cancellation stops replenishment and drains started calls packages/runtime-core test: ok 26 - cancellation stops replenishment and drains started calls packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.608558 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: configuration defaults and validates packages/runtime-core test: ok 27 - configuration defaults and validates packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.52502 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: # Subtest: generic scheduler commits undefined results packages/runtime-core test: ok 28 - generic scheduler commits undefined results packages/runtime-core test: --- packages/runtime-core test: duration_ms: 0.332609 packages/runtime-core test: type: 'test' packages/runtime-core test: ... packages/runtime-core test: 1..28 packages/runtime-core test: # tests 28 packages/runtime-core test: # suites 0 packages/runtime-core test: # pass 28 packages/runtime-core test: # fail 0 packages/runtime-core test: # cancelled 0 packages/runtime-core test: # skipped 0 packages/runtime-core test: # todo 0 packages/runtime-core test: # duration_ms 376.223762 packages/runtime-core test: Done packages/schema test$ node --test dist/*.test.js packages/tools test$ node --test dist/*.test.js packages/schema test: TAP version 13 packages/tools test: TAP version 13 packages/schema test: # Subtest: workspace tools are registered packages/schema test: ok 1 - workspace tools are registered packages/schema test: --- packages/schema test: duration_ms: 9.061545 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: literature source search tools emit Paper packages/schema test: ok 2 - literature source search tools emit Paper packages/schema test: --- packages/schema test: duration_ms: 4.386122 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: database source search tools emit DbRecord packages/schema test: ok 3 - database source search tools emit DbRecord packages/schema test: --- packages/schema test: duration_ms: 0.162288 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: llm-wiki search emits WebPage packages/schema test: ok 4 - llm-wiki search emits WebPage packages/schema test: --- packages/schema test: duration_ms: 0.581205 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: page-fetch tools (web_fetch + llm-wiki get_page/get_pages) emit WebPage packages/schema test: ok 5 - page-fetch tools (web_fetch + llm-wiki get_page/get_pages) emit WebPage packages/schema test: --- packages/schema test: duration_ms: 0.265676 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: execution tools emit Code packages/schema test: ok 6 - execution tools emit Code packages/schema test: --- packages/schema test: duration_ms: 0.139507 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: unregistered tools return undefined packages/schema test: ok 7 - unregistered tools return undefined packages/schema test: --- packages/schema test: duration_ms: 0.207689 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: registry size matches expectation packages/schema test: ok 8 - registry size matches expectation packages/schema test: --- packages/schema test: duration_ms: 1.886439 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: every registry key is a string packages/schema test: ok 9 - every registry key is a string packages/schema test: --- packages/schema test: duration_ms: 0.437823 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: every registry value is a valid spec packages/schema test: ok 10 - every registry value is a valid spec packages/schema test: --- packages/schema test: duration_ms: 0.603774 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: no tool type is also a registered tool name packages/schema test: ok 11 - no tool type is also a registered tool name packages/schema test: --- packages/schema test: duration_ms: 0.224022 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: # Subtest: the registry only ever produces execution / search packages/schema test: ok 12 - the registry only ever produces execution / search packages/schema test: --- packages/schema test: duration_ms: 3.835284 packages/schema test: type: 'test' packages/schema test: ... packages/schema test: 1..12 packages/schema test: # tests 12 packages/schema test: # suites 0 packages/schema test: # pass 12 packages/schema test: # fail 0 packages/schema test: # cancelled 0 packages/schema test: # skipped 0 packages/schema test: # todo 0 packages/schema test: # duration_ms 151.302994 packages/schema test: Done services/launcher test$ node --test dist/*.test.js services/launcher test: TAP version 13 services/launcher test: # Subtest: launcher bootstrap credentials services/launcher test: # Subtest: generates and stores a token on the first serve services/launcher test: ok 1 - generates and stores a token on the first serve services/launcher test: --- services/launcher test: duration_ms: 17.507631 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reuses the stored token on the next serve services/launcher test: ok 2 - reuses the stored token on the next serve services/launcher test: --- services/launcher test: duration_ms: 0.649541 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: an operator token wins and leaves no file behind services/launcher test: ok 3 - an operator token wins and leaves no file behind services/launcher test: --- services/launcher test: duration_ms: 21.49927 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: no fixed default survives anywhere in the chain services/launcher test: ok 4 - no fixed default survives anywhere in the chain services/launcher test: --- services/launcher test: duration_ms: 2.772382 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: the ready banner opens a sign-in URL for a generated token services/launcher test: ok 5 - the ready banner opens a sign-in URL for a generated token services/launcher test: --- services/launcher test: duration_ms: 0.66139 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: the ready banner opens a sign-in URL for a stored token services/launcher test: ok 6 - the ready banner opens a sign-in URL for a stored token services/launcher test: --- services/launcher test: duration_ms: 0.323797 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: the ready banner opens a sign-in URL for a environment token services/launcher test: ok 7 - the ready banner opens a sign-in URL for a environment token services/launcher test: --- services/launcher test: duration_ms: 0.301659 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..7 services/launcher test: ok 1 - launcher bootstrap credentials services/launcher test: --- services/launcher test: duration_ms: 90.324694 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: bootstrap configuration services/launcher test: # Subtest: defaults to the Huawei Cloud PyPI mirror services/launcher test: ok 1 - defaults to the Huawei Cloud PyPI mirror services/launcher test: --- services/launcher test: duration_ms: 0.937662 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: environment variables override every default services/launcher test: ok 2 - environment variables override every default services/launcher test: --- services/launcher test: duration_ms: 0.191263 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..2 services/launcher test: ok 2 - bootstrap configuration services/launcher test: --- services/launcher test: duration_ms: 2.300452 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: wheel URL discovery services/launcher test: # Subtest: resolves a relative simple-index href against the page URL services/launcher test: ok 1 - resolves a relative simple-index href against the page URL services/launcher test: --- services/launcher test: duration_ms: 1.918686 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reports an index that does not list the pinned wheel services/launcher test: ok 2 - reports an index that does not list the pinned wheel services/launcher test: --- services/launcher test: duration_ms: 0.741739 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..2 services/launcher test: ok 3 - wheel URL discovery services/launcher test: --- services/launcher test: duration_ms: 2.962426 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: uv installation services/launcher test: # Subtest: downloads, verifies and extracts the pinned wheel once services/launcher test: ok 1 - downloads, verifies and extracts the pinned wheel once services/launcher test: --- services/launcher test: duration_ms: 8.357341 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects a wheel whose checksum does not match the pin and names the overrides services/launcher test: ok 2 - rejects a wheel whose checksum does not match the pin and names the overrides services/launcher test: --- services/launcher test: duration_ms: 4.387973 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: an operator-provided uv is used as-is and must be executable services/launcher test: ok 3 - an operator-provided uv is used as-is and must be executable services/launcher test: --- services/launcher test: duration_ms: 2.643958 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..3 services/launcher test: ok 4 - uv installation services/launcher test: --- services/launcher test: duration_ms: 29.771455 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: gateway environment provisioning services/launcher test: # Subtest: provisions the venv from the hashed requirements and is idempotent services/launcher test: ok 1 - provisions the venv from the hashed requirements and is idempotent services/launcher test: --- services/launcher test: duration_ms: 20.345606 services/launcher test: type: 'test' services/launcher test: ... packages/tools test: # Subtest: a result inside the bounds is returned unchanged services/launcher test: # Subtest: fails loudly when the planned app root lacks its required external URL config services/launcher test: ok 2 - fails loudly when the planned app root lacks its required external URL config services/launcher test: --- services/launcher test: duration_ms: 23.441417 services/launcher test: type: 'test' services/launcher test: ... packages/tools test: ok 1 - a result inside the bounds is returned unchanged packages/tools test: --- packages/tools test: duration_ms: 1.291318 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: splitting keeps line terminators so a rejoin is lossless packages/tools test: ok 2 - splitting keeps line terminators so a rejoin is lossless packages/tools test: --- packages/tools test: duration_ms: 0.874003 packages/tools test: type: 'test' packages/tools test: ... services/launcher test: # Subtest: preserves an operator-provided external URL config path in the probe environment services/launcher test: ok 3 - preserves an operator-provided external URL config path in the probe environment services/launcher test: --- services/launcher test: duration_ms: 16.478905 services/launcher test: type: 'test' services/launcher test: ... packages/tools test: # Subtest: the head bound keeps the first lines and reports what it dropped packages/tools test: ok 3 - the head bound keeps the first lines and reports what it dropped packages/tools test: --- packages/tools test: duration_ms: 0.483246 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: the tail bound keeps the last lines, where an exit status lives packages/tools test: ok 4 - the tail bound keeps the last lines, where an exit status lives packages/tools test: --- packages/tools test: duration_ms: 0.253166 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: one line wider than the budget is cut on a character boundary packages/tools test: ok 5 - one line wider than the budget is cut on a character boundary packages/tools test: --- packages/tools test: duration_ms: 0.373927 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: byte size formatting stays locale-independent packages/tools test: ok 6 - byte size formatting stays locale-independent packages/tools test: --- packages/tools test: duration_ms: 0.158867 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: the guard leaves a small result untouched and stores nothing packages/tools test: ok 7 - the guard leaves a small result untouched and stores nothing packages/tools test: --- packages/tools test: duration_ms: 0.397146 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: the guard stores a moderate result for later compaction without changing its first rendering packages/tools test: ok 8 - the guard stores a moderate result for later compaction without changing its first rendering packages/tools test: --- packages/tools test: duration_ms: 2.95829 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: the guard replaces an oversized result with a preview plus a re-read ref packages/tools test: ok 9 - the guard replaces an oversized result with a preview plus a re-read ref packages/tools test: --- packages/tools test: duration_ms: 249.985049 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: execution output keeps its tail, where the failure is reported packages/tools test: ok 10 - execution output keeps its tail, where the failure is reported packages/tools test: --- packages/tools test: duration_ms: 58.101053 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a bounded result is trusted up to the hard bound, then re-truncated anyway packages/tools test: ok 11 - a bounded result is trusted up to the hard bound, then re-truncated anyway packages/tools test: --- packages/tools test: duration_ms: 258.691705 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a storage failure still yields a bounded result packages/tools test: ok 12 - a storage failure still yields a bounded result packages/tools test: --- packages/tools test: duration_ms: 40.998179 packages/tools test: type: 'test' packages/tools test: ... services/launcher test: # Subtest: rebuilds a marker-matching environment whose gateway package was deleted services/launcher test: ok 4 - rebuilds a marker-matching environment whose gateway package was deleted services/launcher test: --- services/launcher test: duration_ms: 11.097087 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reuses an environment whose marker still carries the former product name services/launcher test: ok 5 - reuses an environment whose marker still carries the former product name services/launcher test: --- services/launcher test: duration_ms: 11.943072 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: keeps the previous environment recoverable when a rebuild fails services/launcher test: ok 6 - keeps the previous environment recoverable when a rebuild fails services/launcher test: --- services/launcher test: duration_ms: 18.371866 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: restores the previous environment after an interrupted directory swap services/launcher test: ok 7 - restores the previous environment after an interrupted directory swap services/launcher test: --- services/launcher test: duration_ms: 6.461383 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..7 services/launcher test: ok 5 - gateway environment provisioning services/launcher test: --- services/launcher test: duration_ms: 127.553068 services/launcher test: type: 'suite' services/launcher test: ... packages/tools test: # Subtest: rejects duplicate tool names when freezing the run registry packages/tools test: ok 13 - rejects duplicate tool names when freezing the run registry packages/tools test: --- packages/tools test: duration_ms: 1.530466 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: state commits are awaited and fail closed while observers remain isolated packages/tools test: ok 14 - state commits are awaited and fail closed while observers remain isolated packages/tools test: --- packages/tools test: duration_ms: 1.729376 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: executes tools and creates the canonical result message packages/tools test: ok 15 - executes tools and creates the canonical result message packages/tools test: --- packages/tools test: duration_ms: 1.154393 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tool scheduling is fail-closed and only exact true enables parallel execution packages/tools test: ok 16 - tool scheduling is fail-closed and only exact true enables parallel execution packages/tools test: --- packages/tools test: duration_ms: 0.346845 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: returned tool failures keep their result, metadata, and error flag through durable observations packages/tools test: ok 17 - returned tool failures keep their result, metadata, and error flag through durable observations packages/tools test: --- packages/tools test: duration_ms: 1.369685 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: error-looking output is successful unless the tool marks it as a failure packages/tools test: ok 18 - error-looking output is successful unless the tool marks it as a failure packages/tools test: --- packages/tools test: duration_ms: 0.498536 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: result observations retain model-declared order across concurrent completion packages/tools test: ok 19 - result observations retain model-declared order across concurrent completion packages/tools test: --- packages/tools test: duration_ms: 10.356706 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: batch policies supersede earlier calls without executing them packages/tools test: ok 20 - batch policies supersede earlier calls without executing them packages/tools test: --- packages/tools test: duration_ms: 1.414515 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: dynamic availability hides and blocks tools without changing handlers packages/tools test: ok 21 - dynamic availability hides and blocks tools without changing handlers packages/tools test: --- packages/tools test: duration_ms: 0.948373 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: deferred tool search results are traceable without exposing tool payloads packages/tools test: ok 22 - deferred tool search results are traceable without exposing tool payloads packages/tools test: --- packages/tools test: duration_ms: 1.322641 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: loop guard warning and stop decisions keep structured details packages/tools test: ok 23 - loop guard warning and stop decisions keep structured details packages/tools test: --- packages/tools test: duration_ms: 0.55536 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tool details sanitizer truncates nested, cyclic, and oversized structures packages/tools test: ok 24 - tool details sanitizer truncates nested, cyclic, and oversized structures packages/tools test: --- packages/tools test: duration_ms: 0.209243 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tool details sanitizer enforces key and array budgets packages/tools test: ok 25 - tool details sanitizer enforces key and array budgets packages/tools test: --- packages/tools test: duration_ms: 0.502828 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tool details sanitizer wraps non-object roots when boundaries apply packages/tools test: ok 26 - tool details sanitizer wraps non-object roots when boundaries apply packages/tools test: --- packages/tools test: duration_ms: 0.191191 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tool details sanitizer does not treat shared references as circular packages/tools test: ok 27 - tool details sanitizer does not treat shared references as circular packages/tools test: --- packages/tools test: duration_ms: 0.15167 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: every result crosses the output bound before it becomes a history message packages/tools test: ok 28 - every result crosses the output bound before it becomes a history message packages/tools test: --- packages/tools test: duration_ms: 126.577899 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: unavailable deferred tools are absent from discovery packages/tools test: ok 29 - unavailable deferred tools are absent from discovery packages/tools test: --- packages/tools test: duration_ms: 0.681742 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: forged framework tags are escaped packages/tools test: ok 30 - forged framework tags are escaped packages/tools test: --- packages/tools test: duration_ms: 1.374147 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tag matching survives casing, attributes, and truncation packages/tools test: ok 31 - tag matching survives casing, attributes, and truncation packages/tools test: --- packages/tools test: duration_ms: 0.227905 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: similarly named tags are left alone packages/tools test: ok 32 - similarly named tags are left alone packages/tools test: --- packages/tools test: duration_ms: 0.140846 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: user-input boundary markers become inert look-alikes packages/tools test: ok 33 - user-input boundary markers become inert look-alikes packages/tools test: --- packages/tools test: duration_ms: 0.15893 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: ordinary markup and code are untouched packages/tools test: ok 34 - ordinary markup and code are untouched packages/tools test: --- packages/tools test: duration_ms: 0.232159 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: only remote-content tools are in scope packages/tools test: ok 35 - only remote-content tools are in scope packages/tools test: --- packages/tools test: duration_ms: 0.172546 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: denylist covers every framework authority block packages/tools test: ok 36 - denylist covers every framework authority block packages/tools test: --- packages/tools test: duration_ms: 1.803407 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: tool-output settings validate cumulative read thresholds packages/tools test: ok 37 - tool-output settings validate cumulative read thresholds packages/tools test: --- packages/tools test: duration_ms: 2.448043 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a saved result is paged back by 1-based line range packages/tools test: ok 38 - a saved result is paged back by 1-based line range packages/tools test: --- packages/tools test: duration_ms: 13.395923 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a page is capped by bytes even when the caller asks for more lines packages/tools test: ok 39 - a page is capped by bytes even when the caller asks for more lines packages/tools test: --- packages/tools test: duration_ms: 9.111303 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a reference resolves from disk after the producing process forgot it packages/tools test: ok 40 - a reference resolves from disk after the producing process forgot it packages/tools test: --- packages/tools test: duration_ms: 17.760546 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: refs are validated before they can reach the filesystem packages/tools test: ok 41 - refs are validated before they can reach the filesystem packages/tools test: --- packages/tools test: duration_ms: 4.442024 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a record has no expiry of its own; it lives as long as the session directory packages/tools test: ok 42 - a record has no expiry of its own; it lives as long as the session directory packages/tools test: --- packages/tools test: duration_ms: 9.840669 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: the writer and the session deletion path derive the same directory packages/tools test: ok 43 - the writer and the session deletion path derive the same directory packages/tools test: --- packages/tools test: duration_ms: 0.486668 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a record keeps the tool output verbatim, with no size cap of its own packages/tools test: ok 44 - a record keeps the tool output verbatim, with no size cap of its own packages/tools test: --- packages/tools test: duration_ms: 262.414816 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a bounded notice no longer claims part of the output went unstored packages/tools test: ok 45 - a bounded notice no longer claims part of the output went unstored packages/tools test: --- packages/tools test: duration_ms: 33.494957 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: read_tool_output returns a self-bounded page with a continue hint packages/tools test: ok 46 - read_tool_output returns a self-bounded page with a continue hint packages/tools test: --- packages/tools test: duration_ms: 1.477922 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: an oversized result is stored whole and its omitted head is recoverable packages/tools test: ok 47 - an oversized result is stored whole and its omitted head is recoverable packages/tools test: --- packages/tools test: duration_ms: 48.225695 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a line wider than one page is flagged instead of being reported as the end of the output packages/tools test: ok 48 - a line wider than one page is flagged instead of being reported as the end of the output packages/tools test: --- packages/tools test: duration_ms: 11.817371 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a single oversized line is recoverable by Unicode character range packages/tools test: ok 49 - a single oversized line is recoverable by Unicode character range packages/tools test: --- packages/tools test: duration_ms: 16.568479 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: a stored single-line result supports bounded literal search packages/tools test: ok 50 - a stored single-line result supports bounded literal search packages/tools test: --- packages/tools test: duration_ms: 6.621674 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: read_tool_output modes are mutually exclusive packages/tools test: ok 51 - read_tool_output modes are mutually exclusive packages/tools test: --- packages/tools test: duration_ms: 0.358039 packages/tools test: type: 'test' packages/tools test: ... packages/tools test: # Subtest: read_tool_output warns on repeated and excessive reads without blocking them packages/tools test: ok 52 - read_tool_output warns on repeated and excessive reads without blocking them packages/tools test: --- packages/tools test: duration_ms: 0.632165 packages/tools test: type: 'test' packages/tools test: ... services/launcher test: # Subtest: bootstrap lock services/launcher test: # Subtest: serializes concurrent bootstraps and recovers a dead holder's lock services/launcher test: ok 1 - serializes concurrent bootstraps and recovers a dead holder's lock services/launcher test: --- services/launcher test: duration_ms: 1057.407107 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..1 services/launcher test: ok 6 - bootstrap lock services/launcher test: --- services/launcher test: duration_ms: 1057.574959 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: runBootstrap services/launcher test: # Subtest: requires a manifest with a bootstrap section services/launcher test: ok 1 - requires a manifest with a bootstrap section services/launcher test: --- services/launcher test: duration_ms: 0.30741 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..1 services/launcher test: ok 7 - runBootstrap services/launcher test: --- services/launcher test: duration_ms: 0.397247 services/launcher test: type: 'suite' services/launcher test: ... packages/tools test: 1..52 packages/tools test: # tests 52 packages/tools test: # suites 0 packages/tools test: # pass 52 packages/tools test: # fail 0 packages/tools test: # cancelled 0 packages/tools test: # skipped 0 packages/tools test: # todo 0 packages/tools test: # duration_ms 1962.859241 packages/tools test: Done services/launcher test: # Subtest: launcher option parsing services/launcher test: # Subtest: uses the release binary name in help output services/launcher test: ok 1 - uses the release binary name in help output services/launcher test: --- services/launcher test: duration_ms: 1.027894 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: defaults bind loopback and place data beside the binary services/launcher test: ok 2 - defaults bind loopback and place data beside the binary services/launcher test: --- services/launcher test: duration_ms: 0.717144 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: environment variables seed the defaults services/launcher test: ok 3 - environment variables seed the defaults services/launcher test: --- services/launcher test: duration_ms: 0.287065 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reads the legacy data variable with a log and prefers the new name services/launcher test: ok 4 - reads the legacy data variable with a log and prefers the new name services/launcher test: --- services/launcher test: duration_ms: 0.254356 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: flags override the environment and resolve relative paths services/launcher test: ok 5 - flags override the environment and resolve relative paths services/launcher test: --- services/launcher test: duration_ms: 0.827152 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: accepts an explicit macOS Seatbelt launcher services/launcher test: ok 6 - accepts an explicit macOS Seatbelt launcher services/launcher test: --- services/launcher test: duration_ms: 0.310787 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: maps bare help and version flags to commands services/launcher test: ok 7 - maps bare help and version flags to commands services/launcher test: --- services/launcher test: duration_ms: 0.26509 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects unknown commands, unknown options and bad ports services/launcher test: ok 8 - rejects unknown commands, unknown options and bad ports services/launcher test: --- services/launcher test: duration_ms: 0.705126 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: extract demands a destination services/launcher test: ok 9 - extract demands a destination services/launcher test: --- services/launcher test: duration_ms: 0.342732 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..9 services/launcher test: ok 8 - launcher option parsing services/launcher test: --- services/launcher test: duration_ms: 6.25047 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: env file parsing services/launcher test: # Subtest: reads assignments, comments and quoting services/launcher test: ok 1 - reads assignments, comments and quoting services/launcher test: --- services/launcher test: duration_ms: 0.652515 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..1 services/launcher test: ok 9 - env file parsing services/launcher test: --- services/launcher test: duration_ms: 0.861323 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: legacy directory migration services/launcher test: # Subtest: moves a legacy directory once and logs the import services/launcher test: ok 1 - moves a legacy directory once and logs the import services/launcher test: --- services/launcher test: duration_ms: 10.839367 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: does not overwrite an existing target and logs the skip services/launcher test: ok 2 - does not overwrite an existing target and logs the skip services/launcher test: --- services/launcher test: duration_ms: 5.064167 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..2 services/launcher test: ok 10 - legacy directory migration services/launcher test: --- services/launcher test: duration_ms: 17.032834 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: renamed environment variables services/launcher test: # Subtest: uses the ScienceDiscovery name without compatibility output services/launcher test: ok 1 - uses the ScienceDiscovery name without compatibility output services/launcher test: --- services/launcher test: duration_ms: 1.38465 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reads the legacy name and reports the fallback services/launcher test: ok 2 - reads the legacy name and reports the fallback services/launcher test: --- services/launcher test: duration_ms: 1.458635 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: prefers the new name and reports the ignored legacy value services/launcher test: ok 3 - prefers the new name and reports the ignored legacy value services/launcher test: --- services/launcher test: duration_ms: 0.571273 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..3 services/launcher test: ok 11 - renamed environment variables services/launcher test: --- services/launcher test: duration_ms: 4.531783 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: payload container footer services/launcher test: # Subtest: round-trips a locator services/launcher test: ok 1 - round-trips a locator services/launcher test: --- services/launcher test: duration_ms: 1.666131 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects an id that is not sixteen bytes services/launcher test: ok 2 - rejects an id that is not sixteen bytes services/launcher test: --- services/launcher test: duration_ms: 0.475129 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: treats a file without the magic as payload-free services/launcher test: ok 3 - treats a file without the magic as payload-free services/launcher test: --- services/launcher test: duration_ms: 5.214143 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reads the locator back from a container file services/launcher test: ok 4 - reads the locator back from a container file services/launcher test: --- services/launcher test: duration_ms: 4.70615 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects a container whose payload length does not reach the footer services/launcher test: ok 5 - rejects a container whose payload length does not reach the footer services/launcher test: --- services/launcher test: duration_ms: 1.394494 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: ignores a file shorter than a footer services/launcher test: ok 6 - ignores a file shorter than a footer services/launcher test: --- services/launcher test: duration_ms: 1.225251 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..6 services/launcher test: ok 12 - payload container footer services/launcher test: --- services/launcher test: duration_ms: 28.670564 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: payload manifest parsing services/launcher test: # Subtest: still accepts a version-1 payload with embedded dependencies services/launcher test: ok 1 - still accepts a version-1 payload with embedded dependencies services/launcher test: --- services/launcher test: duration_ms: 0.966093 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: accepts a version-2 payload with a complete bootstrap section services/launcher test: ok 2 - accepts a version-2 payload with a complete bootstrap section services/launcher test: --- services/launcher test: duration_ms: 0.21166 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects a version-2 payload whose bootstrap pins are incomplete services/launcher test: ok 3 - rejects a version-2 payload whose bootstrap pins are incomplete services/launcher test: --- services/launcher test: duration_ms: 0.646758 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: ignores the retired deer-flow pin an older release recorded services/launcher test: ok 4 - ignores the retired deer-flow pin an older release recorded services/launcher test: --- services/launcher test: duration_ms: 0.196799 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects unknown format versions services/launcher test: ok 5 - rejects unknown format versions services/launcher test: --- services/launcher test: duration_ms: 0.206247 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..5 services/launcher test: ok 13 - payload manifest parsing services/launcher test: --- services/launcher test: duration_ms: 4.301898 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: payload cache location services/launcher test: # Subtest: uses the ScienceDiscovery cache root by default services/launcher test: ok 1 - uses the ScienceDiscovery cache root by default services/launcher test: --- services/launcher test: duration_ms: 2.170572 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: accepts the new override without compatibility output services/launcher test: ok 2 - accepts the new override without compatibility output services/launcher test: --- services/launcher test: duration_ms: 0.817431 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: logs legacy fallback and new-name precedence services/launcher test: ok 3 - logs legacy fallback and new-name precedence services/launcher test: --- services/launcher test: duration_ms: 0.459689 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reads a pre-extracted payload through the legacy variable and logs it services/launcher test: ok 4 - reads a pre-extracted payload through the legacy variable and logs it services/launcher test: --- services/launcher test: duration_ms: 17.957522 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..4 services/launcher test: ok 14 - payload cache location services/launcher test: --- services/launcher test: duration_ms: 23.546848 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: host preflight services/launcher test: # Subtest: names the executable and how to install it when bubblewrap is absent services/launcher test: ok 1 - names the executable and how to install it when bubblewrap is absent services/launcher test: --- services/launcher test: duration_ms: 1.169952 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: resolves an executable through PATH services/launcher test: ok 2 - resolves an executable through PATH services/launcher test: --- services/launcher test: duration_ms: 26.541637 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: fails serve when bubblewrap is missing services/launcher test: ok 3 - fails serve when bubblewrap is missing services/launcher test: --- services/launcher test: duration_ms: 8.480962 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: starts anyway with --skip-sandbox-check and says so services/launcher test: ok 4 - starts anyway with --skip-sandbox-check and says so services/launcher test: --- services/launcher test: duration_ms: 5.767795 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: warns but continues when bubblewrap cannot build a sandbox services/launcher test: ok 5 - warns but continues when bubblewrap cannot build a sandbox services/launcher test: --- services/launcher test: duration_ms: 17.466801 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: probes Seatbelt on macOS without requiring bubblewrap services/launcher test: ok 6 - probes Seatbelt on macOS without requiring bubblewrap services/launcher test: --- services/launcher test: duration_ms: 15.522479 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reports a usable but unhardened sandbox when only --disable-userns is refused services/launcher test: ok 7 - reports a usable but unhardened sandbox when only --disable-userns is refused services/launcher test: --- services/launcher test: duration_ms: 16.518119 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: falls back to binding /proc and warns when a fresh procfs is refused services/launcher test: ok 8 - falls back to binding /proc and warns when a fresh procfs is refused services/launcher test: --- services/launcher test: duration_ms: 22.748094 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reports both degradations independently when the environment refuses both services/launcher test: ok 9 - reports both degradations independently when the environment refuses both services/launcher test: --- services/launcher test: duration_ms: 42.643673 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: probes with --disable-userns so preflight cannot pass a launch the runner fails services/launcher test: ok 10 - probes with --disable-userns so preflight cannot pass a launch the runner fails services/launcher test: --- services/launcher test: duration_ms: 38.243633 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects a data directory it cannot write services/launcher test: ok 11 - rejects a data directory it cannot write # SKIP services/launcher test: --- services/launcher test: duration_ms: 0.200424 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..11 services/launcher test: ok 15 - host preflight services/launcher test: --- services/launcher test: duration_ms: 258.606515 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: run option parsing services/launcher test: # Subtest: recognizes run and seeds empty run settings services/launcher test: ok 1 - recognizes run and seeds empty run settings services/launcher test: --- services/launcher test: duration_ms: 3.419883 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: positional argument becomes the problem text services/launcher test: ok 2 - positional argument becomes the problem text services/launcher test: --- services/launcher test: duration_ms: 0.230166 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: only the first positional is captured; the rest would be unknown options services/launcher test: ok 3 - only the first positional is captured; the rest would be unknown options services/launcher test: --- services/launcher test: duration_ms: 0.531181 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: --content and --stdin services/launcher test: ok 4 - --content and --stdin services/launcher test: --- services/launcher test: duration_ms: 0.393982 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: parses session/project/model/skills/connectors/review/token/output services/launcher test: ok 5 - parses session/project/model/skills/connectors/review/token/output services/launcher test: --- services/launcher test: duration_ms: 0.221565 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: --auto-approve flag and --approval always_allow services/launcher test: ok 6 - --auto-approve flag and --approval always_allow services/launcher test: --- services/launcher test: duration_ms: 0.248974 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: --timeout parses a positive number and rejects bad values services/launcher test: ok 7 - --timeout parses a positive number and rejects bad values services/launcher test: --- services/launcher test: duration_ms: 0.310461 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects bad --approval / --output / --review values services/launcher test: ok 8 - rejects bad --approval / --output / --review values services/launcher test: --- services/launcher test: duration_ms: 1.212524 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: input must be exactly one of positional / --content / --stdin services/launcher test: ok 9 - input must be exactly one of positional / --content / --stdin services/launcher test: --- services/launcher test: duration_ms: 0.422953 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: run still accepts --data-dir / --host / --port (reused from serve) services/launcher test: ok 10 - run still accepts --data-dir / --host / --port (reused from serve) services/launcher test: --- services/launcher test: duration_ms: 0.495771 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: USAGE advertises the run command and run options services/launcher test: ok 11 - USAGE advertises the run command and run options services/launcher test: --- services/launcher test: duration_ms: 0.24967 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..11 services/launcher test: ok 16 - run option parsing services/launcher test: --- services/launcher test: duration_ms: 12.23397 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: run command against an unreachable serve services/launcher test: # Subtest: returns exit 1 and emits a valid jsonl error on stdout services/launcher test: ok 1 - returns exit 1 and emits a valid jsonl error on stdout services/launcher test: --- services/launcher test: duration_ms: 37.065414 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: non-interactive without --auto-approve refuses to start (exit 1) services/launcher test: ok 2 - non-interactive without --auto-approve refuses to start (exit 1) services/launcher test: --- services/launcher test: duration_ms: 0.75281 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..2 services/launcher test: ok 17 - run command against an unreachable serve services/launcher test: --- services/launcher test: duration_ms: 37.987211 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: serve topology services/launcher test: # Subtest: starts the runner, then the API, each health gated — no Python service services/launcher test: ok 1 - starts the runner, then the API, each health gated — no Python service services/launcher test: --- services/launcher test: duration_ms: 3.263605 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: runs every process from the payload, never from the host services/launcher test: ok 2 - runs every process from the payload, never from the host services/launcher test: --- services/launcher test: duration_ms: 0.33336 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: the API is told which interpreter starts the bundled stdio MCP servers services/launcher test: ok 3 - the API is told which interpreter starts the bundled stdio MCP servers services/launcher test: --- services/launcher test: duration_ms: 0.42554 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: does not rely on PYTHONPATH for the bundled MCP servers' package services/launcher test: ok 4 - does not rely on PYTHONPATH for the bundled MCP servers' package services/launcher test: --- services/launcher test: duration_ms: 0.22426 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: the bootstrap probe runs in the app root and keeps an operator URL config services/launcher test: ok 5 - the bootstrap probe runs in the app root and keeps an operator URL config services/launcher test: --- services/launcher test: duration_ms: 0.262452 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: no service carries the retired vendor state directory services/launcher test: ok 6 - no service carries the retired vendor state directory services/launcher test: --- services/launcher test: duration_ms: 0.203868 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: shares one runner token between the runner and the API services/launcher test: ok 7 - shares one runner token between the runner and the API services/launcher test: --- services/launcher test: duration_ms: 0.30227 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: no service is pointed at the retired gateway HTTP endpoint services/launcher test: ok 8 - no service is pointed at the retired gateway HTTP endpoint services/launcher test: --- services/launcher test: duration_ms: 0.296143 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: hands the printed access token to the API services/launcher test: ok 9 - hands the printed access token to the API services/launcher test: --- services/launcher test: duration_ms: 0.342344 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: passes an operator-configured token through unchanged services/launcher test: ok 10 - passes an operator-configured token through unchanged services/launcher test: --- services/launcher test: duration_ms: 0.416652 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: ships no fixed default credential in the process plan services/launcher test: ok 11 - ships no fixed default credential in the process plan services/launcher test: --- services/launcher test: duration_ms: 0.165497 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: forwards operator runner tuning and the bubblewrap path services/launcher test: ok 12 - forwards operator runner tuning and the bubblewrap path services/launcher test: --- services/launcher test: duration_ms: 1.707019 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: disables scientific environments when the operator asked services/launcher test: ok 13 - disables scientific environments when the operator asked services/launcher test: --- services/launcher test: duration_ms: 0.146098 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: health checks a 0.0.0.0 bind over loopback services/launcher test: ok 14 - health checks a 0.0.0.0 bind over loopback services/launcher test: --- services/launcher test: duration_ms: 0.113851 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: never references Docker in the process plan services/launcher test: ok 15 - never references Docker in the process plan services/launcher test: --- services/launcher test: duration_ms: 0.200259 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..15 services/launcher test: ok 18 - serve topology services/launcher test: --- services/launcher test: duration_ms: 9.949028 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: micromamba seeding services/launcher test: # Subtest: seeds the runner's managed provisioner path and marks it executable services/launcher test: ok 1 - seeds the runner's managed provisioner path and marks it executable services/launcher test: --- services/launcher test: duration_ms: 12.522085 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: leaves an existing provisioner in place services/launcher test: ok 2 - leaves an existing provisioner in place services/launcher test: --- services/launcher test: duration_ms: 6.322335 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: defers to an administrator-configured provisioner services/launcher test: ok 3 - defers to an administrator-configured provisioner services/launcher test: --- services/launcher test: duration_ms: 4.431224 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: does not touch the data directory when scientific environments are off services/launcher test: ok 4 - does not touch the data directory when scientific environments are off services/launcher test: --- services/launcher test: duration_ms: 1.678889 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..4 services/launcher test: ok 19 - micromamba seeding services/launcher test: --- services/launcher test: duration_ms: 124.900727 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: service supervision services/launcher test: # Subtest: starts services in order and gates each on health services/launcher test: ok 1 - starts services in order and gates each on health services/launcher test: --- services/launcher test: duration_ms: 176.52401 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reports which service died before it became healthy services/launcher test: ok 2 - reports which service died before it became healthy services/launcher test: --- services/launcher test: duration_ms: 61.472835 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: gives up on an endpoint that never answers services/launcher test: ok 3 - gives up on an endpoint that never answers services/launcher test: --- services/launcher test: duration_ms: 84.611029 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: waitForFirstExit names the service that stopped services/launcher test: ok 4 - waitForFirstExit names the service that stopped services/launcher test: --- services/launcher test: duration_ms: 74.687114 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: escalates to SIGKILL when a service ignores SIGTERM services/launcher test: ok 5 - escalates to SIGKILL when a service ignores SIGTERM services/launcher test: --- services/launcher test: duration_ms: 363.652797 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: stop is idempotent services/launcher test: ok 6 - stop is idempotent services/launcher test: --- services/launcher test: duration_ms: 71.893754 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..6 services/launcher test: ok 20 - service supervision services/launcher test: --- services/launcher test: duration_ms: 850.991316 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: # Subtest: payload tar extraction services/launcher test: # Subtest: extracts a gnu archive with long names, modes and symlinks services/launcher test: ok 1 - extracts a gnu archive with long names, modes and symlinks services/launcher test: --- services/launcher test: duration_ms: 26.098073 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: extracts a posix archive with long names, modes and symlinks services/launcher test: ok 2 - extracts a posix archive with long names, modes and symlinks services/launcher test: --- services/launcher test: duration_ms: 22.477965 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects an entry that escapes the destination services/launcher test: ok 3 - rejects an entry that escapes the destination services/launcher test: --- services/launcher test: duration_ms: 0.855527 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: reports a truncated archive instead of writing a partial tree services/launcher test: ok 4 - reports a truncated archive instead of writing a partial tree services/launcher test: --- services/launcher test: duration_ms: 9.295533 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: # Subtest: rejects an unsupported entry type services/launcher test: ok 5 - rejects an unsupported entry type services/launcher test: --- services/launcher test: duration_ms: 1.109455 services/launcher test: type: 'test' services/launcher test: ... services/launcher test: 1..5 services/launcher test: ok 21 - payload tar extraction services/launcher test: --- services/launcher test: duration_ms: 78.64932 services/launcher test: type: 'suite' services/launcher test: ... services/launcher test: 1..21 services/launcher test: # tests 107 services/launcher test: # suites 21 services/launcher test: # pass 106 services/launcher test: # fail 0 services/launcher test: # cancelled 0 services/launcher test: # skipped 1 services/launcher test: # todo 0 services/launcher test: # duration_ms 14066.607512 services/launcher test: Done packages/cas test$ node --test dist/*.test.js packages/evolve test$ node --test dist/*.test.js packages/cas test: TAP version 13 packages/evolve test: TAP version 13 packages/cas test: # (node:3751) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/cas test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/cas test: # Subtest: put deduplicates content and read/verify preserve it packages/cas test: ok 1 - put deduplicates content and read/verify preserve it packages/cas test: --- packages/cas test: duration_ms: 81.336659 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: putFile streams bytes into the same address space packages/cas test: ok 2 - putFile streams bytes into the same address space packages/cas test: --- packages/cas test: duration_ms: 42.735689 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: invalid hashes are rejected and missing objects do not verify packages/cas test: ok 3 - invalid hashes are rejected and missing objects do not verify packages/cas test: --- packages/cas test: duration_ms: 13.71442 packages/cas test: type: 'test' packages/cas test: ... packages/evolve test: # Subtest: no runtime means no tools at all packages/evolve test: ok 1 - no runtime means no tools at all packages/evolve test: --- packages/evolve test: duration_ms: 1.80835 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: a runtime contributes both tools, visible from the first step packages/evolve test: ok 2 - a runtime contributes both tools, visible from the first step packages/evolve test: --- packages/evolve test: duration_ms: 1.880179 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: the create tool names the approval the user will actually see packages/evolve test: ok 3 - the create tool names the approval the user will actually see packages/evolve test: --- packages/evolve test: duration_ms: 1.718853 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: the tools reach the runtime they were built with packages/evolve test: ok 4 - the tools reach the runtime they were built with packages/evolve test: --- packages/evolve test: duration_ms: 2.4019 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: a finished search hands the agent the winning text as its own block, not as escaped JSON packages/evolve test: ok 5 - a finished search hands the agent the winning text as its own block, not as escaped JSON packages/evolve test: --- packages/evolve test: duration_ms: 0.895653 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: a cut winner says how much was cut and where the rest is packages/evolve test: ok 6 - a cut winner says how much was cut and where the rest is packages/evolve test: --- packages/evolve test: duration_ms: 1.271728 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: a search with no winner returns just the figures packages/evolve test: ok 7 - a search with no winner returns just the figures packages/evolve test: --- packages/evolve test: duration_ms: 0.698749 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: # Subtest: Idea Tree status reader returns the actual background research to the agent packages/cas test: # (node:3769) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/cas test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/evolve test: ok 8 - Idea Tree status reader returns the actual background research to the agent packages/evolve test: --- packages/evolve test: duration_ms: 2.64253 packages/evolve test: type: 'test' packages/evolve test: ... packages/cas test: # Subtest: JCS matches RFC number and UTF-16 ordering rules and rejects non-JSON values packages/cas test: ok 4 - JCS matches RFC number and UTF-16 ordering rules and rejects non-JSON values packages/cas test: --- packages/cas test: duration_ms: 1.354642 packages/cas test: type: 'test' packages/cas test: ... packages/evolve test: # Subtest: Idea Tree handoff sends prepared evidence to Python and returns its run id packages/evolve test: ok 9 - Idea Tree handoff sends prepared evidence to Python and returns its run id packages/evolve test: --- packages/evolve test: duration_ms: 1.162659 packages/evolve test: type: 'test' packages/evolve test: ... packages/evolve test: 1..9 packages/evolve test: # tests 9 packages/evolve test: # suites 0 packages/evolve test: # pass 9 packages/evolve test: # fail 0 packages/evolve test: # cancelled 0 packages/evolve test: # skipped 0 packages/evolve test: # todo 0 packages/evolve test: # duration_ms 379.335337 packages/evolve test: Done packages/executor test$ node --test dist/*.test.js packages/executor test: TAP version 13 packages/cas test: # Subtest: dual pools preserve typed identity, concurrent writes and OCI layout packages/cas test: ok 5 - dual pools preserve typed identity, concurrent writes and OCI layout packages/cas test: --- packages/cas test: duration_ms: 110.412412 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # (node:3787) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/executor test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: host probes preserve the Runner sandbox executable contract packages/executor test: ok 1 - host probes preserve the Runner sandbox executable contract packages/executor test: --- packages/executor test: duration_ms: 1.155623 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: system environment provenance uses the shipped Runner build packages/executor test: ok 2 - system environment provenance uses the shipped Runner build packages/executor test: --- packages/executor test: duration_ms: 0.190758 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: legacy hash reads survive new pool writes without moving the original packages/cas test: ok 6 - legacy hash reads survive new pool writes without moving the original packages/cas test: --- packages/cas test: duration_ms: 157.497217 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # (node:3796) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/executor test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: pruning under /bin/sh keeps the current and the busy binary and removes the rest packages/executor test: ok 3 - pruning under /bin/sh keeps the current and the busy binary and removes the rest packages/executor test: --- packages/executor test: duration_ms: 61.117982 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: pruning under /bin/dash keeps the current and the busy binary and removes the rest packages/executor test: ok 4 - pruning under /bin/dash keeps the current and the busy binary and removes the rest packages/executor test: --- packages/executor test: duration_ms: 38.980448 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: pruning under /bin/bash keeps the current and the busy binary and removes the rest packages/executor test: ok 5 - pruning under /bin/bash keeps the current and the busy binary and removes the rest packages/executor test: --- packages/executor test: duration_ms: 43.807528 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: pruning a directory that is not there is not an error packages/executor test: ok 6 - pruning a directory that is not there is not an error packages/executor test: --- packages/executor test: duration_ms: 3.420515 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: pruning an empty directory removes nothing packages/executor test: ok 7 - pruning an empty directory removes nothing packages/executor test: --- packages/executor test: duration_ms: 19.30141 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: a file that cannot be removed is reported as kept, not as pruned packages/executor test: ok 8 - a file that cannot be removed is reported as kept, not as pruned # SKIP packages/executor test: --- packages/executor test: duration_ms: 0.158873 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: Linux tree preserves raw names, case, symlinks, empty directories and executable bits packages/cas test: ok 7 - Linux tree preserves raw names, case, symlinks, empty directories and executable bits packages/cas test: --- packages/cas test: duration_ms: 334.202397 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: a directory whose name needs quoting is handled packages/executor test: ok 9 - a directory whose name needs quoting is handled packages/executor test: --- packages/executor test: duration_ms: 36.259653 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # (node:3957) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/executor test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: an isolated machine is handed the provisioner it cannot download packages/executor test: ok 10 - an isolated machine is handed the provisioner it cannot download packages/executor test: --- packages/executor test: duration_ms: 19.956504 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: the verified release is staged, checked on the machine, then moved into place packages/executor test: ok 11 - the verified release is staged, checked on the machine, then moved into place packages/executor test: --- packages/executor test: duration_ms: 11.820031 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: a transfer the machine cannot verify never becomes the executable it runs packages/executor test: ok 12 - a transfer the machine cannot verify never becomes the executable it runs packages/executor test: --- packages/executor test: duration_ms: 12.219353 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: a machine that already holds the pinned provisioner is not touched packages/executor test: ok 13 - a machine that already holds the pinned provisioner is not touched packages/executor test: --- packages/executor test: duration_ms: 6.254327 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: refs validate closure, rollback injected faults and retain every committed history root packages/cas test: ok 8 - refs validate closure, rollback injected faults and retain every committed history root packages/cas test: --- packages/cas test: duration_ms: 225.855807 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: a machine without sha256sum is left alone rather than written to blind packages/executor test: ok 14 - a machine without sha256sum is left alone rather than written to blind packages/executor test: --- packages/executor test: duration_ms: 18.373597 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: an architecture with no pinned release is skipped, not guessed at packages/executor test: ok 15 - an architecture with no pinned release is skipped, not guessed at packages/executor test: --- packages/executor test: duration_ms: 3.17226 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: the cached provisioner is reused across machines of the same architecture packages/executor test: ok 16 - the cached provisioner is reused across machines of the same architecture packages/executor test: --- packages/executor test: duration_ms: 14.132222 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: independent coordinators compare expected heads and same-path overwrite is captured packages/cas test: ok 9 - independent coordinators compare expected heads and same-path overwrite is captured packages/cas test: --- packages/cas test: duration_ms: 130.601042 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # (node:3968) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/executor test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: a real SSH machine without a runner is deployed to, connected, and used packages/executor test: ok 17 - a real SSH machine without a runner is deployed to, connected, and used # SKIP packages/executor test: --- packages/executor test: duration_ms: 5.929728 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: process death inside the SQLite transaction retains the old complete head packages/cas test: ok 10 - process death inside the SQLite transaction retains the old complete head packages/cas test: --- packages/cas test: duration_ms: 233.319523 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # (node:3989) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/cas test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/cas test: # Subtest: Workspace lease coordinates independent processes and does not block observers packages/cas test: ok 11 - Workspace lease coordinates independent processes and does not block observers packages/cas test: --- packages/cas test: duration_ms: 95.517461 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # (node:3988) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/executor test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: a second Runner ends up holding exactly the selected packages, under a path of its own packages/executor test: ok 18 - a second Runner ends up holding exactly the selected packages, under a path of its own packages/executor test: --- packages/executor test: duration_ms: 274.099267 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: same Workspace waits through atomic version publication; different roots run independently packages/cas test: ok 12 - same Workspace waits through atomic version publication; different roots run independently packages/cas test: --- packages/cas test: duration_ms: 287.895385 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: nested file operations reuse the owning lease and failed operations still commit file effects packages/cas test: ok 13 - nested file operations reuse the owning lease and failed operations still commit file effects packages/cas test: --- packages/cas test: duration_ms: 124.009541 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: opposite-direction copies acquire multiple Workspace leases without deadlock packages/cas test: ok 14 - opposite-direction copies acquire multiple Workspace leases without deadlock packages/cas test: --- packages/cas test: duration_ms: 91.730259 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: a changed selection or revision gets its own tree instead of reusing a stale one packages/executor test: ok 19 - a changed selection or revision gets its own tree instead of reusing a stale one packages/executor test: --- packages/executor test: duration_ms: 289.094832 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: ref publication failure closes admission across later operations packages/cas test: ok 15 - ref publication failure closes admission across later operations packages/cas test: --- packages/cas test: duration_ms: 101.774029 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: process loss releases the OS lock but refuses unverified files instead of replaying work packages/cas test: ok 16 - process loss releases the OS lock but refuses unverified files instead of replaying work packages/cas test: --- packages/cas test: duration_ms: 129.18953 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # (node:4069) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/cas test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: a failed sync or a damaged remote tree fails preparation instead of pretending packages/executor test: ok 20 - a failed sync or a damaged remote tree fails preparation instead of pretending packages/executor test: --- packages/executor test: duration_ms: 429.733851 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: retirement drains admitted writes, rejects queued/new writes and keeps unrelated roots parallel packages/cas test: ok 17 - retirement drains admitted writes, rejects queued/new writes and keeps unrelated roots parallel packages/cas test: --- packages/cas test: duration_ms: 230.835536 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: the deployable runner bundle carries the runner and every workspace package it imports packages/executor test: ok 21 - the deployable runner bundle carries the runner and every workspace package it imports packages/executor test: --- packages/executor test: duration_ms: 133.125118 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: failed restoration stays closed across reopen; successful recovery reopens only its scope packages/cas test: ok 18 - failed restoration stays closed across reopen; successful recovery reopens only its scope packages/cas test: --- packages/cas test: duration_ms: 217.102133 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: overlapping retirement is rejected, but a retired child does not prevent later parent deletion packages/cas test: ok 19 - overlapping retirement is rejected, but a retired child does not prevent later parent deletion packages/cas test: --- packages/cas test: duration_ms: 36.572825 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: packing twice produces the same archive so an unchanged host is left alone packages/executor test: ok 22 - packing twice produces the same archive so an unchanged host is left alone packages/executor test: --- packages/executor test: duration_ms: 156.678397 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # (node:4099) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/cas test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/executor test: # Subtest: Runner file transfer uses the authenticated SFTP session and fails on disconnect packages/executor test: ok 23 - Runner file transfer uses the authenticated SFTP session and fails on disconnect packages/executor test: --- packages/executor test: duration_ms: 3.046465 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: observers read the committed baseline while a writer changes live files, without waiting packages/cas test: ok 20 - observers read the committed baseline while a writer changes live files, without waiting packages/cas test: --- packages/cas test: duration_ms: 203.088033 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: authentication diagnostics reflect actual SSH protocol exchanges without exposing credentials packages/executor test: # Subtest: password rejected packages/executor test: ok 1 - password rejected packages/executor test: --- packages/executor test: duration_ms: 248.267579 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: snapshot selection is immutable, skips symlinks, and rejects path traversal packages/cas test: ok 21 - snapshot selection is immutable, skips symlinks, and rejects path traversal packages/cas test: --- packages/cas test: duration_ms: 157.119277 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: snapshot streaming detects corrupted CAS bytes instead of publishing them as valid packages/cas test: ok 22 - snapshot streaming detects corrupted CAS bytes instead of publishing them as valid packages/cas test: --- packages/cas test: duration_ms: 115.055218 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: key rejected packages/executor test: ok 2 - key rejected packages/executor test: --- packages/executor test: duration_ms: 218.273499 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: failed writes publish actual partial effects and provide a committed receipt packages/cas test: ok 23 - failed writes publish actual partial effects and provide a committed receipt packages/cas test: --- packages/cas test: duration_ms: 147.110602 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: whole-tree export preserves Linux structure and exports a fixed committed tree packages/cas test: ok 24 - whole-tree export preserves Linux structure and exports a fixed committed tree packages/cas test: --- packages/cas test: duration_ms: 205.798828 packages/cas test: type: 'test' packages/cas test: ... packages/executor test: # Subtest: interactive accepted packages/executor test: ok 3 - interactive accepted packages/executor test: --- packages/executor test: duration_ms: 314.679433 packages/executor test: type: 'test' packages/executor test: ... packages/cas test: # Subtest: whole-tree export refuses existing destinations and never deletes their contents packages/cas test: ok 25 - whole-tree export refuses existing destinations and never deletes their contents packages/cas test: --- packages/cas test: duration_ms: 97.67616 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: # Subtest: whole-tree export does not publish corrupt bytes or traversal entries packages/cas test: ok 26 - whole-tree export does not publish corrupt bytes or traversal entries packages/cas test: --- packages/cas test: duration_ms: 187.355834 packages/cas test: type: 'test' packages/cas test: ... packages/cas test: 1..26 packages/cas test: # tests 26 packages/cas test: # suites 0 packages/cas test: # pass 26 packages/cas test: # fail 0 packages/cas test: # cancelled 0 packages/cas test: # skipped 0 packages/cas test: # todo 0 packages/cas test: # duration_ms 4348.897692 packages/cas test: Done packages/governance test$ node --test dist/*.test.js packages/executor test: # Subtest: interactive rejected packages/executor test: ok 4 - interactive rejected packages/executor test: --- packages/executor test: duration_ms: 295.953295 packages/executor test: type: 'test' packages/executor test: ... packages/governance test: TAP version 13 packages/governance test: # Subtest: decisions serialize within a Session and remain independent across Sessions packages/governance test: ok 1 - decisions serialize within a Session and remain independent across Sessions packages/governance test: --- packages/governance test: duration_ms: 3.200232 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: decisions on one Session do not overlap packages/governance test: ok 2 - decisions on one Session do not overlap packages/governance test: --- packages/governance test: duration_ms: 0.452367 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: waiting decisions run in arrival order packages/governance test: ok 3 - waiting decisions run in arrival order packages/governance test: --- packages/governance test: duration_ms: 0.820004 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: a different Session is not blocked by a busy one packages/governance test: ok 4 - a different Session is not blocked by a busy one packages/governance test: --- packages/governance test: duration_ms: 0.38882 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: a failed decision propagates and still frees the Session packages/governance test: ok 5 - a failed decision propagates and still frees the Session packages/governance test: --- packages/governance test: duration_ms: 0.658512 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: a decision queued behind a failing one still runs packages/governance test: ok 6 - a decision queued behind a failing one still runs packages/governance test: --- packages/governance test: duration_ms: 0.327707 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: a drained Session leaves no retained state packages/governance test: ok 7 - a drained Session leaves no retained state packages/governance test: --- packages/governance test: duration_ms: 1.287253 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: governance permission runtime emits through the root sink and refreshes a shared live epoch packages/governance test: ok 8 - governance permission runtime emits through the root sink and refreshes a shared live epoch packages/governance test: --- packages/governance test: duration_ms: 2.501344 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: permission runtime reuses an existing grant without emitting approval UI packages/governance test: ok 9 - permission runtime reuses an existing grant without emitting approval UI packages/governance test: --- packages/governance test: duration_ms: 0.335119 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: # Subtest: manual permission decisions resume only their own action packages/governance test: ok 10 - manual permission decisions resume only their own action packages/governance test: --- packages/governance test: duration_ms: 1.873868 packages/governance test: type: 'test' packages/governance test: ... packages/governance test: 1..10 packages/governance test: # tests 10 packages/governance test: # suites 0 packages/governance test: # pass 10 packages/governance test: # fail 0 packages/governance test: # cancelled 0 packages/governance test: # skipped 0 packages/governance test: # todo 0 packages/governance test: # duration_ms 167.926673 packages/governance test: Done packages/idea-tree test$ node --test dist/*.test.js packages/executor test: # Subtest: password change packages/executor test: ok 5 - password change packages/executor test: --- packages/executor test: duration_ms: 216.544878 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: untrusted key packages/executor test: ok 6 - untrusted key packages/executor test: --- packages/executor test: duration_ms: 18.968397 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: 1..6 packages/executor test: ok 24 - authentication diagnostics reflect actual SSH protocol exchanges without exposing credentials packages/executor test: --- packages/executor test: duration_ms: 1319.121494 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: SSH errors after ready fail only that connection and reject pending commands packages/executor test: ok 25 - SSH errors after ready fail only that connection and reject pending commands packages/executor test: --- packages/executor test: duration_ms: 1.458942 packages/executor test: type: 'test' packages/executor test: ... packages/idea-tree test: TAP version 13 packages/idea-tree test: # Subtest: authority registry resolves only exact installed capabilities packages/idea-tree test: ok 1 - authority registry resolves only exact installed capabilities packages/idea-tree test: --- packages/idea-tree test: duration_ms: 5.08767 packages/idea-tree test: type: 'test' packages/idea-tree test: ... packages/idea-tree test: # Subtest: authority registry rejects duplicate identities packages/idea-tree test: ok 2 - authority registry rejects duplicate identities packages/idea-tree test: --- packages/idea-tree test: duration_ms: 0.262445 packages/idea-tree test: type: 'test' packages/idea-tree test: ... packages/executor test: # Subtest: a generated key is a real OpenSSH key whose public half is what OpenSSH derives packages/executor test: ok 26 - a generated key is a real OpenSSH key whose public half is what OpenSSH derives packages/executor test: --- packages/executor test: duration_ms: 91.90638 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: # Subtest: the public line can be derived from stored material, and junk is reported as unusable packages/executor test: ok 27 - the public line can be derived from stored material, and junk is reported as unusable packages/executor test: --- packages/executor test: duration_ms: 5.175896 packages/executor test: type: 'test' packages/executor test: ... packages/executor test: 1..27 packages/executor test: # tests 33 packages/executor test: # suites 0 packages/executor test: # pass 31 packages/executor test: # fail 0 packages/executor test: # cancelled 0 packages/executor test: # skipped 2 packages/executor test: # todo 0 packages/executor test: # duration_ms 4473.127584 packages/executor test: Done packages/memory test$ node --test dist/*.test.js packages/idea-tree test: # Subtest: standard selection remains isolated from Idea Tree packages/idea-tree test: ok 3 - standard selection remains isolated from Idea Tree packages/idea-tree test: --- packages/idea-tree test: duration_ms: 3.446808 packages/idea-tree test: type: 'test' packages/idea-tree test: ... packages/idea-tree test: # Subtest: queue selection freezes Markdown identity and the server-owned workflow contract packages/idea-tree test: ok 4 - queue selection freezes Markdown identity and the server-owned workflow contract packages/idea-tree test: --- packages/idea-tree test: duration_ms: 22.353852 packages/idea-tree test: type: 'test' packages/idea-tree test: ... packages/idea-tree test: # Subtest: v5 Markdown revisions change Run provenance without changing the hard-contract fingerprint packages/idea-tree test: ok 5 - v5 Markdown revisions change Run provenance without changing the hard-contract fingerprint packages/idea-tree test: --- packages/idea-tree test: duration_ms: 0.457171 packages/idea-tree test: type: 'test' packages/idea-tree test: ... packages/idea-tree test: # Subtest: the one built-in workflow needs no metadata while legacy Specialist snapshots still detect drift packages/idea-tree test: ok 6 - the one built-in workflow needs no metadata while legacy Specialist snapshots still detect drift packages/idea-tree test: --- packages/idea-tree test: duration_ms: 2.530894 packages/idea-tree test: type: 'test' packages/idea-tree test: ... packages/idea-tree test: 1..6 packages/idea-tree test: # tests 6 packages/idea-tree test: # suites 0 packages/idea-tree test: # pass 6 packages/idea-tree test: # fail 0 packages/idea-tree test: # cancelled 0 packages/idea-tree test: # skipped 0 packages/idea-tree test: # todo 0 packages/idea-tree test: # duration_ms 454.761413 packages/idea-tree test: Done packages/model test$ node --test dist/*.test.js packages/memory test: TAP version 13 packages/model test: TAP version 13 packages/memory test: # Subtest: queryMatch degrades to an empty result with a reason when the sidecar errors packages/memory test: ok 1 - queryMatch degrades to an empty result with a reason when the sidecar errors packages/memory test: --- packages/memory test: duration_ms: 41.299926 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: byNodeType posts the node_types and returns hits when the sidecar is healthy packages/memory test: ok 2 - byNodeType posts the node_types and returns hits when the sidecar is healthy packages/memory test: --- packages/memory test: duration_ms: 12.47514 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getChain returns nodes/edges with snake→camel field mapping packages/memory test: ok 3 - getChain returns nodes/edges with snake→camel field mapping packages/memory test: --- packages/memory test: duration_ms: 21.698331 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getChain forwards the version so an Artifact source pins its version packages/memory test: ok 4 - getChain forwards the version so an Artifact source pins its version packages/memory test: --- packages/memory test: duration_ms: 24.005199 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getChain forwards the button-level kind (no full/task/artifact default) packages/memory test: ok 5 - getChain forwards the button-level kind (no full/task/artifact default) packages/memory test: --- packages/memory test: duration_ms: 22.099359 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: chainExists sends kinds batch and maps the {kind: bool} response packages/memory test: ok 6 - chainExists sends kinds batch and maps the {kind: bool} response packages/memory test: --- packages/memory test: duration_ms: 11.688917 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareClaim forwards cites_artifact_versions + artifact_version and parses artifact chip version packages/memory test: ok 7 - declareClaim forwards cites_artifact_versions + artifact_version and parses artifact chip version packages/memory test: --- packages/memory test: duration_ms: 8.006215 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: linkClaimsToReport posts artifact_version with the composite key packages/memory test: ok 8 - linkClaimsToReport posts artifact_version with the composite key packages/memory test: --- packages/memory test: duration_ms: 17.176386 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareEvidence posts snake_case and returns ok with the evidence id packages/memory test: ok 9 - declareEvidence posts snake_case and returns ok with the evidence id packages/memory test: --- packages/memory test: duration_ms: 12.850165 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareEvidence surfaces the 422 business code instead of degrading packages/memory test: ok 10 - declareEvidence surfaces the 422 business code instead of degrading packages/memory test: --- packages/memory test: duration_ms: 6.130534 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareEvidence sends source_webpage_link in snake_case (WebPage source) packages/memory test: ok 11 - declareEvidence sends source_webpage_link in snake_case (WebPage source) packages/memory test: --- packages/memory test: duration_ms: 6.673441 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareClaim posts the alias map + artifact_id and returns the chip_map packages/memory test: ok 12 - declareClaim posts the alias map + artifact_id and returns the chip_map packages/memory test: --- packages/memory test: duration_ms: 10.373624 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareClaim surfaces no_cites_target + instruction from the 422 body packages/memory test: ok 13 - declareClaim surfaces no_cites_target + instruction from the 422 body packages/memory test: --- packages/memory test: duration_ms: 21.212262 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareClaim surfaces artifact_version_not_found + instruction from the 422 body packages/memory test: ok 14 - declareClaim surfaces artifact_version_not_found + instruction from the 422 body packages/memory test: --- packages/memory test: duration_ms: 15.002369 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareClaim forwards cites_dbrecord_aliases and surfaces the dbrecord chip packages/memory test: ok 15 - declareClaim forwards cites_dbrecord_aliases and surfaces the dbrecord chip packages/memory test: --- packages/memory test: duration_ms: 5.745581 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declareClaim omits cites_dbrecord_aliases when the alias map is absent packages/memory test: ok 16 - declareClaim omits cites_dbrecord_aliases when the alias map is absent packages/memory test: --- packages/memory test: duration_ms: 10.057149 packages/memory test: type: 'test' packages/memory test: ... packages/model test: # Subtest: provider context overflow is normalized without treating arbitrary token errors as recoverable packages/memory test: # Subtest: declareClaim surfaces db_record_not_found + instruction from the 422 body packages/memory test: ok 17 - declareClaim surfaces db_record_not_found + instruction from the 422 body packages/memory test: --- packages/memory test: duration_ms: 7.625037 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: declare methods report memory_graph_disabled when the sidecar is unreachable packages/memory test: ok 18 - declare methods report memory_graph_disabled when the sidecar is unreachable packages/memory test: --- packages/memory test: duration_ms: 3.772024 packages/memory test: type: 'test' packages/memory test: ... packages/model test: ok 1 - provider context overflow is normalized without treating arbitrary token errors as recoverable packages/model test: --- packages/model test: duration_ms: 1.313135 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: an installed catalog narrows thinking and pricing exactly as the snapshot states packages/model test: ok 2 - an installed catalog narrows thinking and pricing exactly as the snapshot states packages/model test: --- packages/model test: duration_ms: 15.177481 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: an empty catalog leaves the protocol dialect in charge of thinking packages/model test: ok 3 - an empty catalog leaves the protocol dialect in charge of thinking packages/model test: --- packages/model test: duration_ms: 1.127492 packages/model test: type: 'test' packages/model test: ... packages/memory test: # Subtest: observeExecution forwards logical_name on each produced artifact packages/memory test: ok 19 - observeExecution forwards logical_name on each produced artifact packages/memory test: --- packages/memory test: duration_ms: 18.555306 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: observeExecution forwards input_artifact_versions composite-key pairs on each produced artifact packages/memory test: ok 20 - observeExecution forwards input_artifact_versions composite-key pairs on each produced artifact packages/memory test: --- packages/memory test: duration_ms: 3.68027 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: observeExecution omits input_artifact_versions entries when none were read packages/memory test: ok 21 - observeExecution omits input_artifact_versions entries when none were read packages/memory test: --- packages/memory test: duration_ms: 2.326407 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: observeExecution forwards provenance addressing fields (hashes/turnId/contentHash) packages/memory test: ok 22 - observeExecution forwards provenance addressing fields (hashes/turnId/contentHash) packages/memory test: --- packages/memory test: duration_ms: 2.923849 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getArtifactProvenance issues GET with query params and shapes the full result (five fields + dependencies) packages/memory test: ok 23 - getArtifactProvenance issues GET with query params and shapes the full result (five fields + dependencies) packages/memory test: --- packages/memory test: duration_ms: 3.736539 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getArtifactProvenance returns empty dependencies (no reason) when no input edge matched packages/memory test: ok 24 - getArtifactProvenance returns empty dependencies (no reason) when no input edge matched packages/memory test: --- packages/memory test: duration_ms: 2.667163 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getArtifactProvenance shapes a source_file dependency (uploaded input, no version) packages/memory test: ok 25 - getArtifactProvenance shapes a source_file dependency (uploaded input, no version) packages/memory test: --- packages/memory test: duration_ms: 2.539521 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getArtifactProvenance returns null when the sidecar is unreachable packages/memory test: ok 26 - getArtifactProvenance returns null when the sidecar is unreachable packages/memory test: --- packages/memory test: duration_ms: 0.409786 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: getArtifactProvenance returns node_not_found on 404 packages/memory test: ok 27 - getArtifactProvenance returns node_not_found on 404 packages/memory test: --- packages/memory test: duration_ms: 2.800312 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: traceProvenance posts the right shape and maps snake→camel fields packages/memory test: ok 28 - traceProvenance posts the right shape and maps snake→camel fields packages/memory test: --- packages/memory test: duration_ms: 4.78163 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: traceProvenance degrades to broken:true when the sidecar is unreachable packages/memory test: ok 29 - traceProvenance degrades to broken:true when the sidecar is unreachable packages/memory test: --- packages/memory test: duration_ms: 5.244175 packages/memory test: type: 'test' packages/memory test: ... packages/model test: # Subtest: a plain openai endpoint still shows reasoning_content without replaying it packages/model test: ok 4 - a plain openai endpoint still shows reasoning_content without replaying it packages/model test: --- packages/model test: duration_ms: 93.344951 packages/model test: type: 'test' packages/model test: ... packages/memory test: # Subtest: MemoryGraphSink.cleanupSession posts the right shape and never throws when the service errors packages/memory test: ok 30 - MemoryGraphSink.cleanupSession posts the right shape and never throws when the service errors packages/memory test: --- packages/memory test: duration_ms: 11.917912 packages/memory test: type: 'test' packages/memory test: ... packages/model test: # Subtest: openai stream assembles text, thinking, split tool calls, and usage packages/model test: ok 5 - openai stream assembles text, thinking, split tool calls, and usage packages/model test: --- packages/model test: duration_ms: 13.231318 packages/model test: type: 'test' packages/model test: ... packages/memory test: # Subtest: MemoryGraphSink.cleanupProject posts the right shape and never throws when the service errors packages/memory test: ok 31 - MemoryGraphSink.cleanupProject posts the right shape and never throws when the service errors packages/memory test: --- packages/memory test: duration_ms: 11.715835 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: MemoryGraphSink.cleanup* is a no-op when disabled (no network call) packages/memory test: ok 32 - MemoryGraphSink.cleanup* is a no-op when disabled (no network call) packages/memory test: --- packages/memory test: duration_ms: 1.013593 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: MemoryGraphSink.observeToolCall posts snake_case products and never throws when the service errors packages/memory test: ok 33 - MemoryGraphSink.observeToolCall posts snake_case products and never throws when the service errors packages/memory test: --- packages/memory test: duration_ms: 11.425826 packages/memory test: type: 'test' packages/memory test: ... packages/model test: # Subtest: chat variants map thinking controls without cross-provider fields packages/model test: ok 6 - chat variants map thinking controls without cross-provider fields packages/model test: --- packages/model test: duration_ms: 26.914705 packages/model test: type: 'test' packages/model test: ... packages/memory test: # Subtest: MemoryGraphSink.observeToolCall forwards contentHash on fetched web_page products packages/memory test: ok 34 - MemoryGraphSink.observeToolCall forwards contentHash on fetched web_page products packages/memory test: --- packages/memory test: duration_ms: 10.935878 packages/memory test: type: 'test' packages/memory test: ... packages/memory test: # Subtest: MemoryGraphSink.observeToolCall forwards parentSubagentId and skips when disabled packages/memory test: ok 35 - MemoryGraphSink.observeToolCall forwards parentSubagentId and skips when disabled packages/memory test: --- packages/memory test: duration_ms: 11.361998 packages/memory test: type: 'test' packages/memory test: ... packages/model test: # Subtest: explicit protocol changes the endpoint even when the saved URL has an old suffix packages/model test: ok 7 - explicit protocol changes the endpoint even when the saved URL has an old suffix packages/model test: --- packages/model test: duration_ms: 12.374986 packages/model test: type: 'test' packages/model test: ... packages/memory test: 1..35 packages/memory test: # tests 35 packages/memory test: # suites 0 packages/memory test: # pass 35 packages/memory test: # fail 0 packages/memory test: # cancelled 0 packages/memory test: # skipped 0 packages/memory test: # todo 0 packages/memory test: # duration_ms 560.602997 packages/memory test: Done packages/model test: # Subtest: chat variants preserve only their required reasoning replay payload packages/model test: ok 8 - chat variants preserve only their required reasoning replay payload packages/model test: --- packages/model test: duration_ms: 30.366281 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: MiniMax extracts reasoning_details and inline think without replaying it packages/model test: ok 9 - MiniMax extracts reasoning_details and inline think without replaying it packages/model test: --- packages/model test: duration_ms: 6.61712 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: pre-stream 500 is retried once before succeeding packages/model test: ok 10 - pre-stream 500 is retried once before succeeding packages/model test: --- packages/model test: duration_ms: 2918.256429 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: anthropic dialect translates history and assembles tool_use turns packages/model test: ok 11 - anthropic dialect translates history and assembles tool_use turns packages/model test: --- packages/model test: duration_ms: 7.636395 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Anthropic disabled mode sends only its own top-level thinking control packages/model test: ok 12 - Anthropic disabled mode sends only its own top-level thinking control packages/model test: --- packages/model test: duration_ms: 7.285763 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Responses uses item protocol and replays reasoning plus function call IDs packages/model test: ok 13 - Responses uses item protocol and replays reasoning plus function call IDs packages/model test: --- packages/model test: duration_ms: 5.263534 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Responses sends only the selected model's legal xhigh/max wire value packages/model test: ok 14 - Responses sends only the selected model's legal xhigh/max wire value packages/model test: --- packages/model test: duration_ms: 5.316752 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Kimi K3 sends official reasoning_effort without a toggle and replays reasoning_content packages/model test: ok 15 - Kimi K3 sends official reasoning_effort without a toggle and replays reasoning_content packages/model test: --- packages/model test: duration_ms: 5.068779 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Claude Haiku 4.5 overrides an adaptive profile with legal legacy thinking packages/model test: ok 16 - Claude Haiku 4.5 overrides an adaptive profile with legal legacy thinking packages/model test: --- packages/model test: duration_ms: 14.030191 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Anthropic thinking blocks and signatures replay verbatim packages/model test: ok 17 - Anthropic thinking blocks and signatures replay verbatim packages/model test: --- packages/model test: duration_ms: 24.945137 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: toAnthropicMessages merges consecutive tool results into one user message packages/model test: ok 18 - toAnthropicMessages merges consecutive tool results into one user message packages/model test: --- packages/model test: duration_ms: 0.340062 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: usage normalization tolerates provider spellings packages/model test: ok 19 - usage normalization tolerates provider spellings packages/model test: --- packages/model test: duration_ms: 0.134653 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: model client policy env parsing validates values packages/model test: ok 20 - model client policy env parsing validates values packages/model test: --- packages/model test: duration_ms: 0.430856 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: model proxy policy selects the right dispatcher packages/model test: ok 21 - model proxy policy selects the right dispatcher packages/model test: --- packages/model test: duration_ms: 0.848263 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: openai-style listing normalizes ids and optional vendor facts packages/model test: ok 22 - openai-style listing normalizes ids and optional vendor facts packages/model test: --- packages/model test: duration_ms: 36.616704 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: openrouter-style per-token pricing converts to per-1M and reads modalities packages/model test: ok 23 - openrouter-style per-token pricing converts to per-1M and reads modalities packages/model test: --- packages/model test: duration_ms: 8.823955 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: anthropic listing uses x-api-key, /v1/models, and capability fields packages/model test: ok 24 - anthropic listing uses x-api-key, /v1/models, and capability fields packages/model test: --- packages/model test: duration_ms: 3.536407 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a missing token sends no auth header at all packages/model test: ok 25 - a missing token sends no auth header at all packages/model test: --- packages/model test: duration_ms: 3.582167 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: upstream failures keep the status code and bounded detail packages/model test: ok 26 - upstream failures keep the status code and bounded detail packages/model test: --- packages/model test: duration_ms: 4.027826 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: non-JSON and unknown shapes are rejected instead of faked packages/model test: ok 27 - non-JSON and unknown shapes are rejected instead of faked packages/model test: --- packages/model test: duration_ms: 4.646299 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a fact comes from the user first, then the provider listing, then the catalog packages/model test: ok 28 - a fact comes from the user first, then the provider listing, then the catalog packages/model test: --- packages/model test: duration_ms: 13.433248 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: typing a model id the catalog knows prefills its published facts packages/model test: ok 29 - typing a model id the catalog knows prefills its published facts packages/model test: --- packages/model test: duration_ms: 1.110236 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a model id the catalog does not know prefills nothing rather than guessing packages/model test: ok 30 - a model id the catalog does not know prefills nothing rather than guessing packages/model test: --- packages/model test: duration_ms: 0.26947 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a user price is resolved without inventing a source to cite packages/model test: ok 31 - a user price is resolved without inventing a source to cite packages/model test: --- packages/model test: duration_ms: 0.812738 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: false and zero are facts, not absences packages/model test: ok 32 - false and zero are facts, not absences packages/model test: --- packages/model test: duration_ms: 0.30206 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: declared effort stops replace the catalog's for that endpoint packages/model test: ok 33 - declared effort stops replace the catalog's for that endpoint packages/model test: --- packages/model test: duration_ms: 0.423693 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: narrowing honours the declared stops, including for a model the catalog never heard of packages/model test: ok 34 - narrowing honours the declared stops, including for a model the catalog never heard of packages/model test: --- packages/model test: duration_ms: 0.511411 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: mapping keeps only mapped providers and attributes prices to their own preset packages/model test: ok 35 - mapping keeps only mapped providers and attributes prices to their own preset packages/model test: --- packages/model test: duration_ms: 13.177457 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: thinking capability is read from the document and never widened or invented packages/model test: ok 36 - thinking capability is read from the document and never widened or invented packages/model test: --- packages/model test: duration_ms: 0.589385 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: Anthropic thinking dialect is mapped explicitly and other providers stay unset packages/model test: ok 37 - Anthropic thinking dialect is mapped explicitly and other providers stay unset packages/model test: --- packages/model test: duration_ms: 0.949213 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: confirmed product wire contracts override the document packages/model test: ok 38 - confirmed product wire contracts override the document packages/model test: --- packages/model test: duration_ms: 0.401764 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: two hosts of one brand are priced separately and never borrow each other's rate packages/model test: ok 39 - two hosts of one brand are priced separately and never borrow each other's rate packages/model test: --- packages/model test: duration_ms: 0.247107 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a listing whose endpoint is a different host contributes no price packages/model test: ok 40 - a listing whose endpoint is a different host contributes no price packages/model test: --- packages/model test: duration_ms: 0.3209 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: an absent catalog reports every fact as unknown instead of a default packages/model test: ok 41 - an absent catalog reports every fact as unknown instead of a default packages/model test: --- packages/model test: duration_ms: 0.264505 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a payload that is not a provider map yields no records packages/model test: ok 42 - a payload that is not a provider map yields no records packages/model test: --- packages/model test: duration_ms: 0.154545 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a provider that rehosts another brand never overwrites that brand's facts packages/model test: ok 43 - a provider that rehosts another brand never overwrites that brand's facts packages/model test: --- packages/model test: duration_ms: 0.667676 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: a published effort scale outranks a provider that is merely silent about one packages/model test: ok 44 - a published effort scale outranks a provider that is merely silent about one packages/model test: --- packages/model test: duration_ms: 0.629025 packages/model test: type: 'test' packages/model test: ... packages/model test: # Subtest: every aggregator mapping sits after every vendor mapping packages/model test: ok 45 - every aggregator mapping sits after every vendor mapping packages/model test: --- packages/model test: duration_ms: 0.316614 packages/model test: type: 'test' packages/model test: ... packages/model test: 1..45 packages/model test: # tests 45 packages/model test: # suites 0 packages/model test: # pass 45 packages/model test: # fail 0 packages/model test: # cancelled 0 packages/model test: # skipped 0 packages/model test: # todo 0 packages/model test: # duration_ms 3997.128259 packages/model test: Done packages/context test$ node --test dist/*.test.js packages/orchestration test$ node --test dist/*.test.js packages/orchestration test: TAP version 13 packages/context test: TAP version 13 packages/orchestration test: # Subtest: main and subagent profiles encode policy symmetrically without live runtime state packages/orchestration test: ok 1 - main and subagent profiles encode policy symmetrically without live runtime state packages/orchestration test: --- packages/orchestration test: duration_ms: 3.100308 packages/orchestration test: type: 'test' packages/orchestration test: ... packages/orchestration test: # Subtest: profile builders detach mutable resource and policy arrays packages/orchestration test: ok 2 - profile builders detach mutable resource and policy arrays packages/orchestration test: --- packages/orchestration test: duration_ms: 1.824398 packages/orchestration test: type: 'test' packages/orchestration test: ... packages/context test: # Subtest: budget preserves protected authority and deterministically truncates optional context packages/context test: ok 1 - budget preserves protected authority and deterministically truncates optional context packages/context test: --- packages/context test: duration_ms: 1.859353 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: budget rejects protected sections that cannot fit without weakening authority packages/context test: ok 2 - budget rejects protected sections that cannot fit without weakening authority packages/context test: --- packages/context test: duration_ms: 0.505033 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: budget environment resolves native window settings packages/context test: ok 3 - budget environment resolves native window settings packages/context test: --- packages/context test: duration_ms: 0.641998 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: resolved model facts seed the window while explicit environment remains authoritative packages/context test: ok 4 - resolved model facts seed the window while explicit environment remains authoritative packages/context test: --- packages/context test: duration_ms: 0.208657 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: a freshly written checkpoint carries the current product spelling packages/context test: ok 5 - a freshly written checkpoint carries the current product spelling packages/context test: --- packages/context test: duration_ms: 6.564104 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: checkpoints stored under the former product name are still recognized packages/context test: ok 6 - checkpoints stored under the former product name are still recognized packages/context test: --- packages/context test: duration_ms: 0.262138 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: an ordinary message is not mistaken for a checkpoint packages/context test: ok 7 - an ordinary message is not mistaken for a checkpoint packages/context test: --- packages/context test: duration_ms: 0.209391 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: summary input preserves bounded tool evidence and requests a scientific checkpoint packages/context test: ok 8 - summary input preserves bounded tool evidence and requests a scientific checkpoint packages/context test: --- packages/context test: duration_ms: 0.371142 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: checkpoint validation fills missing structural sections without making semantic decisions packages/context test: ok 9 - checkpoint validation fills missing structural sections without making semantic decisions packages/context test: --- packages/context test: duration_ms: 0.885105 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: checkpoint validation reports duplicate next actions and unknown refs packages/orchestration test: # Subtest: general-purpose preset inherits tools, denies nesting, and matches the runtime guardrail scale packages/orchestration test: ok 3 - general-purpose preset inherits tools, denies nesting, and matches the runtime guardrail scale packages/orchestration test: --- packages/orchestration test: duration_ms: 39.415218 packages/orchestration test: type: 'test' packages/orchestration test: ... packages/orchestration test: # Subtest: subagent config accepts any requested type as a general-purpose delegation label packages/context test: ok 10 - checkpoint validation reports duplicate next actions and unknown refs packages/context test: --- packages/context test: duration_ms: 0.238804 packages/context test: type: 'test' packages/context test: ... packages/orchestration test: ok 4 - subagent config accepts any requested type as a general-purpose delegation label packages/orchestration test: --- packages/orchestration test: duration_ms: 0.834304 packages/orchestration test: type: 'test' packages/orchestration test: ... packages/orchestration test: 1..4 packages/orchestration test: # tests 4 packages/orchestration test: # suites 0 packages/orchestration test: # pass 4 packages/orchestration test: # fail 0 packages/orchestration test: # cancelled 0 packages/orchestration test: # skipped 0 packages/orchestration test: # todo 0 packages/orchestration test: # duration_ms 365.323129 packages/orchestration test: Done packages/trajectory test$ node --test dist/*.test.js packages/trajectory test: TAP version 13 packages/context test: # Subtest: contributors are scope-filtered and sections have deterministic render priorities packages/context test: ok 11 - contributors are scope-filtered and sections have deterministic render priorities packages/context test: --- packages/context test: duration_ms: 22.543385 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: duplicate sections fail instead of silently overriding authority packages/context test: ok 12 - duplicate sections fail instead of silently overriding authority packages/context test: --- packages/context test: duration_ms: 0.916242 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: optional contributor failure is traced while required failure is terminal packages/context test: ok 13 - optional contributor failure is traced while required failure is terminal packages/context test: --- packages/context test: duration_ms: 0.765596 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: detailed collection records raw output and contributor duration packages/context test: ok 14 - detailed collection records raw output and contributor duration packages/context test: --- packages/context test: duration_ms: 0.36159 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: capability packages register factories against a run scope before freeze packages/context test: ok 15 - capability packages register factories against a run scope before freeze packages/context test: --- packages/context test: duration_ms: 0.640468 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: static contributor preserves the legacy prompt as one protected section packages/context test: ok 16 - static contributor preserves the legacy prompt as one protected section packages/context test: --- packages/context test: duration_ms: 0.421061 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # Subtest: tools are a separate field, not messages; preserve exact context order and content packages/trajectory test: ok 1 - tools are a separate field, not messages; preserve exact context order and content packages/trajectory test: --- packages/trajectory test: duration_ms: 4.140982 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: context labels name tool calls and resolve results only through unique preceding call ids packages/trajectory test: ok 2 - context labels name tool calls and resolve results only through unique preceding call ids packages/trajectory test: --- packages/trajectory test: duration_ms: 0.537253 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: Skill and contribution labels come from metadata, never text guessing packages/trajectory test: ok 3 - Skill and contribution labels come from metadata, never text guessing packages/trajectory test: --- packages/trajectory test: duration_ms: 0.720316 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: missing and alternate-format tool names degrade without inventing provenance packages/trajectory test: ok 4 - missing and alternate-format tool names degrade without inventing provenance packages/trajectory test: --- packages/trajectory test: duration_ms: 0.379344 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: durable state hydrates structured calls and survives removal of source history packages/context test: ok 17 - durable state hydrates structured calls and survives removal of source history packages/context test: --- packages/context test: duration_ms: 8.118428 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: domain contributors expose bounded structured runtime observations as data packages/context test: ok 18 - domain contributors expose bounded structured runtime observations as data packages/context test: --- packages/context test: duration_ms: 14.530318 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # Subtest: hide every lifecycle and state category, but retain model and tool evidence packages/trajectory test: ok 5 - hide every lifecycle and state category, but retain model and tool evidence packages/trajectory test: --- packages/trajectory test: duration_ms: 2.084768 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: main and child trajectories show final responses only, keeping thinking packages/trajectory test: ok 6 - main and child trajectories show final responses only, keeping thinking packages/trajectory test: --- packages/trajectory test: duration_ms: 0.340295 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: timeline separates model and tools and packs overlapping intervals without moving timestamps packages/trajectory test: ok 7 - timeline separates model and tools and packs overlapping intervals without moving timestamps packages/trajectory test: --- packages/trajectory test: duration_ms: 0.894445 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: real overlap, touching ends and coincident points determine rows independently of drawing packages/trajectory test: ok 8 - real overlap, touching ends and coincident points determine rows independently of drawing packages/trajectory test: --- packages/trajectory test: duration_ms: 11.958375 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: dense spacing uses a shared monotone clock across agents without changing recorded times packages/trajectory test: ok 9 - dense spacing uses a shared monotone clock across agents without changing recorded times packages/trajectory test: --- packages/trajectory test: duration_ms: 0.595225 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: one heading per Agent Run; retries retain exact context identities and untimed input placement packages/trajectory test: ok 10 - one heading per Agent Run; retries retain exact context identities and untimed input placement packages/trajectory test: --- packages/trajectory test: duration_ms: 0.665021 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: thinking and model stream packets render only recorded text packages/trajectory test: ok 11 - thinking and model stream packets render only recorded text packages/trajectory test: --- packages/trajectory test: duration_ms: 0.91137 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: lifecycle notifications without context no longer create one Agent heading per event packages/trajectory test: ok 12 - lifecycle notifications without context no longer create one Agent heading per event packages/trajectory test: --- packages/trajectory test: duration_ms: 0.24316 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: usage comes from this model result, retains zero and never invents missing counts packages/trajectory test: ok 13 - usage comes from this model result, retains zero and never invents missing counts packages/trajectory test: --- packages/trajectory test: duration_ms: 0.646315 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: tools parse arguments, retain invalid JSON and show results, MCP payloads and command output packages/trajectory test: ok 14 - tools parse arguments, retain invalid JSON and show results, MCP payloads and command output packages/trajectory test: --- packages/trajectory test: duration_ms: 1.01689 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: input and state summaries use frozen data, not an inferred current state packages/trajectory test: ok 15 - input and state summaries use frozen data, not an inferred current state packages/trajectory test: --- packages/trajectory test: duration_ms: 1.224034 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: dynamic mode renders invocation input and keeps Node history canonical packages/context test: ok 19 - dynamic mode renders invocation input and keeps Node history canonical packages/context test: --- packages/context test: duration_ms: 22.704098 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: shadow mode traces dynamic assembly while preserving legacy model input packages/context test: ok 20 - shadow mode traces dynamic assembly while preserving legacy model input packages/context test: --- packages/context test: duration_ms: 0.858329 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: dynamic mode rejects a contributor that forges a tool result packages/context test: ok 21 - dynamic mode rejects a contributor that forges a tool result packages/context test: --- packages/context test: duration_ms: 0.945217 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: context mode defaults to dynamic and validates debug modes packages/context test: ok 22 - context mode defaults to dynamic and validates debug modes packages/context test: --- packages/context test: duration_ms: 0.270189 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: dynamic mode enforces the model context window after reserving output tokens packages/context test: ok 23 - dynamic mode enforces the model context window after reserving output tokens packages/context test: --- packages/context test: duration_ms: 1.85563 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: parallel large tool results are reduced before the next model call packages/context test: ok 24 - parallel large tool results are reduced before the next model call packages/context test: --- packages/context test: duration_ms: 5.43847 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # (node:4308) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/trajectory test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/trajectory test: # Subtest: exact admitted system sections preserve order and separators, not rejected proposals packages/trajectory test: ok 16 - exact admitted system sections preserve order and separators, not rejected proposals packages/trajectory test: --- packages/trajectory test: duration_ms: 2.02348 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: classification and structured credential redaction packages/trajectory test: ok 17 - classification and structured credential redaction packages/trajectory test: --- packages/trajectory test: duration_ms: 0.786759 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: token pressure prunes tool bodies before spending a summary model call packages/context test: ok 25 - token pressure prunes tool bodies before spending a summary model call packages/context test: --- packages/context test: duration_ms: 3.452981 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: compaction summarizes old closed work inside one user request and keeps the recent tail packages/context test: ok 26 - compaction summarizes old closed work inside one user request and keeps the recent tail packages/context test: --- packages/context test: duration_ms: 1.559089 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: compaction preserves a structured checkpoint and reports semantic-shape warnings without blocking packages/context test: ok 27 - compaction preserves a structured checkpoint and reports semantic-shape warnings without blocking packages/context test: --- packages/context test: duration_ms: 2.371617 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: forced recovery never summarizes an incomplete tool-call contract packages/context test: ok 28 - forced recovery never summarizes an incomplete tool-call contract packages/context test: --- packages/context test: duration_ms: 0.559216 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: a non-shrinking checkpoint is retried and only a convergent replacement is accepted packages/context test: ok 29 - a non-shrinking checkpoint is retried and only a convergent replacement is accepted packages/context test: --- packages/context test: duration_ms: 0.591663 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: the latest complete LLM step keeps its call/result contract under pressure packages/context test: ok 30 - the latest complete LLM step keeps its call/result contract under pressure packages/context test: --- packages/context test: duration_ms: 1.005976 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: message window keeps the latest user round and tool call/result pair packages/context test: ok 31 - message window keeps the latest user round and tool call/result pair packages/context test: --- packages/context test: duration_ms: 2.918563 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: token window preserves summary checkpoint and latest task packages/context test: ok 32 - token window preserves summary checkpoint and latest task packages/context test: --- packages/context test: duration_ms: 0.706787 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: window recognizes the current ScienceDiscovery summary checkpoint key packages/context test: ok 33 - window recognizes the current ScienceDiscovery summary checkpoint key packages/context test: --- packages/context test: duration_ms: 0.248019 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: token fallback can evict completed steps from the current user request packages/context test: ok 34 - token fallback can evict completed steps from the current user request packages/context test: --- packages/context test: duration_ms: 0.430333 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: message composer adds hidden invocation data without mutating history packages/context test: ok 35 - message composer adds hidden invocation data without mutating history packages/context test: --- packages/context test: duration_ms: 1.307931 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: message composer rejects forged assistant or tool messages packages/context test: ok 36 - message composer rejects forged assistant or tool messages packages/context test: --- packages/context test: duration_ms: 0.547536 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # Subtest: failed attempts remain inspectable, scoped, immutable and self-contained in NDJSON packages/trajectory test: ok 18 - failed attempts remain inspectable, scoped, immutable and self-contained in NDJSON packages/trajectory test: --- packages/trajectory test: duration_ms: 241.089896 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: prompt renderer orders sections deterministically packages/context test: ok 37 - prompt renderer orders sections deterministically packages/context test: --- packages/context test: duration_ms: 1.575971 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: commands serialize with captures and reject ABA revision reuse packages/context test: ok 38 - commands serialize with captures and reject ABA revision reuse packages/context test: --- packages/context test: duration_ms: 5.275411 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: migration is explicit, JSON-only and does not mutate the source snapshot packages/context test: ok 39 - migration is explicit, JSON-only and does not mutate the source snapshot packages/context test: --- packages/context test: duration_ms: 1.449292 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: contributors without declared stateReads receive an empty view packages/context test: ok 40 - contributors without declared stateReads receive an empty view packages/context test: --- packages/context test: duration_ms: 2.459505 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # Subtest: legacy committed ModelAction remains a final response without inventing a timestamp packages/trajectory test: ok 19 - legacy committed ModelAction remains a final response without inventing a timestamp packages/trajectory test: --- packages/trajectory test: duration_ms: 224.099586 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: state views retain immutable values and restrict component access packages/context test: ok 41 - state views retain immutable values and restrict component access packages/context test: --- packages/context test: duration_ms: 2.338032 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: capture retries revision changes and rejects continuously changing state packages/context test: ok 42 - capture retries revision changes and rejects continuously changing state packages/context test: --- packages/context test: duration_ms: 25.072691 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: reference-only observations are pinned once while local states still converge packages/context test: ok 43 - reference-only observations are pinned once while local states still converge packages/context test: --- packages/context test: duration_ms: 2.186489 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # Subtest: historical timestamps remain unknown instead of a fabricated timeline position packages/trajectory test: ok 20 - historical timestamps remain unknown instead of a fabricated timeline position packages/trajectory test: --- packages/trajectory test: duration_ms: 41.735789 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: context traces are disabled by default packages/context test: ok 44 - context traces are disabled by default packages/context test: --- packages/context test: duration_ms: 1.191952 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: context trace exports one private JSON record per model turn packages/context test: ok 45 - context trace exports one private JSON record per model turn packages/context test: --- packages/context test: duration_ms: 14.780435 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: a forced recovery is retained beside the original turn trace packages/context test: ok 46 - a forced recovery is retained beside the original turn trace packages/context test: --- packages/context test: duration_ms: 9.981661 packages/context test: type: 'test' packages/context test: ... packages/trajectory test: # Subtest: journal entries own order, exact context and run identity without snapshot timeline duplicates packages/trajectory test: ok 21 - journal entries own order, exact context and run identity without snapshot timeline duplicates packages/trajectory test: --- packages/trajectory test: duration_ms: 225.195496 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: stream sequence wins over equal timestamps, hash IDs and backwards wall clock packages/trajectory test: ok 22 - stream sequence wins over equal timestamps, hash IDs and backwards wall clock packages/trajectory test: --- packages/trajectory test: duration_ms: 0.288113 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/context test: # Subtest: validator accepts protected authority and governed tool calls packages/context test: ok 47 - validator accepts protected authority and governed tool calls packages/context test: --- packages/context test: duration_ms: 1.657249 packages/context test: type: 'test' packages/context test: ... packages/context test: # Subtest: validator rejects missing authority, changed tools, and orphan results packages/context test: ok 48 - validator rejects missing authority, changed tools, and orphan results packages/context test: --- packages/context test: duration_ms: 0.76501 packages/context test: type: 'test' packages/context test: ... packages/context test: 1..48 packages/context test: # tests 48 packages/context test: # suites 0 packages/context test: # pass 48 packages/context test: # fail 0 packages/context test: # cancelled 0 packages/context test: # skipped 0 packages/context test: # todo 0 packages/context test: # duration_ms 1581.538969 packages/context test: Done packages/trajectory test: # Subtest: original Run events carry exact input, state, producer time and per-request usage packages/trajectory test: ok 23 - original Run events carry exact input, state, producer time and per-request usage packages/trajectory test: --- packages/trajectory test: duration_ms: 107.886184 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: legacy EventSegment and original thinking are one entry only with exact identity and content packages/trajectory test: ok 24 - legacy EventSegment and original thinking are one entry only with exact identity and content packages/trajectory test: --- packages/trajectory test: duration_ms: 140.998297 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: legacy parallel main tools reuse Run records without merging distinct executions packages/trajectory test: ok 25 - legacy parallel main tools reuse Run records without merging distinct executions packages/trajectory test: --- packages/trajectory test: duration_ms: 219.125587 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: legacy parallel child tools reuse Run records without merging distinct executions packages/trajectory test: ok 26 - legacy parallel child tools reuse Run records without merging distinct executions packages/trajectory test: --- packages/trajectory test: duration_ms: 190.589985 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: # Subtest: MCP audit detail resolves owned payloads and redacts credentials packages/trajectory test: ok 27 - MCP audit detail resolves owned payloads and redacts credentials packages/trajectory test: --- packages/trajectory test: duration_ms: 107.952937 packages/trajectory test: type: 'test' packages/trajectory test: ... packages/trajectory test: 1..27 packages/trajectory test: # tests 27 packages/trajectory test: # suites 0 packages/trajectory test: # pass 27 packages/trajectory test: # fail 0 packages/trajectory test: # cancelled 0 packages/trajectory test: # skipped 0 packages/trajectory test: # todo 0 packages/trajectory test: # duration_ms 1860.181759 packages/trajectory test: Done packages/plugin-sdk test$ node --test dist/*.test.js packages/workspace test$ node --test dist/*.test.js packages/workspace test: TAP version 13 packages/plugin-sdk test: TAP version 13 packages/plugin-sdk test: # Subtest: configuration validation preserves inheritance without admitting credentials or unknown fields packages/plugin-sdk test: ok 1 - configuration validation preserves inheritance without admitting credentials or unknown fields packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 2.346198 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: # Subtest: availability, authorization and activation are separate; optional contracts do not disable a component packages/plugin-sdk test: ok 2 - availability, authorization and activation are separate; optional contracts do not disable a component packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 0.885584 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: # Subtest: service registry enforces exact contracts, duplicate ownership and scoped release packages/plugin-sdk test: ok 3 - service registry enforces exact contracts, duplicate ownership and scoped release packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 2.883196 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: # Subtest: bridge binds scope and method kind, rejects prototype dispatch and cancels before mutation packages/plugin-sdk test: ok 4 - bridge binds scope and method kind, rejects prototype dispatch and cancels before mutation packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 0.980094 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: # Subtest: dependency order, single start and reverse disposal packages/plugin-sdk test: ok 5 - dependency order, single start and reverse disposal packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 10.686083 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: # Subtest: failed activation releases earlier factories; failed start disposes every instance packages/plugin-sdk test: ok 6 - failed activation releases earlier factories; failed start disposes every instance packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 0.723333 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: # Subtest: view selection is deterministic and disabled plugins do not contribute packages/plugin-sdk test: ok 7 - view selection is deterministic and disabled plugins do not contribute packages/plugin-sdk test: --- packages/plugin-sdk test: duration_ms: 14.564308 packages/plugin-sdk test: type: 'test' packages/plugin-sdk test: ... packages/plugin-sdk test: 1..7 packages/plugin-sdk test: # tests 7 packages/plugin-sdk test: # suites 0 packages/plugin-sdk test: # pass 7 packages/plugin-sdk test: # fail 0 packages/plugin-sdk test: # cancelled 0 packages/plugin-sdk test: # skipped 0 packages/plugin-sdk test: # todo 0 packages/plugin-sdk test: # duration_ms 534.283846 packages/plugin-sdk test: Done packages/workspace test: # Subtest: a binary version returns type and size, never a body or base64 packages/workspace test: ok 1 - a binary version returns type and size, never a body or base64 packages/workspace test: --- packages/workspace test: duration_ms: 1.192645 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: an unlabeled binary upload is caught by its bytes packages/workspace test: ok 2 - an unlabeled binary upload is caught by its bytes packages/workspace test: --- packages/workspace test: duration_ms: 0.263811 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a PDB version is text even though its media type is not text/* packages/workspace test: ok 3 - a PDB version is text even though its media type is not text/* packages/workspace test: --- packages/workspace test: duration_ms: 0.4874 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a text version is paged and reports where to continue packages/workspace test: ok 4 - a text version is paged and reports where to continue packages/workspace test: --- packages/workspace test: duration_ms: 14.243863 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a page stays under the model-facing byte budget whatever limit is asked for packages/workspace test: ok 5 - a page stays under the model-facing byte budget whatever limit is asked for packages/workspace test: --- packages/workspace test: duration_ms: 45.049322 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: paging stops at the decodable text window instead of promising a page no offset can reach packages/workspace test: ok 6 - paging stops at the decodable text window instead of promising a page no offset can reach packages/workspace test: --- packages/workspace test: duration_ms: 8120.198328 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: an over-wide line reports that offsets cannot reach its remainder packages/workspace test: ok 7 - an over-wide line reports that offsets cannot reach its remainder packages/workspace test: --- packages/workspace test: duration_ms: 3.17854 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: classification is content-based, so scientific text formats stay readable packages/workspace test: ok 8 - classification is content-based, so scientific text formats stay readable packages/workspace test: --- packages/workspace test: duration_ms: 1.24641 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a code point split by the sniff window is not mistaken for binary packages/workspace test: ok 9 - a code point split by the sniff window is not mistaken for binary packages/workspace test: --- packages/workspace test: duration_ms: 0.266859 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: media types cover the scientific formats the agent reads packages/workspace test: ok 10 - media types cover the scientific formats the agent reads packages/workspace test: --- packages/workspace test: duration_ms: 0.180456 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a PDB file on disk reads as text and a PNG reads as binary packages/workspace test: ok 11 - a PDB file on disk reads as text and a PNG reads as binary packages/workspace test: --- packages/workspace test: duration_ms: 9.918277 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a whole small file is returned byte-identically packages/workspace test: ok 12 - a whole small file is returned byte-identically packages/workspace test: --- packages/workspace test: duration_ms: 4.157816 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: a large file is paged by line without being loaded whole packages/workspace test: ok 13 - a large file is paged by line without being loaded whole packages/workspace test: --- packages/workspace test: duration_ms: 28.482789 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: the default page is capped by bytes, not only by line count packages/workspace test: ok 14 - the default page is capped by bytes, not only by line count packages/workspace test: --- packages/workspace test: duration_ms: 5.114762 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: one line wider than a page is cut and flagged so the caller can redirect packages/workspace test: ok 15 - one line wider than a page is cut and flagged so the caller can redirect packages/workspace test: --- packages/workspace test: duration_ms: 9.712409 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: an offset past the end returns an empty page instead of failing packages/workspace test: ok 16 - an offset past the end returns an empty page instead of failing packages/workspace test: --- packages/workspace test: duration_ms: 3.512738 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: managed environment prompt directs mutations through governed tools packages/workspace test: ok 17 - managed environment prompt directs mutations through governed tools packages/workspace test: --- packages/workspace test: duration_ms: 1.822481 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: system prompt lists selected skill metadata without injecting instructions packages/workspace test: ok 18 - system prompt lists selected skill metadata without injecting instructions packages/workspace test: --- packages/workspace test: duration_ms: 1.516906 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: skill disclosure falls back to read_skill when no package is staged for the agent packages/workspace test: ok 19 - skill disclosure falls back to read_skill when no package is staged for the agent packages/workspace test: --- packages/workspace test: duration_ms: 0.557521 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: dynamic skill catalog prioritizes the current task and marks committed loads packages/workspace test: ok 20 - dynamic skill catalog prioritizes the current task and marks committed loads packages/workspace test: --- packages/workspace test: duration_ms: 0.505845 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: workspace prompt exposes protected identity and governance parts packages/workspace test: ok 21 - workspace prompt exposes protected identity and governance parts packages/workspace test: --- packages/workspace test: duration_ms: 0.448702 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: system prompt composes a subagent preset with an optional user specialist packages/workspace test: ok 22 - system prompt composes a subagent preset with an optional user specialist packages/workspace test: --- packages/workspace test: duration_ms: 0.187032 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: system prompt injects lead subagent orchestration when enabled packages/workspace test: ok 23 - system prompt injects lead subagent orchestration when enabled packages/workspace test: --- packages/workspace test: duration_ms: 0.376643 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: system prompt supports custom lead subagent orchestration limits packages/workspace test: ok 24 - system prompt supports custom lead subagent orchestration limits packages/workspace test: --- packages/workspace test: duration_ms: 0.169508 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: system prompt lists enabled built-in specialists by name and description packages/workspace test: ok 25 - system prompt lists enabled built-in specialists by name and description packages/workspace test: --- packages/workspace test: duration_ms: 0.44678 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: system prompt omits the built-in specialists section when none are enabled packages/workspace test: ok 26 - system prompt omits the built-in specialists section when none are enabled packages/workspace test: --- packages/workspace test: duration_ms: 0.44187 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: memory graph prompt lays out the citation-chain flow in order packages/workspace test: ok 27 - memory graph prompt lays out the citation-chain flow in order packages/workspace test: --- packages/workspace test: duration_ms: 0.848277 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: memory graph prompt is absent when the feature is disabled packages/workspace test: ok 28 - memory graph prompt is absent when the feature is disabled packages/workspace test: --- packages/workspace test: duration_ms: 0.290747 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: normalizeWorkspaceRelativePath preserves nested names within each agent writable root packages/workspace test: ok 29 - normalizeWorkspaceRelativePath preserves nested names within each agent writable root packages/workspace test: --- packages/workspace test: duration_ms: 1.870768 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: run-scoped extra tools are injected before the established allow/deny policy packages/workspace test: ok 30 - run-scoped extra tools are injected before the established allow/deny policy packages/workspace test: --- packages/workspace test: duration_ms: 3.720438 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: run_shell selects the latest environment by ID and preserves its execution parameters packages/workspace test: ok 31 - run_shell selects the latest environment by ID and preserves its execution parameters packages/workspace test: --- packages/workspace test: duration_ms: 55.612569 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: Runner tool schemas respect selection: legacy local default packages/workspace test: ok 32 - Runner tool schemas respect selection: legacy local default packages/workspace test: --- packages/workspace test: duration_ms: 10.065763 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: Runner tool schemas respect selection: local and remote packages/workspace test: ok 33 - Runner tool schemas respect selection: local and remote packages/workspace test: --- packages/workspace test: duration_ms: 3.0067 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: Runner tool schemas respect selection: one remote only packages/workspace test: ok 34 - Runner tool schemas respect selection: one remote only packages/workspace test: --- packages/workspace test: duration_ms: 1.042303 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: Runner tool schemas respect selection: multiple remotes packages/workspace test: ok 35 - Runner tool schemas respect selection: multiple remotes packages/workspace test: --- packages/workspace test: duration_ms: 1.294341 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: Runner tool schemas respect selection: no Runner packages/workspace test: ok 36 - Runner tool schemas respect selection: no Runner packages/workspace test: --- packages/workspace test: duration_ms: 1.114723 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: get_file_provenance returns the backend record without inferring fields packages/workspace test: ok 37 - get_file_provenance returns the backend record without inferring fields packages/workspace test: --- packages/workspace test: duration_ms: 0.925094 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: web search and fetch are stable first-class tools when handlers are provided packages/workspace test: ok 38 - web search and fetch are stable first-class tools when handlers are provided packages/workspace test: --- packages/workspace test: duration_ms: 0.861737 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: run_shell executes an existing workspace script without rewriting or path escape packages/workspace test: ok 39 - run_shell executes an existing workspace script without rewriting or path escape packages/workspace test: --- packages/workspace test: duration_ms: 29.751465 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: run_npu_job submits only allowlisted workloads with workspace-scoped inputs packages/workspace test: ok 40 - run_npu_job submits only allowlisted workloads with workspace-scoped inputs packages/workspace test: --- packages/workspace test: duration_ms: 13.190597 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: run_npu_job result branch forwards declared artifacts to observeNpuJob, omitting failed declarations packages/workspace test: ok 41 - run_npu_job result branch forwards declared artifacts to observeNpuJob, omitting failed declarations packages/workspace test: --- packages/workspace test: duration_ms: 5.113025 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: read_file pages a large file instead of returning it whole packages/workspace test: ok 42 - read_file pages a large file instead of returning it whole packages/workspace test: --- packages/workspace test: duration_ms: 18.794459 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: read_file returns metadata for a binary file and never its bytes packages/workspace test: ok 43 - read_file returns metadata for a binary file and never its bytes packages/workspace test: --- packages/workspace test: duration_ms: 7.418201 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: read_artifact forwards pagination and keeps a binary version out of model text packages/workspace test: ok 44 - read_artifact forwards pagination and keeps a binary version out of model text packages/workspace test: --- packages/workspace test: duration_ms: 0.690596 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: read_file can fall back to a read-only parent workspace packages/workspace test: ok 45 - read_file can fall back to a read-only parent workspace packages/workspace test: --- packages/workspace test: duration_ms: 27.361735 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: artifact download and PDF extraction are separate tools packages/workspace test: ok 46 - artifact download and PDF extraction are separate tools packages/workspace test: --- packages/workspace test: duration_ms: 0.817155 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: project artifact tools declare, list, and read catalog entries packages/workspace test: ok 47 - project artifact tools declare, list, and read catalog entries packages/workspace test: --- packages/workspace test: duration_ms: 2.278599 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: declare_claim surfaces an instruction reminder to write alias tokens inline packages/workspace test: ok 48 - declare_claim surfaces an instruction reminder to write alias tokens inline packages/workspace test: --- packages/workspace test: duration_ms: 1.179311 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: declare_claim forwards cites_dbrecord_aliases and renders a dbrecord chip in the reminder packages/workspace test: ok 49 - declare_claim forwards cites_dbrecord_aliases and renders a dbrecord chip in the reminder packages/workspace test: --- packages/workspace test: duration_ms: 0.509968 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: declare_claim omits the instruction reminder when the chip map is empty; forwards instruction on business errors packages/workspace test: ok 50 - declare_claim omits the instruction reminder when the chip map is empty; forwards instruction on business errors packages/workspace test: --- packages/workspace test: duration_ms: 0.626918 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: MCP tools retain metadata and remain exclusive unless explicitly classified packages/workspace test: ok 51 - MCP tools retain metadata and remain exclusive unless explicitly classified packages/workspace test: --- packages/workspace test: duration_ms: 0.450683 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: all scientific environment tools forward runner_id and setup retries are explicit packages/workspace test: ok 52 - all scientific environment tools forward runner_id and setup retries are explicit packages/workspace test: --- packages/workspace test: duration_ms: 1.044912 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: managed environments expose governed create, delete, install, and uninstall tools packages/workspace test: ok 53 - managed environments expose governed create, delete, install, and uninstall tools packages/workspace test: --- packages/workspace test: duration_ms: 1.50967 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: built-in workspace tool names use the strict provider-safe alphabet packages/workspace test: ok 54 - built-in workspace tool names use the strict provider-safe alphabet packages/workspace test: --- packages/workspace test: duration_ms: 1.135541 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: propose_skill_library_update only submits dry-run self-evolution proposals packages/workspace test: ok 55 - propose_skill_library_update only submits dry-run self-evolution proposals packages/workspace test: --- packages/workspace test: duration_ms: 0.775735 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: propose_skill_library_update can generate valid SKILL.md from structured fields packages/workspace test: ok 56 - propose_skill_library_update can generate valid SKILL.md from structured fields packages/workspace test: --- packages/workspace test: duration_ms: 0.688549 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: publish_skill_library_update submits selected proposals packages/workspace test: ok 57 - publish_skill_library_update submits selected proposals packages/workspace test: --- packages/workspace test: duration_ms: 0.474193 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: skill loading reads frozen instructions directly by exact id packages/workspace test: ok 58 - skill loading reads frozen instructions directly by exact id packages/workspace test: --- packages/workspace test: duration_ms: 0.641353 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: read_skill_resource exposes only resources from selected frozen skills packages/workspace test: ok 59 - read_skill_resource exposes only resources from selected frozen skills packages/workspace test: --- packages/workspace test: duration_ms: 0.517148 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: ordinary file and shell tools use the pre-mounted complete frozen Skill package packages/workspace test: ok 60 - ordinary file and shell tools use the pre-mounted complete frozen Skill package packages/workspace test: --- packages/workspace test: duration_ms: 50.189521 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: create_skill requires the selected skill-creator instructions before mutating the catalog packages/workspace test: ok 61 - create_skill requires the selected skill-creator instructions before mutating the catalog packages/workspace test: --- packages/workspace test: duration_ms: 0.842216 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: subagent tools preserve structured governance inputs packages/workspace test: ok 62 - subagent tools preserve structured governance inputs packages/workspace test: --- packages/workspace test: duration_ms: 1.81329 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: two task tool calls can run subagents concurrently packages/workspace test: ok 63 - two task tool calls can run subagents concurrently packages/workspace test: --- packages/workspace test: duration_ms: 24.417446 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: task tool summarizes failed subagents with status contract metadata packages/workspace test: ok 64 - task tool summarizes failed subagents with status contract metadata packages/workspace test: --- packages/workspace test: duration_ms: 0.744332 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: filterTools inherits the parent tool set before applying the denylist packages/workspace test: ok 65 - filterTools inherits the parent tool set before applying the denylist packages/workspace test: --- packages/workspace test: duration_ms: 0.167213 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: filterTools keeps only allowlisted tools packages/workspace test: ok 66 - filterTools keeps only allowlisted tools packages/workspace test: --- packages/workspace test: duration_ms: 0.112624 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: filterTools denylist wins when a tool also appears in the allowlist packages/workspace test: ok 67 - filterTools denylist wins when a tool also appears in the allowlist packages/workspace test: --- packages/workspace test: duration_ms: 0.107447 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: independent SSH/SLURM jobs are not offered to the model packages/workspace test: ok 68 - independent SSH/SLURM jobs are not offered to the model packages/workspace test: --- packages/workspace test: duration_ms: 0.369772 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: workspace_transfer exposes explicit mappings and independent management operations packages/workspace test: ok 69 - workspace_transfer exposes explicit mappings and independent management operations packages/workspace test: --- packages/workspace test: duration_ms: 0.798512 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: Shell background mode and management tools do not start additional Shells packages/workspace test: ok 70 - Shell background mode and management tools do not start additional Shells packages/workspace test: --- packages/workspace test: duration_ms: 0.825088 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: sync_remote_workspace exposes only explicit list, push, and pull operations packages/workspace test: ok 71 - sync_remote_workspace exposes only explicit list, push, and pull operations packages/workspace test: --- packages/workspace test: duration_ms: 0.683968 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: query_graph tool forwards the query and returns the memory-graph match packages/workspace test: ok 72 - query_graph tool forwards the query and returns the memory-graph match packages/workspace test: --- packages/workspace test: duration_ms: 0.3461 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: query_graph tool is absent when no queryGraph callback is wired packages/workspace test: ok 73 - query_graph tool is absent when no queryGraph callback is wired packages/workspace test: --- packages/workspace test: duration_ms: 0.165742 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: # Subtest: review_checkpoint exposes only versions and reason to its callback packages/workspace test: ok 74 - review_checkpoint exposes only versions and reason to its callback packages/workspace test: --- packages/workspace test: duration_ms: 0.371457 packages/workspace test: type: 'test' packages/workspace test: ... packages/workspace test: 1..74 packages/workspace test: # tests 74 packages/workspace test: # suites 0 packages/workspace test: # pass 74 packages/workspace test: # fail 0 packages/workspace test: # cancelled 0 packages/workspace test: # skipped 0 packages/workspace test: # todo 0 packages/workspace test: # duration_ms 9608.180215 packages/workspace test: Done packages/mcp test$ node --test dist/*.test.js packages/mcp-sources test$ node --test dist/**/*.test.js dist/*.test.js packages/mcp-sources test: TAP version 13 packages/mcp test: TAP version 13 packages/mcp-sources test: # Subtest: Wiki input bounds reject traversal, unknown arguments and oversized batches packages/mcp-sources test: ok 1 - Wiki input bounds reject traversal, unknown arguments and oversized batches packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 2.220855 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: search keeps Wiki identity and original references without claiming paper full text packages/mcp-sources test: ok 2 - search keeps Wiki identity and original references without claiming paper full text packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 11.343402 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: search normalizes Windows-style index paths so page lookups round-trip packages/mcp-sources test: ok 3 - search normalizes Windows-style index paths so page lookups round-trip packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.489993 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: pages from different domains retain their metadata and source references packages/mcp-sources test: ok 4 - pages from different domains retain their metadata and source references packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.439187 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: page snapshots change with content and text-only MCP responses are supported packages/mcp-sources test: ok 5 - page snapshots change with content and text-only MCP responses are supported packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.869219 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: batch normalization retains budget and missing-page diagnostics without duplicating pages packages/mcp-sources test: ok 6 - batch normalization retains budget and missing-page diagnostics without duplicating pages packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.268546 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: Wiki service configuration accepts only an explicit HTTP(S) origin packages/mcp-sources test: ok 7 - Wiki service configuration accepts only an explicit HTTP(S) origin packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.362825 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: An invalid Wiki origin degrades to an unregistered source, not a registry failure packages/mcp-sources test: ok 8 - An invalid Wiki origin degrades to an unregistered source, not a registry failure packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 1.950699 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: connector manifests share a contract without sharing mutable configuration packages/mcp-sources test: ok 9 - connector manifests share a contract without sharing mutable configuration packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 2.129841 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: plugin installation preserves every built-in manifest, tool and governance contract packages/mcp-sources test: ok 10 - plugin installation preserves every built-in manifest, tool and governance contract packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 9.29107 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: each built-in can be excluded from installation without creating or removing another source packages/mcp-sources test: ok 11 - each built-in can be excluded from installation without creating or removing another source packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 9.616259 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: project and session plugin filters intersect selection, retain custom MCP and never mutate snapshots packages/mcp-sources test: ok 12 - project and session plugin filters intersect selection, retain custom MCP and never mutate snapshots packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 2.208431 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: invalid optional Wiki configuration does not prevent other source plugins from loading packages/mcp-sources test: ok 13 - invalid optional Wiki configuration does not prevent other source plugins from loading packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.785757 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp test: # Subtest: MCP contribution preserves source identity, deferral and tool policy packages/mcp test: ok 1 - MCP contribution preserves source identity, deferral and tool policy packages/mcp test: --- packages/mcp test: duration_ms: 3.403178 packages/mcp test: type: 'test' packages/mcp test: ... packages/mcp test: 1..1 packages/mcp test: # tests 1 packages/mcp test: # suites 0 packages/mcp test: # pass 1 packages/mcp test: # fail 0 packages/mcp test: # cancelled 0 packages/mcp test: # skipped 0 packages/mcp test: # todo 0 packages/mcp test: # duration_ms 386.493458 packages/mcp test: Done packages/plan test$ node --test dist/*.test.js packages/plan test: TAP version 13 packages/mcp-sources test: # Subtest: public biomedical MCP manifests register every requested source and operation packages/mcp-sources test: ok 14 - public biomedical MCP manifests register every requested source and operation packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 10.744863 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: arXiv governance follows the provider terms: one connection, one request every three seconds packages/mcp-sources test: ok 15 - arXiv governance follows the provider terms: one connection, one request every three seconds packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.425534 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: built-in sources explicitly opt into the existing queue and pacing guards packages/mcp-sources test: ok 16 - built-in sources explicitly opt into the existing queue and pacing guards packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 7.881979 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: public biomedical validators reject path-like accessions and unknown fields packages/mcp-sources test: ok 17 - public biomedical validators reject path-like accessions and unknown fields packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.904536 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: Node normalization rejects forged MCP identities and artifact hosts packages/mcp-sources test: ok 18 - Node normalization rejects forged MCP identities and artifact hosts packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 1.449831 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: filterEnabledMcpSources keeps web when the MCP master switch is off packages/mcp-sources test: ok 19 - filterEnabledMcpSources keeps web when the MCP master switch is off packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 1.66097 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: filterEnabledMcpSources drops non-web MCP sources when the MCP master switch is off packages/mcp-sources test: ok 20 - filterEnabledMcpSources drops non-web MCP sources when the MCP master switch is off packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.177618 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: filterEnabledMcpSources keeps web when no plugin overrides are set packages/mcp-sources test: ok 21 - filterEnabledMcpSources keeps web when no plugin overrides are set packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 7.29068 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: filterEnabledMcpSources drops web when the connector.web plugin is disabled packages/mcp-sources test: ok 22 - filterEnabledMcpSources drops web when the connector.web plugin is disabled packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 0.217146 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: filterEnabledMcpSources keeps both web and MCP sources when all are enabled packages/mcp-sources test: ok 23 - filterEnabledMcpSources keeps both web and MCP sources when all are enabled packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 2.345814 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/plan test: # Subtest: update_plan replaces the complete snapshot packages/plan test: ok 1 - update_plan replaces the complete snapshot packages/plan test: --- packages/plan test: duration_ms: 1.875466 packages/plan test: type: 'test' packages/plan test: ... packages/plan test: # Subtest: plan batch policy keeps only the final model-declared update packages/plan test: ok 2 - plan batch policy keeps only the final model-declared update packages/plan test: --- packages/plan test: duration_ms: 2.093558 packages/plan test: type: 'test' packages/plan test: ... packages/plan test: # Subtest: same-step plan writes commit last-declared while ordinary tools still run packages/plan test: ok 3 - same-step plan writes commit last-declared while ordinary tools still run packages/plan test: --- packages/plan test: duration_ms: 2.885424 packages/plan test: type: 'test' packages/plan test: ... packages/plan test: # Subtest: plan progress observation counts only work after the declaring model step packages/plan test: ok 4 - plan progress observation counts only work after the declaring model step packages/plan test: --- packages/plan test: duration_ms: 0.340193 packages/plan test: type: 'test' packages/plan test: ... packages/plan test: # Subtest: plan context traces an unobservable history anchor without guessing staleness packages/plan test: ok 5 - plan context traces an unobservable history anchor without guessing staleness packages/plan test: --- packages/plan test: duration_ms: 0.991973 packages/plan test: type: 'test' packages/plan test: ... packages/plan test: # Subtest: Plan projection refuses a live-store fallback without a checkpoint packages/plan test: ok 6 - Plan projection refuses a live-store fallback without a checkpoint packages/plan test: --- packages/plan test: duration_ms: 0.571282 packages/plan test: type: 'test' packages/plan test: ... packages/mcp-sources test: # Subtest: every registry key resolves to a real workspace tool or MCP manifest tool packages/mcp-sources test: ok 24 - every registry key resolves to a real workspace tool or MCP manifest tool packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 17.405422 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: UniProt contributes the governed source and can be independently disabled packages/mcp-sources test: ok 25 - UniProt contributes the governed source and can be independently disabled packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 10.521294 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: built-in registry exposes UniProt through native MCP packages/mcp-sources test: ok 26 - built-in registry exposes UniProt through native MCP packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 5.813239 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: UniProt adapter validates accession inputs and normalizes text MCP payloads packages/mcp-sources test: ok 27 - UniProt adapter validates accession inputs and normalizes text MCP payloads packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 1.03973 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: # Subtest: UniProt adapter rejects forged result identity and artifact hosts packages/mcp-sources test: ok 28 - UniProt adapter rejects forged result identity and artifact hosts packages/mcp-sources test: --- packages/mcp-sources test: duration_ms: 7.431274 packages/mcp-sources test: type: 'test' packages/mcp-sources test: ... packages/mcp-sources test: 1..28 packages/mcp-sources test: # tests 28 packages/mcp-sources test: # suites 0 packages/mcp-sources test: # pass 28 packages/mcp-sources test: # fail 0 packages/mcp-sources test: # cancelled 0 packages/mcp-sources test: # skipped 0 packages/mcp-sources test: # todo 0 packages/mcp-sources test: # duration_ms 1044.856244 packages/mcp-sources test: Done packages/scheduler test$ node --test dist/*.test.js packages/plan test: # Subtest: plan plugin owns tools, batch policy and fixed-state projection together packages/plan test: ok 7 - plan plugin owns tools, batch policy and fixed-state projection together packages/plan test: --- packages/plan test: duration_ms: 11.145067 packages/plan test: type: 'test' packages/plan test: ... packages/plan test: 1..7 packages/plan test: # tests 7 packages/plan test: # suites 0 packages/plan test: # pass 7 packages/plan test: # fail 0 packages/plan test: # cancelled 0 packages/plan test: # skipped 0 packages/plan test: # todo 0 packages/plan test: # duration_ms 749.565337 packages/plan test: Done packages/skill test$ node --test dist/*.test.js packages/scheduler test: TAP version 13 packages/skill test: TAP version 13 packages/scheduler test: # Subtest: default scheduling contribution preserves the task tool and policy packages/scheduler test: ok 1 - default scheduling contribution preserves the task tool and policy packages/scheduler test: --- packages/scheduler test: duration_ms: 2.166086 packages/scheduler test: type: 'test' packages/scheduler test: ... packages/scheduler test: 1..1 packages/scheduler test: # tests 1 packages/scheduler test: # suites 0 packages/scheduler test: # pass 1 packages/scheduler test: # fail 0 packages/scheduler test: # cancelled 0 packages/scheduler test: # skipped 0 packages/scheduler test: # todo 0 packages/scheduler test: # duration_ms 326.773769 packages/scheduler test: Done packages/skill test: # Subtest: Skill package can be disabled without constructing a second tool path packages/skill test: ok 1 - Skill package can be disabled without constructing a second tool path packages/skill test: --- packages/skill test: duration_ms: 1.949879 packages/skill test: type: 'test' packages/skill test: ... packages/skill test: # Subtest: empty selection has no Skill context or read tools packages/skill test: ok 2 - empty selection has no Skill context or read tools packages/skill test: --- packages/skill test: duration_ms: 0.989713 packages/skill test: type: 'test' packages/skill test: ... packages/skill test: 1..2 packages/skill test: # tests 2 packages/skill test: # suites 0 packages/skill test: # pass 2 packages/skill test: # fail 0 packages/skill test: # cancelled 0 packages/skill test: # skipped 0 packages/skill test: # todo 0 packages/skill test: # duration_ms 298.2069 packages/skill test: Done apps/web test$ tsx --test tests/*.test.ts tests/*.test.tsx packages/data-source test$ node --test dist/*.test.js dist/**/*.test.js dist/**/**/*.test.js packages/data-source test: TAP version 13 packages/data-source test: # (node:4603) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/data-source test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/data-source test: # Subtest: get_page single-page payload exposes one body to every record packages/data-source test: ok 1 - get_page single-page payload exposes one body to every record packages/data-source test: --- packages/data-source test: duration_ms: 1.69628 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: get_pages multi-page payload exposes one body per page in order packages/data-source test: ok 2 - get_pages multi-page payload exposes one body per page in order packages/data-source test: --- packages/data-source test: duration_ms: 0.273451 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: get_pages pages without content land as empty slots to keep record indices aligned packages/data-source test: ok 3 - get_pages pages without content land as empty slots to keep record indices aligned packages/data-source test: --- packages/data-source test: duration_ms: 0.148788 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: get_pages falls through to text-block JSON when structuredContent is absent packages/data-source test: ok 4 - get_pages falls through to text-block JSON when structuredContent is absent packages/data-source test: --- packages/data-source test: duration_ms: 0.187121 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: malformed JSON text-block degrades to undefined (no crash) packages/data-source test: ok 5 - malformed JSON text-block degrades to undefined (no crash) packages/data-source test: --- packages/data-source test: duration_ms: 0.299679 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: non-search tools always return undefined regardless of payload packages/data-source test: ok 6 - non-search tools always return undefined regardless of payload packages/data-source test: --- packages/data-source test: duration_ms: 0.144308 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: non-object payload returns undefined packages/data-source test: ok 7 - non-object payload returns undefined packages/data-source test: --- packages/data-source test: duration_ms: 0.202457 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: get_pages pads to recordsCount when records outnumber pages (no smear) packages/data-source test: ok 8 - get_pages pads to recordsCount when records outnumber pages (no smear) packages/data-source test: --- packages/data-source test: duration_ms: 0.157806 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: get_pages pages-outnumber-records is left untrimmed (caller drops the tail) packages/data-source test: ok 9 - get_pages pages-outnumber-records is left untrimmed (caller drops the tail) packages/data-source test: --- packages/data-source test: duration_ms: 0.400662 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: get_page single text is not padded (1-record contract holds regardless of recordsCount) packages/data-source test: ok 10 - get_page single text is not padded (1-record contract holds regardless of recordsCount) packages/data-source test: --- packages/data-source test: duration_ms: 0.513123 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: mcpRecordToProduct dispatches on the product, not the tool type packages/data-source test: ok 11 - mcpRecordToProduct dispatches on the product, not the tool type packages/data-source test: --- packages/data-source test: duration_ms: 0.400754 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: a fetch tool's products keep their web_page shape and contentHash packages/data-source test: ok 12 - a fetch tool's products keep their web_page shape and contentHash packages/data-source test: --- packages/data-source test: duration_ms: 0.238598 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: a code product on the MCP mirror path throws instead of becoming a DbRecord packages/data-source test: ok 13 - a code product on the MCP mirror path throws instead of becoming a DbRecord packages/data-source test: --- packages/data-source test: duration_ms: 0.561085 packages/data-source test: type: 'test' packages/data-source test: ... apps/web test: TAP version 13 packages/data-source test: # Subtest: resolveProxyPolicy handles inherit, none, custom, environment, and system packages/data-source test: ok 14 - resolveProxyPolicy handles inherit, none, custom, environment, and system packages/data-source test: --- packages/data-source test: duration_ms: 2.007789 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: resolveProxyPolicy rejects stale ids and missing custom URLs packages/data-source test: ok 15 - resolveProxyPolicy rejects stale ids and missing custom URLs packages/data-source test: --- packages/data-source test: duration_ms: 0.558255 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: proxyEnvOverlay keeps policies isolated packages/data-source test: ok 16 - proxyEnvOverlay keeps policies isolated packages/data-source test: --- packages/data-source test: duration_ms: 12.129984 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: environment proxy inspection follows runtime precedence and treats blanks as unconfigured packages/data-source test: ok 17 - environment proxy inspection follows runtime precedence and treats blanks as unconfigured packages/data-source test: --- packages/data-source test: duration_ms: 1.138658 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: environment projection and target resolution share httpx-compatible case precedence packages/data-source test: ok 18 - environment projection and target resolution share httpx-compatible case precedence packages/data-source test: --- packages/data-source test: duration_ms: 0.660304 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: environment target resolution is protocol-specific and honours ALL_PROXY and NO_PROXY packages/data-source test: ok 19 - environment target resolution is protocol-specific and honours ALL_PROXY and NO_PROXY packages/data-source test: --- packages/data-source test: duration_ms: 0.591012 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: environment subprocess overlay canonicalizes contradictory variants packages/data-source test: ok 20 - environment subprocess overlay canonicalizes contradictory variants packages/data-source test: --- packages/data-source test: duration_ms: 0.184359 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: authenticated environment settings display the complete effective value packages/data-source test: ok 21 - authenticated environment settings display the complete effective value packages/data-source test: --- packages/data-source test: duration_ms: 0.283014 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: invalid environment proxy values are diagnosed without echoing the value and rejected by resolver packages/data-source test: ok 22 - invalid environment proxy values are diagnosed without echoing the value and rejected by resolver packages/data-source test: --- packages/data-source test: duration_ms: 0.615137 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: enforces maximum concurrency until a lease is released packages/data-source test: ok 23 - enforces maximum concurrency until a lease is released packages/data-source test: --- packages/data-source test: duration_ms: 22.266273 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # (node:4634) ExperimentalWarning: The MockTimers API is an experimental feature and might change at any time packages/data-source test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/data-source test: # Subtest: paces grants by the minimum interval and keeps FIFO order packages/data-source test: ok 24 - paces grants by the minimum interval and keeps FIFO order packages/data-source test: --- packages/data-source test: duration_ms: 83.892449 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: paces grants without imposing a concurrency limit packages/data-source test: ok 25 - paces grants without imposing a concurrency limit packages/data-source test: --- packages/data-source test: duration_ms: 1.788339 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: allows queues deeper than eight when maxQueueDepth is omitted packages/data-source test: ok 26 - allows queues deeper than eight when maxQueueDepth is omitted packages/data-source test: --- packages/data-source test: duration_ms: 8.350082 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: waits indefinitely when queueTimeoutMs is omitted packages/data-source test: ok 27 - waits indefinitely when queueTimeoutMs is omitted packages/data-source test: --- packages/data-source test: duration_ms: 1.425894 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: grants continuously when minIntervalMs is omitted packages/data-source test: ok 28 - grants continuously when minIntervalMs is omitted packages/data-source test: --- packages/data-source test: duration_ms: 0.243143 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: maxQueueDepth zero still rejects when a request would queue packages/data-source test: ok 29 - maxQueueDepth zero still rejects when a request would queue packages/data-source test: --- packages/data-source test: duration_ms: 0.729928 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: validates only configured dimensions packages/data-source test: ok 30 - validates only configured dimensions packages/data-source test: --- packages/data-source test: duration_ms: 0.342489 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: fails fast when the queue is full packages/data-source test: ok 31 - fails fast when the queue is full packages/data-source test: --- packages/data-source test: duration_ms: 6.076571 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: rejects with a queue timeout and later acquires still succeed packages/data-source test: ok 32 - rejects with a queue timeout and later acquires still succeed packages/data-source test: --- packages/data-source test: duration_ms: 31.090406 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: abort while queued removes the waiter without leaking the slot packages/data-source test: ok 33 - abort while queued removes the waiter without leaking the slot packages/data-source test: --- packages/data-source test: duration_ms: 0.612449 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: acquire rejects immediately when the signal is already aborted packages/data-source test: ok 34 - acquire rejects immediately when the signal is already aborted packages/data-source test: --- packages/data-source test: duration_ms: 0.251295 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: release is idempotent packages/data-source test: ok 35 - release is idempotent packages/data-source test: --- packages/data-source test: duration_ms: 20.357101 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: empty-queue cooldown fallback honours the pacing of the last acquire packages/data-source test: ok 36 - empty-queue cooldown fallback honours the pacing of the last acquire packages/data-source test: --- packages/data-source test: duration_ms: 0.952015 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: empty-queue cooldown fallback remains one second without pacing packages/data-source test: ok 37 - empty-queue cooldown fallback remains one second without pacing packages/data-source test: --- packages/data-source test: duration_ms: 1.802863 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: upstream 429 cooldown delays the next grant packages/data-source test: ok 38 - upstream 429 cooldown delays the next grant packages/data-source test: --- packages/data-source test: duration_ms: 80.123193 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: DuckDuckGo HTML parsing unwraps redirects and pairs snippets packages/data-source test: ok 39 - DuckDuckGo HTML parsing unwraps redirects and pairs snippets packages/data-source test: --- packages/data-source test: duration_ms: 2.469908 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: DuckDuckGo parsing honours the result cap and skips malformed rows packages/data-source test: ok 40 - DuckDuckGo parsing honours the result cap and skips malformed rows packages/data-source test: --- packages/data-source test: duration_ms: 0.421764 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: Bing parsing decodes the /ck/a redirect instead of returning a tracker URL packages/data-source test: ok 41 - Bing parsing decodes the /ck/a redirect instead of returning a tracker URL packages/data-source test: --- packages/data-source test: duration_ms: 2.090082 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: Brave free-page parsing extracts each web result and honours the cap packages/data-source test: ok 42 - Brave free-page parsing extracts each web result and honours the cap packages/data-source test: --- packages/data-source test: duration_ms: 0.801905 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: a page that no longer matches yields no rows instead of throwing packages/data-source test: ok 43 - a page that no longer matches yields no rows instead of throwing packages/data-source test: --- packages/data-source test: duration_ms: 0.320904 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: a keyed provider without a credential fails before any request packages/data-source test: ok 44 - a keyed provider without a credential fails before any request packages/data-source test: --- packages/data-source test: duration_ms: 0.783624 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: an empty query is rejected as invalid input, not attempted packages/data-source test: ok 45 - an empty query is rejected as invalid input, not attempted packages/data-source test: --- packages/data-source test: duration_ms: 0.320267 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: provider error documents are reported as failures, not cached content packages/data-source test: ok 46 - provider error documents are reported as failures, not cached content packages/data-source test: --- packages/data-source test: duration_ms: 0.260008 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: web_fetch refuses private and loopback targets packages/data-source test: ok 47 - web_fetch refuses private and loopback targets packages/data-source test: --- packages/data-source test: duration_ms: 9.603133 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: normalizers reduce each vendor payload to its documented shape packages/data-source test: ok 48 - normalizers reduce each vendor payload to its documented shape packages/data-source test: --- packages/data-source test: duration_ms: 1.433811 packages/data-source test: type: 'test' packages/data-source test: ... packages/data-source test: # Subtest: keyed providers authenticate the way their vendor SDK did packages/data-source test: ok 49 - keyed providers authenticate the way their vendor SDK did packages/data-source test: --- packages/data-source test: duration_ms: 0.383488 packages/data-source test: type: 'test' packages/data-source test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) packages/data-source test: # Subtest: the shared transport classifies status codes and bounds the body packages/data-source test: ok 50 - the shared transport classifies status codes and bounds the body packages/data-source test: --- packages/data-source test: duration_ms: 66.189895 packages/data-source test: type: 'test' packages/data-source test: ... apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: Session activity reads logs and cancels explicitly, never starts Shell apps/web test: ok 1 - Session activity reads logs and cancels explicitly, never starts Shell apps/web test: --- apps/web test: duration_ms: 164.6901 apps/web test: type: 'test' apps/web test: ... apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) packages/data-source test: # Subtest: a hung endpoint is cut off by the operation budget packages/data-source test: ok 51 - a hung endpoint is cut off by the operation budget packages/data-source test: --- packages/data-source test: duration_ms: 155.389989 packages/data-source test: type: 'test' packages/data-source test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer packages/data-source test: 1..51 packages/data-source test: # tests 51 packages/data-source test: # suites 0 packages/data-source test: # pass 51 packages/data-source test: # fail 0 packages/data-source test: # cancelled 0 packages/data-source test: # skipped 0 packages/data-source test: # todo 0 packages/data-source test: # duration_ms 1335.285401 apps/web test: # Subtest: pointing the panel at a record opens its fold and the record itself apps/web test: ok 2 - pointing the panel at a record opens its fold and the record itself apps/web test: --- apps/web test: duration_ms: 8.677281 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: activity API uses Session-scoped control routes apps/web test: ok 3 - activity API uses Session-scoped control routes apps/web test: --- apps/web test: duration_ms: 21.115189 apps/web test: type: 'test' apps/web test: ... apps/web test: # (node:4620) ExperimentalWarning: The MockTimers API is an experimental feature and might change at any time apps/web test: # (Use `node --trace-warnings ...` to show where the warning was created) apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer packages/data-source test: Done apps/web test: # Subtest: activity polling and actions reserve HTTP 401 for the appropriate feedback apps/web test: ok 4 - activity polling and actions reserve HTTP 401 for the appropriate feedback apps/web test: --- apps/web test: duration_ms: 8.965008 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: activity polling and actions reserve HTTP 500 for the appropriate feedback apps/web test: ok 5 - activity polling and actions reserve HTTP 500 for the appropriate feedback apps/web test: --- apps/web test: duration_ms: 9.478826 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projects preserves HTTP 401 for the final error reporter apps/web test: ok 6 - projects preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 28.300722 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projects preserves HTTP 500 for the final error reporter apps/web test: ok 7 - projects preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.452583 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: usageExport preserves HTTP 401 for the final error reporter apps/web test: ok 8 - usageExport preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.587424 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: usageExport preserves HTTP 500 for the final error reporter apps/web test: ok 9 - usageExport preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.459773 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: runEvents preserves HTTP 401 for the final error reporter apps/web test: ok 10 - runEvents preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.613187 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: runEvents preserves HTTP 500 for the final error reporter apps/web test: ok 11 - runEvents preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.332996 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: messageStream preserves HTTP 401 for the final error reporter apps/web test: ok 12 - messageStream preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.603741 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: messageStream preserves HTTP 500 for the final error reporter apps/web test: ok 13 - messageStream preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.334743 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: evolveEvents preserves HTTP 401 for the final error reporter apps/web test: ok 14 - evolveEvents preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 1.501858 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: evolveEvents preserves HTTP 500 for the final error reporter apps/web test: ok 15 - evolveEvents preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.791316 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ideaEvents preserves HTTP 401 for the final error reporter apps/web test: ok 16 - ideaEvents preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.352605 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ideaEvents preserves HTTP 500 for the final error reporter apps/web test: ok 17 - ideaEvents preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.2023 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: pluginEvents preserves HTTP 401 for the final error reporter apps/web test: ok 18 - pluginEvents preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.364047 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: pluginEvents preserves HTTP 500 for the final error reporter apps/web test: ok 19 - pluginEvents preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.160333 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact preserves HTTP 401 for the final error reporter apps/web test: ok 20 - artifact preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.351178 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact preserves HTTP 500 for the final error reporter apps/web test: ok 21 - artifact preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.169134 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectArtifact preserves HTTP 401 for the final error reporter apps/web test: ok 22 - projectArtifact preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.264717 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectArtifact preserves HTTP 500 for the final error reporter apps/web test: ok 23 - projectArtifact preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.15133 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: file preserves HTTP 401 for the final error reporter apps/web test: ok 24 - file preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.273635 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: file preserves HTTP 500 for the final error reporter apps/web test: ok 25 - file preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.224676 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: webPage preserves HTTP 401 for the final error reporter apps/web test: ok 26 - webPage preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.255431 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: webPage preserves HTTP 500 for the final error reporter apps/web test: ok 27 - webPage preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.161835 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: casText preserves HTTP 401 for the final error reporter apps/web test: ok 28 - casText preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.381803 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: casText preserves HTTP 500 for the final error reporter apps/web test: ok 29 - casText preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.32915 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: trajectoryExport preserves HTTP 401 for the final error reporter apps/web test: ok 30 - trajectoryExport preserves HTTP 401 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.258281 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: trajectoryExport preserves HTTP 500 for the final error reporter apps/web test: ok 31 - trajectoryExport preserves HTTP 500 for the final error reporter apps/web test: --- apps/web test: duration_ms: 0.230504 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: subscribeRunEvents uses main SSE ids without inventing cursors for child events apps/web test: ok 32 - subscribeRunEvents uses main SSE ids without inventing cursors for child events apps/web test: --- apps/web test: duration_ms: 23.117958 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: cancelRun posts to the run-specific cancel endpoint apps/web test: ok 33 - cancelRun posts to the run-specific cancel endpoint apps/web test: --- apps/web test: duration_ms: 1.858566 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: usage analytics requests preserve the browser time zone filter apps/web test: ok 34 - usage analytics requests preserve the browser time zone filter apps/web test: --- apps/web test: duration_ms: 2.508 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: createSkillEvolutionRun posts to the run self-evolution endpoint apps/web test: ok 35 - createSkillEvolutionRun posts to the run self-evolution endpoint apps/web test: --- apps/web test: duration_ms: 0.648107 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: listArtifactReviews uses the Session-scoped review endpoint apps/web test: ok 36 - listArtifactReviews uses the Session-scoped review endpoint apps/web test: --- apps/web test: duration_ms: 0.471185 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: skill library client methods target versioned library endpoints apps/web test: ok 37 - skill library client methods target versioned library endpoints apps/web test: --- apps/web test: duration_ms: 4.882749 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: getIdeaTreeGraph uses the independent Session-scoped graph endpoint apps/web test: ok 38 - getIdeaTreeGraph uses the independent Session-scoped graph endpoint apps/web test: --- apps/web test: duration_ms: 0.48126 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: readProjectArtifactVersion downloads retained content from the Project endpoint apps/web test: ok 39 - readProjectArtifactVersion downloads retained content from the Project endpoint apps/web test: --- apps/web test: duration_ms: 0.590834 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Artifact deletion client method encodes identifiers and uses DELETE apps/web test: ok 40 - Artifact deletion client method encodes identifiers and uses DELETE apps/web test: --- apps/web test: duration_ms: 0.649963 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace and artifact image reads keep Bearer auth and forward cancellation apps/web test: ok 41 - workspace and artifact image reads keep Bearer auth and forward cancellation apps/web test: --- apps/web test: duration_ms: 1.344609 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: runReviewerSpecialist posts directly to the Session manual-review endpoint apps/web test: ok 42 - runReviewerSpecialist posts directly to the Session manual-review endpoint apps/web test: --- apps/web test: duration_ms: 0.484413 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: updates the Reviewer Specialist system switch and review level apps/web test: ok 43 - updates the Reviewer Specialist system switch and review level apps/web test: --- apps/web test: duration_ms: 0.393873 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: new Session requests inherit settings unless a model override is explicit apps/web test: ok 44 - new Session requests inherit settings unless a model override is explicit apps/web test: --- apps/web test: duration_ms: 1.867204 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed Session creation restores pending state and blocks duplicate submissions apps/web test: ok 45 - a failed Session creation restores pending state and blocks duplicate submissions apps/web test: --- apps/web test: duration_ms: 0.518754 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Session title input omits the web refresh command prefix apps/web test: ok 46 - Session title input omits the web refresh command prefix apps/web test: --- apps/web test: duration_ms: 0.148973 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a refined title that arrives after the run stream closes is applied by bounded follow-up checks apps/web test: ok 47 - a refined title that arrives after the run stream closes is applied by bounded follow-up checks apps/web test: --- apps/web test: duration_ms: 0.622836 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a collapsed Projects panel keeps only the selected project visible apps/web test: ok 48 - a collapsed Projects panel keeps only the selected project visible apps/web test: --- apps/web test: duration_ms: 0.291604 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an inline rename draft is shared only with the matching resource apps/web test: ok 49 - an inline rename draft is shared only with the matching resource apps/web test: --- apps/web test: duration_ms: 0.181641 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a newer Session summary wins over a stale detail refresh without dropping messages apps/web test: ok 50 - a newer Session summary wins over a stale detail refresh without dropping messages apps/web test: --- apps/web test: duration_ms: 0.343258 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Session summary merge removes a cleared specialist selection apps/web test: ok 51 - Session summary merge removes a cleared specialist selection apps/web test: --- apps/web test: duration_ms: 0.205074 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders System settings groups beside the selected details apps/web test: ok 52 - renders System settings groups beside the selected details apps/web test: --- apps/web test: duration_ms: 13.03574 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every System settings group is reachable from the navigation tree apps/web test: ok 53 - every System settings group is reachable from the navigation tree apps/web test: --- apps/web test: duration_ms: 3.048974 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the shared System settings commit and discard actions apps/web test: ok 54 - renders the shared System settings commit and discard actions apps/web test: --- apps/web test: duration_ms: 0.651059 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: System settings save tells users to submit an open machine credentials form apps/web test: ok 55 - System settings save tells users to submit an open machine credentials form apps/web test: --- apps/web test: duration_ms: 0.198816 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Runner navigation keeps every machine at the second level without global workspace entries apps/web test: ok 56 - Runner navigation keeps every machine at the second level without global workspace entries apps/web test: --- apps/web test: duration_ms: 3.000301 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: cycles between ask and always allow apps/web test: ok 57 - cycles between ask and always allow apps/web test: --- apps/web test: duration_ms: 0.928374 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ask mode shows the guarded shield with a hover explanation apps/web test: ok 58 - ask mode shows the guarded shield with a hover explanation apps/web test: --- apps/web test: duration_ms: 10.393646 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: always allow mode switches the visual state and explanation apps/web test: ok 59 - always allow mode switches the visual state and explanation apps/web test: --- apps/web test: duration_ms: 1.778065 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: archived sessions disable the toggle apps/web test: ok 60 - archived sessions disable the toggle apps/web test: --- apps/web test: duration_ms: 0.82003 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: prefers the loaded version's own Session (finest grain — handles same-name artifacts produced across Sessions) apps/web test: ok 61 - prefers the loaded version's own Session (finest grain — handles same-name artifacts produced across Sessions) apps/web test: --- apps/web test: duration_ms: 0.988739 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: falls back to the caller-pinned Session when no version is loaded yet apps/web test: ok 62 - falls back to the caller-pinned Session when no version is loaded yet apps/web test: --- apps/web test: duration_ms: 0.142499 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: falls back to the active Session when neither version nor caller pin is set apps/web test: ok 63 - falls back to the active Session when neither version nor caller pin is set apps/web test: --- apps/web test: duration_ms: 0.107136 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ignores an empty caller pin and falls through to the active Session apps/web test: ok 64 - ignores an empty caller pin and falls through to the active Session apps/web test: --- apps/web test: duration_ms: 0.13071 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ignores an empty version sessionId and falls through to the caller pin apps/web test: ok 65 - ignores an empty version sessionId and falls through to the caller pin apps/web test: --- apps/web test: duration_ms: 0.14728 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: version-level Session wins even when the caller pinned a different Session apps/web test: ok 66 - version-level Session wins even when the caller pinned a different Session apps/web test: --- apps/web test: duration_ms: 0.132023 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: delete requires two clicks on the same artifact and only one row can be armed apps/web test: ok 67 - delete requires two clicks on the same artifact and only one row can be armed apps/web test: --- apps/web test: duration_ms: 65.295382 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: moving focus elsewhere cancels an armed deletion apps/web test: ok 68 - moving focus elsewhere cancels an armed deletion apps/web test: --- apps/web test: duration_ms: 5.527114 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mouse presses do not leave lifecycle controls focus-locked apps/web test: ok 69 - mouse presses do not leave lifecycle controls focus-locked apps/web test: --- apps/web test: duration_ms: 2.105722 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mouse-only lifecycle controls reveal on row hover while keyboard focus and touch remain usable apps/web test: ok 70 - mouse-only lifecycle controls reveal on row hover while keyboard focus and touch remain usable apps/web test: --- apps/web test: duration_ms: 0.532493 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: successful deletion reports the Artifact name in a success toast apps/web test: ok 71 - successful deletion reports the Artifact name in a success toast apps/web test: --- apps/web test: duration_ms: 1.32784 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # (node:4766) ExperimentalWarning: The MockTimers API is an experimental feature and might change at any time apps/web test: # (Use `node --trace-warnings ...` to show where the warning was created) apps/web test: # Subtest: a rejected token is reported as an authentication failure apps/web test: ok 72 - a rejected token is reported as an authentication failure apps/web test: --- apps/web test: duration_ms: 19.294573 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a server fault is not mistaken for a bad token apps/web test: ok 73 - a server fault is not mistaken for a bad token apps/web test: --- apps/web test: duration_ms: 0.492408 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a missing resource is not mistaken for a bad token apps/web test: ok 74 - a missing resource is not mistaken for a bad token apps/web test: --- apps/web test: duration_ms: 0.512958 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a transport failure is not mistaken for a bad token apps/web test: ok 75 - a transport failure is not mistaken for a bad token apps/web test: --- apps/web test: duration_ms: 0.258798 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an accepted token reports nothing apps/web test: ok 76 - an accepted token reports nothing apps/web test: --- apps/web test: duration_ms: 0.50717 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: streaming endpoints report a rejected token too apps/web test: ok 77 - streaming endpoints report a rejected token too apps/web test: --- apps/web test: duration_ms: 0.708676 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: one wrong token opens the dialog once, however many requests fail apps/web test: ok 78 - one wrong token opens the dialog once, however many requests fail apps/web test: --- apps/web test: duration_ms: 0.266318 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the next token the user tries earns a fresh prompt apps/web test: ok 79 - the next token the user tries earns a fresh prompt apps/web test: --- apps/web test: duration_ms: 0.119147 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a token that starts working never reopens the dialog apps/web test: ok 80 - a token that starts working never reopens the dialog apps/web test: --- apps/web test: duration_ms: 1.14749 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: correcting a token after wrong attempts never needs the notifications cleared apps/web test: ok 81 - correcting a token after wrong attempts never needs the notifications cleared apps/web test: --- apps/web test: duration_ms: 4.746175 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an unrelated failure during recovery keeps its own notification apps/web test: ok 82 - an unrelated failure during recovery keeps its own notification apps/web test: --- apps/web test: duration_ms: 1.660182 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: an existing session's next memory poll routes 401 without losing its status apps/web test: ok 83 - an existing session's next memory poll routes 401 without losing its status apps/web test: --- apps/web test: duration_ms: 41.496127 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: an existing session's next memory poll routes 500 without losing its status apps/web test: ok 84 - an existing session's next memory poll routes 500 without losing its status apps/web test: --- apps/web test: duration_ms: 8.647082 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an existing session's next memory poll routes network without losing its status apps/web test: ok 85 - an existing session's next memory poll routes network without losing its status apps/web test: --- apps/web test: duration_ms: 3.752537 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: authentication routing never infers status from Unauthorized text apps/web test: ok 86 - authentication routing never infers status from Unauthorized text apps/web test: --- apps/web test: duration_ms: 0.230099 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the current key names carry the product name apps/web test: ok 87 - the current key names carry the product name apps/web test: --- apps/web test: duration_ms: 0.902495 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a value stored only under the former key is imported once apps/web test: ok 88 - a value stored only under the former key is imported once apps/web test: --- apps/web test: duration_ms: 0.364388 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the current key wins and the former key is left untouched apps/web test: ok 89 - the current key wins and the former key is left untouched apps/web test: --- apps/web test: duration_ms: 0.149221 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an unwritable storage still serves the former value apps/web test: ok 90 - an unwritable storage still serves the former value apps/web test: --- apps/web test: duration_ms: 0.248332 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: neither key present reads as absent apps/web test: ok 91 - neither key present reads as absent apps/web test: --- apps/web test: duration_ms: 0.215 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mixed action rows assign semantic button classes apps/web test: ok 92 - mixed action rows assign semantic button classes apps/web test: --- apps/web test: duration_ms: 2.906813 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: container-styled button groups retain their dedicated skeleton apps/web test: ok 93 - container-styled button groups retain their dedicated skeleton apps/web test: --- apps/web test: duration_ms: 1.10782 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: configuration text controls share a safe primitive skeleton apps/web test: ok 94 - configuration text controls share a safe primitive skeleton apps/web test: --- apps/web test: duration_ms: 0.468391 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: environment settings poll bootstrap progress and expose a failed retry action apps/web test: ok 95 - environment settings poll bootstrap progress and expose a failed retry action apps/web test: --- apps/web test: duration_ms: 0.25459 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: CHAIN_BUTTONS.Claim separates the citing labels and keeps the report hop apps/web test: ok 96 - CHAIN_BUTTONS.Claim separates the citing labels and keeps the report hop apps/web test: --- apps/web test: duration_ms: 1.797991 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the new Claim button labels exist in both locales apps/web test: ok 97 - the new Claim button labels exist in both locales apps/web test: --- apps/web test: duration_ms: 0.183139 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: no chain kind is reused across two node labels apps/web test: ok 98 - no chain kind is reused across two node labels apps/web test: --- apps/web test: duration_ms: 0.377638 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: no i18n key stands for two different chain kinds apps/web test: ok 99 - no i18n key stands for two different chain kinds apps/web test: --- apps/web test: duration_ms: 0.345373 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every button label resolves in both locales apps/web test: ok 100 - every button label resolves in both locales apps/web test: --- apps/web test: duration_ms: 0.36854 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every CHAIN_BUTTONS key is a real node label apps/web test: ok 101 - every CHAIN_BUTTONS key is a real node label apps/web test: --- apps/web test: duration_ms: 0.142321 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a run in another Session leaves the current Session runnable apps/web test: ok 102 - a run in another Session leaves the current Session runnable apps/web test: --- apps/web test: duration_ms: 1.793404 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the current Session offers Stop and keeps submit available for queueing apps/web test: ok 103 - the current Session offers Stop and keeps submit available for queueing apps/web test: --- apps/web test: duration_ms: 0.241538 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a running Reviewer does not expose the main Agent Stop control apps/web test: ok 104 - a running Reviewer does not expose the main Agent Stop control apps/web test: --- apps/web test: duration_ms: 0.155692 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Stop is offered even when queue submit is unavailable apps/web test: ok 105 - Stop is offered even when queue submit is unavailable apps/web test: --- apps/web test: duration_ms: 0.133042 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a Stop already in flight disables only the Stop action apps/web test: ok 106 - a Stop already in flight disables only the Stop action apps/web test: --- apps/web test: duration_ms: 0.22629 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Run stays disabled without input, without a model, or on an archived Session apps/web test: ok 107 - Run stays disabled without input, without a model, or on an archived Session apps/web test: --- apps/web test: duration_ms: 0.20227 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: distinguishes missing system models from a missing Session model apps/web test: ok 108 - distinguishes missing system models from a missing Session model apps/web test: --- apps/web test: duration_ms: 0.180906 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders visible and actionable notices for both missing-model states apps/web test: ok 109 - renders visible and actionable notices for both missing-model states apps/web test: --- apps/web test: duration_ms: 7.558088 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders Stop as a non-submit control and Add to queue as the submit control apps/web test: ok 110 - renders Stop as a non-submit control and Add to queue as the submit control apps/web test: --- apps/web test: duration_ms: 3.916448 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: associates a disabled Run button with the visible missing-model notice apps/web test: ok 111 - associates a disabled Run button with the visible missing-model notice apps/web test: --- apps/web test: duration_ms: 0.846584 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: queued run rows expose a run-specific cancel control apps/web test: ok 112 - queued run rows expose a run-specific cancel control apps/web test: --- apps/web test: duration_ms: 1.565959 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: queued cancel feedback reflects the returned run status apps/web test: ok 113 - queued cancel feedback reflects the returned run status apps/web test: --- apps/web test: duration_ms: 0.203442 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: scoped connector overrides filter every source and refresh through the host subscription apps/web test: ok 114 - scoped connector overrides filter every source and refresh through the host subscription apps/web test: --- apps/web test: duration_ms: 45.303384 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: maps connector ids to display names apps/web test: ok 115 - maps connector ids to display names apps/web test: --- apps/web test: duration_ms: 0.274109 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: shows the enabled count on the trigger with a hover summary apps/web test: ok 116 - shows the enabled count on the trigger with a hover summary apps/web test: --- apps/web test: duration_ms: 7.862463 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: lists every connector with its checked state and policy link when open apps/web test: ok 117 - lists every connector with its checked state and policy link when open apps/web test: --- apps/web test: duration_ms: 3.882535 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: disables the checkboxes but keeps the list readable while a run is active apps/web test: ok 118 - disables the checkboxes but keeps the list readable while a run is active apps/web test: --- apps/web test: duration_ms: 1.618347 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: detects CSV artifacts by extension, media type, and consistent content apps/web test: ok 119 - detects CSV artifacts by extension, media type, and consistent content apps/web test: --- apps/web test: duration_ms: 1.471695 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: content sniffing rejects non-CSV data and inconsistent rows apps/web test: ok 120 - content sniffing rejects non-CSV data and inconsistent rows apps/web test: --- apps/web test: duration_ms: 0.299159 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: profiles artifact rows and keeps stable, disambiguated record IDs apps/web test: ok 121 - profiles artifact rows and keeps stable, disambiguated record IDs apps/web test: --- apps/web test: duration_ms: 10.93813 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: profiles common scientific missing-value tokens as null apps/web test: ok 122 - profiles common scientific missing-value tokens as null apps/web test: --- apps/web test: duration_ms: 0.846845 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: derives UMAP, t-SNE, PCA, distribution, and table views from cell data apps/web test: ok 123 - derives UMAP, t-SNE, PCA, distribution, and table views from cell data apps/web test: --- apps/web test: duration_ms: 3.036402 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: creates configurable charts with an independent display name apps/web test: ok 124 - creates configurable charts with an independent display name apps/web test: --- apps/web test: duration_ms: 45.176002 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: category filters expose every value in supported low-cardinality fields apps/web test: ok 125 - category filters expose every value in supported low-cardinality fields apps/web test: --- apps/web test: duration_ms: 13.586171 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: new charts fall back to histogram or data table when axes are limited apps/web test: ok 126 - new charts fall back to histogram or data table when axes are limited apps/web test: --- apps/web test: duration_ms: 1.872113 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: persists chart configuration per Artifact Version apps/web test: ok 127 - persists chart configuration per Artifact Version apps/web test: --- apps/web test: duration_ms: 2.683895 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: deletes charts while retaining a valid active view and one required chart apps/web test: ok 128 - deletes charts while retaining a valid active view and one required chart apps/web test: --- apps/web test: duration_ms: 1.328352 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: derives differential, marker, and enrichment views from field sets apps/web test: ok 129 - derives differential, marker, and enrichment views from field sets apps/web test: --- apps/web test: duration_ms: 4.269021 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: scientific field aliases follow semantic priority instead of CSV column order apps/web test: ok 130 - scientific field aliases follow semantic priority instead of CSV column order apps/web test: --- apps/web test: duration_ms: 2.245727 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: defaults graphical interaction to pan mode apps/web test: ok 131 - defaults graphical interaction to pan mode apps/web test: --- apps/web test: duration_ms: 1.796995 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every inferred graphical preset has complete mappings and renderable data apps/web test: ok 132 - every inferred graphical preset has complete mappings and renderable data apps/web test: --- apps/web test: duration_ms: 2.109542 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: categorical matrix charts reserve room for axis labels apps/web test: ok 133 - categorical matrix charts reserve room for axis labels apps/web test: --- apps/web test: duration_ms: 2.097556 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: heatmap cells retain the source record IDs they aggregate apps/web test: ok 134 - heatmap cells retain the source record IDs they aggregate apps/web test: --- apps/web test: duration_ms: 1.613572 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: volcano plots transform adjusted p-values to -log10 apps/web test: ok 135 - volcano plots transform adjusted p-values to -log10 apps/web test: --- apps/web test: duration_ms: 2.660895 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: axis types follow mapped field semantics and continuous colors avoid a discrete legend apps/web test: ok 136 - axis types follow mapped field semantics and continuous colors avoid a discrete legend apps/web test: --- apps/web test: duration_ms: 1.551368 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: faceted charts keep a valid layout when filters hide every record apps/web test: ok 137 - faceted charts keep a valid layout when filters hide every record apps/web test: --- apps/web test: duration_ms: 0.82624 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: faceted charts do not silently omit supported category values apps/web test: ok 138 - faceted charts do not silently omit supported category values apps/web test: --- apps/web test: duration_ms: 7.876978 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: chart selections replace by default and use Ctrl to add or remove apps/web test: ok 139 - chart selections replace by default and use Ctrl to add or remove apps/web test: --- apps/web test: duration_ms: 0.399399 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: chart selection updates map record IDs without rebuilding trace data apps/web test: ok 140 - chart selection updates map record IDs without rebuilding trace data apps/web test: --- apps/web test: duration_ms: 0.693916 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the data table exposes every source field apps/web test: ok 141 - the data table exposes every source field apps/web test: --- apps/web test: duration_ms: 7.6031 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: selected scatter points keep their configured base size apps/web test: ok 142 - selected scatter points keep their configured base size apps/web test: --- apps/web test: duration_ms: 0.722307 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: CSV export neutralizes spreadsheet formulas apps/web test: ok 143 - CSV export neutralizes spreadsheet formulas apps/web test: --- apps/web test: duration_ms: 5.127329 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: KIND_TO_LABEL maps dbrecord to the DbRecord graph label apps/web test: ok 144 - KIND_TO_LABEL maps dbrecord to the DbRecord graph label apps/web test: --- apps/web test: duration_ms: 0.913129 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: NODE_LABELS includes DbRecord for the legend / filter chip apps/web test: ok 145 - NODE_LABELS includes DbRecord for the legend / filter chip apps/web test: --- apps/web test: duration_ms: 0.231176 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: CHAIN_BUTTONS.DbRecord has the two ForDbRecord kinds apps/web test: ok 146 - CHAIN_BUTTONS.DbRecord has the two ForDbRecord kinds apps/web test: --- apps/web test: duration_ms: 0.806591 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: environment source settings distinguish global pip and conda mirrors apps/web test: ok 147 - environment source settings distinguish global pip and conda mirrors apps/web test: --- apps/web test: duration_ms: 18.248187 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: setup status shows micromamba installation separately from the pending Conda base apps/web test: ok 148 - setup status shows micromamba installation separately from the pending Conda base apps/web test: --- apps/web test: duration_ms: 1.252552 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: setup status preserves micromamba success beside an actionable Conda failure apps/web test: ok 149 - setup status preserves micromamba success beside an actionable Conda failure apps/web test: --- apps/web test: duration_ms: 0.94405 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveGlobalSettings failure stays in System settings without closing or clearing apps/web test: ok 150 - saveGlobalSettings failure stays in System settings without closing or clearing apps/web test: --- apps/web test: duration_ms: 2.391372 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveTimeoutSettings failure stays in System settings without closing or clearing apps/web test: ok 151 - saveTimeoutSettings failure stays in System settings without closing or clearing apps/web test: --- apps/web test: duration_ms: 0.303293 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveQuotaSettings failure stays in System settings without closing or clearing apps/web test: ok 152 - saveQuotaSettings failure stays in System settings without closing or clearing apps/web test: --- apps/web test: duration_ms: 0.27312 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: revokePermission failure stays in System settings without closing or clearing apps/web test: ok 153 - revokePermission failure stays in System settings without closing or clearing apps/web test: --- apps/web test: duration_ms: 0.142835 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: loadScopedSettings failure stays in the scoped dialog without closing or clearing apps/web test: ok 154 - loadScopedSettings failure stays in the scoped dialog without closing or clearing apps/web test: --- apps/web test: duration_ms: 0.37759 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveScopedSettings failure stays in the scoped dialog without closing or clearing apps/web test: ok 155 - saveScopedSettings failure stays in the scoped dialog without closing or clearing apps/web test: --- apps/web test: duration_ms: 0.14791 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveGlobalSettings preserves a rejected token for authentication routing apps/web test: ok 156 - saveGlobalSettings preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.446445 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveTimeoutSettings preserves a rejected token for authentication routing apps/web test: ok 157 - saveTimeoutSettings preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.168584 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveQuotaSettings preserves a rejected token for authentication routing apps/web test: ok 158 - saveQuotaSettings preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.307281 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: revokePermission preserves a rejected token for authentication routing apps/web test: ok 159 - revokePermission preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.416226 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: loadScopedSettings preserves a rejected token for authentication routing apps/web test: ok 160 - loadScopedSettings preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.192045 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveScopedSettings preserves a rejected token for authentication routing apps/web test: ok 161 - saveScopedSettings preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.123146 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: saveSandboxNetworkSettings preserves a rejected token for authentication routing apps/web test: ok 162 - saveSandboxNetworkSettings preserves a rejected token for authentication routing apps/web test: --- apps/web test: duration_ms: 0.125449 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a WebPage-backed evidence renders its source page instead of the empty state apps/web test: ok 163 - a WebPage-backed evidence renders its source page instead of the empty state apps/web test: --- apps/web test: duration_ms: 37.60136 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: the source card links to the page and reads its body back from CAS apps/web test: ok 164 - the source card links to the page and reads its body back from CAS apps/web test: --- apps/web test: duration_ms: 8.561231 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a Paper-backed evidence is unaffected — no WebPage card, no body fetch apps/web test: ok 165 - a Paper-backed evidence is unaffected — no WebPage card, no body fetch apps/web test: --- apps/web test: duration_ms: 4.48638 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a goal from before the wizard is still recognisable as a placeholder apps/web test: ok 166 - a goal from before the wizard is still recognisable as a placeholder apps/web test: --- apps/web test: duration_ms: 1.314012 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a whole sequence folds into the view the dashboard reads apps/web test: ok 167 - a whole sequence folds into the view the dashboard reads apps/web test: --- apps/web test: duration_ms: 1.462053 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: records may arrive out of order and twice apps/web test: ok 168 - records may arrive out of order and twice apps/web test: --- apps/web test: duration_ms: 0.241058 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a replayed visit count is assigned, not accumulated apps/web test: ok 169 - a replayed visit count is assigned, not accumulated apps/web test: --- apps/web test: duration_ms: 0.259937 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed candidate is in the tree, scores null, and can never win apps/web test: ok 170 - a failed candidate is in the tree, scores null, and can never win apps/web test: --- apps/web test: duration_ms: 0.247814 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the two refusal kinds stay distinguishable apps/web test: ok 171 - the two refusal kinds stay distinguishable apps/web test: --- apps/web test: duration_ms: 0.293973 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an event about an unseen candidate creates a placeholder rather than dropping apps/web test: ok 172 - an event about an unseen candidate creates a placeholder rather than dropping apps/web test: --- apps/web test: duration_ms: 0.160773 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: progress is bounded by the budget apps/web test: ok 173 - progress is bounded by the budget apps/web test: --- apps/web test: duration_ms: 0.188964 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a session with no runs leaves no footprint apps/web test: ok 174 - a session with no runs leaves no footprint apps/web test: --- apps/web test: duration_ms: 5.093179 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the card survives the panel: finished runs stay listed apps/web test: ok 175 - the card survives the panel: finished runs stay listed apps/web test: --- apps/web test: duration_ms: 8.089498 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: terminal statuses are labelled apart, not merged into one apps/web test: ok 176 - terminal statuses are labelled apart, not merged into one apps/web test: --- apps/web test: duration_ms: 1.490321 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: running runs are always shown; older finished ones fold away apps/web test: ok 177 - running runs are always shown; older finished ones fold away apps/web test: --- apps/web test: duration_ms: 2.055918 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: coordinates are a formula over depth and sibling order, not a solver's output apps/web test: ok 178 - coordinates are a formula over depth and sibling order, not a solver's output apps/web test: --- apps/web test: duration_ms: 0.965392 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: appending a candidate leaves every existing position untouched apps/web test: ok 179 - appending a candidate leaves every existing position untouched apps/web test: --- apps/web test: duration_ms: 0.355059 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a property change is a patch, never a move apps/web test: ok 180 - a property change is a patch, never a move apps/web test: --- apps/web test: duration_ms: 0.460988 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: only new elements are added between frames apps/web test: ok 181 - only new elements are added between frames apps/web test: --- apps/web test: duration_ms: 0.35543 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: rank is a position, not a score, and a lone candidate sits in the middle apps/web test: ok 182 - rank is a position, not a score, and a lone candidate sits in the middle apps/web test: --- apps/web test: duration_ms: 0.21013 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed candidate is drawn, dimmed, and has no rank apps/web test: ok 183 - a failed candidate is drawn, dimmed, and has no rank apps/web test: --- apps/web test: duration_ms: 0.225689 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a constraint refusal is marked apart from a gate refusal apps/web test: ok 184 - a constraint refusal is marked apart from a gate refusal apps/web test: --- apps/web test: duration_ms: 0.200546 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: openevolve bands the islands apart apps/web test: ok 185 - openevolve bands the islands apart apps/web test: --- apps/web test: duration_ms: 0.277034 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: beyond the cap, the best candidate's ancestors are kept and truncation is reported apps/web test: ok 186 - beyond the cap, the best candidate's ancestors are kept and truncation is reported apps/web test: --- apps/web test: duration_ms: 0.341114 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a changed drawn set forces a rebuild rather than a patch apps/web test: ok 187 - a changed drawn set forces a rebuild rather than a patch apps/web test: --- apps/web test: duration_ms: 0.289335 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the table carries every channel the picture encodes apps/web test: ok 188 - the table carries every channel the picture encodes apps/web test: --- apps/web test: duration_ms: 2.910875 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the seed carries its own code hash, so a diff has a before to compare against apps/web test: ok 189 - the seed carries its own code hash, so a diff has a before to compare against apps/web test: --- apps/web test: duration_ms: 0.254292 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a run that stopped early states the reason and the shortfall apps/web test: ok 190 - a run that stopped early states the reason and the shortfall apps/web test: --- apps/web test: duration_ms: 0.186553 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the model's promise rating reaches the candidate view apps/web test: ok 191 - the model's promise rating reaches the candidate view apps/web test: --- apps/web test: duration_ms: 0.239728 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the engine's log lines fold into the view for the panel to render apps/web test: ok 192 - the engine's log lines fold into the view for the panel to render apps/web test: --- apps/web test: duration_ms: 0.146013 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the chart keeps the three measurements apart apps/web test: ok 193 - the chart keeps the three measurements apart apps/web test: --- apps/web test: duration_ms: 1.737388 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an engine that measures once still gets one line, not none apps/web test: ok 194 - an engine that measures once still gets one line, not none apps/web test: --- apps/web test: duration_ms: 0.280278 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed expansion is a point on the axis, not a gap in the line apps/web test: ok 195 - a failed expansion is a point on the axis, not a gap in the line apps/web test: --- apps/web test: duration_ms: 0.276791 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the stream names which of four things happened apps/web test: ok 196 - the stream names which of four things happened apps/web test: --- apps/web test: duration_ms: 0.189495 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a violated constraint is not filed as an ordinary failure apps/web test: ok 197 - a violated constraint is not filed as an ordinary failure apps/web test: --- apps/web test: duration_ms: 0.152804 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: elapsed time reads as a duration at every scale apps/web test: ok 198 - elapsed time reads as a duration at every scale apps/web test: --- apps/web test: duration_ms: 0.230507 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an insertion is an insertion, not a rewrite apps/web test: ok 199 - an insertion is an insertion, not a rewrite apps/web test: --- apps/web test: duration_ms: 0.324724 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a deletion and a replacement are both visible apps/web test: ok 200 - a deletion and a replacement are both visible apps/web test: --- apps/web test: duration_ms: 0.316621 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an unchanged candidate produces no changed rows apps/web test: ok 201 - an unchanged candidate produces no changed rows apps/web test: --- apps/web test: duration_ms: 0.407988 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the baseline's first child diffs against nothing and is all new apps/web test: ok 202 - the baseline's first child diffs against nothing and is all new apps/web test: --- apps/web test: duration_ms: 0.387219 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapsing hides distant context and says how much apps/web test: ok 203 - collapsing hides distant context and says how much apps/web test: --- apps/web test: duration_ms: 0.73574 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a program too large to diff degrades instead of freezing the tab apps/web test: ok 204 - a program too large to diff degrades instead of freezing the tab apps/web test: --- apps/web test: duration_ms: 3.734241 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the evolve card polls while a search is active and stops when it finishes apps/web test: ok 205 - the evolve card polls while a search is active and stops when it finishes apps/web test: --- apps/web test: duration_ms: 11.958288 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a long brief becomes its first sentence, without the 任务: label apps/web test: ok 206 - a long brief becomes its first sentence, without the 任务: label apps/web test: --- apps/web test: duration_ms: 2.279919 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a short statement is returned as written apps/web test: ok 207 - a short statement is returned as written apps/web test: --- apps/web test: duration_ms: 0.830886 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a very long single sentence is cut at a fixed width with an ellipsis apps/web test: ok 208 - a very long single sentence is cut at a fixed width with an ellipsis apps/web test: --- apps/web test: duration_ms: 0.261278 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: newlines collapse, an English label is dropped, and a filename dot does not end the title apps/web test: ok 209 - newlines collapse, an English label is dropped, and a filename dot does not end the title apps/web test: --- apps/web test: duration_ms: 0.16191 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders an actionable candidate in one expanded timeline card apps/web test: ok 210 - renders an actionable candidate in one expanded timeline card apps/web test: --- apps/web test: duration_ms: 28.948202 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps a failed result and Retry inside the expanded governed download record apps/web test: ok 211 - keeps a failed result and Retry inside the expanded governed download record apps/web test: --- apps/web test: duration_ms: 2.06677 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapses a completed historical download by default apps/web test: ok 212 - collapses a completed historical download by default apps/web test: --- apps/web test: duration_ms: 0.882782 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: detects a stored locale before browser language and defaults fixtures to English apps/web test: ok 213 - detects a stored locale before browser language and defaults fixtures to English apps/web test: --- apps/web test: duration_ms: 1.149918 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: falls back to the complete English table when a Chinese key is missing apps/web test: ok 214 - falls back to the complete English table when a Chinese key is missing apps/web test: --- apps/web test: duration_ms: 0.562978 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: uses neutral workspace-file wording in both locales apps/web test: ok 215 - uses neutral workspace-file wording in both locales apps/web test: --- apps/web test: duration_ms: 0.38607 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: localizes the NPU card selection, including the numbers in each line apps/web test: ok 216 - localizes the NPU card selection, including the numbers in each line apps/web test: --- apps/web test: duration_ms: 0.303421 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: provides localized dialog error feedback actions apps/web test: ok 217 - provides localized dialog error feedback actions apps/web test: --- apps/web test: duration_ms: 0.197546 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: localizes destructive model-profile confirmation apps/web test: ok 218 - localizes destructive model-profile confirmation apps/web test: --- apps/web test: duration_ms: 0.152547 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: persists a locale switch and synchronizes the document language apps/web test: ok 219 - persists a locale switch and synchronizes the document language apps/web test: --- apps/web test: duration_ms: 0.881279 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders Chinese messages when the provider starts in zh-CN apps/web test: ok 220 - renders Chinese messages when the provider starts in zh-CN apps/web test: --- apps/web test: duration_ms: 7.171623 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: skill library copy never exposes internal recall or git-head jargon apps/web test: ok 221 - skill library copy never exposes internal recall or git-head jargon apps/web test: --- apps/web test: duration_ms: 0.5402 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the zh-CN catalogue covers every locale-sensitive chrome string this fix touched apps/web test: ok 222 - the zh-CN catalogue covers every locale-sensitive chrome string this fix touched apps/web test: --- apps/web test: duration_ms: 0.522176 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: idea tree statuses render as words instead of raw enum tokens apps/web test: ok 223 - idea tree statuses render as words instead of raw enum tokens apps/web test: --- apps/web test: duration_ms: 0.181962 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: research availability stays unknown until loading succeeds; initial errors allow retry apps/web test: ok 224 - research availability stays unknown until loading succeeds; initial errors allow retry apps/web test: --- apps/web test: duration_ms: 40.046391 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: uses the frozen template label for an assessor phase apps/web test: ok 225 - uses the frozen template label for an assessor phase apps/web test: --- apps/web test: duration_ms: 0.980915 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: engine roles follow the reader's language while template labels stay frozen apps/web test: ok 226 - engine roles follow the reader's language while template labels stay frozen apps/web test: --- apps/web test: duration_ms: 0.16789 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree layout follows depth and centers parents over their children apps/web test: ok 227 - Idea Tree layout follows depth and centers parents over their children apps/web test: --- apps/web test: duration_ms: 1.286176 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree horizontal layout advances depth from left to right apps/web test: ok 228 - Idea Tree horizontal layout advances depth from left to right apps/web test: --- apps/web test: duration_ms: 0.288232 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree automatically selects the layout that keeps nodes larger apps/web test: ok 229 - Idea Tree automatically selects the layout that keeps nodes larger apps/web test: --- apps/web test: duration_ms: 0.59486 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree polling reuses an unchanged graph snapshot apps/web test: ok 230 - Idea Tree polling reuses an unchanged graph snapshot apps/web test: --- apps/web test: duration_ms: 1.301759 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree loading overlay keeps the canvas mounted apps/web test: ok 231 - Idea Tree loading overlay keeps the canvas mounted apps/web test: --- apps/web test: duration_ms: 16.364541 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree canvas covers every runtime node status apps/web test: ok 232 - Idea Tree canvas covers every runtime node status apps/web test: --- apps/web test: duration_ms: 0.83613 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: autonomous research presents stage results without legacy execution fields apps/web test: ok 233 - autonomous research presents stage results without legacy execution fields apps/web test: --- apps/web test: duration_ms: 12.191125 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: autonomous research reuses the existing explorer with run controls apps/web test: ok 234 - autonomous research reuses the existing explorer with run controls apps/web test: --- apps/web test: duration_ms: 3.905313 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the legacy explorer follows the reader's language, not hardcoded English apps/web test: ok 235 - the legacy explorer follows the reader's language, not hardcoded English apps/web test: --- apps/web test: duration_ms: 11.195109 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps every displayed dialog error until an explicit clear apps/web test: ok 236 - keeps every displayed dialog error until an explicit clear apps/web test: --- apps/web test: duration_ms: 1.387972 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders dialog-owned error details with alert semantics and an explicit dismiss button apps/web test: ok 237 - renders dialog-owned error details with alert semantics and an explicit dismiss button apps/web test: --- apps/web test: duration_ms: 9.352257 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: startup link overrides a stale token before requests, persists and removes only its fragment parameter apps/web test: ok 238 - startup link overrides a stale token before requests, persists and removes only its fragment parameter apps/web test: --- apps/web test: duration_ms: 1.197636 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ordinary links keep saved or legacy credentials and unrelated fragments apps/web test: ok 239 - ordinary links keep saved or legacy credentials and unrelated fragments apps/web test: --- apps/web test: duration_ms: 0.23773 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an empty URL token never erases a saved token apps/web test: ok 240 - an empty URL token never erases a saved token apps/web test: --- apps/web test: duration_ms: 0.253135 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a new browser starts empty without a default credential apps/web test: ok 241 - a new browser starts empty without a default credential apps/web test: --- apps/web test: duration_ms: 0.149414 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed storage write does not discard the sign-in link apps/web test: ok 242 - a failed storage write does not discard the sign-in link apps/web test: --- apps/web test: duration_ms: 0.65684 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders Project creation in a popup with inherited settings apps/web test: ok 243 - renders Project creation in a popup with inherited settings apps/web test: --- apps/web test: duration_ms: 13.77657 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a collapsible sidebar header with an add button apps/web test: ok 244 - renders a collapsible sidebar header with an add button apps/web test: --- apps/web test: duration_ms: 1.502272 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: can disable a sidebar add button while creation is pending apps/web test: ok 245 - can disable a sidebar add button while creation is pending apps/web test: --- apps/web test: duration_ms: 1.016967 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders Project actions behind one ellipsis menu trigger apps/web test: ok 246 - renders Project actions behind one ellipsis menu trigger apps/web test: --- apps/web test: duration_ms: 3.538923 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps Session filters in a header popover apps/web test: ok 247 - keeps Session filters in a header popover apps/web test: --- apps/web test: duration_ms: 1.624964 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders settings and lifecycle actions behind every Session ellipsis apps/web test: ok 248 - renders settings and lifecycle actions behind every Session ellipsis apps/web test: --- apps/web test: duration_ms: 6.032913 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a compact inline rename input without confirmation controls apps/web test: ok 249 - renders a compact inline rename input without confirmation controls apps/web test: --- apps/web test: duration_ms: 0.76908 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: sizes inline rename inputs from Unicode title length within stable bounds apps/web test: ok 250 - sizes inline rename inputs from Unicode title length within stable bounds apps/web test: --- apps/web test: duration_ms: 0.20495 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: normalizes inline names and ignores empty or unchanged edits apps/web test: ok 251 - normalizes inline names and ignores empty or unchanged edits apps/web test: --- apps/web test: duration_ms: 0.31598 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders an accessible draggable sidebar separator and clamps its split apps/web test: ok 252 - renders an accessible draggable sidebar separator and clamps its split apps/web test: --- apps/web test: duration_ms: 0.825546 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps every session lifecycle action reachable from the sidebar overflow menu apps/web test: ok 253 - keeps every session lifecycle action reachable from the sidebar overflow menu apps/web test: --- apps/web test: duration_ms: 3.561861 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the server deletion preview and requires an exact typed confirmation apps/web test: ok 254 - renders the server deletion preview and requires an exact typed confirmation apps/web test: --- apps/web test: duration_ms: 1.854149 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps a valid selection and chooses the next resource after removal apps/web test: ok 255 - keeps a valid selection and chooses the next resource after removal apps/web test: --- apps/web test: duration_ms: 0.183097 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: renders GFM structure and math apps/web test: ok 256 - renders GFM structure and math apps/web test: --- apps/web test: duration_ms: 49.082399 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: does not render raw HTML or unsafe links apps/web test: ok 257 - does not render raw HTML or unsafe links apps/web test: --- apps/web test: duration_ms: 4.801859 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: classifies direct and current-Session workspace image sources apps/web test: ok 258 - classifies direct and current-Session workspace image sources apps/web test: --- apps/web test: duration_ms: 1.440627 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: matches only an unambiguous current-Session figure artifact apps/web test: ok 259 - matches only an unambiguous current-Session figure artifact apps/web test: --- apps/web test: duration_ms: 0.441253 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps external images native and replaces unresolved workspace images with guidance apps/web test: ok 260 - keeps external images native and replaces unresolved workspace images with guidance apps/web test: --- apps/web test: duration_ms: 4.301382 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: localizes the image failure guidance apps/web test: ok 261 - localizes the image failure guidance apps/web test: --- apps/web test: duration_ms: 2.317678 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: loads a workspace image through the authenticated reader and revokes its blob URL apps/web test: ok 262 - loads a workspace image through the authenticated reader and revokes its blob URL apps/web test: --- apps/web test: duration_ms: 30.223689 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a readable failure state when authenticated image loading fails apps/web test: ok 263 - renders a readable failure state when authenticated image loading fails apps/web test: --- apps/web test: duration_ms: 8.138938 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: links canonical connector citations and normalizes a legacy bare PMID apps/web test: ok 264 - links canonical connector citations and normalizes a legacy bare PMID apps/web test: --- apps/web test: duration_ms: 4.06894 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: does not rewrite citations that are already linked or inside code apps/web test: ok 265 - does not rewrite citations that are already linked or inside code apps/web test: --- apps/web test: duration_ms: 3.377995 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graph chips render as buttons when a reference matches the alias apps/web test: ok 266 - graph chips render as buttons when a reference matches the alias apps/web test: --- apps/web test: duration_ms: 2.272656 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graph chips stay plain text when no references are provided apps/web test: ok 267 - graph chips stay plain text when no references are provided apps/web test: --- apps/web test: duration_ms: 1.490047 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: evidence and artifact chips render together from message-level references apps/web test: ok 268 - evidence and artifact chips render together from message-level references apps/web test: --- apps/web test: duration_ms: 1.787133 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: dbrecord chip renders as a button when a reference matches the alias apps/web test: ok 269 - dbrecord chip renders as a button when a reference matches the alias apps/web test: --- apps/web test: duration_ms: 1.096934 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: env: renaming a retained secret requires a value and blocks submit apps/web test: ok 270 - env: renaming a retained secret requires a value and blocks submit apps/web test: --- apps/web test: duration_ms: 55.123595 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: env: rename back or whitespace-only changes retain the original secret apps/web test: ok 271 - env: rename back or whitespace-only changes retain the original secret apps/web test: --- apps/web test: duration_ms: 47.934814 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: env: swapping existing keys cannot silently reuse another row's secret apps/web test: ok 272 - env: swapping existing keys cannot silently reuse another row's secret apps/web test: --- apps/web test: duration_ms: 15.674638 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: env: explicit empty values without renaming remain supported apps/web test: ok 273 - env: explicit empty values without renaming remain supported apps/web test: --- apps/web test: duration_ms: 17.569422 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: headers: renaming a retained secret requires a value and blocks submit apps/web test: ok 274 - headers: renaming a retained secret requires a value and blocks submit apps/web test: --- apps/web test: duration_ms: 51.737928 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: headers: rename back or whitespace-only changes retain the original secret apps/web test: ok 275 - headers: rename back or whitespace-only changes retain the original secret apps/web test: --- apps/web test: duration_ms: 36.670046 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: headers: swapping existing keys cannot silently reuse another row's secret apps/web test: ok 276 - headers: swapping existing keys cannot silently reuse another row's secret apps/web test: --- apps/web test: duration_ms: 35.946699 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: headers: explicit empty values without renaming remain supported apps/web test: ok 277 - headers: explicit empty values without renaming remain supported apps/web test: --- apps/web test: duration_ms: 34.904772 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: EDGE_COLORS has exactly the schema edge types as keys apps/web test: ok 278 - EDGE_COLORS has exactly the schema edge types as keys apps/web test: --- apps/web test: duration_ms: 1.866932 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: NODE_COLORS has exactly the schema node labels as keys apps/web test: ok 279 - NODE_COLORS has exactly the schema node labels as keys apps/web test: --- apps/web test: duration_ms: 0.251513 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName truncates names longer than 30 characters with an ellipsis apps/web test: ok 280 - graphNodeName truncates names longer than 30 characters with an ellipsis apps/web test: --- apps/web test: duration_ms: 0.322392 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName takes the basename of long path-like names before truncating apps/web test: ok 281 - graphNodeName takes the basename of long path-like names before truncating apps/web test: --- apps/web test: duration_ms: 0.15619 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName keeps short paths intact (basename logic only triggers past 28 chars) apps/web test: ok 282 - graphNodeName keeps short paths intact (basename logic only triggers past 28 chars) apps/web test: --- apps/web test: duration_ms: 0.194642 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName falls back to the node id when no extra field resolves apps/web test: ok 283 - graphNodeName falls back to the node id when no extra field resolves apps/web test: --- apps/web test: duration_ms: 2.975685 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName picks label-specific fields in priority order apps/web test: ok 284 - graphNodeName picks label-specific fields in priority order apps/web test: --- apps/web test: duration_ms: 0.292268 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName ignores non-string or blank extra fields apps/web test: ok 285 - graphNodeName ignores non-string or blank extra fields apps/web test: --- apps/web test: duration_ms: 0.154197 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName picks WebPage title → identifier → url apps/web test: ok 286 - graphNodeName picks WebPage title → identifier → url apps/web test: --- apps/web test: duration_ms: 0.307544 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeName picks DbRecord source:identifier → identifier → title → url apps/web test: ok 287 - graphNodeName picks DbRecord source:identifier → identifier → title → url apps/web test: --- apps/web test: duration_ms: 0.437478 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeDisplayNames leaves unique names unchanged apps/web test: ok 288 - graphNodeDisplayNames leaves unique names unchanged apps/web test: --- apps/web test: duration_ms: 0.258181 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeDisplayNames suffixes repeated names with \#n in graph order apps/web test: ok 289 - graphNodeDisplayNames suffixes repeated names with \#n in graph order apps/web test: --- apps/web test: duration_ms: 0.192967 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: graphNodeDisplayNames does not suffixed names that appear only once apps/web test: ok 290 - graphNodeDisplayNames does not suffixed names that appear only once apps/web test: --- apps/web test: duration_ms: 0.123706 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the graph's evolve node shows what the search did and links to the evolve panel apps/web test: ok 291 - the graph's evolve node shows what the search did and links to the evolve panel apps/web test: --- apps/web test: duration_ms: 13.431435 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the titles of evolve-related nodes have to be readable apps/web test: ok 292 - the titles of evolve-related nodes have to be readable apps/web test: --- apps/web test: duration_ms: 0.200462 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isSurrogateEdge keys on extra.surrogate === true only apps/web test: ok 293 - isSurrogateEdge keys on extra.surrogate === true only apps/web test: --- apps/web test: duration_ms: 0.181744 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isScopeNode keys on extra.task_type === 'subagent' apps/web test: ok 294 - isScopeNode keys on extra.task_type === 'subagent' apps/web test: --- apps/web test: duration_ms: 0.123298 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isChildNode keys on parent_subtask_id or an :exec: task_id apps/web test: ok 295 - isChildNode keys on parent_subtask_id or an :exec: task_id apps/web test: --- apps/web test: duration_ms: 0.111197 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isCancelledNode keys on status === 'cancelled' (case-insensitive) apps/web test: ok 296 - isCancelledNode keys on status === 'cancelled' (case-insensitive) apps/web test: --- apps/web test: duration_ms: 0.1141 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an entry node is focused without any modal-entry marker apps/web test: ok 297 - an entry node is focused without any modal-entry marker apps/web test: --- apps/web test: duration_ms: 1.045257 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: no entry node → nothing to focus (right-rail card entry) apps/web test: ok 298 - no entry node → nothing to focus (right-rail card entry) apps/web test: --- apps/web test: duration_ms: 0.196519 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the re-fire guard holds once the entry has been decided apps/web test: ok 299 - the re-fire guard holds once the entry has been decided apps/web test: --- apps/web test: duration_ms: 0.127089 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an entry completed for one node still allows the next chip click apps/web test: ok 300 - an entry completed for one node still allows the next chip click apps/web test: --- apps/web test: duration_ms: 0.102258 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: countVisibleAndTotal counts the drawn graph against the whole session apps/web test: ok 301 - countVisibleAndTotal counts the drawn graph against the whole session apps/web test: --- apps/web test: duration_ms: 1.01397 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: countVisibleAndTotal ignores aggregate stacks and surrogate edges apps/web test: ok 302 - countVisibleAndTotal ignores aggregate stacks and surrogate edges apps/web test: --- apps/web test: duration_ms: 0.202894 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps write-only Memory Graph credentials in a deferred request apps/web test: ok 303 - keeps write-only Memory Graph credentials in a deferred request apps/web test: --- apps/web test: duration_ms: 2.926635 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the catalog header states when the metadata was last updated, in both languages apps/web test: ok 304 - the catalog header states when the metadata was last updated, in both languages apps/web test: --- apps/web test: duration_ms: 39.097255 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a snapshot that shipped with the build says so instead of claiming a fresh download apps/web test: ok 305 - a snapshot that shipped with the build says so instead of claiming a fresh download apps/web test: --- apps/web test: duration_ms: 4.176573 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: with no catalog the header says so and still offers the refresh apps/web test: ok 306 - with no catalog the header says so and still offers the refresh apps/web test: --- apps/web test: duration_ms: 1.812156 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: model test button spins, shows a result, and can be clicked again apps/web test: ok 307 - model test button spins, shows a result, and can be clicked again apps/web test: --- apps/web test: duration_ms: 47.197129 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: saving a changed profile clears its previous test result apps/web test: ok 308 - saving a changed profile clears its previous test result apps/web test: --- apps/web test: duration_ms: 6.848682 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: unsaved model changes disable the saved-profile test apps/web test: ok 309 - unsaved model changes disable the saved-profile test apps/web test: --- apps/web test: duration_ms: 13.572769 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the thinking slider stops are off, model default, then weakest to strongest apps/web test: ok 310 - the thinking slider stops are off, model default, then weakest to strongest apps/web test: --- apps/web test: duration_ms: 1.75351 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: models that cannot disable thinking have no off stop apps/web test: ok 311 - models that cannot disable thinking have no off stop apps/web test: --- apps/web test: duration_ms: 0.30905 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: thinking choice values round-trip through the parser apps/web test: ok 312 - thinking choice values round-trip through the parser apps/web test: --- apps/web test: duration_ms: 0.313202 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: models group under their provider with a trailing group for standalone profiles apps/web test: ok 313 - models group under their provider with a trailing group for standalone profiles apps/web test: --- apps/web test: duration_ms: 0.453339 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the trigger renders the current model and the popover is connector-style apps/web test: ok 314 - the trigger renders the current model and the popover is connector-style apps/web test: --- apps/web test: duration_ms: 10.277216 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: model names drop only their own provider prefix and fixed hover cards do not resize the picker apps/web test: ok 315 - model names drop only their own provider prefix and fixed hover cards do not resize the picker apps/web test: --- apps/web test: duration_ms: 0.45541 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the stop row carries exactly the legal stops and the current value apps/web test: ok 316 - the stop row carries exactly the legal stops and the current value apps/web test: --- apps/web test: duration_ms: 1.516601 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: hovering a conversation model row reveals a rich detail card apps/web test: ok 317 - hovering a conversation model row reveals a rich detail card apps/web test: --- apps/web test: duration_ms: 21.404378 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an empty registry offers a path into the model settings apps/web test: ok 318 - an empty registry offers a path into the model settings apps/web test: --- apps/web test: duration_ms: 1.043024 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: model default replaces auto in user-facing labels apps/web test: ok 319 - model default replaces auto in user-facing labels apps/web test: --- apps/web test: duration_ms: 2.164116 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: declared stops narrow the chat control to what the endpoint accepts apps/web test: ok 320 - declared stops narrow the chat control to what the endpoint accepts apps/web test: --- apps/web test: duration_ms: 2.048952 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a stop the endpoint does not accept is normalized away on model switch apps/web test: ok 321 - a stop the endpoint does not accept is normalized away on model switch apps/web test: --- apps/web test: duration_ms: 0.926535 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: declaring stops makes a model the catalog never heard of thinkable apps/web test: ok 322 - declaring stops makes a model the catalog never heard of thinkable apps/web test: --- apps/web test: duration_ms: 0.303644 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: stating that an endpoint does not think removes the control entirely apps/web test: ok 323 - stating that an endpoint does not think removes the control entirely apps/web test: --- apps/web test: duration_ms: 0.216968 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: humanizeKey converts snake_case to Title Case apps/web test: ok 324 - humanizeKey converts snake_case to Title Case apps/web test: --- apps/web test: duration_ms: 1.582273 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: partitionEvidenceExtra buckets content/meta/raw and drops empty values apps/web test: ok 325 - partitionEvidenceExtra buckets content/meta/raw and drops empty values apps/web test: --- apps/web test: duration_ms: 0.462029 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: firstContentValue returns the first string content field apps/web test: ok 326 - firstContentValue returns the first string content field apps/web test: --- apps/web test: duration_ms: 0.241915 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: LongText renders the clamped paragraph for long text (toggle is client-gated) apps/web test: ok 327 - LongText renders the clamped paragraph for long text (toggle is client-gated) apps/web test: --- apps/web test: duration_ms: 8.555963 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: LongText has no toggle for short text apps/web test: ok 328 - LongText has no toggle for short text apps/web test: --- apps/web test: duration_ms: 0.790506 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: TimeField formats ISO timestamps and passes through non-ISO apps/web test: ok 329 - TimeField formats ISO timestamps and passes through non-ISO apps/web test: --- apps/web test: duration_ms: 18.702809 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: LinkField renders an anchor with href and target=_blank apps/web test: ok 330 - LinkField renders an anchor with href and target=_blank apps/web test: --- apps/web test: duration_ms: 0.875963 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: LinkField renders nothing for a non-string href apps/web test: ok 331 - LinkField renders nothing for a non-string href apps/web test: --- apps/web test: duration_ms: 0.291786 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: PaperDetail renders title, abstract section, clickable link, and retrieval fields apps/web test: ok 332 - PaperDetail renders title, abstract section, clickable link, and retrieval fields apps/web test: --- apps/web test: duration_ms: 5.563257 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: LongText strips stray HTML tags from the value apps/web test: ok 333 - LongText strips stray HTML tags from the value apps/web test: --- apps/web test: duration_ms: 0.939628 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: EvidenceDetail renders content/meta and drops raw attributes apps/web test: ok 334 - EvidenceDetail renders content/meta and drops raw attributes apps/web test: --- apps/web test: duration_ms: 2.458085 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ClaimDetail renders content as long text and hides content_hash apps/web test: ok 335 - ClaimDetail renders content as long text and hides content_hash apps/web test: --- apps/web test: duration_ms: 1.354561 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ClaimDetail header hides the claim_id UUID (label chip only) apps/web test: ok 336 - ClaimDetail header hides the claim_id UUID (label chip only) apps/web test: --- apps/web test: duration_ms: 0.818147 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ResearchGoalDetail hides core_objective/method, shows domain + topic_scope apps/web test: ok 337 - ResearchGoalDetail hides core_objective/method, shows domain + topic_scope apps/web test: --- apps/web test: duration_ms: 1.311286 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ResearchGoalDetail hides topic_scope when empty apps/web test: ok 338 - ResearchGoalDetail hides topic_scope when empty apps/web test: --- apps/web test: duration_ms: 1.080207 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ResearchGoalDetail hides raw attributes (no inferred/method leakage) apps/web test: ok 339 - ResearchGoalDetail hides raw attributes (no inferred/method leakage) apps/web test: --- apps/web test: duration_ms: 1.166318 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: TaskDetail (ToolCall) shows tool_name first, then tool_type/source at top level, no raw attributes apps/web test: ok 340 - TaskDetail (ToolCall) shows tool_name first, then tool_type/source at top level, no raw attributes apps/web test: --- apps/web test: duration_ms: 1.978246 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every legacy classification folds onto a current chip label apps/web test: ok 341 - every legacy classification folds onto a current chip label apps/web test: --- apps/web test: duration_ms: 0.228254 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an unknown classification renders as itself, never as an alias apps/web test: ok 342 - an unknown classification renders as itself, never as an alias apps/web test: --- apps/web test: duration_ms: 0.145983 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a pre-rename node (task_type only, no tool_type) still shows its classification apps/web test: ok 343 - a pre-rename node (task_type only, no tool_type) still shows its classification apps/web test: --- apps/web test: duration_ms: 1.033302 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an evolve ToolCall keeps the program_evolution chip and its run affordance apps/web test: ok 344 - an evolve ToolCall keeps the program_evolution chip and its run affordance apps/web test: --- apps/web test: duration_ms: 1.180461 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: CodeDetail with no produced artifact renders the panel (path B fallback runs client-side) apps/web test: ok 345 - CodeDetail with no produced artifact renders the panel (path B fallback runs client-side) apps/web test: --- apps/web test: duration_ms: 2.10722 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: CodeDetail never surfaces the four CAS hashes apps/web test: ok 346 - CodeDetail never surfaces the four CAS hashes apps/web test: --- apps/web test: duration_ms: 1.43605 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: MemoryGraphNodeDetail renders outgoing relations grouped by edge type apps/web test: ok 347 - MemoryGraphNodeDetail renders outgoing relations grouped by edge type apps/web test: --- apps/web test: duration_ms: 1.853007 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: WebPageDetail renders title, identifier badge, url, snippet, source_refs and retrieval fields apps/web test: ok 348 - WebPageDetail renders title, identifier badge, url, snippet, source_refs and retrieval fields apps/web test: --- apps/web test: duration_ms: 14.306048 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: WebPageDetail hides source_refs section when the list is empty or absent apps/web test: ok 349 - WebPageDetail hides source_refs section when the list is empty or absent apps/web test: --- apps/web test: duration_ms: 5.940716 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: WebPageDetail hides identifier badge when identifier is absent apps/web test: ok 350 - WebPageDetail hides identifier badge when identifier is absent apps/web test: --- apps/web test: duration_ms: 6.393757 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: WebPageDetail falls back to identifier then url when title is absent apps/web test: ok 351 - WebPageDetail falls back to identifier then url when title is absent apps/web test: --- apps/web test: duration_ms: 0.956292 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: DbRecordDetail renders title, copy-able identifier badge, snippet, record link, retrieval fields apps/web test: ok 352 - DbRecordDetail renders title, copy-able identifier badge, snippet, record link, retrieval fields apps/web test: --- apps/web test: duration_ms: 3.943523 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: DbRecordDetail hides the record link when url is absent apps/web test: ok 353 - DbRecordDetail hides the record link when url is absent apps/web test: --- apps/web test: duration_ms: 0.800521 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: DbRecordDetail falls back to created_at for retrieved_at when missing apps/web test: ok 354 - DbRecordDetail falls back to created_at for retrieved_at when missing apps/web test: --- apps/web test: duration_ms: 1.276442 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: DbRecordDetail hides identifier badge when identifier is absent apps/web test: ok 355 - DbRecordDetail hides identifier badge when identifier is absent apps/web test: --- apps/web test: duration_ms: 0.776907 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: built-in Reviewer Specialist explains that Quick/Deep is chosen per Session apps/web test: ok 356 - built-in Reviewer Specialist explains that Quick/Deep is chosen per Session apps/web test: --- apps/web test: duration_ms: 11.846496 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: recorded plan collapses to a live Todo summary apps/web test: ok 357 - recorded plan collapses to a live Todo summary apps/web test: --- apps/web test: duration_ms: 1.755546 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: completed plan summary reports completed step counts apps/web test: ok 358 - completed plan summary reports completed step counts apps/web test: --- apps/web test: duration_ms: 0.984944 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: panel renders independent plan snapshots for different agents apps/web test: ok 359 - panel renders independent plan snapshots for different agents apps/web test: --- apps/web test: duration_ms: 1.225758 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: plan badge follows completion and terminal state without repeating the summary apps/web test: ok 360 - plan badge follows completion and terminal state without repeating the summary apps/web test: --- apps/web test: duration_ms: 4.20444 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: expanded plan card shows the live scope and step states apps/web test: ok 361 - expanded plan card shows the live scope and step states apps/web test: --- apps/web test: duration_ms: 1.834253 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: subagent cards link to a page-level view without embedding their process apps/web test: ok 362 - subagent cards link to a page-level view without embedding their process apps/web test: --- apps/web test: duration_ms: 18.129226 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a running subagent card shows the current streamed step apps/web test: ok 363 - a running subagent card shows the current streamed step apps/web test: --- apps/web test: duration_ms: 1.16118 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a running subagent without a step reports that it is starting apps/web test: ok 364 - a running subagent without a step reports that it is starting apps/web test: --- apps/web test: duration_ms: 1.129873 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a running subagent whose snapshot carries turns but no step reports its turn, not a start apps/web test: ok 365 - a running subagent whose snapshot carries turns but no step reports its turn, not a start apps/web test: --- apps/web test: duration_ms: 1.112684 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: clicking a subagent card selects that SubAgent for navigation apps/web test: ok 366 - clicking a subagent card selects that SubAgent for navigation apps/web test: --- apps/web test: duration_ms: 19.191569 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: specialist editor starts collapsed behind the specialist list apps/web test: ok 367 - specialist editor starts collapsed behind the specialist list apps/web test: --- apps/web test: duration_ms: 1.77193 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: allow-matching UI groups the same permission resources as the backend apps/web test: ok 368 - allow-matching UI groups the same permission resources as the backend apps/web test: --- apps/web test: duration_ms: 0.971219 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: pending permission details fold without hiding the decision buttons apps/web test: ok 369 - pending permission details fold without hiding the decision buttons apps/web test: --- apps/web test: duration_ms: 9.811028 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: expanded permission card exposes the independent decisions apps/web test: ok 370 - expanded permission card exposes the independent decisions apps/web test: --- apps/web test: duration_ms: 1.490999 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: permission cards hide decided requests apps/web test: ok 371 - permission cards hide decided requests apps/web test: --- apps/web test: duration_ms: 1.453354 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: pending download approvals keep all actions while cancelled ones have no approval entry apps/web test: ok 372 - pending download approvals keep all actions while cancelled ones have no approval entry apps/web test: --- apps/web test: duration_ms: 1.561358 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: standing grants are listable and revocable apps/web test: ok 373 - standing grants are listable and revocable apps/web test: --- apps/web test: duration_ms: 0.816787 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: bundled JSON plugin renders existing markup and can be removed from the slot apps/web test: ok 374 - bundled JSON plugin renders existing markup and can be removed from the slot apps/web test: --- apps/web test: duration_ms: 7.624015 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: only terminal processes use borderless disclosures; top-level folders default open apps/web test: ok 375 - only terminal processes use borderless disclosures; top-level folders default open apps/web test: --- apps/web test: duration_ms: 10.951321 apps/web test: type: 'test' apps/web test: ... apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: workspace folders retain independent toggle state through rerenders and reset on a new session key apps/web test: ok 376 - workspace folders retain independent toggle state through rerenders and reset on a new session key apps/web test: --- apps/web test: duration_ms: 31.271679 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: assistant identity appears once per reply across interleaved tool calls apps/web test: ok 377 - assistant identity appears once per reply across interleaved tool calls apps/web test: --- apps/web test: duration_ms: 15.13384 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: reply identity precedes activity even before any assistant prose arrives apps/web test: ok 378 - reply identity precedes activity even before any assistant prose arrives apps/web test: --- apps/web test: duration_ms: 7.266818 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: explicit expansion survives tool success, failure and interrupted runs apps/web test: ok 379 - explicit expansion survives tool success, failure and interrupted runs apps/web test: --- apps/web test: duration_ms: 1.021656 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: disabled memory leaves no empty entry while empty and unreachable enabled graphs keep their status apps/web test: ok 380 - disabled memory leaves no empty entry while empty and unreachable enabled graphs keep their status apps/web test: --- apps/web test: duration_ms: 1.767766 apps/web test: type: 'test' apps/web test: ... apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: activity headers show total records rather than only running records apps/web test: ok 381 - activity headers show total records rather than only running records apps/web test: --- apps/web test: duration_ms: 30.727955 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: zero activity sections disappear without losing a stopped agent's resume action apps/web test: ok 382 - zero activity sections disappear without losing a stopped agent's resume action apps/web test: --- apps/web test: duration_ms: 2.893966 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: authorization uses exact tool ID and disappears with the permission card apps/web test: ok 383 - authorization uses exact tool ID and disappears with the permission card apps/web test: --- apps/web test: duration_ms: 7.423996 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: draft parsing uses stable IDs, not similarly named installed Skills apps/web test: ok 384 - draft parsing uses stable IDs, not similarly named installed Skills apps/web test: --- apps/web test: duration_ms: 0.609933 apps/web test: type: 'test' apps/web test: ... apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: pending and processed same-name drafts have independent presentation apps/web test: ok 385 - pending and processed same-name drafts have independent presentation apps/web test: --- apps/web test: duration_ms: 13.354787 apps/web test: type: 'test' apps/web test: ... apps/web test: # The current testing environment is not configured to support act(...) apps/web test: # Subtest: unavailable review status never reports a draft as processed apps/web test: ok 386 - unavailable review status never reports a draft as processed apps/web test: --- apps/web test: duration_ms: 4.446022 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: token counts compact to integers: 1M, 200k, 131k apps/web test: ok 387 - token counts compact to integers: 1M, 200k, 131k apps/web test: --- apps/web test: duration_ms: 1.061118 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: typing a catalog-known model ID prefills facts without stomping user input apps/web test: ok 388 - typing a catalog-known model ID prefills facts without stomping user input apps/web test: --- apps/web test: duration_ms: 1.232836 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: provider model tables sort added models first, then alphabetically apps/web test: ok 389 - provider model tables sort added models first, then alphabetically apps/web test: --- apps/web test: duration_ms: 10.273486 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: provider model rows remove only their provider prefix and keep hover cards in the viewport apps/web test: ok 390 - provider model rows remove only their provider prefix and keep hover cards in the viewport apps/web test: --- apps/web test: duration_ms: 0.411091 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: inline table unions added profiles with the listing, added first, no duplicates apps/web test: ok 391 - inline table unions added profiles with the listing, added first, no duplicates apps/web test: --- apps/web test: duration_ms: 0.501069 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: manual provider rows use catalog labels and keep unknown IDs honest apps/web test: ok 392 - manual provider rows use catalog labels and keep unknown IDs honest apps/web test: --- apps/web test: duration_ms: 0.293603 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a listing row cannot blank the facts the user just stated apps/web test: ok 393 - a listing row cannot blank the facts the user just stated apps/web test: --- apps/web test: duration_ms: 0.39852 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the registry opens without a preset wall or a resident editor apps/web test: ok 394 - the registry opens without a preset wall or a resident editor apps/web test: --- apps/web test: duration_ms: 12.561244 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the same model follows the current provider preset's price apps/web test: ok 395 - the same model follows the current provider preset's price apps/web test: --- apps/web test: duration_ms: 9.33179 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: manual provider with an empty listing still shows the added model row, never the empty state apps/web test: ok 396 - manual provider with an empty listing still shows the added model row, never the empty state apps/web test: --- apps/web test: duration_ms: 12.030464 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: provider table actions are add for discovered models and delete for added profiles apps/web test: ok 397 - provider table actions are add for discovered models and delete for added profiles apps/web test: --- apps/web test: duration_ms: 4.624783 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: DeepSeek price summary localizes structured peak and off-peak schedules apps/web test: ok 398 - DeepSeek price summary localizes structured peak and off-peak schedules apps/web test: --- apps/web test: duration_ms: 10.734128 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: source URLs and retrieval dates use canonical display forms apps/web test: ok 399 - source URLs and retrieval dates use canonical display forms apps/web test: --- apps/web test: duration_ms: 0.372156 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: only the latest Provider listing request may update the selected Provider apps/web test: ok 400 - only the latest Provider listing request may update the selected Provider apps/web test: --- apps/web test: duration_ms: 0.209498 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Provider operation errors identify the failed refresh and localize runtime references apps/web test: ok 401 - Provider operation errors identify the failed refresh and localize runtime references apps/web test: --- apps/web test: duration_ms: 0.333944 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: provider failure formatting preserves local authentication errors apps/web test: ok 402 - provider failure formatting preserves local authentication errors apps/web test: --- apps/web test: duration_ms: 0.165747 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders complete settings URLs and independent MCP policies without persistent URL guidance apps/web test: ok 403 - renders complete settings URLs and independent MCP policies without persistent URL guidance apps/web test: --- apps/web test: duration_ms: 16.833011 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the redesigned proxy path in Simplified Chinese apps/web test: ok 404 - renders the redesigned proxy path in Simplified Chinese apps/web test: --- apps/web test: duration_ms: 7.594885 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders all proxy URL guidance in English and Simplified Chinese apps/web test: ok 405 - renders all proxy URL guidance in English and Simplified Chinese apps/web test: --- apps/web test: duration_ms: 1.75107 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps the add form collapsed and preserves correction state on failed save apps/web test: ok 406 - keeps the add form collapsed and preserves correction state on failed save apps/web test: --- apps/web test: duration_ms: 1.313249 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: resource cards distinguish available workspace disk, low space, and unavailable readings apps/web test: ok 407 - resource cards distinguish available workspace disk, low space, and unavailable readings apps/web test: --- apps/web test: duration_ms: 40.84863 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: resource meters do not turn invalid telemetry into a percentage apps/web test: ok 408 - resource meters do not turn invalid telemetry into a percentage apps/web test: --- apps/web test: duration_ms: 2.093718 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: host-key failures surface only as structured trust prompts apps/web test: ok 409 - host-key failures surface only as structured trust prompts apps/web test: --- apps/web test: duration_ms: 0.942306 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the machine catalog shows the list first and keeps add forms behind buttons apps/web test: ok 410 - the machine catalog shows the list first and keeps add forms behind buttons apps/web test: --- apps/web test: duration_ms: 1.615783 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: SSH add form groups connection login and runner details without hiding username apps/web test: ok 411 - SSH add form groups connection login and runner details without hiding username apps/web test: --- apps/web test: duration_ms: 32.675673 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: machine identity and actions lead the card, with metadata and public key below apps/web test: ok 412 - machine identity and actions lead the card, with metadata and public key below apps/web test: --- apps/web test: duration_ms: 6.03724 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a machine whose clock is far off says so, without pretending executions broke apps/web test: ok 413 - a machine whose clock is far off says so, without pretending executions broke apps/web test: --- apps/web test: duration_ms: 6.691445 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a machine with no Runner connected says whether the machine itself answers apps/web test: ok 414 - a machine with no Runner connected says whether the machine itself answers apps/web test: --- apps/web test: duration_ms: 12.27094 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: direct runner identity uses endpoint and token authentication, never an SSH username apps/web test: ok 415 - direct runner identity uses endpoint and token authentication, never an SSH username apps/web test: --- apps/web test: duration_ms: 3.917694 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: an SSH authentication failure does not invent missing runner or Node capabilities apps/web test: ok 416 - an SSH authentication failure does not invent missing runner or Node capabilities apps/web test: --- apps/web test: duration_ms: 8.626641 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a successfully probed Linux host without Node can connect without deployment prose apps/web test: ok 417 - a successfully probed Linux host without Node can connect without deployment prose apps/web test: --- apps/web test: duration_ms: 3.778856 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: remote Node version does not gate SEA deployment after a successful probe apps/web test: ok 418 - remote Node version does not gate SEA deployment after a successful probe apps/web test: --- apps/web test: duration_ms: 14.314154 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: generated-key registration resumes trust by host id without resubmitting the consumed path apps/web test: ok 419 - generated-key registration resumes trust by host id without resubmitting the consumed path apps/web test: --- apps/web test: duration_ms: 24.106654 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: connect runner presents a changed host key and resumes from the settings trust action apps/web test: ok 420 - connect runner presents a changed host key and resumes from the settings trust action apps/web test: --- apps/web test: duration_ms: 15.439469 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: historical jobs cannot be approved or submitted again apps/web test: ok 421 - historical jobs cannot be approved or submitted again apps/web test: --- apps/web test: duration_ms: 3.34111 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an explicit collapse wins over the awaiting-approval default apps/web test: ok 422 - an explicit collapse wins over the awaiting-approval default apps/web test: --- apps/web test: duration_ms: 0.776084 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: finished jobs default to a collapsed summary apps/web test: ok 423 - finished jobs default to a collapsed summary apps/web test: --- apps/web test: duration_ms: 0.704662 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an explicitly expanded finished job shows its details apps/web test: ok 424 - an explicitly expanded finished job shows its details apps/web test: --- apps/web test: duration_ms: 1.031463 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: historical SLURM jobs have no active refresh action apps/web test: ok 425 - historical SLURM jobs have no active refresh action apps/web test: --- apps/web test: duration_ms: 0.99746 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: NPU cards list every card with its status and usage, including unusable ones apps/web test: ok 426 - NPU cards list every card with its status and usage, including unusable ones apps/web test: --- apps/web test: duration_ms: 2.784579 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a card the sandbox probe refused cannot be ticked and says why on the row apps/web test: ok 427 - a card the sandbox probe refused cannot be ticked and says why on the row apps/web test: --- apps/web test: duration_ms: 2.25417 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the checkbox and its card name stay on one reading line apps/web test: ok 428 - the checkbox and its card name stay on one reading line apps/web test: --- apps/web test: duration_ms: 2.145938 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the connect log panel lists every step with its timestamp apps/web test: ok 429 - the connect log panel lists every step with its timestamp apps/web test: --- apps/web test: duration_ms: 17.826656 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an idle connect log panel says it is waiting rather than showing nothing apps/web test: ok 430 - an idle connect log panel says it is waiting rather than showing nothing apps/web test: --- apps/web test: duration_ms: 0.499621 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: ticking a card saves the selection against the Runner it belongs to apps/web test: ok 431 - ticking a card saves the selection against the Runner it belongs to apps/web test: --- apps/web test: duration_ms: 28.848068 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a draft can be discarded and a rejected save keeps what was picked apps/web test: ok 432 - a draft can be discarded and a rejected save keeps what was picked apps/web test: --- apps/web test: duration_ms: 17.795723 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: the same control saves against the local Runner when that is the machine apps/web test: ok 433 - the same control saves against the local Runner when that is the machine apps/web test: --- apps/web test: duration_ms: 14.531395 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a card that became unusable while ticked can still be unticked apps/web test: ok 434 - a card that became unusable while ticked can still be unticked apps/web test: --- apps/web test: duration_ms: 33.363801 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an unusable card that is not ticked still cannot be ticked apps/web test: ok 435 - an unusable card that is not ticked still cannot be ticked apps/web test: --- apps/web test: duration_ms: 4.162001 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a card with two dies names each die, because that is what a rank runs on apps/web test: ok 436 - a card with two dies names each die, because that is what a rank runs on apps/web test: --- apps/web test: duration_ms: 1.331994 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a machine whose cards are all unusable says so instead of offering an empty tick list apps/web test: ok 437 - a machine whose cards are all unusable says so instead of offering an empty tick list apps/web test: --- apps/web test: duration_ms: 2.074741 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a machine without Ascend cards shows no NPU section at all apps/web test: ok 438 - a machine without Ascend cards shows no NPU section at all apps/web test: --- apps/web test: duration_ms: 0.175619 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the Local Runner card offers this machine's own cards and saves them under `local` apps/web test: ok 439 - the Local Runner card offers this machine's own cards and saves them under `local` apps/web test: --- apps/web test: duration_ms: 39.192873 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Reviewer control card exposes Session automatic review and its Quick/Deep level apps/web test: ok 440 - Reviewer control card exposes Session automatic review and its Quick/Deep level apps/web test: --- apps/web test: duration_ms: 11.723259 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Reviewer control card exposes a dedicated stop action while a review is running apps/web test: ok 441 - Reviewer control card exposes a dedicated stop action while a review is running apps/web test: --- apps/web test: duration_ms: 1.078145 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Reviewer control card disables its stop action only while cancellation is pending apps/web test: ok 442 - Reviewer control card disables its stop action only while cancellation is pending apps/web test: --- apps/web test: duration_ms: 1.130784 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Reviewer control card is absent when settings are off apps/web test: ok 443 - Reviewer control card is absent when settings are off apps/web test: --- apps/web test: duration_ms: 0.389209 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Reviewer control card localizes controls while retaining the Reviewer Specialist name apps/web test: ok 444 - Reviewer control card localizes controls while retaining the Reviewer Specialist name apps/web test: --- apps/web test: duration_ms: 1.992497 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel shows the built-in Quick review identity apps/web test: ok 445 - ReviewerPanel shows the built-in Quick review identity apps/web test: --- apps/web test: duration_ms: 11.527099 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel shows missing citation identifiers apps/web test: ok 446 - ReviewerPanel shows missing citation identifiers apps/web test: --- apps/web test: duration_ms: 1.67078 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel calls a missing academic citation a standard citation apps/web test: ok 447 - ReviewerPanel calls a missing academic citation a standard citation apps/web test: --- apps/web test: duration_ms: 1.346954 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel localizes review status and finding labels while retaining the Reviewer Specialist name apps/web test: ok 448 - ReviewerPanel localizes review status and finding labels while retaining the Reviewer Specialist name apps/web test: --- apps/web test: duration_ms: 3.023461 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel distinguishes a computation contradiction and shows its numeric claim apps/web test: ok 449 - ReviewerPanel distinguishes a computation contradiction and shows its numeric claim apps/web test: --- apps/web test: duration_ms: 1.776521 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel keeps only actionable findings and hides Deep operational incompleteness apps/web test: ok 450 - ReviewerPanel keeps only actionable findings and hides Deep operational incompleteness apps/web test: --- apps/web test: duration_ms: 1.181009 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel reserves red for critical findings apps/web test: ok 451 - ReviewerPanel reserves red for critical findings apps/web test: --- apps/web test: duration_ms: 1.279393 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel shows a short running state at the tool position apps/web test: ok 452 - ReviewerPanel shows a short running state at the tool position apps/web test: --- apps/web test: duration_ms: 1.500227 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel shows persisted stage and queue progress while Deep review runs apps/web test: ok 453 - ReviewerPanel shows persisted stage and queue progress while Deep review runs apps/web test: --- apps/web test: duration_ms: 2.808281 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel collapses a completed multi-Artifact group by default apps/web test: ok 454 - ReviewerPanel collapses a completed multi-Artifact group by default apps/web test: --- apps/web test: duration_ms: 2.079982 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel retains a failed manual review with its error apps/web test: ok 455 - ReviewerPanel retains a failed manual review with its error apps/web test: --- apps/web test: duration_ms: 1.14335 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel hides a failed automatic checkpoint with no Artifact results apps/web test: ok 456 - ReviewerPanel hides a failed automatic checkpoint with no Artifact results apps/web test: --- apps/web test: duration_ms: 0.29511 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel hides an empty completed checkpoint from legacy non-report reviews apps/web test: ok 457 - ReviewerPanel hides an empty completed checkpoint from legacy non-report reviews apps/web test: --- apps/web test: duration_ms: 0.224851 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ReviewerPanel keeps a checkpoint failure beside partial Artifact results apps/web test: ok 458 - ReviewerPanel keeps a checkpoint failure beside partial Artifact results apps/web test: --- apps/web test: duration_ms: 1.470935 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failure class reads as a plain cause with a recovery action, then the detail apps/web test: ok 459 - a failure class reads as a plain cause with a recovery action, then the detail apps/web test: --- apps/web test: duration_ms: 7.866883 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the Chinese locale renders the plain cause in Chinese apps/web test: ok 460 - the Chinese locale renders the plain cause in Chinese apps/web test: --- apps/web test: duration_ms: 0.244847 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every stable failure class has a zh-CN message apps/web test: ok 461 - every stable failure class has a zh-CN message apps/web test: --- apps/web test: duration_ms: 0.229776 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failure without a class degrades to the original error text apps/web test: ok 462 - a failure without a class degrades to the original error text apps/web test: --- apps/web test: duration_ms: 0.157166 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the grace-period abort targets the stopped run, not the next one on the same Session apps/web test: ok 463 - the grace-period abort targets the stopped run, not the next one on the same Session apps/web test: --- apps/web test: duration_ms: 1.48186 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a still-open stream is dropped locally once the grace period expires apps/web test: ok 464 - a still-open stream is dropped locally once the grace period expires apps/web test: --- apps/web test: duration_ms: 0.352105 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed cancel call aborts the local stream immediately apps/web test: ok 465 - a failed cancel call aborts the local stream immediately apps/web test: --- apps/web test: duration_ms: 0.291923 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: usage view refreshes usage analytics when a run reaches a terminal status apps/web test: ok 466 - usage view refreshes usage analytics when a run reaches a terminal status apps/web test: --- apps/web test: duration_ms: 0.218162 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a cancelled run still updates the timeline of the Session on screen apps/web test: ok 467 - a cancelled run still updates the timeline of the Session on screen apps/web test: --- apps/web test: duration_ms: 0.908002 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: stopping a run closes out the timeline the way the app applies it apps/web test: ok 468 - stopping a run closes out the timeline the way the app applies it apps/web test: --- apps/web test: duration_ms: 1.000123 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Stop feedback reaches the user even after switching Sessions apps/web test: ok 469 - Stop feedback reaches the user even after switching Sessions apps/web test: --- apps/web test: duration_ms: 0.235436 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a background run that fails names its Session instead of failing silently apps/web test: ok 470 - a background run that fails names its Session instead of failing silently apps/web test: --- apps/web test: duration_ms: 0.163114 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ordinary stream events carry no toast and follow the display gate apps/web test: ok 471 - ordinary stream events carry no toast and follow the display gate apps/web test: --- apps/web test: duration_ms: 0.282 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps reasoning, tools, and answers in start order apps/web test: ok 472 - keeps reasoning, tools, and answers in start order apps/web test: --- apps/web test: duration_ms: 3.013005 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: anchors overlapping SubAgents independently and updates each in place apps/web test: ok 473 - anchors overlapping SubAgents independently and updates each in place apps/web test: --- apps/web test: duration_ms: 37.482478 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: places non-overlapping SubAgents in separate timeline groups apps/web test: ok 474 - places non-overlapping SubAgents in separate timeline groups apps/web test: --- apps/web test: duration_ms: 0.289413 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps streamed SubAgent steps when a terminal snapshot omits its process apps/web test: ok 475 - keeps streamed SubAgent steps when a terminal snapshot omits its process apps/web test: --- apps/web test: duration_ms: 0.224914 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Idea Tree phases are ordered, deduplicated, rendered, and closed at terminal events apps/web test: ok 476 - Idea Tree phases are ordered, deduplicated, rendered, and closed at terminal events apps/web test: --- apps/web test: duration_ms: 1.740824 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps an autonomous Idea Tree research card in the conversation timeline apps/web test: ok 477 - keeps an autonomous Idea Tree research card in the conversation timeline apps/web test: --- apps/web test: duration_ms: 5.665031 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders completed activity as collapsible disclosures apps/web test: ok 478 - renders completed activity as collapsible disclosures apps/web test: --- apps/web test: duration_ms: 7.911367 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: tool cards render labeled I/O sections, each with its own copy control apps/web test: ok 479 - tool cards render labeled I/O sections, each with its own copy control apps/web test: --- apps/web test: duration_ms: 3.988775 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: empty runner placeholder sections are omitted from the tool card apps/web test: ok 480 - empty runner placeholder sections are omitted from the tool card apps/web test: --- apps/web test: duration_ms: 2.542201 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed tool card shows Input and a separate Error section apps/web test: ok 481 - a failed tool card shows Input and a separate Error section apps/web test: --- apps/web test: duration_ms: 3.560882 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: unstructured tool output stays whole in a residual Result section apps/web test: ok 482 - unstructured tool output stays whole in a residual Result section apps/web test: --- apps/web test: duration_ms: 2.781354 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a stopped run closes the tool that was still in flight apps/web test: ok 483 - a stopped run closes the tool that was still in flight apps/web test: --- apps/web test: duration_ms: 0.196059 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: cancelling a parallel batch preserves completed tools and closes every started tool apps/web test: ok 484 - cancelling a parallel batch preserves completed tools and closes every started tool apps/web test: --- apps/web test: duration_ms: 0.279412 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: replay snapshots replace text and permission decisions stay in timeline order apps/web test: ok 485 - replay snapshots replace text and permission decisions stay in timeline order apps/web test: --- apps/web test: duration_ms: 3.777024 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: replay preserves assistant and thinking segments separated by a tool apps/web test: ok 486 - replay preserves assistant and thinking segments separated by a tool apps/web test: --- apps/web test: duration_ms: 0.339684 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: thinking snapshots start a new same-turn segment after an interruption apps/web test: ok 487 - thinking snapshots start a new same-turn segment after an interruption apps/web test: --- apps/web test: duration_ms: 0.237177 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: pending permissions are actionable only while the run is active apps/web test: ok 488 - pending permissions are actionable only while the run is active apps/web test: --- apps/web test: duration_ms: 19.691219 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a replay truncation marker is visible to the user apps/web test: ok 489 - a replay truncation marker is visible to the user apps/web test: --- apps/web test: duration_ms: 2.971894 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the dedicated Reviewer card replaces routine review_checkpoint tool chrome apps/web test: ok 490 - the dedicated Reviewer card replaces routine review_checkpoint tool chrome apps/web test: --- apps/web test: duration_ms: 5.737485 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Reviewer Specialist renders at its review_checkpoint timeline position apps/web test: ok 491 - Reviewer Specialist renders at its review_checkpoint timeline position apps/web test: --- apps/web test: duration_ms: 7.843237 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: tool cards replay their input and full result apps/web test: ok 492 - tool cards replay their input and full result apps/web test: --- apps/web test: duration_ms: 2.430259 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a run that ends cancels pending approval in data and removes its card apps/web test: ok 493 - a run that ends cancels pending approval in data and removes its card apps/web test: --- apps/web test: duration_ms: 0.315063 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a decided approval keeps its terminal state and decision time through a terminal status apps/web test: ok 494 - a decided approval keeps its terminal state and decision time through a terminal status apps/web test: --- apps/web test: duration_ms: 0.243575 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: tool completion without repeated input keeps the started arguments apps/web test: ok 495 - tool completion without repeated input keeps the started arguments apps/web test: --- apps/web test: duration_ms: 0.148108 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a stream-backed tool result renders a loading placeholder until fetched apps/web test: ok 496 - a stream-backed tool result renders a loading placeholder until fetched apps/web test: --- apps/web test: duration_ms: 2.055886 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: permission cards expose their full request in an expandable details block apps/web test: ok 497 - permission cards expose their full request in an expandable details block apps/web test: --- apps/web test: duration_ms: 1.247157 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: structured tool arguments render as raw input text without a JSON wrapper apps/web test: ok 498 - structured tool arguments render as raw input text without a JSON wrapper apps/web test: --- apps/web test: duration_ms: 1.969284 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: completed create_skill calls expose a visible review shortcut in the conversation apps/web test: ok 499 - completed create_skill calls expose a visible review shortcut in the conversation apps/web test: --- apps/web test: duration_ms: 3.740111 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: create_skill review shortcuts retain the generated Skill identity apps/web test: ok 500 - create_skill review shortcuts retain the generated Skill identity apps/web test: --- apps/web test: duration_ms: 0.167424 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an approval policy switch stays on the timeline between the steps it separates apps/web test: ok 501 - an approval policy switch stays on the timeline between the steps it separates apps/web test: --- apps/web test: duration_ms: 3.375909 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: replaying the same approval switch does not stack duplicate timeline records apps/web test: ok 502 - replaying the same approval switch does not stack duplicate timeline records apps/web test: --- apps/web test: duration_ms: 0.165876 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an approval switch between deltas of one response keeps a single markdown container apps/web test: ok 503 - an approval switch between deltas of one response keeps a single markdown container apps/web test: --- apps/web test: duration_ms: 3.930228 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: bypass events between identity deltas never split the response container apps/web test: ok 504 - bypass events between identity deltas never split the response container apps/web test: --- apps/web test: duration_ms: 0.252351 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: different response identities stay separate answers in one run apps/web test: ok 505 - different response identities stay separate answers in one run apps/web test: --- apps/web test: duration_ms: 0.293636 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a snapshot replaces the response container instead of concatenating apps/web test: ok 506 - a snapshot replaces the response container instead of concatenating apps/web test: --- apps/web test: duration_ms: 0.192209 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an identity thinking card survives bypass events and closes on the response lifecycle apps/web test: ok 507 - an identity thinking card survives bypass events and closes on the response lifecycle apps/web test: --- apps/web test: duration_ms: 0.268138 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a settled empty thinking placeholder is dropped rather than rendering an empty card apps/web test: ok 508 - a settled empty thinking placeholder is dropped rather than rendering an empty card apps/web test: --- apps/web test: duration_ms: 0.158542 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: legacy deltas around an approval switch still repair to one container apps/web test: ok 509 - legacy deltas around an approval switch still repair to one container apps/web test: --- apps/web test: duration_ms: 0.174536 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: legacy deltas keep stopping at a real boundary after an approval switch apps/web test: ok 510 - legacy deltas keep stopping at a real boundary after an approval switch apps/web test: --- apps/web test: duration_ms: 0.141906 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: response identity preserves Markdown across each kind of inserted process entry apps/web test: ok 511 - response identity preserves Markdown across each kind of inserted process entry apps/web test: --- apps/web test: duration_ms: 77.816514 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: empty thinking and hidden tools do not merge different model responses apps/web test: ok 512 - empty thinking and hidden tools do not merge different model responses apps/web test: --- apps/web test: duration_ms: 0.298462 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: legacy continuation never overwrites an identified response apps/web test: ok 513 - legacy continuation never overwrites an identified response apps/web test: --- apps/web test: duration_ms: 0.176108 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: legacy snapshots keep one answer and a cursor across repeated approval switches apps/web test: ok 514 - legacy snapshots keep one answer and a cursor across repeated approval switches apps/web test: --- apps/web test: duration_ms: 4.114264 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Runner details keep machine, workspace and science controls under one selected Runner apps/web test: ok 515 - Runner details keep machine, workspace and science controls under one selected Runner apps/web test: --- apps/web test: duration_ms: 11.036152 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: local client uses the same environment/workspace routes and global sources apps/web test: ok 516 - local client uses the same environment/workspace routes and global sources apps/web test: --- apps/web test: duration_ms: 44.397871 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: runner/b client uses the same environment/workspace routes and global sources apps/web test: ok 517 - runner/b client uses the same environment/workspace routes and global sources apps/web test: --- apps/web test: duration_ms: 9.79397 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Runner settings URLs preserve opaque IDs through reload and retain old settings links apps/web test: ok 518 - Runner settings URLs preserve opaque IDs through reload and retain old settings links apps/web test: --- apps/web test: duration_ms: 0.559353 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders all product timeouts with explicit Unlimited controls apps/web test: ok 519 - renders all product timeouts with explicit Unlimited controls apps/web test: --- apps/web test: duration_ms: 12.702715 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders runner quota controls with GiB and Unlimited apps/web test: ok 520 - renders runner quota controls with GiB and Unlimited apps/web test: --- apps/web test: duration_ms: 1.735549 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: Project name input preserves the complete unsubmitted Runtime Settings draft apps/web test: ok 521 - Project name input preserves the complete unsubmitted Runtime Settings draft apps/web test: --- apps/web test: duration_ms: 66.444333 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: semantic-equivalent details with a new reference do not overwrite an unsubmitted draft apps/web test: ok 522 - semantic-equivalent details with a new reference do not overwrite an unsubmitted draft apps/web test: --- apps/web test: duration_ms: 28.909661 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: an ordinary parent state rerender does not reset the Runtime Settings draft apps/web test: ok 523 - an ordinary parent state rerender does not reset the Runtime Settings draft apps/web test: --- apps/web test: duration_ms: 22.521233 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: skill library checkbox persists a mounted library selection apps/web test: ok 524 - skill library checkbox persists a mounted library selection apps/web test: --- apps/web test: duration_ms: 8.697273 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: built-in skill library can be unchecked and saved apps/web test: ok 525 - built-in skill library can be unchecked and saved apps/web test: --- apps/web test: duration_ms: 12.08213 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: switching the Project or Session target initializes the new target overrides apps/web test: ok 526 - switching the Project or Session target initializes the new target overrides apps/web test: --- apps/web test: duration_ms: 48.525076 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: closing and reopening Project creation starts again with empty overrides apps/web test: ok 527 - closing and reopening Project creation starts again with empty overrides apps/web test: --- apps/web test: duration_ms: 23.127933 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the sandbox network access modes and allowed domains apps/web test: ok 528 - renders the sandbox network access modes and allowed domains apps/web test: --- apps/web test: duration_ms: 14.036701 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the allowed-domain controls are disabled while the mode is No network apps/web test: ok 529 - the allowed-domain controls are disabled while the mode is No network apps/web test: --- apps/web test: duration_ms: 2.998665 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the outbound route offers the same three choices a model does apps/web test: ok 530 - the outbound route offers the same three choices a model does apps/web test: --- apps/web test: duration_ms: 3.614111 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the sandbox network settings never call this capability a proxy apps/web test: ok 531 - the sandbox network settings never call this capability a proxy apps/web test: --- apps/web test: duration_ms: 2.66548 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the settings group labels describe sandbox network access without proxy wording apps/web test: ok 532 - the settings group labels describe sandbox network access without proxy wording apps/web test: --- apps/web test: duration_ms: 0.387015 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: open mode warns, keeps the private-address switch active and disables the domain list apps/web test: ok 533 - open mode warns, keeps the private-address switch active and disables the domain list apps/web test: --- apps/web test: duration_ms: 1.660711 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact preview exposes a current-version download control apps/web test: ok 534 - artifact preview exposes a current-version download control apps/web test: --- apps/web test: duration_ms: 10.527917 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: JSON preview shows the formatted document instead of a table apps/web test: ok 535 - JSON preview shows the formatted document instead of a table apps/web test: --- apps/web test: duration_ms: 1.545287 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: JSON preview labels unparseable documents and still shows the raw text apps/web test: ok 536 - JSON preview labels unparseable documents and still shows the raw text apps/web test: --- apps/web test: duration_ms: 0.653194 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: JSON preview keeps long unbreakable values complete in the DOM apps/web test: ok 537 - JSON preview keeps long unbreakable values complete in the DOM apps/web test: --- apps/web test: duration_ms: 0.831186 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact preview stylesheet keeps the dialog on screen and wraps unbreakable runs apps/web test: ok 538 - artifact preview stylesheet keeps the dialog on screen and wraps unbreakable runs apps/web test: --- apps/web test: duration_ms: 0.452959 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: dataset table replaces an empty grid with an explicit no-rows explanation apps/web test: ok 539 - dataset table replaces an empty grid with an explicit no-rows explanation apps/web test: --- apps/web test: duration_ms: 1.116187 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a JSON-backed dataset defaults to the table and offers both view switches apps/web test: ok 540 - a JSON-backed dataset defaults to the table and offers both view switches apps/web test: --- apps/web test: duration_ms: 1.192665 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the raw JSON view shows the formatted source document and can switch back apps/web test: ok 541 - the raw JSON view shows the formatted source document and can switch back apps/web test: --- apps/web test: duration_ms: 1.212786 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: both view switches report the view they select, in either starting view apps/web test: ok 542 - both view switches report the view they select, in either starting view apps/web test: --- apps/web test: duration_ms: 1.808726 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a non-JSON dataset renders the table alone, with no raw JSON switch apps/web test: ok 543 - a non-JSON dataset renders the table alone, with no raw JSON switch apps/web test: --- apps/web test: duration_ms: 0.966163 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: parses protein, pocket, and ligand layers for the interactive structure viewer apps/web test: ok 544 - parses protein, pocket, and ligand layers for the interactive structure viewer apps/web test: --- apps/web test: duration_ms: 0.405166 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact provenance shows parent files and generation info without sub-tabs apps/web test: ok 545 - artifact provenance shows parent files and generation info without sub-tabs apps/web test: --- apps/web test: duration_ms: 0.573313 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact provenance explains retained content when its source Session was deleted apps/web test: ok 546 - artifact provenance explains retained content when its source Session was deleted apps/web test: --- apps/web test: duration_ms: 0.498802 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact provenance separates process environment from managed packages apps/web test: ok 547 - artifact provenance separates process environment from managed packages apps/web test: --- apps/web test: duration_ms: 2.51642 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the interactive CSV entry only after its immutable version is ready apps/web test: ok 548 - renders the interactive CSV entry only after its immutable version is ready apps/web test: --- apps/web test: duration_ms: 4.414239 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: opens a requested CSV workspace only for the loaded immutable version apps/web test: ok 549 - opens a requested CSV workspace only for the loaded immutable version apps/web test: --- apps/web test: duration_ms: 0.228276 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the embedded scientific artifact selectors apps/web test: ok 550 - renders the embedded scientific artifact selectors apps/web test: --- apps/web test: duration_ms: 20.963585 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: cross-Session Artifact versions display each source Session apps/web test: ok 551 - cross-Session Artifact versions display each source Session apps/web test: --- apps/web test: duration_ms: 1.223491 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: long source Session names are truncated in version labels apps/web test: ok 552 - long source Session names are truncated in version labels apps/web test: --- apps/web test: duration_ms: 0.181237 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact preview identifies the selected version's source Session apps/web test: ok 553 - artifact preview identifies the selected version's source Session apps/web test: --- apps/web test: duration_ms: 0.536445 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findArtifactNodeInGraph matches the exact (path, version) composite key apps/web test: ok 554 - findArtifactNodeInGraph matches the exact (path, version) composite key apps/web test: --- apps/web test: duration_ms: 0.222816 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findArtifactNodeInGraph falls back to the highest version when version is unspecified apps/web test: ok 555 - findArtifactNodeInGraph falls back to the highest version when version is unspecified apps/web test: --- apps/web test: duration_ms: 0.197914 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findArtifactNodeInGraph also matches a logical name that ends with the stored path apps/web test: ok 556 - findArtifactNodeInGraph also matches a logical name that ends with the stored path apps/web test: --- apps/web test: duration_ms: 0.094457 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findArtifactNodeInGraph returns undefined when no Artifact node carries that path apps/web test: ok 557 - findArtifactNodeInGraph returns undefined when no Artifact node carries that path apps/web test: --- apps/web test: duration_ms: 0.107264 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findArtifactNodeInGraph ignores non-Artifact nodes even if their extra happens to carry a path apps/web test: ok 558 - findArtifactNodeInGraph ignores non-Artifact nodes even if their extra happens to carry a path apps/web test: --- apps/web test: duration_ms: 0.086157 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findCodeNodeInGraph matches by node id when extra.code_id is absent (legacy/typical writes) apps/web test: ok 559 - findCodeNodeInGraph matches by node id when extra.code_id is absent (legacy/typical writes) apps/web test: --- apps/web test: duration_ms: 0.106617 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findCodeNodeInGraph matches by extra.code_id when present (canonical place the runId lives) apps/web test: ok 560 - findCodeNodeInGraph matches by extra.code_id when present (canonical place the runId lives) apps/web test: --- apps/web test: duration_ms: 0.09734 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findCodeNodeInGraph ignores non-Code nodes even if their extra happens to carry a code_id apps/web test: ok 561 - findCodeNodeInGraph ignores non-Code nodes even if their extra happens to carry a code_id apps/web test: --- apps/web test: duration_ms: 0.104781 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: findCodeNodeInGraph returns undefined when no Code node carries that runId apps/web test: ok 562 - findCodeNodeInGraph returns undefined when no Code node carries that runId apps/web test: --- apps/web test: duration_ms: 0.120965 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: settings expose only optional extension switches while retaining individual capability settings apps/web test: ok 563 - settings expose only optional extension switches while retaining individual capability settings apps/web test: --- apps/web test: duration_ms: 14.46306 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: hidden internal switches still honor explicit and inherited backend configuration apps/web test: ok 564 - hidden internal switches still honor explicit and inherited backend configuration apps/web test: --- apps/web test: duration_ms: 1.592356 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: built-in connector plugin overrides remain visible as diagnostics, not master switches apps/web test: ok 565 - built-in connector plugin overrides remain visible as diagnostics, not master switches apps/web test: --- apps/web test: duration_ms: 3.33923 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: scope save stays after all additional settings sections apps/web test: ok 566 - scope save stays after all additional settings sections apps/web test: --- apps/web test: duration_ms: 2.141481 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders inherited effective values and their field sources apps/web test: ok 567 - renders inherited effective values and their field sources apps/web test: --- apps/web test: duration_ms: 3.168449 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: preserves and renders an explicit empty-list override apps/web test: ok 568 - preserves and renders an explicit empty-list override apps/web test: --- apps/web test: duration_ms: 3.248552 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders Global settings as direct defaults without inheritance or skill controls apps/web test: ok 569 - renders Global settings as direct defaults without inheritance or skill controls apps/web test: --- apps/web test: duration_ms: 1.588214 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Session skill selection inherits the Project mode by default apps/web test: ok 570 - Session skill selection inherits the Project mode by default apps/web test: --- apps/web test: duration_ms: 2.580006 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Session override to selected shows the whitelist with only the checked skills apps/web test: ok 571 - Session override to selected shows the whitelist with only the checked skills apps/web test: --- apps/web test: duration_ms: 3.504535 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Project is the root skill layer, so it offers no inherit option and defaults to all apps/web test: ok 572 - Project is the root skill layer, so it offers no inherit option and defaults to all apps/web test: --- apps/web test: duration_ms: 2.937349 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders skill library mounts with override controls apps/web test: ok 573 - renders skill library mounts with override controls apps/web test: --- apps/web test: duration_ms: 2.94833 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: disambiguates duplicate model options without removing either profile apps/web test: ok 574 - disambiguates duplicate model options without removing either profile apps/web test: --- apps/web test: duration_ms: 6.877224 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: run activity never counts as an open stream, so a refreshed page still resubscribes apps/web test: ok 575 - run activity never counts as an open stream, so a refreshed page still resubscribes apps/web test: --- apps/web test: duration_ms: 1.481724 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: stream counts nest and floor at zero independently of the indicator apps/web test: ok 576 - stream counts nest and floor at zero independently of the indicator apps/web test: --- apps/web test: duration_ms: 0.23147 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: applies stream updates only to the currently visible Session apps/web test: ok 577 - applies stream updates only to the currently visible Session apps/web test: --- apps/web test: duration_ms: 1.208478 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: derives running state from the visible Session only apps/web test: ok 578 - derives running state from the visible Session only apps/web test: --- apps/web test: duration_ms: 0.212876 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: reconnects replay streams for queued, running, and blocked runs after refresh apps/web test: ok 579 - reconnects replay streams for queued, running, and blocked runs after refresh apps/web test: --- apps/web test: duration_ms: 0.863511 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: discovers an asynchronously scheduled automatic review from its Artifact version apps/web test: ok 580 - discovers an asynchronously scheduled automatic review from its Artifact version apps/web test: --- apps/web test: duration_ms: 0.213961 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: adds a newly published automatic reviewer card while preserving local messages apps/web test: ok 581 - adds a newly published automatic reviewer card while preserving local messages apps/web test: --- apps/web test: duration_ms: 0.402263 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a run whose Session is off screen keeps recording its own timeline apps/web test: ok 582 - a run whose Session is off screen keeps recording its own timeline apps/web test: --- apps/web test: duration_ms: 3.21369 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a run in one Session never writes into another Session's timeline apps/web test: ok 583 - a run in one Session never writes into another Session's timeline apps/web test: --- apps/web test: duration_ms: 1.744442 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an Idea Tree phase starts a replayable Session timeline apps/web test: ok 584 - an Idea Tree phase starts a replayable Session timeline apps/web test: --- apps/web test: duration_ms: 0.207972 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: starting a run clears only that Session's timeline apps/web test: ok 585 - starting a run clears only that Session's timeline apps/web test: --- apps/web test: duration_ms: 0.349066 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an event that changes nothing keeps the same record identity apps/web test: ok 586 - an event that changes nothing keeps the same record identity apps/web test: --- apps/web test: duration_ms: 0.211165 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a deleted Session's buffer does not outlive it apps/web test: ok 587 - a deleted Session's buffer does not outlive it apps/web test: --- apps/web test: duration_ms: 0.282907 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Skill summaries use the latest eligible source and an exact linked Run apps/web test: ok 588 - Skill summaries use the latest eligible source and an exact linked Run apps/web test: --- apps/web test: duration_ms: 0.572103 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Skill authoring runs do not offer the redundant self-evolution action apps/web test: ok 589 - Skill authoring runs do not offer the redundant self-evolution action apps/web test: --- apps/web test: duration_ms: 0.219884 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: each live and replayed timeline keeps the model captured when its run started apps/web test: ok 590 - each live and replayed timeline keeps the model captured when its run started apps/web test: --- apps/web test: duration_ms: 1.014492 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: hydrate restores the active run before a newer queued run and deduplicates by sequence apps/web test: ok 591 - hydrate restores the active run before a newer queued run and deduplicates by sequence apps/web test: --- apps/web test: duration_ms: 0.696592 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: hydrate merges newer records into the same run without resetting disclosure state apps/web test: ok 592 - hydrate merges newer records into the same run without resetting disclosure state apps/web test: --- apps/web test: duration_ms: 0.349733 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: hydrate replays approval terminal state, tool payloads, and pending-panel dedup after a refresh apps/web test: ok 593 - hydrate replays approval terminal state, tool payloads, and pending-panel dedup after a refresh apps/web test: --- apps/web test: duration_ms: 0.678315 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: authoritative permission snapshots reconcile active and replay timeline cards immediately apps/web test: ok 594 - authoritative permission snapshots reconcile active and replay timeline cards immediately apps/web test: --- apps/web test: duration_ms: 0.295306 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a delayed permission-required event cannot regress an already resolved card apps/web test: ok 595 - a delayed permission-required event cannot regress an already resolved card apps/web test: --- apps/web test: duration_ms: 0.159654 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: structured already-resolved conflicts expose the authoritative permission request apps/web test: ok 596 - structured already-resolved conflicts expose the authoritative permission request apps/web test: --- apps/web test: duration_ms: 0.224324 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: hydrate normalizes an undecided approval from an interrupted run to cancelled apps/web test: ok 597 - hydrate normalizes an undecided approval from an interrupted run to cancelled apps/web test: --- apps/web test: duration_ms: 1.001714 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: terminal-run hydration rebuilds finished timelines and keeps disclosure state when unchanged apps/web test: ok 598 - terminal-run hydration rebuilds finished timelines and keeps disclosure state when unchanged apps/web test: --- apps/web test: duration_ms: 0.388989 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: conversation blocks interleave finished timelines and skip replayed answers apps/web test: ok 599 - conversation blocks interleave finished timelines and skip replayed answers apps/web test: --- apps/web test: duration_ms: 0.415613 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failed run with no assistantMessageId keeps its assistant message as a message block apps/web test: ok 600 - a failed run with no assistantMessageId keeps its assistant message as a message block apps/web test: --- apps/web test: duration_ms: 0.237218 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a reopened Session replays the approval switch recorded during its run apps/web test: ok 601 - a reopened Session replays the approval switch recorded during its run apps/web test: --- apps/web test: duration_ms: 0.294357 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: id-less SubAgent events update their lane without advancing the main replay cursor apps/web test: ok 602 - id-less SubAgent events update their lane without advancing the main replay cursor apps/web test: --- apps/web test: duration_ms: 0.479972 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: refresh hydration rebuilds SubAgent steps from its child stream apps/web test: ok 603 - refresh hydration rebuilds SubAgent steps from its child stream apps/web test: --- apps/web test: duration_ms: 0.372573 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a refresh replays identity deltas around an approval switch into one container apps/web test: ok 604 - a refresh replays identity deltas around an approval switch into one container apps/web test: --- apps/web test: duration_ms: 1.080857 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an off-screen run keeps one container when the switch lands mid-stream, and hydration matches live apps/web test: ok 605 - an off-screen run keeps one container when the switch lands mid-stream, and hydration matches live apps/web test: --- apps/web test: duration_ms: 0.294097 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a second response after tool calls never continues the first container apps/web test: ok 606 - a second response after tool calls never continues the first container apps/web test: --- apps/web test: duration_ms: 0.264898 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: validates portable Agent Skills authoring fields apps/web test: ok 607 - validates portable Agent Skills authoring fields apps/web test: --- apps/web test: duration_ms: 1.347485 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: packages manually authored reference and script resources with the Skill apps/web test: ok 608 - packages manually authored reference and script resources with the Skill apps/web test: --- apps/web test: duration_ms: 0.98183 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: adapts a GitHub marketplace folder link into repository, ref, and search path apps/web test: ok 609 - adapts a GitHub marketplace folder link into repository, ref, and search path apps/web test: --- apps/web test: duration_ms: 0.417221 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a compact searchable Skill list with grouped create and import actions apps/web test: ok 610 - renders a compact searchable Skill list with grouped create and import actions apps/web test: --- apps/web test: duration_ms: 37.099577 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: opens the clicked Skill directly in the dedicated Explorer apps/web test: ok 611 - opens the clicked Skill directly in the dedicated Explorer apps/web test: --- apps/web test: duration_ms: 46.097666 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: blank Skill authoring exposes packaged reference resources apps/web test: ok 612 - blank Skill authoring exposes packaged reference resources apps/web test: --- apps/web test: duration_ms: 27.922509 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders skill library cards with pinned head version metadata apps/web test: ok 613 - renders skill library cards with pinned head version metadata apps/web test: --- apps/web test: duration_ms: 21.687033 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: classifies added, modified, removed, and unchanged Skill files apps/web test: ok 614 - classifies added, modified, removed, and unchanged Skill files apps/web test: --- apps/web test: duration_ms: 0.944246 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: aligns unchanged, modified, added, and removed lines like a pull-request diff apps/web test: ok 615 - aligns unchanged, modified, added, and removed lines like a pull-request diff apps/web test: --- apps/web test: duration_ms: 1.218753 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: clamps the draggable A and B split to a usable range apps/web test: ok 616 - clamps the draggable A and B split to a usable range apps/web test: --- apps/web test: duration_ms: 0.240275 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a resizable pull-request style diff with change statistics apps/web test: ok 617 - renders a resizable pull-request style diff with change statistics apps/web test: --- apps/web test: duration_ms: 11.815086 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a multi-file review editor that requires explicit confirmation apps/web test: ok 618 - renders a multi-file review editor that requires explicit confirmation apps/web test: --- apps/web test: duration_ms: 3.700762 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: labels a revised pending Skill as a comparison with the previous Agent proposal apps/web test: ok 619 - labels a revised pending Skill as a comparison with the previous Agent proposal apps/web test: --- apps/web test: duration_ms: 4.681961 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: groups package resources into a collapsible directory tree apps/web test: ok 620 - groups package resources into a collapsible directory tree apps/web test: --- apps/web test: duration_ms: 11.779064 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders a four-pane Skill explorer with pending and installed Skills apps/web test: ok 621 - renders a four-pane Skill explorer with pending and installed Skills apps/web test: --- apps/web test: duration_ms: 13.608084 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: edits and confirms an explicitly selected Agent proposal in the Explorer apps/web test: ok 622 - edits and confirms an explicitly selected Agent proposal in the Explorer apps/web test: --- apps/web test: duration_ms: 107.916503 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: filters the Explorer catalog down to pending drafts apps/web test: ok 623 - filters the Explorer catalog down to pending drafts apps/web test: --- apps/web test: duration_ms: 38.960707 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: switching Skills never requests the previous Skill's version and managed files stay editable apps/web test: ok 624 - switching Skills never requests the previous Skill's version and managed files stay editable apps/web test: --- apps/web test: duration_ms: 92.201957 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: deletes a managed Skill from the Explorer after reference check and typed confirmation apps/web test: ok 625 - deletes a managed Skill from the Explorer after reference check and typed confirmation apps/web test: --- apps/web test: duration_ms: 101.921262 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: Browse selects an application-machine path and cancellation never changes credentials apps/web test: ok 626 - Browse selects an application-machine path and cancellation never changes credentials apps/web test: --- apps/web test: duration_ms: 47.929978 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: closed picker ignores a late response and listing errors stay in the picker apps/web test: ok 627 - closed picker ignores a late response and listing errors stay in the picker apps/web test: --- apps/web test: duration_ms: 7.248751 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: SubAgent child steps project into the main run timeline apps/web test: ok 628 - SubAgent child steps project into the main run timeline apps/web test: --- apps/web test: duration_ms: 2.139731 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the page-level SubAgent view reuses conversation and timeline UI without a composer apps/web test: ok 629 - the page-level SubAgent view reuses conversation and timeline UI without a composer apps/web test: --- apps/web test: duration_ms: 47.954509 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: completed SubAgent tool I/O remains fully inspectable on the page apps/web test: ok 630 - completed SubAgent tool I/O remains fully inspectable on the page apps/web test: --- apps/web test: duration_ms: 7.980685 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: running steps stay expanded and failed SubAgents expose their error apps/web test: ok 631 - running steps stay expanded and failed SubAgents expose their error apps/web test: --- apps/web test: duration_ms: 10.925449 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions with no expanded scopes returns the folded graph's surrogate-only view apps/web test: ok 632 - mergeExpansions with no expanded scopes returns the folded graph's surrogate-only view apps/web test: --- apps/web test: duration_ms: 2.353588 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions drops a folded scope's surrogate when that scope is expanded apps/web test: ok 633 - mergeExpansions drops a folded scope's surrogate when that scope is expanded apps/web test: --- apps/web test: duration_ms: 0.341044 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions folds back: removing a scope from the set restores its surrogate apps/web test: ok 634 - mergeExpansions folds back: removing a scope from the set restores its surrogate apps/web test: --- apps/web test: duration_ms: 0.299365 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions keeps a *folded* scope's surrogate when a *different* scope is expanded apps/web test: ok 635 - mergeExpansions keeps a *folded* scope's surrogate when a *different* scope is expanded apps/web test: --- apps/web test: duration_ms: 0.289289 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions de-dupes nodes + edges by id / (source,target,type) apps/web test: ok 636 - mergeExpansions de-dupes nodes + edges by id / (source,target,type) apps/web test: --- apps/web test: duration_ms: 0.449506 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions is stable: same folded + same expansions → identical content apps/web test: ok 637 - mergeExpansions is stable: same folded + same expansions → identical content apps/web test: --- apps/web test: duration_ms: 0.276072 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions merges the persisted scope_chain next edge between an expanded scope's children apps/web test: ok 638 - mergeExpansions merges the persisted scope_chain next edge between an expanded scope's children apps/web test: --- apps/web test: duration_ms: 0.302868 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions passes through the persisted child next regardless of expansion-node order apps/web test: ok 639 - mergeExpansions passes through the persisted child next regardless of expansion-node order apps/web test: --- apps/web test: duration_ms: 0.220057 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions does not surface child-chain next edges for a folded scope apps/web test: ok 640 - mergeExpansions does not surface child-chain next edges for a folded scope apps/web test: --- apps/web test: duration_ms: 0.399381 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: countScopeChildren counts children from the raw folded node set, not visible edges apps/web test: ok 641 - countScopeChildren counts children from the raw folded node set, not visible edges apps/web test: --- apps/web test: duration_ms: 0.49332 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: buildScopeChildCounts is stable across expansion state (badge never flips 0→N) apps/web test: ok 642 - buildScopeChildCounts is stable across expansion state (badge never flips 0→N) apps/web test: --- apps/web test: duration_ms: 0.250807 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions folded view hides the child subtree and keeps only the surrogate apps/web test: ok 643 - mergeExpansions folded view hides the child subtree and keeps only the surrogate apps/web test: --- apps/web test: duration_ms: 0.277823 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions expanded view surfaces the real chain and drops the surrogate apps/web test: ok 644 - mergeExpansions expanded view surfaces the real chain and drops the surrogate apps/web test: --- apps/web test: duration_ms: 0.234217 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions folded view keeps a product still reached by a non-subagent producer apps/web test: ok 645 - mergeExpansions folded view keeps a product still reached by a non-subagent producer apps/web test: --- apps/web test: duration_ms: 0.260491 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions folded subtree does not cross argumentation edges (supports/stated_in) apps/web test: ok 646 - mergeExpansions folded subtree does not cross argumentation edges (supports/stated_in) apps/web test: --- apps/web test: duration_ms: 0.340621 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions folded subtree does not cross `input` edges (Artifact→Code consumer) apps/web test: ok 647 - mergeExpansions folded subtree does not cross `input` edges (Artifact→Code consumer) apps/web test: --- apps/web test: duration_ms: 0.307561 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isNodeCompleted matches the done status set only apps/web test: ok 648 - isNodeCompleted matches the done status set only apps/web test: --- apps/web test: duration_ms: 0.144922 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isNodeCancelled keys on status === 'cancelled' and is disjoint from completed apps/web test: ok 649 - isNodeCancelled keys on status === 'cancelled' and is disjoint from completed apps/web test: --- apps/web test: duration_ms: 0.119545 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: badge split counts completed and cancelled independently apps/web test: ok 650 - badge split counts completed and cancelled independently apps/web test: --- apps/web test: duration_ms: 0.933996 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions keeps the virtual aggregate node + its surrogate while folded apps/web test: ok 651 - mergeExpansions keeps the virtual aggregate node + its surrogate while folded apps/web test: --- apps/web test: duration_ms: 0.373429 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions unpacks an expanded aggregate into its members, drops the virtual node apps/web test: ok 652 - mergeExpansions unpacks an expanded aggregate into its members, drops the virtual node apps/web test: --- apps/web test: duration_ms: 0.263141 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions folds an expanded aggregate back: members gone, virtual node restored apps/web test: ok 653 - mergeExpansions folds an expanded aggregate back: members gone, virtual node restored apps/web test: --- apps/web test: duration_ms: 0.215562 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeExpansions hides an aggregate whose owning scope is expanded (real members take over) apps/web test: ok 654 - mergeExpansions hides an aggregate whose owning scope is expanded (real members take over) apps/web test: --- apps/web test: duration_ms: 0.157104 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeChainScopeExpansions folds a collapsed scope's child ToolCalls out of the chain apps/web test: ok 655 - mergeChainScopeExpansions folds a collapsed scope's child ToolCalls out of the chain apps/web test: --- apps/web test: duration_ms: 0.695671 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeChainScopeExpansions keeps a collapsed scope's cited product + synthesises its surrogate apps/web test: ok 656 - mergeChainScopeExpansions keeps a collapsed scope's cited product + synthesises its surrogate apps/web test: --- apps/web test: duration_ms: 0.308513 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeChainScopeExpansions does not claim a product that a non-hidden producer also reaches apps/web test: ok 657 - mergeChainScopeExpansions does not claim a product that a non-hidden producer also reaches apps/web test: --- apps/web test: duration_ms: 0.247396 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeChainScopeExpansions overlays an expanded scope's children onto the chain apps/web test: ok 658 - mergeChainScopeExpansions overlays an expanded scope's children onto the chain apps/web test: --- apps/web test: duration_ms: 0.374524 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mergeChainScopeExpansions round-trips: expand then collapse restores the folded shape apps/web test: ok 659 - mergeChainScopeExpansions round-trips: expand then collapse restores the folded shape apps/web test: --- apps/web test: duration_ms: 0.602454 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders toast tones, titles, details, and dismiss actions apps/web test: ok 660 - renders toast tones, titles, details, and dismiss actions apps/web test: --- apps/web test: duration_ms: 11.482993 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders nothing when the toast queue is empty apps/web test: ok 661 - renders nothing when the toast queue is empty apps/web test: --- apps/web test: duration_ms: 0.371084 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: error notifications never receive an automatic dismiss delay apps/web test: ok 662 - error notifications never receive an automatic dismiss delay apps/web test: --- apps/web test: duration_ms: 0.13221 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: transient queue pressure never evicts an existing error apps/web test: ok 663 - transient queue pressure never evicts an existing error apps/web test: --- apps/web test: duration_ms: 1.037441 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a rejected token cannot grow the notification column past a dialog apps/web test: ok 664 - a rejected token cannot grow the notification column past a dialog apps/web test: --- apps/web test: duration_ms: 0.235911 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a different failure still gets its own notification apps/web test: ok 665 - a different failure still gets its own notification apps/web test: --- apps/web test: duration_ms: 0.210852 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a failure that recurs after the user dismissed it notifies again apps/web test: ok 666 - a failure that recurs after the user dismissed it notifies again apps/web test: --- apps/web test: duration_ms: 0.236024 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapsing duplicates leaves transient eviction untouched apps/web test: ok 667 - collapsing duplicates leaves transient eviction untouched apps/web test: --- apps/web test: duration_ms: 0.23072 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an explicit dismiss removes only the selected error apps/web test: ok 668 - an explicit dismiss removes only the selected error apps/web test: --- apps/web test: duration_ms: 0.333819 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: model labels add a short profile ID only when visible identities collide apps/web test: ok 669 - model labels add a short profile ID only when visible identities collide apps/web test: --- apps/web test: duration_ms: 1.731633 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: settings checkboxes expose a 24px control inside clickable labels apps/web test: ok 670 - settings checkboxes expose a 24px control inside clickable labels apps/web test: --- apps/web test: duration_ms: 1.414854 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the shared form skeleton also covers scoped settings outside config panels apps/web test: ok 671 - the shared form skeleton also covers scoped settings outside config panels apps/web test: --- apps/web test: duration_ms: 0.367809 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: configured providers render one expandable row each with an inline model table apps/web test: ok 672 - configured providers render one expandable row each with an inline model table apps/web test: --- apps/web test: duration_ms: 1.495866 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: sidebar ellipsis text nodes carry their full visible names apps/web test: ok 673 - sidebar ellipsis text nodes carry their full visible names apps/web test: --- apps/web test: duration_ms: 2.035865 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the session bar constrains long names and preserves their full hover text apps/web test: ok 674 - the session bar constrains long names and preserves their full hover text apps/web test: --- apps/web test: duration_ms: 1.507163 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: historical run labels use their recorded model instead of the Composer selection apps/web test: ok 675 - historical run labels use their recorded model instead of the Composer selection apps/web test: --- apps/web test: duration_ms: 1.292457 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the system settings dialog uses up to roughly 80% of the viewport apps/web test: ok 676 - the system settings dialog uses up to roughly 80% of the viewport apps/web test: --- apps/web test: duration_ms: 0.333962 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace resize wiring shares a viewport-driven maximum apps/web test: ok 677 - workspace resize wiring shares a viewport-driven maximum apps/web test: --- apps/web test: duration_ms: 2.667952 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: dense settings and artifact layouts adapt without fixed-column overflow apps/web test: ok 678 - dense settings and artifact layouts adapt without fixed-column overflow apps/web test: --- apps/web test: duration_ms: 1.115996 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Composer controls wrap by available container width instead of overlapping apps/web test: ok 679 - Composer controls wrap by available container width instead of overlapping apps/web test: --- apps/web test: duration_ms: 0.772565 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: USG-011 usage formatting omits missing token fields instead of unreported apps/web test: ok 680 - USG-011 usage formatting omits missing token fields instead of unreported apps/web test: --- apps/web test: duration_ms: 18.530974 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: USG-012 usage page renders model drilldown, chart and inline/table usage apps/web test: ok 681 - USG-012 usage page renders model drilldown, chart and inline/table usage apps/web test: --- apps/web test: duration_ms: 177.649517 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a runtime notice reads as what finished and how, never as the model prompt apps/web test: ok 682 - a runtime notice reads as what finished and how, never as the model prompt apps/web test: --- apps/web test: duration_ms: 12.544234 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: each record opens the matching activity record apps/web test: ok 683 - each record opens the matching activity record apps/web test: --- apps/web test: duration_ms: 20.849693 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a notice persisted without records keeps its count summary and still hides the prompt apps/web test: ok 684 - a notice persisted without records keeps its count summary and still hides the prompt apps/web test: --- apps/web test: duration_ms: 0.997372 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders the search tiers in attempt order with write-only credentials apps/web test: ok 685 - renders the search tiers in attempt order with write-only credentials apps/web test: --- apps/web test: duration_ms: 13.018286 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: free engine switches reflect the stored per-engine state apps/web test: ok 686 - free engine switches reflect the stored per-engine state apps/web test: --- apps/web test: duration_ms: 2.62751 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the update request carries both tiers so a cleared selection is not silently kept apps/web test: ok 687 - the update request carries both tiers so a cleared selection is not silently kept apps/web test: --- apps/web test: duration_ms: 0.304173 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: builds one deferred update request from provider and credential drafts apps/web test: ok 688 - builds one deferred update request from provider and credential drafts apps/web test: --- apps/web test: duration_ms: 0.177118 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: NODE_LABELS includes WebPage for the legend / filter chip apps/web test: ok 689 - NODE_LABELS includes WebPage for the legend / filter chip apps/web test: --- apps/web test: duration_ms: 0.963983 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: CHAIN_BUTTONS.WebPage has the four ForWebPage kinds apps/web test: ok 690 - CHAIN_BUTTONS.WebPage has the four ForWebPage kinds apps/web test: --- apps/web test: duration_ms: 0.820543 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: WebPage without a valid content_hash shows the not-retrieved hint and never calls the client apps/web test: ok 691 - WebPage without a valid content_hash shows the not-retrieved hint and never calls the client apps/web test: --- apps/web test: duration_ms: 36.141296 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: WebPage with a content_hash loads, then renders the scrubbed body as Markdown apps/web test: ok 692 - WebPage with a content_hash loads, then renders the scrubbed body as Markdown apps/web test: --- apps/web test: duration_ms: 10.313717 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: a 404 from the proxy renders the soft not-retrieved message, a network failure the error state apps/web test: ok 693 - a 404 from the proxy renders the soft not-retrieved message, a network failure the error state apps/web test: --- apps/web test: duration_ms: 6.729111 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: unmounting the card mid-fetch resolves quietly — cleanup swallows the late response apps/web test: ok 694 - unmounting the card mid-fetch resolves quietly — cleanup swallows the late response apps/web test: --- apps/web test: duration_ms: 1.987134 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: the WebPage header is the link to the page — no separate URL row repeats it apps/web test: ok 695 - the WebPage header is the link to the page — no separate URL row repeats it apps/web test: --- apps/web test: duration_ms: 6.425497 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: the page reader's Title/URL Source/Markdown Content wrapper never reaches the card apps/web test: ok 696 - the page reader's Title/URL Source/Markdown Content wrapper never reaches the card apps/web test: --- apps/web test: duration_ms: 10.446406 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: detects Composer context triggers and inserts a stable reference token apps/web test: ok 697 - detects Composer context triggers and inserts a stable reference token apps/web test: --- apps/web test: duration_ms: 1.775274 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: inserts Skill authoring commands without attaching a catalog reference apps/web test: ok 698 - inserts Skill authoring commands without attaching a catalog reference apps/web test: --- apps/web test: duration_ms: 25.344824 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders selected Skill authoring commands as removable high-emphasis chips apps/web test: ok 699 - renders selected Skill authoring commands as removable high-emphasis chips apps/web test: --- apps/web test: duration_ms: 1.7834 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: `/` only offers the skills the Session can actually run apps/web test: ok 700 - `/` only offers the skills the Session can actually run apps/web test: --- apps/web test: duration_ms: 0.343266 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders typed Composer suggestions as structured context choices apps/web test: ok 701 - renders typed Composer suggestions as structured context choices apps/web test: --- apps/web test: duration_ms: 3.600786 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: global search renders limited mixed-catalog pages and authoritative server matches apps/web test: ok 702 - global search renders limited mixed-catalog pages and authoritative server matches apps/web test: --- apps/web test: duration_ms: 44.243878 apps/web test: type: 'test' apps/web test: ... apps/web test: # react-test-renderer is deprecated. See https://react.dev/warnings/react-test-renderer apps/web test: # Subtest: Workspace file provenance modal renders direct source and execution context apps/web test: ok 703 - Workspace file provenance modal renders direct source and execution context apps/web test: --- apps/web test: duration_ms: 33.801712 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Workspace file provenance modal explains unknown attribution without guessing apps/web test: ok 704 - Workspace file provenance modal explains unknown attribution without guessing apps/web test: --- apps/web test: duration_ms: 8.294256 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Workspace file provenance values can be expanded for copying apps/web test: ok 705 - Workspace file provenance values can be expanded for copying apps/web test: --- apps/web test: duration_ms: 24.580813 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace maximum grows with desktop viewport instead of stopping at 560px apps/web test: ok 706 - workspace maximum grows with desktop viewport instead of stopping at 560px apps/web test: --- apps/web test: duration_ms: 0.911865 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace maximum preserves the minimum conversation width and panel width apps/web test: ok 707 - workspace maximum preserves the minimum conversation width and panel width apps/web test: --- apps/web test: duration_ms: 0.166786 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace width clamps stored, pointer, and keyboard values to current bounds apps/web test: ok 708 - workspace width clamps stored, pointer, and keyboard values to current bounds apps/web test: --- apps/web test: duration_ms: 0.217114 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact archive paths preserve safe logical directories apps/web test: ok 709 - artifact archive paths preserve safe logical directories apps/web test: --- apps/web test: duration_ms: 1.746659 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact archive limits allow the boundary and reject oversized selections apps/web test: ok 710 - artifact archive limits allow the boundary and reject oversized selections apps/web test: --- apps/web test: duration_ms: 0.304528 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact ZIP entries retain logical paths and round-trip their content apps/web test: ok 711 - artifact ZIP entries retain logical paths and round-trip their content apps/web test: --- apps/web test: duration_ms: 4.096199 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact ZIP generation rejects duplicate normalized logical paths apps/web test: ok 712 - artifact ZIP generation rejects duplicate normalized logical paths apps/web test: --- apps/web test: duration_ms: 0.496398 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact groups wait for the complete Session catalog before declaring deletion apps/web test: ok 713 - artifact groups wait for the complete Session catalog before declaring deletion apps/web test: --- apps/web test: duration_ms: 1.841467 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: created and renamed Sessions update artifact groups from the live catalog apps/web test: ok 714 - created and renamed Sessions update artifact groups from the live catalog apps/web test: --- apps/web test: duration_ms: 0.378865 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: only a loaded catalog with a missing source uses the deleted Session group apps/web test: ok 715 - only a loaded catalog with a missing source uses the deleted Session group apps/web test: --- apps/web test: duration_ms: 0.248117 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: buildArtifactTree nests full logical names while flat names stay at the root apps/web test: ok 716 - buildArtifactTree nests full logical names while flat names stay at the root apps/web test: --- apps/web test: duration_ms: 1.560572 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: same basenames in different directories remain separate artifact leaves apps/web test: ok 717 - same basenames in different directories remain separate artifact leaves apps/web test: --- apps/web test: duration_ms: 11.209366 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact tree icon kind prefers metadata and falls back to the filename for other artifacts apps/web test: ok 718 - artifact tree icon kind prefers metadata and falls back to the filename for other artifacts apps/web test: --- apps/web test: duration_ms: 0.330692 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ArtifactTreeList renders distinct compact icons for every scientific artifact family apps/web test: ok 719 - ArtifactTreeList renders distinct compact icons for every scientific artifact family apps/web test: --- apps/web test: duration_ms: 15.833399 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: ArtifactTreeList renders compact folder and file rows with full-name controls apps/web test: ok 720 - ArtifactTreeList renders compact folder and file rows with full-name controls apps/web test: --- apps/web test: duration_ms: 2.383941 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact tree selection exposes folder and leaf checkboxes instead of preview controls apps/web test: ok 721 - artifact tree selection exposes folder and leaf checkboxes instead of preview controls apps/web test: --- apps/web test: duration_ms: 3.11049 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: buildWorkspaceFileTree groups physical files by full path and retains each file apps/web test: ok 722 - buildWorkspaceFileTree groups physical files by full path and retains each file apps/web test: --- apps/web test: duration_ms: 0.996947 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace file tree icons use preview kinds and fall back to the generic icon apps/web test: ok 723 - workspace file tree icons use preview kinds and fall back to the generic icon apps/web test: --- apps/web test: duration_ms: 0.177498 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: WorkspaceFileTreeList renders compact physical file leaves with full-path controls apps/web test: ok 724 - WorkspaceFileTreeList renders compact physical file leaves with full-path controls apps/web test: --- apps/web test: duration_ms: 2.618736 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: WorkspaceFileTreeList exposes a provenance action outside selection mode apps/web test: ok 725 - WorkspaceFileTreeList exposes a provenance action outside selection mode apps/web test: --- apps/web test: duration_ms: 1.998221 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace file leaves always use the workspace reader regardless of preview kind apps/web test: ok 726 - workspace file leaves always use the workspace reader regardless of preview kind apps/web test: --- apps/web test: duration_ms: 1.786682 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace file tree selection exposes folder and leaf checkboxes independently apps/web test: ok 727 - workspace file tree selection exposes folder and leaf checkboxes independently apps/web test: --- apps/web test: duration_ms: 2.392328 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: compact path trees use continuous vertical guides without horizontal node separators apps/web test: ok 728 - compact path trees use continuous vertical guides without horizontal node separators apps/web test: --- apps/web test: duration_ms: 0.387928 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: workspace panel uses collapsible sections and header actions instead of a standalone toolbar apps/web test: ok 729 - workspace panel uses collapsible sections and header actions instead of a standalone toolbar apps/web test: --- apps/web test: duration_ms: 1.448021 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: renders hidden-from-a11y SVG icons with a shared stroke system apps/web test: ok 730 - renders hidden-from-a11y SVG icons with a shared stroke system apps/web test: --- apps/web test: duration_ms: 8.424407 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: honours size, stroke width, and an accessible title apps/web test: ok 731 - honours size, stroke width, and an accessible title apps/web test: --- apps/web test: duration_ms: 2.808019 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mainChainNodeIds: BFS along `next` from ResearchGoal apps/web test: ok 732 - mainChainNodeIds: BFS along `next` from ResearchGoal apps/web test: --- apps/web test: duration_ms: 1.353873 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mainChainNodeIds: no ResearchGoal falls back to all Task+ToolCall+ResearchGoal apps/web test: ok 733 - mainChainNodeIds: no ResearchGoal falls back to all Task+ToolCall+ResearchGoal apps/web test: --- apps/web test: duration_ms: 0.23472 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: mainChainNodeIds: next edges that drag in non-spine labels are filtered out apps/web test: ok 734 - mainChainNodeIds: next edges that drag in non-spine labels are filtered out apps/web test: --- apps/web test: duration_ms: 0.169777 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: producesMembersOf: bidirectional — both endpoints are members apps/web test: ok 735 - producesMembersOf: bidirectional — both endpoints are members apps/web test: --- apps/web test: duration_ms: 0.89417 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: producesMembersOf: next and contains edges are NOT produces members apps/web test: ok 736 - producesMembersOf: next and contains edges are NOT produces members apps/web test: --- apps/web test: duration_ms: 0.274896 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapseProducesOwner: does NOT include the owner apps/web test: ok 737 - collapseProducesOwner: does NOT include the owner apps/web test: --- apps/web test: duration_ms: 0.163269 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapseProducesOwner: shallow — only the owner's direct children, NOT the grandchildren apps/web test: ok 738 - collapseProducesOwner: shallow — only the owner's direct children, NOT the grandchildren apps/web test: --- apps/web test: duration_ms: 0.142723 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapseProducesOwner: only collapses the owner's recorded children — edge-centric apps/web test: ok 739 - collapseProducesOwner: only collapses the owner's recorded children — edge-centric apps/web test: --- apps/web test: duration_ms: 0.146005 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collapseProducesOwner: a node brought in by another owner is untouched when collapsing this owner apps/web test: ok 740 - collapseProducesOwner: a node brought in by another owner is untouched when collapsing this owner apps/web test: --- apps/web test: duration_ms: 0.300182 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectToCanvas: default shows only the main chain, folds produces apps/web test: ok 741 - projectToCanvas: default shows only the main chain, folds produces apps/web test: --- apps/web test: duration_ms: 0.586611 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectToCanvas: expanding a node surfaces its produces members apps/web test: ok 742 - projectToCanvas: expanding a node surfaces its produces members apps/web test: --- apps/web test: duration_ms: 0.342231 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectToCanvas: expanding a non-spine node keeps the node itself visible apps/web test: ok 743 - projectToCanvas: expanding a non-spine node keeps the node itself visible apps/web test: --- apps/web test: duration_ms: 0.193284 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectToCanvas: collapsing (removing the owner's entry) drops the members apps/web test: ok 744 - projectToCanvas: collapsing (removing the owner's entry) drops the members apps/web test: --- apps/web test: duration_ms: 0.191192 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectToCanvas: scope expansion shows only the contains layer (child ToolCalls) apps/web test: ok 745 - projectToCanvas: scope expansion shows only the contains layer (child ToolCalls) apps/web test: --- apps/web test: duration_ms: 0.457902 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: buildProducesMemberCounts: bidirectional — counts both endpoints per edge apps/web test: ok 746 - buildProducesMemberCounts: bidirectional — counts both endpoints per edge apps/web test: --- apps/web test: duration_ms: 0.175105 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: buildProducesMemberCounts: bidirectional counts IN-edge-only nodes apps/web test: ok 747 - buildProducesMemberCounts: bidirectional counts IN-edge-only nodes apps/web test: --- apps/web test: duration_ms: 0.110314 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: countFoldedProducesMembers: 0 for a node whose adjacent members are all visible apps/web test: ok 748 - countFoldedProducesMembers: 0 for a node whose adjacent members are all visible apps/web test: --- apps/web test: duration_ms: 0.15088 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: countFoldedProducesMembers: 0 for a node with no produces members (ResearchGoal) apps/web test: ok 749 - countFoldedProducesMembers: 0 for a node with no produces members (ResearchGoal) apps/web test: --- apps/web test: duration_ms: 0.12257 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: projectToCanvas + collapseProducesOwner: shallow collapse breaks the owner's edge but leaves the grandchild apps/web test: ok 750 - projectToCanvas + collapseProducesOwner: shallow collapse breaks the owner's edge but leaves the grandchild apps/web test: --- apps/web test: duration_ms: 0.339026 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: expandAllProduces reveals every layer and leaves nothing folded apps/web test: ok 751 - expandAllProduces reveals every layer and leaves nothing folded apps/web test: --- apps/web test: duration_ms: 0.496956 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: expandAllProduces is idempotent and honours the owner filter apps/web test: ok 752 - expandAllProduces is idempotent and honours the owner filter apps/web test: --- apps/web test: duration_ms: 0.311755 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: known provider catalog narrows Gemini to supported modes and efforts apps/web test: ok 753 - known provider catalog narrows Gemini to supported modes and efforts apps/web test: --- apps/web test: duration_ms: 1.848959 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a protocol without compatible controls never exposes thinking choices apps/web test: ok 754 - a protocol without compatible controls never exposes thinking choices apps/web test: --- apps/web test: duration_ms: 0.216483 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: custom Responses endpoints use dialect capabilities without inventing catalog facts apps/web test: ok 755 - custom Responses endpoints use dialect capabilities without inventing catalog facts apps/web test: --- apps/web test: duration_ms: 0.283404 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: known OpenAI and Kimi models expose only legal model-level controls apps/web test: ok 756 - known OpenAI and Kimi models expose only legal model-level controls apps/web test: --- apps/web test: duration_ms: 0.285344 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Haiku 4.5 and adaptive Anthropic profiles share transparent model-level controls apps/web test: ok 757 - Haiku 4.5 and adaptive Anthropic profiles share transparent model-level controls apps/web test: --- apps/web test: duration_ms: 0.288434 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: Session normalization persists the nearest legal effort after a model switch apps/web test: ok 758 - Session normalization persists the nearest legal effort after a model switch apps/web test: --- apps/web test: duration_ms: 0.430408 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: detects molecular formats from the artifact filename apps/web test: ok 759 - detects molecular formats from the artifact filename apps/web test: --- apps/web test: duration_ms: 1.085643 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: falls back to media type then content sniffing apps/web test: ok 760 - falls back to media type then content sniffing apps/web test: --- apps/web test: duration_ms: 0.744007 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: does not treat the platform structure JSON as a 3D structure format apps/web test: ok 761 - does not treat the platform structure JSON as a 3D structure format apps/web test: --- apps/web test: duration_ms: 0.187463 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: picks the CIF core parser for crystallographic files and mmCIF otherwise apps/web test: ok 762 - picks the CIF core parser for crystallographic files and mmCIF otherwise apps/web test: --- apps/web test: duration_ms: 0.328271 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: folds persisted plan events to the latest snapshot per agent apps/web test: ok 763 - folds persisted plan events to the latest snapshot per agent apps/web test: --- apps/web test: duration_ms: 12.165653 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an empty plan snapshot clears only that agent from the current UI projection apps/web test: ok 764 - an empty plan snapshot clears only that agent from the current UI projection apps/web test: --- apps/web test: duration_ms: 0.381898 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: isArtifactPreviewFile accepts any markdown plus the chart/summary pair apps/web test: ok 765 - isArtifactPreviewFile accepts any markdown plus the chart/summary pair apps/web test: --- apps/web test: duration_ms: 0.304156 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: attributes governed downloads through MCP invocations, including subagent turns apps/web test: ok 766 - attributes governed downloads through MCP invocations, including subagent turns apps/web test: --- apps/web test: duration_ms: 0.736868 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: attributes items to the run that was active when they were created apps/web test: ok 767 - attributes items to the run that was active when they were created apps/web test: --- apps/web test: duration_ms: 0.475471 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: queued runs that never started are not attribution targets apps/web test: ok 768 - queued runs that never started are not attribution targets apps/web test: --- apps/web test: duration_ms: 0.211569 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: plan snapshots use their exact run identity instead of timestamp attribution apps/web test: ok 769 - plan snapshots use their exact run identity instead of timestamp attribution apps/web test: --- apps/web test: duration_ms: 0.316369 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: falls back to the user message when a run has no assistant message apps/web test: ok 770 - falls back to the user message when a run has no assistant message apps/web test: --- apps/web test: duration_ms: 0.1893 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: empty attribution yields no groups apps/web test: ok 771 - empty attribution yields no groups apps/web test: --- apps/web test: duration_ms: 0.432408 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: collectRunChangedPaths unions the changed paths of workspace.changed events apps/web test: ok 772 - collectRunChangedPaths unions the changed paths of workspace.changed events apps/web test: --- apps/web test: duration_ms: 0.49761 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: preview files appear in every run that changed them and keep timestamp fallback apps/web test: ok 773 - preview files appear in every run that changed them and keep timestamp fallback apps/web test: --- apps/web test: duration_ms: 0.264951 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: different markdown paths from different runs land in their own groups apps/web test: ok 774 - different markdown paths from different runs land in their own groups apps/web test: --- apps/web test: duration_ms: 0.203691 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: setActivityCardExpanded toggles one card and no-ops on an unchanged value apps/web test: ok 775 - setActivityCardExpanded toggles one card and no-ops on an unchanged value apps/web test: --- apps/web test: duration_ms: 0.138121 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an explicit collapse lands for a card whose default is expanded apps/web test: ok 776 - an explicit collapse lands for a card whose default is expanded apps/web test: --- apps/web test: duration_ms: 0.160549 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: expansion keyed by card id survives a group moving from tail to conversation block apps/web test: ok 777 - expansion keyed by card id survives a group moving from tail to conversation block apps/web test: --- apps/web test: duration_ms: 0.165742 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: groups main-agent and nested SubAgent Artifact outputs under their root Run apps/web test: ok 778 - groups main-agent and nested SubAgent Artifact outputs under their root Run apps/web test: --- apps/web test: duration_ms: 11.914569 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps only the newest version of an Artifact in one Run but preserves it across Runs apps/web test: ok 779 - keeps only the newest version of an Artifact in one Run but preserves it across Runs apps/web test: --- apps/web test: duration_ms: 0.30408 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: does not guess a Run for outputs with an unknown or cyclic turn lineage apps/web test: ok 780 - does not guess a Run for outputs with an unknown or cyclic turn lineage apps/web test: --- apps/web test: duration_ms: 0.336611 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: anchors terminal outputs to the active Timeline, replay Timeline, or visible message exactly once apps/web test: ok 781 - anchors terminal outputs to the active Timeline, replay Timeline, or visible message exactly once apps/web test: --- apps/web test: duration_ms: 1.684054 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: shows five Artifact rows by default and offers to expand a longer Run apps/web test: ok 782 - shows five Artifact rows by default and offers to expand a longer Run apps/web test: --- apps/web test: duration_ms: 12.453423 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: packages a selected Skill folder with its relative paths intact apps/web test: ok 783 - packages a selected Skill folder with its relative paths intact apps/web test: --- apps/web test: duration_ms: 10.542696 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: rejects folders without a root SKILL.md or with multiple roots apps/web test: ok 784 - rejects folders without a root SKILL.md or with multiple roots apps/web test: --- apps/web test: duration_ms: 0.932433 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: every evolve class in the markup still has a rule in the stylesheet apps/web test: ok 785 - every evolve class in the markup still has a rule in the stylesheet apps/web test: --- apps/web test: duration_ms: 5.643574 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: splits a labeled run_python success into stdout, stderr, and created files apps/web test: ok 786 - splits a labeled run_python success into stdout, stderr, and created files apps/web test: --- apps/web test: duration_ms: 2.171647 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: drops empty placeholder sections emitted by the runner apps/web test: ok 787 - drops empty placeholder sections emitted by the runner apps/web test: --- apps/web test: duration_ms: 0.210606 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: keeps a produced artifacts block as its own section apps/web test: ok 788 - keeps a produced artifacts block as its own section apps/web test: --- apps/web test: duration_ms: 0.274608 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: unattributed trailing lines stay with the current section instead of vanishing apps/web test: ok 789 - unattributed trailing lines stay with the current section instead of vanishing apps/web test: --- apps/web test: duration_ms: 0.297048 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a JSON error envelope stays raw in an Error section on failure apps/web test: ok 790 - a JSON error envelope stays raw in an Error section on failure apps/web test: --- apps/web test: duration_ms: 0.263789 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: unstructured output lands whole in a residual Result section apps/web test: ok 791 - unstructured output lands whole in a residual Result section apps/web test: --- apps/web test: duration_ms: 0.221998 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: text preceding the first recognized label is kept as a leading residual section apps/web test: ok 792 - text preceding the first recognized label is kept as a leading residual section apps/web test: --- apps/web test: duration_ms: 0.180216 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: an output made only of empty placeholders falls back to the raw text apps/web test: ok 793 - an output made only of empty placeholders falls back to the raw text apps/web test: --- apps/web test: duration_ms: 0.191539 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: a long stdout body is preserved verbatim apps/web test: ok 794 - a long stdout body is preserved verbatim apps/web test: --- apps/web test: duration_ms: 0.836003 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput shows a single code argument as raw text, not a JSON wrapper apps/web test: ok 795 - formatToolInput shows a single code argument as raw text, not a JSON wrapper apps/web test: --- apps/web test: duration_ms: 0.506359 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput prefers the primary text field and lists remaining fields compactly apps/web test: ok 796 - formatToolInput prefers the primary text field and lists remaining fields compactly apps/web test: --- apps/web test: duration_ms: 0.205703 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput uses command for shell-style tools apps/web test: ok 797 - formatToolInput uses command for shell-style tools apps/web test: --- apps/web test: duration_ms: 0.123526 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput falls back to the original input string when there is no primary field apps/web test: ok 798 - formatToolInput falls back to the original input string when there is no primary field apps/web test: --- apps/web test: duration_ms: 0.132945 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput compacts multi-field args without pretty indentation apps/web test: ok 799 - formatToolInput compacts multi-field args without pretty indentation apps/web test: --- apps/web test: duration_ms: 0.101548 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput falls back to the trace input when args are absent apps/web test: ok 800 - formatToolInput falls back to the trace input when args are absent apps/web test: --- apps/web test: duration_ms: 0.087392 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: formatToolInput serializes a lone non-string value compactly apps/web test: ok 801 - formatToolInput serializes a lone non-string value compactly apps/web test: --- apps/web test: duration_ms: 0.094529 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: inline trajectory view owns a path segment and participates in back/forward apps/web test: ok 802 - inline trajectory view owns a path segment and participates in back/forward apps/web test: --- apps/web test: duration_ms: 2.006946 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: the full path table serializes and parses back apps/web test: ok 803 - the full path table serializes and parses back apps/web test: --- apps/web test: duration_ms: 0.591425 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: settings layer wins the path over usage and session apps/web test: ok 804 - settings layer wins the path over usage and session apps/web test: --- apps/web test: duration_ms: 0.161234 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: query keys: only filter, panel and artifact, defaults omitted apps/web test: ok 805 - query keys: only filter, panel and artifact, defaults omitted apps/web test: --- apps/web test: duration_ms: 0.346421 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: artifact keeps slashes readable and round-trips nested paths apps/web test: ok 806 - artifact keeps slashes readable and round-trips nested paths apps/web test: --- apps/web test: duration_ms: 0.413997 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: unknown paths and legacy query-only links land on the default view apps/web test: ok 807 - unknown paths and legacy query-only links land on the default view apps/web test: --- apps/web test: duration_ms: 0.242439 apps/web test: type: 'test' apps/web test: ... apps/web test: # Subtest: only crossing a main-view boundary counts as a primary change apps/web test: ok 808 - only crossing a main-view boundary counts as a primary change apps/web test: --- apps/web test: duration_ms: 0.272662 apps/web test: type: 'test' apps/web test: ... apps/web test: 1..808 apps/web test: # tests 808 apps/web test: # suites 0 apps/web test: # pass 808 apps/web test: # fail 0 apps/web test: # cancelled 0 apps/web test: # skipped 0 apps/web test: # todo 0 apps/web test: # duration_ms 62519.327518 apps/web test: Done packages/artifact-manager test$ node --test dist/*.test.js packages/artifact-manager test: TAP version 13 packages/artifact-manager test: # Subtest: registerWorkspaceArtifact classifies and persists through domain ports packages/artifact-manager test: ok 1 - registerWorkspaceArtifact classifies and persists through domain ports packages/artifact-manager test: --- packages/artifact-manager test: duration_ms: 1.25155 packages/artifact-manager test: type: 'test' packages/artifact-manager test: ... packages/artifact-manager test: # Subtest: artifactMediaType has a conservative binary fallback packages/artifact-manager test: ok 2 - artifactMediaType has a conservative binary fallback packages/artifact-manager test: --- packages/artifact-manager test: duration_ms: 0.163699 packages/artifact-manager test: type: 'test' packages/artifact-manager test: ... packages/artifact-manager test: 1..2 packages/artifact-manager test: # tests 2 packages/artifact-manager test: # suites 0 packages/artifact-manager test: # pass 2 packages/artifact-manager test: # fail 0 packages/artifact-manager test: # cancelled 0 packages/artifact-manager test: # skipped 0 packages/artifact-manager test: # todo 0 packages/artifact-manager test: # duration_ms 113.253118 packages/artifact-manager test: Done packages/provenance test$ node --test dist/*.test.js packages/provenance test: TAP version 13 packages/provenance test: # (node:6226) ExperimentalWarning: SQLite is an experimental feature and might change at any time packages/provenance test: # (Use `node --trace-warnings ...` to show where the warning was created) packages/provenance test: # Subtest: observeNpuJob mirrors terminal jobs to the memory graph with declared artifacts packages/provenance test: ok 1 - observeNpuJob mirrors terminal jobs to the memory graph with declared artifacts packages/provenance test: --- packages/provenance test: duration_ms: 9.146207 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob skips non-terminal jobs (queued / running) packages/provenance test: ok 2 - observeNpuJob skips non-terminal jobs (queued / running) packages/provenance test: --- packages/provenance test: duration_ms: 1.46799 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob skips jobs when every declaration failed (producedArtifacts is empty) packages/provenance test: ok 3 - observeNpuJob skips jobs when every declaration failed (producedArtifacts is empty) packages/provenance test: --- packages/provenance test: duration_ms: 3.191133 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob enriches producedArtifacts with logicalName / mediaType / projectId from the catalog packages/provenance test: ok 4 - observeNpuJob enriches producedArtifacts with logicalName / mediaType / projectId from the catalog packages/provenance test: --- packages/provenance test: duration_ms: 1.571215 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob does not throw when the sink throws packages/provenance test: ok 5 - observeNpuJob does not throw when the sink throws packages/provenance test: --- packages/provenance test: duration_ms: 2.870313 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob maps job states to graph statuses packages/provenance test: ok 6 - observeNpuJob maps job states to graph statuses packages/provenance test: --- packages/provenance test: duration_ms: 2.422491 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob sets a stable, deterministic codeHash from workload + inputs packages/provenance test: ok 7 - observeNpuJob sets a stable, deterministic codeHash from workload + inputs packages/provenance test: --- packages/provenance test: duration_ms: 1.673691 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: # Subtest: observeNpuJob forwards parentSubagentId from options packages/provenance test: ok 8 - observeNpuJob forwards parentSubagentId from options packages/provenance test: --- packages/provenance test: duration_ms: 1.46146 packages/provenance test: type: 'test' packages/provenance test: ... packages/provenance test: 1..8 packages/provenance test: # tests 8 packages/provenance test: # suites 0 packages/provenance test: # pass 8 packages/provenance test: # fail 0 packages/provenance test: # cancelled 0 packages/provenance test: # skipped 0 packages/provenance test: # todo 0 packages/provenance test: # duration_ms 522.758967 packages/provenance test: Done packages/specialist test$ node --test dist/*.test.js packages/specialist test: TAP version 13 packages/specialist test: # Subtest: literature Specialist instructions require governed MCP retrieval packages/specialist test: ok 1 - literature Specialist instructions require governed MCP retrieval packages/specialist test: --- packages/specialist test: duration_ms: 0.933882 packages/specialist test: type: 'test' packages/specialist test: ... packages/specialist test: 1..1 packages/specialist test: # tests 1 packages/specialist test: # suites 0 packages/specialist test: # pass 1 packages/specialist test: # fail 0 packages/specialist test: # cancelled 0 packages/specialist test: # skipped 0 packages/specialist test: # todo 0 packages/specialist test: # duration_ms 62.386214 packages/specialist test: Done services/api test$ node --test dist/*.test.js dist/**/*.test.js services/api test: TAP version 13 services/api test: # (node:6262) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: completion is idempotent, scoped to its Agent, and retained until acknowledged services/api test: ok 1 - completion is idempotent, scoped to its Agent, and retained until acknowledged services/api test: --- services/api test: duration_ms: 5.49821 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a result the owner already read is marked read by source, leaving other records and owners unread services/api test: ok 2 - a result the owner already read is marked read by source, leaving other records and owners unread services/api test: --- services/api test: duration_ms: 2.263689 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stop invalidates a prepared delivery and cancels timers but retains completion records services/api test: ok 3 - stop invalidates a prepared delivery and cancels timers but retains completion records services/api test: --- services/api test: duration_ms: 2.566544 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stopping a child does not stop its parent or sibling; Session resume does not undo child stop services/api test: ok 4 - stopping a child does not stop its parent or sibling; Session resume does not undo child stop services/api test: --- services/api test: duration_ms: 1.595787 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: one-shot timers fire once and completion supersedes only its own pending reminder services/api test: ok 5 - one-shot timers fire once and completion supersedes only its own pending reminder services/api test: --- services/api test: duration_ms: 2.048414 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: archived Sessions fail closed even if a timer was created before an archive gate was written services/api test: ok 6 - archived Sessions fail closed even if a timer was created before an archive gate was written services/api test: --- services/api test: duration_ms: 1.343844 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: timer polling rollback cannot leave a fired timer without its notification services/api test: ok 7 - timer polling rollback cannot leave a fired timer without its notification services/api test: --- services/api test: duration_ms: 1.360302 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: timer ownership and bounded message/time/page validation services/api test: ok 8 - timer ownership and bounded message/time/page validation services/api test: --- services/api test: duration_ms: 1.563757 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a delayed user request cannot reopen a gate closed by a later Stop services/api test: ok 9 - a delayed user request cannot reopen a gate closed by a later Stop services/api test: --- services/api test: duration_ms: 1.028277 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: completion records, cancelled timers, and stop survive a database restart services/api test: ok 10 - completion records, cancelled timers, and stop survive a database restart services/api test: --- services/api test: duration_ms: 112.359043 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore archive closes the gate; restoring the Session retains records without auto-resume services/api test: ok 11 - SessionStore archive closes the gate; restoring the Session retains records without auto-resume services/api test: --- services/api test: duration_ms: 290.853111 services/api test: type: 'test' services/api test: ... services/api test: # (node:6275) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: createAgentRun forwards capability-package context factories through the composition root services/api test: ok 12 - createAgentRun forwards capability-package context factories through the composition root services/api test: --- services/api test: duration_ms: 1.373427 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: createAgentRun executes once and returns the canonical final history services/api test: ok 13 - createAgentRun executes once and returns the canonical final history services/api test: --- services/api test: duration_ms: 1.573294 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: createAgentRun forwards long gateway history without Node-side compaction services/api test: ok 14 - createAgentRun forwards long gateway history without Node-side compaction services/api test: --- services/api test: duration_ms: 0.605266 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: reviewer correction is a second AgentRun with explicit canonical history handoff services/api test: ok 15 - reviewer correction is a second AgentRun with explicit canonical history handoff services/api test: --- services/api test: duration_ms: 0.823875 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: request execution forwards external waits only to its active AgentRun services/api test: ok 16 - request execution forwards external waits only to its active AgentRun services/api test: --- services/api test: duration_ms: 0.593405 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runSubagentTask returns an unstarted handle visible before synchronous maxTurns events services/api test: ok 17 - runSubagentTask returns an unstarted handle visible before synchronous maxTurns events services/api test: --- services/api test: duration_ms: 0.484372 services/api test: type: 'test' services/api test: ... services/api test: # (node:6282) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: one-time timer binding validates time and execution ownership without execution or a write lease services/api test: ok 18 - one-time timer binding validates time and execution ownership without execution or a write lease services/api test: --- services/api test: duration_ms: 5.322707 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a terminal result returned to the model marks its completion notice read; a pending one does not services/api test: ok 19 - a terminal result returned to the model marks its completion notice read; a pending one does not services/api test: --- services/api test: duration_ms: 82.795324 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: execution_status, execution_logs and cancel deliver a terminal state per owner services/api test: ok 20 - execution_status, execution_logs and cancel deliver a terminal state per owner services/api test: --- services/api test: duration_ms: 108.475539 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Transfer binding exposes only owned Workspaces and rechecks Runner access after permission services/api test: ok 21 - Transfer binding exposes only owned Workspaces and rechecks Runner access after permission services/api test: --- services/api test: duration_ms: 0.989483 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: main and child execution bindings route by Runner ID and record isolated workspace ownership services/api test: ok 22 - main and child execution bindings route by Runner ID and record isolated workspace ownership services/api test: --- services/api test: duration_ms: 7.709392 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: main and child scientific environment operations use the selected Runner and recheck authorization services/api test: ok 23 - main and child scientific environment operations use the selected Runner and recheck authorization services/api test: --- services/api test: duration_ms: 2.193912 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: scientific executions forward the current outbound route and omit it for no-network epochs services/api test: ok 24 - scientific executions forward the current outbound route and omit it for no-network epochs services/api test: --- services/api test: duration_ms: 0.546173 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: environment install forwards the trusted workspace only from the Agent binding services/api test: ok 25 - environment install forwards the trusted workspace only from the Agent binding services/api test: --- services/api test: duration_ms: 0.775516 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: NPU broker bindings submit through Runner with permission and enforce Session ownership services/api test: ok 26 - NPU broker bindings submit through Runner with permission and enforce Session ownership services/api test: --- services/api test: duration_ms: 0.925517 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cards ticked for a Runner reach the Runner request of every execution kind services/api test: ok 27 - cards ticked for a Runner reach the Runner request of every execution kind services/api test: --- services/api test: duration_ms: 655.72272 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an unticked Runner sends no NPU field at all, leaving the sandbox unchanged services/api test: ok 28 - an unticked Runner sends no NPU field at all, leaving the sandbox unchanged services/api test: --- services/api test: duration_ms: 594.060505 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: clearing a Runner's cards stops them reaching the next execution services/api test: ok 29 - clearing a Runner's cards stops them reaching the next execution services/api test: --- services/api test: duration_ms: 206.498785 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: NPU broker bindings observe terminal jobs to the memory-graph recorder with the declared artifacts services/api test: ok 30 - NPU broker bindings observe terminal jobs to the memory-graph recorder with the declared artifacts services/api test: --- services/api test: duration_ms: 1.116044 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: NPU broker bindings omit observeNpuJob when the broker is disabled services/api test: ok 31 - NPU broker bindings omit observeNpuJob when the broker is disabled services/api test: --- services/api test: duration_ms: 0.204848 services/api test: type: 'test' services/api test: ... services/api test: # (node:6297) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Artifact logical deletion persists without removing source files or history services/api test: ok 32 - Artifact logical deletion persists without removing source files or history services/api test: --- services/api test: duration_ms: 128.901073 services/api test: type: 'test' services/api test: ... services/api test: # (node:6310) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: artifact provenance resolves process environment for store and graph paths services/api test: ok 33 - artifact provenance resolves process environment for store and graph paths services/api test: --- services/api test: duration_ms: 3.734657 services/api test: type: 'test' services/api test: ... services/api test: # (node:6319) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: each run's result artifact gets its own name and does not merge across runs services/api test: ok 34 - each run's result artifact gets its own name and does not merge across runs services/api test: --- services/api test: duration_ms: 1.115444 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a text goal and an invalid entrypoint path each land somewhere of their own services/api test: ok 35 - a text goal and an invalid entrypoint path each land somewhere of their own services/api test: --- services/api test: duration_ms: 0.190973 services/api test: type: 'test' services/api test: ... services/api test: # (node:6330) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: SessionStore seeds all built-in specialists on first load services/api test: ok 36 - SessionStore seeds all built-in specialists on first load services/api test: --- services/api test: duration_ms: 102.438412 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: built-in specialists cannot be deleted services/api test: ok 37 - built-in specialists cannot be deleted services/api test: --- services/api test: duration_ms: 94.978003 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: built-in specialist enabled toggle persists and survives reload services/api test: ok 38 - built-in specialist enabled toggle persists and survives reload services/api test: --- services/api test: duration_ms: 74.323577 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: built-in specialist core fields are read-only; only enabled can change services/api test: ok 39 - built-in specialist core fields are read-only; only enabled can change services/api test: --- services/api test: duration_ms: 72.056271 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: enabled defaults to enabled when the key is absent (backward compat) services/api test: ok 40 - enabled defaults to enabled when the key is absent (backward compat) services/api test: --- services/api test: duration_ms: 78.595033 services/api test: type: 'test' services/api test: ... services/api test: # (node:6343) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: dashboard context labels stay empty until label fields are implemented services/api test: ok 41 - dashboard context labels stay empty until label fields are implemented services/api test: --- services/api test: duration_ms: 124.580127 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dashboard aggregates artifact list, version list, latestVersionId, and hasParents services/api test: ok 42 - dashboard aggregates artifact list, version list, latestVersionId, and hasParents services/api test: --- services/api test: duration_ms: 261.610438 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dashboard latestVersionId is undefined for legacy artifact with no versions recorded services/api test: ok 43 - dashboard latestVersionId is undefined for legacy artifact with no versions recorded services/api test: --- services/api test: duration_ms: 108.130898 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: notebook preview stays read-only services/api test: ok 44 - notebook preview stays read-only services/api test: --- services/api test: duration_ms: 138.534905 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: notebook preview truncates to maxCells services/api test: ok 45 - notebook preview truncates to maxCells services/api test: --- services/api test: duration_ms: 157.297676 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: markdown preview truncates to maxChars services/api test: ok 46 - markdown preview truncates to maxChars services/api test: --- services/api test: duration_ms: 140.391368 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dataset preview parses csv tables and truncates rows services/api test: ok 47 - dataset preview parses csv tables and truncates rows services/api test: --- services/api test: duration_ms: 117.595595 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: json preview keeps the dataset table for record arrays services/api test: ok 48 - json preview keeps the dataset table for record arrays services/api test: --- services/api test: duration_ms: 148.854791 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a tabular json preview also carries the formatted source document for the raw view services/api test: ok 49 - a tabular json preview also carries the formatted source document for the raw view services/api test: --- services/api test: duration_ms: 141.986243 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a csv dataset preview carries no rawJson, so no raw-JSON view is offered services/api test: ok 50 - a csv dataset preview carries no rawJson, so no raw-JSON view is offered services/api test: --- services/api test: duration_ms: 189.448706 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: rawJson honours the maxChars budget independently of the row budget services/api test: ok 51 - rawJson honours the maxChars budget independently of the row budget services/api test: --- services/api test: duration_ms: 135.774468 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: json preview returns formatted JSON for a plain object instead of an empty table services/api test: ok 52 - json preview returns formatted JSON for a plain object instead of an empty table services/api test: --- services/api test: duration_ms: 135.735325 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: json preview returns json-source for arrays that are not record arrays services/api test: ok 53 - json preview returns json-source for arrays that are not record arrays services/api test: --- services/api test: duration_ms: 213.834706 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: json preview falls back to the raw text when the document does not parse services/api test: ok 54 - json preview falls back to the raw text when the document does not parse services/api test: --- services/api test: duration_ms: 123.837857 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: json preview truncates long documents by maxChars services/api test: ok 55 - json preview truncates long documents by maxChars services/api test: --- services/api test: duration_ms: 110.856992 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a .json artifact declared as a dataset still shows content when it has no rows services/api test: ok 56 - a .json artifact declared as a dataset still shows content when it has no rows services/api test: --- services/api test: duration_ms: 138.418463 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: legacy .json catalog entries stored as dataset load as json and accept new versions services/api test: ok 57 - legacy .json catalog entries stored as dataset load as json and accept new versions services/api test: --- services/api test: duration_ms: 170.227526 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dataset preview falls back to binary for parquet without parsing library services/api test: ok 58 - dataset preview falls back to binary for parquet without parsing library services/api test: --- services/api test: duration_ms: 141.57365 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: structure preview counts PDB ATOM/HETATM records services/api test: ok 59 - structure preview counts PDB ATOM/HETATM records services/api test: --- services/api test: duration_ms: 138.203943 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: structure preview counts atoms in the .structure.json atom bag services/api test: ok 60 - structure preview counts atoms in the .structure.json atom bag services/api test: --- services/api test: duration_ms: 166.398457 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: figure preview surfaces the content URL without reading CAS bytes services/api test: ok 61 - figure preview surfaces the content URL without reading CAS bytes services/api test: --- services/api test: duration_ms: 123.202426 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: report and html previews return sandbox iframe content URLs services/api test: ok 62 - report and html previews return sandbox iframe content URLs services/api test: --- services/api test: duration_ms: 159.205948 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: latex preview returns the raw source so the frontend reuses latexPreview services/api test: ok 63 - latex preview returns the raw source so the frontend reuses latexPreview services/api test: --- services/api test: duration_ms: 120.536419 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: preview throws ARTIFACT_NOT_FOUND for unknown version ids services/api test: ok 64 - preview throws ARTIFACT_NOT_FOUND for unknown version ids services/api test: --- services/api test: duration_ms: 90.162355 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: preview throws ARTIFACT_CONTENT_UNAVAILABLE when the CAS blob is missing services/api test: ok 65 - preview throws ARTIFACT_CONTENT_UNAVAILABLE when the CAS blob is missing services/api test: --- services/api test: duration_ms: 86.994786 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dashboard and preview endpoints reject unauthenticated callers services/api test: ok 66 - dashboard and preview endpoints reject unauthenticated callers services/api test: --- services/api test: duration_ms: 382.149385 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dashboard endpoint returns 404 for unknown session and 200 with payload for known one services/api test: ok 67 - dashboard endpoint returns 404 for unknown session and 200 with payload for known one services/api test: --- services/api test: duration_ms: 349.182516 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: preview endpoint returns 404 for unknown version and 200 with routed payload services/api test: ok 68 - preview endpoint returns 404 for unknown version and 200 with routed payload services/api test: --- services/api test: duration_ms: 281.752069 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: preview endpoint serves a plain .json artifact as json content, not a dataset table services/api test: ok 69 - preview endpoint serves a plain .json artifact as json content, not a dataset table services/api test: --- services/api test: duration_ms: 270.801226 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: preview endpoint cross-session access returns 404 services/api test: ok 70 - preview endpoint cross-session access returns 404 services/api test: --- services/api test: duration_ms: 329.623766 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: preview endpoint returns 422 when the CAS blob is missing services/api test: ok 71 - preview endpoint returns 422 when the CAS blob is missing services/api test: --- services/api test: duration_ms: 256.687829 services/api test: type: 'test' services/api test: ... services/api test: # (node:6360) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: environment source settings preserve upstream compatibility and validate presets services/api test: ok 72 - environment source settings preserve upstream compatibility and validate presets services/api test: --- services/api test: duration_ms: 2.311538 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: install source resolution applies global mirrors and one-time pip override services/api test: ok 73 - install source resolution applies global mirrors and one-time pip override services/api test: --- services/api test: duration_ms: 0.650155 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: install source resolution rejects cross-manager and injectable source inputs services/api test: ok 74 - install source resolution rejects cross-manager and injectable source inputs services/api test: --- services/api test: duration_ms: 0.464819 services/api test: type: 'test' services/api test: ... services/api test: # (node:6369) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: system environment revisions follow the selected native sandbox services/api test: ok 75 - system environment revisions follow the selected native sandbox services/api test: --- services/api test: duration_ms: 0.88297 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: macOS package specs use executable paths that exist on macOS services/api test: ok 76 - macOS package specs use executable paths that exist on macOS # SKIP services/api test: --- services/api test: duration_ms: 0.138262 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a candidate is found by the hash the event stream carries services/api test: ok 77 - a candidate is found by the hash the event stream carries services/api test: --- services/api test: duration_ms: 13.082257 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a hash that is not a hash cannot reach the filesystem services/api test: ok 78 - a hash that is not a hash cannot reach the filesystem services/api test: --- services/api test: duration_ms: 2.352351 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a hash this run never wrote is absent, not an error services/api test: ok 79 - a hash this run never wrote is absent, not an error services/api test: --- services/api test: duration_ms: 4.597169 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: nothing measured was trained on services/api test: ok 80 - nothing measured was trained on services/api test: --- services/api test: duration_ms: 1.596798 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the same seed stages the same split services/api test: ok 81 - the same seed stages the same split services/api test: --- services/api test: duration_ms: 1.215271 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the shuffle is a permutation, not a sample services/api test: ok 82 - the shuffle is a permutation, not a sample services/api test: --- services/api test: duration_ms: 0.486665 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: roles are assigned in the order the scorecard asked for services/api test: ok 83 - roles are assigned in the order the scorecard asked for services/api test: --- services/api test: duration_ms: 0.220041 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a dataset too small for the requested shards is refused with the numbers services/api test: ok 84 - a dataset too small for the requested shards is refused with the numbers services/api test: --- services/api test: duration_ms: 0.626494 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a split that could not fit any dataset is caught without one services/api test: ok 85 - a split that could not fit any dataset is caught without one services/api test: --- services/api test: duration_ms: 0.159055 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an explicit train size is honoured and still leaves the shards room services/api test: ok 86 - an explicit train size is honoured and still leaves the shards room services/api test: --- services/api test: duration_ms: 0.266756 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a quoted field survives the round trip services/api test: ok 87 - a quoted field survives the round trip services/api test: --- services/api test: duration_ms: 0.548085 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a trailing newline is not a row services/api test: ok 88 - a trailing newline is not a row services/api test: --- services/api test: duration_ms: 0.353667 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a cas ref is accepted with or without its algorithm prefix services/api test: ok 89 - a cas ref is accepted with or without its algorithm prefix services/api test: --- services/api test: duration_ms: 1.823772 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the candidate is given the features and never the answer services/api test: ok 90 - the candidate is given the features and never the answer services/api test: --- services/api test: duration_ms: 28.435253 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the manifest names every shard and its role services/api test: ok 91 - the manifest names every shard and its role services/api test: --- services/api test: duration_ms: 10.096431 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a criterion measured on time needs no dataset staged services/api test: ok 92 - a criterion measured on time needs no dataset staged services/api test: --- services/api test: duration_ms: 6.300136 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a target column that is not in the file is refused by name services/api test: ok 93 - a target column that is not in the file is refused by name services/api test: --- services/api test: duration_ms: 6.871762 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a non-numeric target value is refused rather than staged as NaN services/api test: ok 94 - a non-numeric target value is refused rather than staged as NaN services/api test: --- services/api test: duration_ms: 9.240432 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a dataset that is not in the store is named, not swallowed services/api test: ok 95 - a dataset that is not in the store is named, not swallowed services/api test: --- services/api test: duration_ms: 5.500715 services/api test: type: 'test' services/api test: ... services/api test: # (node:6400) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: a terminal event flushes the buffer immediately services/api test: ok 96 - a terminal event flushes the buffer immediately services/api test: --- services/api test: duration_ms: 40.110679 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a partial batch is flushed by the timer services/api test: ok 97 - a partial batch is flushed by the timer services/api test: --- services/api test: duration_ms: 267.54549 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a full buffer flushes without waiting for the timer services/api test: ok 98 - a full buffer flushes without waiting for the timer services/api test: --- services/api test: duration_ms: 22.865004 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the feature being off leaves no trace at all services/api test: ok 99 - the feature being off leaves no trace at all services/api test: --- services/api test: duration_ms: 61.460241 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a graph that refuses the write never reaches the run services/api test: ok 100 - a graph that refuses the write never reaches the run services/api test: --- services/api test: duration_ms: 63.230286 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an unreachable graph never reaches the run either services/api test: ok 101 - an unreachable graph never reaches the run either services/api test: --- services/api test: duration_ms: 61.76801 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: flushing a search with nothing buffered is a no-op services/api test: ok 102 - flushing a search with nothing buffered is a no-op services/api test: --- services/api test: duration_ms: 60.677622 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the SubTask id keeps the prefix the temporal chain selects on services/api test: ok 103 - the SubTask id keeps the prefix the temporal chain selects on services/api test: --- services/api test: duration_ms: 0.238372 services/api test: type: 'test' services/api test: ... services/api test: # (node:6409) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: a run token buys exactly one run's completions and nothing else services/api test: ok 104 - a run token buys exactly one run's completions and nothing else services/api test: --- services/api test: duration_ms: 57.870506 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: no token, a wrong token and a revoked token are the same answer services/api test: ok 105 - no token, a wrong token and a revoked token are the same answer services/api test: --- services/api test: duration_ms: 36.830911 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the caller cannot choose the model it is billed for services/api test: ok 106 - the caller cannot choose the model it is billed for services/api test: --- services/api test: duration_ms: 16.398554 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a provider that reports no usage is recorded as unknown, not as zero services/api test: ok 107 - a provider that reports no usage is recorded as unknown, not as zero services/api test: --- services/api test: duration_ms: 7.274654 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the provider's own error is forwarded rather than flattened services/api test: ok 108 - the provider's own error is forwarded rather than flattened services/api test: --- services/api test: duration_ms: 21.803734 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run whose model has no key fails loudly instead of silently services/api test: ok 109 - a run whose model has no key fails loudly instead of silently services/api test: --- services/api test: duration_ms: 13.774068 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an unreachable provider is a gateway failure, not a crash services/api test: ok 110 - an unreachable provider is a gateway failure, not a crash services/api test: --- services/api test: duration_ms: 17.453476 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an empty request is refused before the provider is called services/api test: ok 111 - an empty request is refused before the provider is called services/api test: --- services/api test: duration_ms: 17.813266 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a completion that was already paid for survives a bookkeeping failure services/api test: ok 112 - a completion that was already paid for survives a bookkeeping failure services/api test: --- services/api test: duration_ms: 24.987675 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the caller's thinking setting reaches the provider, unlike its model services/api test: ok 113 - the caller's thinking setting reaches the provider, unlike its model services/api test: --- services/api test: duration_ms: 13.174058 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a caller that says nothing about thinking has nothing added services/api test: ok 114 - a caller that says nothing about thinking has nothing added services/api test: --- services/api test: duration_ms: 7.251208 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run's two models get two tokens, and neither buys the other services/api test: ok 115 - a run's two models get two tokens, and neither buys the other services/api test: --- services/api test: duration_ms: 0.246131 services/api test: type: 'test' services/api test: ... services/api test: # (node:6418) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: test-gated Evolution stages the committed Workspace while an execution is writing services/api test: ok 116 - test-gated Evolution stages the committed Workspace while an execution is writing services/api test: --- services/api test: duration_ms: 325.848432 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a full run is persisted, published and settled services/api test: ok 117 - a full run is persisted, published and settled services/api test: --- services/api test: duration_ms: 42.517478 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stop is carried through to the sidecar and leaves a resumable watermark services/api test: ok 118 - stop is carried through to the sidecar and leaves a resumable watermark services/api test: --- services/api test: duration_ms: 44.618977 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a stream that ends without a terminal event fails the run rather than hanging services/api test: ok 119 - a stream that ends without a terminal event fails the run rather than hanging services/api test: --- services/api test: duration_ms: 33.245531 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an unreachable sidecar fails the run with a readable error services/api test: ok 120 - an unreachable sidecar fails the run with a readable error services/api test: --- services/api test: duration_ms: 16.238465 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a refused run surfaces the sidecar's status services/api test: ok 121 - a refused run surfaces the sidecar's status services/api test: --- services/api test: duration_ms: 25.867615 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a replayed record is neither re-logged nor re-published services/api test: ok 122 - a replayed record is neither re-logged nor re-published services/api test: --- services/api test: duration_ms: 44.463852 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runs left running by a previous process are settled at boot services/api test: ok 123 - runs left running by a previous process are settled at boot services/api test: --- services/api test: duration_ms: 39.540788 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a token gate trips the run and says which budget ran out services/api test: ok 124 - a token gate trips the run and says which budget ran out services/api test: --- services/api test: duration_ms: 61.500339 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a cost gate trips the run services/api test: ok 125 - a cost gate trips the run services/api test: --- services/api test: duration_ms: 39.187529 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a wall-clock gate trips a search that has gone quiet services/api test: ok 126 - a wall-clock gate trips a search that has gone quiet services/api test: --- services/api test: duration_ms: 174.768038 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run inside its budget is untouched services/api test: ok 127 - a run inside its budget is untouched services/api test: --- services/api test: duration_ms: 14.657416 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a user stop is still reported as a stop, not as a budget services/api test: ok 128 - a user stop is still reported as a stop, not as a budget services/api test: --- services/api test: duration_ms: 29.347145 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the sidecar is told what to grade with, not only what the scorecard is called services/api test: ok 129 - the sidecar is told what to grade with, not only what the scorecard is called services/api test: --- services/api test: duration_ms: 15.02325 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the model proxy URL the sidecar is handed is absolute services/api test: ok 130 - the model proxy URL the sidecar is handed is absolute services/api test: --- services/api test: duration_ms: 14.81723 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a measured run is staged before the sidecar is asked to start services/api test: ok 131 - a measured run is staged before the sidecar is asked to start services/api test: --- services/api test: duration_ms: 28.360283 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run whose dataset cannot be staged fails with the reason on the record services/api test: ok 132 - a run whose dataset cannot be staged fails with the reason on the record services/api test: --- services/api test: duration_ms: 15.428632 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run that dies before the sidecar answers still tells its subscribers services/api test: ok 133 - a run that dies before the sidecar answers still tells its subscribers services/api test: --- services/api test: duration_ms: 5.141338 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the search tuning reaches the sidecar, renamed into its options bag services/api test: ok 134 - the search tuning reaches the sidecar, renamed into its options bag services/api test: --- services/api test: duration_ms: 25.943469 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a prior exponent of zero is sent, not dropped as a default services/api test: ok 135 - a prior exponent of zero is sent, not dropped as a default services/api test: --- services/api test: duration_ms: 25.973608 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a judged run is sent a rubric and its own model token, and no dataset services/api test: ok 136 - a judged run is sent a rubric and its own model token, and no dataset services/api test: --- services/api test: duration_ms: 24.804244 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a finished run hands its winner to whatever saves results services/api test: ok 137 - a finished run hands its winner to whatever saves results services/api test: --- services/api test: duration_ms: 16.268578 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: nothing is published when the seed won services/api test: ok 138 - nothing is published when the seed won services/api test: --- services/api test: duration_ms: 14.523281 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run that settled stays settled when publishing throws services/api test: ok 139 - a run that settled stays settled when publishing throws services/api test: --- services/api test: duration_ms: 14.652388 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an interrupted PUCT run is not told it can resume services/api test: ok 140 - an interrupted PUCT run is not told it can resume services/api test: --- services/api test: duration_ms: 4.009732 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a well-formed run passes services/api test: ok 141 - a well-formed run passes services/api test: --- services/api test: duration_ms: 2.48225 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the token floor follows the thinking setting, not just the algorithm services/api test: ok 142 - the token floor follows the thinking setting, not just the algorithm services/api test: --- services/api test: duration_ms: 0.941445 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a refused ceiling offers turning thinking off as the other way out services/api test: ok 143 - a refused ceiling offers turning thinking off as the other way out services/api test: --- services/api test: duration_ms: 0.329738 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: expansions that do not divide by workers are refused services/api test: ok 144 - expansions that do not divide by workers are refused services/api test: --- services/api test: duration_ms: 0.450959 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run with no isolation is refused rather than run unconfined services/api test: ok 145 - a run with no isolation is refused rather than run unconfined services/api test: --- services/api test: duration_ms: 0.279455 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a model that cannot be called is caught before the run exists services/api test: ok 146 - a model that cannot be called is caught before the run exists services/api test: --- services/api test: duration_ms: 1.123524 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a held-out set too small to decide anything is refused services/api test: ok 147 - a held-out set too small to decide anything is refused services/api test: --- services/api test: duration_ms: 0.325101 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a scorecard the search cannot steer by is refused services/api test: ok 148 - a scorecard the search cannot steer by is refused services/api test: --- services/api test: duration_ms: 0.234051 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a dataset that is not in the store is caught before the run exists services/api test: ok 149 - a dataset that is not in the store is caught before the run exists services/api test: --- services/api test: duration_ms: 0.490897 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a criterion that does not say what to predict is refused services/api test: ok 150 - a criterion that does not say what to predict is refused services/api test: --- services/api test: duration_ms: 0.509441 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a split that could not fit any dataset is refused before one is read services/api test: ok 151 - a split that could not fit any dataset is refused before one is read services/api test: --- services/api test: duration_ms: 0.255742 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: every refusal says what to change services/api test: ok 152 - every refusal says what to change services/api test: --- services/api test: duration_ms: 0.217969 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a judged run needs no sandbox and no dataset services/api test: ok 153 - a judged run needs no sandbox and no dataset services/api test: --- services/api test: duration_ms: 0.248922 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a judged scorecard's own requirements are checked services/api test: ok 154 - a judged scorecard's own requirements are checked services/api test: --- services/api test: duration_ms: 0.291113 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a test-gated scorecard must freeze the tests it is scored by services/api test: ok 155 - a test-gated scorecard must freeze the tests it is scored by services/api test: --- services/api test: duration_ms: 0.389832 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a coherent proposal becomes a run, and the probe's numbers come back with it services/api test: ok 156 - a coherent proposal becomes a run, and the probe's numbers come back with it services/api test: --- services/api test: duration_ms: 2.952465 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the probe's own verdict reaches the agent unwrapped services/api test: ok 157 - the probe's own verdict reaches the agent unwrapped services/api test: --- services/api test: duration_ms: 0.585238 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a probe that genuinely could not run is reported as the incident it is services/api test: ok 158 - a probe that genuinely could not run is reported as the incident it is services/api test: --- services/api test: duration_ms: 0.398787 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a flat scoring is refused with the numbers that make the refusal checkable services/api test: ok 159 - a flat scoring is refused with the numbers that make the refusal checkable services/api test: --- services/api test: duration_ms: 0.452289 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a refusal names what to change, because its reader is the designer services/api test: ok 160 - a refusal names what to change, because its reader is the designer services/api test: --- services/api test: duration_ms: 0.490812 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: nothing is stored until the shape is known good services/api test: ok 161 - nothing is stored until the shape is known good services/api test: --- services/api test: duration_ms: 0.764959 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the scoring definition is frozen, whichever language it is written in services/api test: ok 162 - the scoring definition is frozen, whichever language it is written in services/api test: --- services/api test: duration_ms: 0.872392 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run that learned nothing says so, rather than reporting a status services/api test: ok 163 - a run that learned nothing says so, rather than reporting a status services/api test: --- services/api test: duration_ms: 0.333832 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run that stopped a third of the way in says so services/api test: ok 164 - a run that stopped a third of the way in says so services/api test: --- services/api test: duration_ms: 0.41709 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run that spent its plan says nothing about it services/api test: ok 165 - a run that spent its plan says nothing about it services/api test: --- services/api test: duration_ms: 0.463022 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the summary quotes the split the search never saw services/api test: ok 166 - the summary quotes the split the search never saw services/api test: --- services/api test: duration_ms: 0.315175 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a workspace-absolute path is accepted, because that is what the agent saw services/api test: ok 167 - a workspace-absolute path is accepted, because that is what the agent saw services/api test: --- services/api test: duration_ms: 0.320787 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a path that cannot be read names the field it came from services/api test: ok 168 - a path that cannot be read names the field it came from services/api test: --- services/api test: duration_ms: 0.327215 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a rollout too thin to compare on is refused services/api test: ok 169 - a rollout too thin to compare on is refused services/api test: --- services/api test: duration_ms: 0.144326 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a gate smaller than the rollout is refused services/api test: ok 170 - a gate smaller than the rollout is refused services/api test: --- services/api test: duration_ms: 0.147919 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a rollout at the floor is accepted services/api test: ok 171 - a rollout at the floor is accepted services/api test: --- services/api test: duration_ms: 0.381923 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the summary names the winner the engine picked, and only once it has finished services/api test: ok 172 - the summary names the winner the engine picked, and only once it has finished services/api test: --- services/api test: duration_ms: 0.283315 services/api test: type: 'test' services/api test: ... services/api test: # (node:6447) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: a run created over HTTP streams its whole sequence as SSE services/api test: ok 173 - a run created over HTTP streams its whole sequence as SSE services/api test: --- services/api test: duration_ms: 131.882363 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the same events are readable as JSON, and resumable with ?after= services/api test: ok 174 - the same events are readable as JSON, and resumable with ?after= services/api test: --- services/api test: duration_ms: 112.271023 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run is listable by the session it belongs to services/api test: ok 175 - a run is listable by the session it belongs to services/api test: --- services/api test: duration_ms: 100.133653 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an unknown run 404s, and an id that could escape the data dir does too services/api test: ok 176 - an unknown run 404s, and an id that could escape the data dir does too services/api test: --- services/api test: duration_ms: 10.279064 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a candidate's source is served by hash, and anything else is a 404 services/api test: ok 177 - a candidate's source is served by hash, and anything else is a 404 services/api test: --- services/api test: duration_ms: 27.58988 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the probe names the binary it probed, not a name to look up again services/api test: ok 178 - the probe names the binary it probed, not a name to look up again services/api test: --- services/api test: duration_ms: 23.353491 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a configured absolute path is passed through untouched services/api test: ok 179 - a configured absolute path is passed through untouched services/api test: --- services/api test: duration_ms: 5.316903 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: every normalisation produces higher-is-better services/api test: ok 180 - every normalisation produces higher-is-better services/api test: --- services/api test: duration_ms: 1.301292 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: normalisation is bounded and survives junk input services/api test: ok 181 - normalisation is bounded and survives junk input services/api test: --- services/api test: duration_ms: 0.27328 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: relative_to_baseline reads the baseline it is given, and nothing else services/api test: ok 182 - relative_to_baseline reads the baseline it is given, and nothing else services/api test: --- services/api test: duration_ms: 0.157291 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: beating the baseline keeps improving the score instead of pinning it at 1 services/api test: ok 183 - beating the baseline keeps improving the score instead of pinning it at 1 services/api test: --- services/api test: duration_ms: 0.282735 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: weights are used as fractions of their sum services/api test: ok 184 - weights are used as fractions of their sum services/api test: --- services/api test: duration_ms: 0.384662 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a geometric mean is dragged to zero by one weak dimension, a sum is not services/api test: ok 185 - a geometric mean is dragged to zero by one weak dimension, a sum is not services/api test: --- services/api test: duration_ms: 0.203607 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a violating candidate keeps its score — the refusal travels beside it services/api test: ok 186 - a violating candidate keeps its score — the refusal travels beside it services/api test: --- services/api test: duration_ms: 0.573681 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a constraint can be stated relative to the baseline services/api test: ok 187 - a constraint can be stated relative to the baseline services/api test: --- services/api test: duration_ms: 0.19127 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an unmeasured criterion neither violates nor silently passes services/api test: ok 188 - an unmeasured criterion neither violates nor silently passes services/api test: --- services/api test: duration_ms: 0.816323 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a direction the normalisation cannot express is refused services/api test: ok 189 - a direction the normalisation cannot express is refused services/api test: --- services/api test: duration_ms: 0.585912 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: structural problems are reported before anything is measured services/api test: ok 190 - structural problems are reported before anything is measured services/api test: --- services/api test: duration_ms: 0.333797 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: weights that do not sum to 1 are a warning, not a refusal services/api test: ok 191 - weights that do not sum to 1 are a warning, not a refusal services/api test: --- services/api test: duration_ms: 0.184079 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a criterion that cannot be measured on the baseline blocks the run services/api test: ok 192 - a criterion that cannot be measured on the baseline blocks the run services/api test: --- services/api test: duration_ms: 0.171233 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a baseline that already violates a constraint blocks the run services/api test: ok 193 - a baseline that already violates a constraint blocks the run services/api test: --- services/api test: duration_ms: 0.27497 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a card that cannot separate the baseline from a worse variant blocks the run services/api test: ok 194 - a card that cannot separate the baseline from a worse variant blocks the run services/api test: --- services/api test: duration_ms: 1.586809 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a card with real discrimination passes services/api test: ok 195 - a card with real discrimination passes services/api test: --- services/api test: duration_ms: 0.227733 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: this implementation still matches the fixture the sidecar asserts against services/api test: ok 196 - this implementation still matches the fixture the sidecar asserts against services/api test: --- services/api test: duration_ms: 25.105873 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a normalisation nobody implements is an error, not a crash services/api test: ok 197 - a normalisation nobody implements is an error, not a crash services/api test: --- services/api test: duration_ms: 0.251904 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a record split across chunk boundaries is not lost services/api test: ok 198 - a record split across chunk boundaries is not lost services/api test: --- services/api test: duration_ms: 4.458972 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: one byte at a time still yields whole records services/api test: ok 199 - one byte at a time still yields whole records services/api test: --- services/api test: duration_ms: 3.258576 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a malformed line is skipped and reported, the rest survive services/api test: ok 200 - a malformed line is skipped and reported, the rest survive services/api test: --- services/api test: duration_ms: 0.46845 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a record that is not an event is skipped services/api test: ok 201 - a record that is not an event is skipped services/api test: --- services/api test: duration_ms: 0.32538 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a torn trailing line is dropped rather than parsed services/api test: ok 202 - a torn trailing line is dropped rather than parsed services/api test: --- services/api test: duration_ms: 0.506449 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a keep-alive keeps the socket warm without becoming a record services/api test: ok 203 - a keep-alive keeps the socket warm without becoming a record services/api test: --- services/api test: duration_ms: 0.336109 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a sidecar refusal reaches the user as its sentence, not as a response body services/api test: ok 204 - a sidecar refusal reaches the user as its sentence, not as a response body services/api test: --- services/api test: duration_ms: 20.864775 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an older handler's bare string detail reads the same way services/api test: ok 205 - an older handler's bare string detail reads the same way services/api test: --- services/api test: duration_ms: 0.397339 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a body that is not the shape we expect still says something services/api test: ok 206 - a body that is not the shape we expect still says something services/api test: --- services/api test: duration_ms: 0.986803 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: initialize creates every subdirectory and is idempotent services/api test: ok 207 - initialize creates every subdirectory and is idempotent services/api test: --- services/api test: duration_ms: 8.39042 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a run stored under the old algorithm name still reads back services/api test: ok 208 - a run stored under the old algorithm name still reads back services/api test: --- services/api test: duration_ms: 6.354841 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a created run round-trips and starts at the zero watermark services/api test: ok 209 - a created run round-trips and starts at the zero watermark services/api test: --- services/api test: duration_ms: 4.603597 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: listRuns filters by session and returns newest first services/api test: ok 210 - listRuns filters by session and returns newest first services/api test: --- services/api test: duration_ms: 38.248366 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: replaying the same batch is a no-op: the log and the watermark do not move services/api test: ok 211 - replaying the same batch is a no-op: the log and the watermark do not move services/api test: --- services/api test: duration_ms: 6.18311 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a partially replayed batch keeps only the records past the watermark services/api test: ok 212 - a partially replayed batch keeps only the records past the watermark services/api test: --- services/api test: duration_ms: 7.97693 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a torn tail is skipped without losing the events before it services/api test: ok 213 - a torn tail is skipped without losing the events before it services/api test: --- services/api test: duration_ms: 6.618723 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: parseEventLines drops records that are not events services/api test: ok 214 - parseEventLines drops records that are not events services/api test: --- services/api test: duration_ms: 0.303413 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: concurrent appends and patches do not lose each other's fields services/api test: ok 215 - concurrent appends and patches do not lose each other's fields services/api test: --- services/api test: duration_ms: 11.565531 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: finishRun stamps a terminal status and refuses an active one services/api test: ok 216 - finishRun stamps a terminal status and refuses an active one services/api test: --- services/api test: duration_ms: 14.74377 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run ids that could escape the data directory are refused services/api test: ok 217 - run ids that could escape the data directory are refused services/api test: --- services/api test: duration_ms: 2.369485 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: deleteRun removes the run, its log, its ledger and its results services/api test: ok 218 - deleteRun removes the run, its log, its ledger and its results services/api test: --- services/api test: duration_ms: 16.907056 services/api test: type: 'test' services/api test: ... services/api test: # (node:6506) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Evolution file input uses committed bytes during a write and remains readable by the legacy CAS facade services/api test: ok 219 - Evolution file input uses committed bytes during a write and remains readable by the legacy CAS facade services/api test: --- services/api test: duration_ms: 281.452468 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-021 exchange rates are fetched, cached and reused while fresh services/api test: ok 220 - USG-021 exchange rates are fetched, cached and reused while fresh services/api test: --- services/api test: duration_ms: 99.833199 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-022 exchange rates fall back to stale cache when refresh fails services/api test: ok 221 - USG-022 exchange rates fall back to stale cache when refresh fails services/api test: --- services/api test: duration_ms: 8.42166 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-023 exchange rates can be disabled services/api test: ok 222 - USG-023 exchange rates can be disabled services/api test: --- services/api test: duration_ms: 0.472006 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-024 exchange rates label custom sources by host services/api test: ok 223 - USG-024 exchange rates label custom sources by host services/api test: --- services/api test: duration_ms: 7.622651 services/api test: type: 'test' services/api test: ... services/api test: # (node:6528) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: a first start generates a high-entropy token and persists it privately services/api test: ok 224 - a first start generates a high-entropy token and persists it privately services/api test: --- services/api test: duration_ms: 29.687812 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: two installations never share a token services/api test: ok 225 - two installations never share a token services/api test: --- services/api test: duration_ms: 3.395754 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a restart reuses the stored token instead of generating another services/api test: ok 226 - a restart reuses the stored token instead of generating another services/api test: --- services/api test: duration_ms: 1.746622 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: each credential is stored separately services/api test: ok 227 - each credential is stored separately services/api test: --- services/api test: duration_ms: 2.184197 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an explicit token wins and is never written to disk services/api test: ok 228 - an explicit token wins and is never written to disk services/api test: --- services/api test: duration_ms: 2.807479 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an explicit token overrides a token already stored services/api test: ok 229 - an explicit token overrides a token already stored services/api test: --- services/api test: duration_ms: 1.785362 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a blank stored token is replaced rather than used as a credential services/api test: ok 230 - a blank stored token is replaced rather than used as a credential services/api test: --- services/api test: duration_ms: 2.455514 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the server configuration carries no fixed default credential services/api test: ok 231 - the server configuration carries no fixed default credential services/api test: --- services/api test: duration_ms: 2.233591 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: explicit environment tokens keep their existing meaning services/api test: ok 232 - explicit environment tokens keep their existing meaning services/api test: --- services/api test: duration_ms: 1.405942 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: startup output offers sign-in links for generated and operator-supplied tokens services/api test: ok 233 - startup output offers sign-in links for generated and operator-supplied tokens services/api test: --- services/api test: duration_ms: 1.825917 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: startup link formats the bind address 0.0.0.0 services/api test: ok 234 - startup link formats the bind address 0.0.0.0 services/api test: --- services/api test: duration_ms: 0.295313 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: startup link formats the bind address :: services/api test: ok 235 - startup link formats the bind address :: services/api test: --- services/api test: duration_ms: 0.132187 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: startup link formats the bind address ::1 services/api test: ok 236 - startup link formats the bind address ::1 services/api test: --- services/api test: duration_ms: 0.234914 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: keeps known validation failures at 400 without hiding internal faults services/api test: ok 237 - keeps known validation failures at 400 without hiding internal faults services/api test: --- services/api test: duration_ms: 1.539057 services/api test: type: 'test' services/api test: ... services/api test: # (node:6546) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: CAS resolver verifies exact Session, completed producer, content, and executor without restricting Workflow roles services/api test: ok 238 - CAS resolver verifies exact Session, completed producer, content, and executor without restricting Workflow roles services/api test: --- services/api test: duration_ms: 244.489757 services/api test: type: 'test' services/api test: ... services/api test: # (node:6559) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: the built-in workflow needs no metadata and still requires its Result Authority services/api test: ok 239 - the built-in workflow needs no metadata and still requires its Result Authority services/api test: --- services/api test: duration_ms: 63.679348 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: saved role prompts and rubrics reach the correct execution instructions services/api test: ok 240 - saved role prompts and rubrics reach the correct execution instructions services/api test: --- services/api test: duration_ms: 1.355112 services/api test: type: 'test' services/api test: ... services/api test: # (node:6579) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: standard queued runs freeze standard mode without creating Idea Tree state services/api test: ok 241 - standard queued runs freeze standard mode without creating Idea Tree state services/api test: --- services/api test: duration_ms: 174.869657 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: both Idea Tree commands queue Lead preparation without legacy tree execution services/api test: ok 242 - both Idea Tree commands queue Lead preparation without legacy tree execution services/api test: --- services/api test: duration_ms: 138.447166 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: ordinary follow-ups never recover the old tree executor services/api test: ok 243 - ordinary follow-ups never recover the old tree executor services/api test: --- services/api test: duration_ms: 153.585155 services/api test: type: 'test' services/api test: ... services/api test: # (node:6594) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: direct broker calls enforce every source plugin while frozen Run selections remain stable services/api test: ok 244 - direct broker calls enforce every source plugin while frozen Run selections remain stable services/api test: --- services/api test: duration_ms: 134.97359 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: governance broker invokes native UniProt MCP through the gateway and caches normalized records services/api test: ok 245 - governance broker invokes native UniProt MCP through the gateway and caches normalized records services/api test: --- services/api test: duration_ms: 300.745844 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: registry-gated mirroring — registered db tool emits db_record products on live and cache paths services/api test: ok 246 - registry-gated mirroring — registered db tool emits db_record products on live and cache paths services/api test: --- services/api test: duration_ms: 205.028001 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: registry-gated mirroring — unregistered lookup tool emits nothing despite succeeding services/api test: ok 247 - registry-gated mirroring — unregistered lookup tool emits nothing despite succeeding services/api test: --- services/api test: duration_ms: 259.643604 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: registry-gated mirroring — suppressMemoryGraphMirror keeps the reviewer read path silent services/api test: ok 248 - registry-gated mirroring — suppressMemoryGraphMirror keeps the reviewer read path silent services/api test: --- services/api test: duration_ms: 188.572662 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: llm-wiki get_page mirrors web_page with contentHash from the CAS data pool services/api test: ok 249 - llm-wiki get_page mirrors web_page with contentHash from the CAS data pool services/api test: --- services/api test: duration_ms: 326.901085 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: search tools (no body) keep their snippet-only web_page products services/api test: ok 250 - search tools (no body) keep their snippet-only web_page products services/api test: --- services/api test: duration_ms: 176.775501 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: governance broker preserves omitted limits, maps queue guards, and feeds 429s back services/api test: ok 251 - governance broker preserves omitted limits, maps queue guards, and feeds 429s back services/api test: --- services/api test: duration_ms: 234.03861 services/api test: type: 'test' services/api test: ... services/api test: # (node:6609) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: custom stdio tools are discovered, authorized, invoked, audited and retained after restart services/api test: ok 252 - custom stdio tools are discovered, authorized, invoked, audited and retained after restart services/api test: --- services/api test: duration_ms: 1539.838881 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: JSON import is atomic, disabled by default, and concurrent saves do not lose entries services/api test: ok 253 - JSON import is atomic, disabled by default, and concurrent saves do not lose entries services/api test: --- services/api test: duration_ms: 506.570403 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: custom http supports authenticated tool discovery and connection failure feedback services/api test: ok 254 - custom http supports authenticated tool discovery and connection failure feedback services/api test: --- services/api test: duration_ms: 529.401254 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: custom sse supports authenticated tool discovery and connection failure feedback services/api test: ok 255 - custom sse supports authenticated tool discovery and connection failure feedback services/api test: --- services/api test: duration_ms: 452.755801 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: custom configuration rejects malformed URLs, fields and secrets services/api test: ok 256 - custom configuration rejects malformed URLs, fields and secrets services/api test: --- services/api test: duration_ms: 0.60491 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: env: retaining secrets is keyed by original name and invalid renames are atomic services/api test: ok 257 - env: retaining secrets is keyed by original name and invalid renames are atomic services/api test: --- services/api test: duration_ms: 132.205599 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: headers: retaining secrets is keyed by original name and invalid renames are atomic services/api test: ok 258 - headers: retaining secrets is keyed by original name and invalid renames are atomic services/api test: --- services/api test: duration_ms: 75.500126 services/api test: type: 'test' services/api test: ... services/api test: # (node:6667) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: every registered MCP source declares a configurable MCP server services/api test: ok 259 - every registered MCP source declares a configurable MCP server services/api test: --- services/api test: duration_ms: 4.222566 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the broker sends each source the proxy resolved from its own MCP server policy services/api test: ok 260 - the broker sends each source the proxy resolved from its own MCP server policy services/api test: --- services/api test: duration_ms: 443.202259 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: every artifact-producing source downloads bytes under its own MCP server proxy services/api test: ok 261 - every artifact-producing source downloads bytes under its own MCP server proxy services/api test: --- services/api test: duration_ms: 1755.038547 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: outbound code that pins a proxy dispatcher does not use Node's global fetch services/api test: ok 262 - outbound code that pins a proxy dispatcher does not use Node's global fetch services/api test: --- services/api test: duration_ms: 113.711213 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the shared proxy fetch accepts the dispatchers the workspace builds services/api test: ok 263 - the shared proxy fetch accepts the dispatchers the workspace builds services/api test: --- services/api test: duration_ms: 35.147255 services/api test: type: 'test' services/api test: ... services/api test: # (node:6682) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: governed download manager derives an immutable plan from MCP CAS data and downloads after approval services/api test: ok 264 - governed download manager derives an immutable plan from MCP CAS data and downloads after approval services/api test: --- services/api test: duration_ms: 583.12443 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: governed download manager resumes concurrent downloads without corrupting shared job state services/api test: ok 265 - governed download manager resumes concurrent downloads without corrupting shared job state services/api test: --- services/api test: duration_ms: 332.495474 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: governed download manager waits for a pending permission and returns denial as a terminal result services/api test: ok 266 - governed download manager waits for a pending permission and returns denial as a terminal result services/api test: --- services/api test: duration_ms: 186.496541 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: governed download manager rejects a candidate whose host is outside the source manifest services/api test: ok 267 - governed download manager rejects a candidate whose host is outside the source manifest services/api test: --- services/api test: duration_ms: 156.719016 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: artifact paths reject traversal and an existing symlink parent services/api test: ok 268 - artifact paths reject traversal and an existing symlink parent services/api test: --- services/api test: duration_ms: 3.427817 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: catalog lists tools from a real stdio server with routing annotations services/api test: ok 269 - catalog lists tools from a real stdio server with routing annotations services/api test: --- services/api test: duration_ms: 264.787625 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: connection lifecycle records server and proxy metadata without credentials services/api test: ok 270 - connection lifecycle records server and proxy metadata without credentials services/api test: --- services/api test: duration_ms: 242.239943 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: catalog failures include a bounded redacted stdio stderr tail services/api test: ok 271 - catalog failures include a bounded redacted stdio stderr tail services/api test: --- services/api test: duration_ms: 253.366054 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: invoke round-trips content and structured content services/api test: ok 272 - invoke round-trips content and structured content services/api test: --- services/api test: duration_ms: 301.932081 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a tool-reported error surfaces as a failed invocation with attempts services/api test: ok 273 - a tool-reported error surfaces as a failed invocation with attempts services/api test: --- services/api test: duration_ms: 275.037554 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: unknown server rejects with a 404-tagged error services/api test: ok 274 - unknown server rejects with a 404-tagged error services/api test: --- services/api test: duration_ms: 1.285911 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: extensions config parses env placeholders, aliases, and routing overrides services/api test: ok 275 - extensions config parses env placeholders, aliases, and routing overrides services/api test: --- services/api test: duration_ms: 0.802479 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a dead server is classified as a transport error and retried per policy services/api test: ok 276 - a dead server is classified as a transport error and retried per policy services/api test: --- services/api test: duration_ms: 84.068416 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stdio proxy overlay follows the resolved policy services/api test: ok 277 - stdio proxy overlay follows the resolved policy services/api test: --- services/api test: duration_ms: 1.398894 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: bundled python MCP servers resolve to a configured interpreter services/api test: ok 278 - bundled python MCP servers resolve to a configured interpreter services/api test: --- services/api test: duration_ms: 0.588506 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: http OAuth: real PKCE, encrypted persistence, tool discovery, 401 refresh and logout services/api test: ok 279 - http OAuth: real PKCE, encrypted persistence, tool discovery, 401 refresh and logout services/api test: --- services/api test: duration_ms: 164.527461 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: sse OAuth: real PKCE, encrypted persistence, tool discovery, 401 refresh and logout services/api test: ok 280 - sse OAuth: real PKCE, encrypted persistence, tool discovery, 401 refresh and logout services/api test: --- services/api test: duration_ms: 114.40736 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: OAuth static client, rotating refresh single-flight, expiry and revoked refresh feedback services/api test: ok 281 - OAuth static client, rotating refresh single-flight, expiry and revoked refresh feedback services/api test: --- services/api test: duration_ms: 56.139678 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: OAuth rejects missing/tampered/denied/cancelled state and config changes invalidate credentials services/api test: ok 282 - OAuth rejects missing/tampered/denied/cancelled state and config changes invalidate credentials services/api test: --- services/api test: duration_ms: 43.55192 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: OAuth cancellation during token exchange cannot restore cleared credentials services/api test: ok 283 - OAuth cancellation during token exchange cannot restore cleared credentials services/api test: --- services/api test: duration_ms: 25.165069 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: OAuth scope step-up prompts consent, and bearer credentials cannot cross origins services/api test: ok 284 - OAuth scope step-up prompts consent, and bearer credentials cannot cross origins services/api test: --- services/api test: duration_ms: 27.905329 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: OAuth rejects insecure remote endpoints and conflicting Authorization headers services/api test: ok 285 - OAuth rejects insecure remote endpoints and conflicting Authorization headers services/api test: --- services/api test: duration_ms: 4.389037 services/api test: type: 'test' services/api test: ... services/api test: # (node:6766) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: the PDB metadata hop reaches data.rcsb.org through the biomed proxy policy services/api test: ok 286 - the PDB metadata hop reaches data.rcsb.org through the biomed proxy policy services/api test: --- services/api test: duration_ms: 1626.660547 services/api test: type: 'test' services/api test: ... services/api test: # (node:6766) ExperimentalWarning: SOCKS5 proxy support is experimental and subject to change services/api test: # Subtest: the PDB byte hop downloads files.rcsb.org through a socks5 biomed proxy services/api test: ok 287 - the PDB byte hop downloads files.rcsb.org through a socks5 biomed proxy services/api test: --- services/api test: duration_ms: 389.392102 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the PDB byte hop downloads files.rcsb.org through the biomed proxy policy services/api test: ok 288 - the PDB byte hop downloads files.rcsb.org through the biomed proxy policy services/api test: --- services/api test: duration_ms: 361.693785 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the PDB byte hop stays direct when biomed proxying is switched off services/api test: ok 289 - the PDB byte hop stays direct when biomed proxying is switched off services/api test: --- services/api test: duration_ms: 396.801561 services/api test: type: 'test' services/api test: ... services/api test: # (node:6809) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: MCP source API exposes only native MCP sources services/api test: ok 290 - MCP source API exposes only native MCP sources services/api test: --- services/api test: duration_ms: 385.675923 services/api test: type: 'test' services/api test: ... services/api test: # (node:6822) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: schema compatibility requires remote required inputs to be locally required services/api test: ok 291 - schema compatibility requires remote required inputs to be locally required services/api test: --- services/api test: duration_ms: 1.009073 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: source catalog marks missing MCP tools as degraded services/api test: ok 292 - source catalog marks missing MCP tools as degraded services/api test: --- services/api test: duration_ms: 1.288672 services/api test: type: 'test' services/api test: ... services/api test: # (node:6829) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: paper extraction stays in the owning Workspace even when another job ID is known services/api test: ok 293 - paper extraction stays in the owning Workspace even when another job ID is known services/api test: --- services/api test: duration_ms: 4.901251 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer MCP tools suppress Memory Graph mirroring services/api test: ok 294 - Reviewer MCP tools suppress Memory Graph mirroring services/api test: --- services/api test: duration_ms: 0.852769 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: artifact download waits for its terminal job and releases the AgentRun deadline services/api test: ok 295 - artifact download waits for its terminal job and releases the AgentRun deadline services/api test: --- services/api test: duration_ms: 1.473692 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: artifact download scopes subagent workspace paths to the private prefix services/api test: ok 296 - artifact download scopes subagent workspace paths to the private prefix services/api test: --- services/api test: duration_ms: 0.524449 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a first start with no network loads the snapshot packaging left behind services/api test: ok 297 - a first start with no network loads the snapshot packaging left behind services/api test: --- services/api test: duration_ms: 8.148782 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: this installation's own snapshot outranks the packaged one services/api test: ok 298 - this installation's own snapshot outranks the packaged one services/api test: --- services/api test: duration_ms: 2.691479 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a corrupt snapshot falls back to the packaged copy instead of failing the start services/api test: ok 299 - a corrupt snapshot falls back to the packaged copy instead of failing the start services/api test: --- services/api test: duration_ms: 2.761994 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: with no snapshot at all the catalog stays empty rather than guessing services/api test: ok 300 - with no snapshot at all the catalog stays empty rather than guessing services/api test: --- services/api test: duration_ms: 1.485514 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a manual refresh persists the download and stamps it with the retrieval time services/api test: ok 301 - a manual refresh persists the download and stamps it with the retrieval time services/api test: --- services/api test: duration_ms: 18.063057 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a failed refresh keeps the loaded catalog and says what went wrong services/api test: ok 302 - a failed refresh keeps the loaded catalog and says what went wrong services/api test: --- services/api test: duration_ms: 2.883714 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a download this product cannot use is rejected instead of emptying the catalog services/api test: ok 303 - a download this product cannot use is rejected instead of emptying the catalog services/api test: --- services/api test: duration_ms: 1.965895 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: connectivity probe uses the saved endpoint, model, and API token services/api test: ok 304 - connectivity probe uses the saved endpoint, model, and API token services/api test: --- services/api test: duration_ms: 34.67778 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: missing model token fails locally without resolving a proxy or calling a provider services/api test: ok 305 - missing model token fails locally without resolving a proxy or calling a provider services/api test: --- services/api test: duration_ms: 0.31579 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: provider HTTP failures have stable connectivity categories services/api test: ok 306 - provider HTTP failures have stable connectivity categories services/api test: --- services/api test: duration_ms: 38.322698 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: reasoning response with an empty final body is still a valid completion services/api test: ok 307 - reasoning response with an empty final body is still a valid completion services/api test: --- services/api test: duration_ms: 13.295007 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: malformed successful responses are classified as incompatible services/api test: ok 308 - malformed successful responses are classified as incompatible services/api test: --- services/api test: duration_ms: 7.795185 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: connectivity probe has an independent short timeout services/api test: ok 309 - connectivity probe has an independent short timeout services/api test: --- services/api test: duration_ms: 28.677125 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: coordinator coalesces concurrent tests and allows a later retest services/api test: ok 310 - coordinator coalesces concurrent tests and allows a later retest services/api test: --- services/api test: duration_ms: 0.480305 services/api test: type: 'test' services/api test: ... services/api test: # (node:6854) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: USG-013 session and global usage APIs expose breakdown fields services/api test: ok 311 - USG-013 session and global usage APIs expose breakdown fields services/api test: --- services/api test: duration_ms: 460.974767 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-003 usage summary aggregates task, semantic review, and paper vision invocations services/api test: ok 312 - USG-003 usage summary aggregates task, semantic review, and paper vision invocations services/api test: --- services/api test: duration_ms: 13.883203 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-004 reported token usage remains visible when model pricing is unavailable services/api test: ok 313 - USG-004 reported token usage remains visible when model pricing is unavailable services/api test: --- services/api test: duration_ms: 0.332266 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-005 invocation attempts keep a stable invocationId and increment attemptIndex services/api test: ok 314 - USG-005 invocation attempts keep a stable invocationId and increment attemptIndex services/api test: --- services/api test: duration_ms: 1.010119 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-007 cache tokens aggregate without treating missing fields as zero services/api test: ok 315 - USG-007 cache tokens aggregate without treating missing fields as zero services/api test: --- services/api test: duration_ms: 0.256376 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-008 unreported invocations stay unreported instead of showing zero tokens services/api test: ok 316 - USG-008 unreported invocations stay unreported instead of showing zero tokens services/api test: --- services/api test: duration_ms: 0.277423 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-009 global usage drills down model -> project -> session -> run services/api test: ok 317 - USG-009 global usage drills down model -> project -> session -> run services/api test: --- services/api test: duration_ms: 0.854318 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-014 daily analytics aggregates tokens by date and model with filters services/api test: ok 318 - USG-014 daily analytics aggregates tokens by date and model with filters services/api test: --- services/api test: duration_ms: 9.800468 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-015 analytics estimates costs from pricing and keeps unpriced models empty services/api test: ok 319 - USG-015 analytics estimates costs from pricing and keeps unpriced models empty services/api test: --- services/api test: duration_ms: 0.796737 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-016 analytics buckets and filters days in the configured time zone services/api test: ok 320 - USG-016 analytics buckets and filters days in the configured time zone services/api test: --- services/api test: duration_ms: 0.59806 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-017 analytics CSV export is stable and escapes spreadsheet formulas services/api test: ok 321 - USG-017 analytics CSV export is stable and escapes spreadsheet formulas services/api test: --- services/api test: duration_ms: 1.115523 services/api test: type: 'test' services/api test: ... services/api test: # (node:6876) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: real Node NativeAgent context contract covers modes, scopes, dynamic updates, trace phases, and examples services/api test: ok 322 - real Node NativeAgent context contract covers modes, scopes, dynamic updates, trace phases, and examples services/api test: --- services/api test: duration_ms: 170.553023 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dynamic durable channels retain plan and skill activation after source results are compacted services/api test: ok 323 - dynamic durable channels retain plan and skill activation after source results are compacted services/api test: --- services/api test: duration_ms: 10.758155 services/api test: type: 'test' services/api test: ... services/api test: # (node:6887) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: max parallel tool call configuration defaults and validates services/api test: ok 324 - max parallel tool call configuration defaults and validates services/api test: --- services/api test: duration_ms: 4.846544 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: main, child and reviewer use the same disabled runtime contributions services/api test: ok 325 - main, child and reviewer use the same disabled runtime contributions services/api test: --- services/api test: duration_ms: 139.323204 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loop streams a tool round trip and returns wire-format final messages services/api test: ok 326 - loop streams a tool round trip and returns wire-format final messages services/api test: --- services/api test: duration_ms: 67.014636 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: native tool end events omit details when the runtime result has none services/api test: ok 327 - native tool end events omit details when the runtime result has none services/api test: --- services/api test: duration_ms: 0.868392 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: main and child native Agents receive Runner IDs, descriptions and explicit sync tools services/api test: ok 328 - main and child native Agents receive Runner IDs, descriptions and explicit sync tools services/api test: --- services/api test: duration_ms: 83.461038 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: ordinary tools are available on the first model step without a mode activation handshake services/api test: ok 329 - ordinary tools are available on the first model step without a mode activation handshake services/api test: --- services/api test: duration_ms: 17.955468 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Plan update and read_skill can run in the same first-step tool batch services/api test: ok 330 - Plan update and read_skill can run in the same first-step tool batch services/api test: --- services/api test: duration_ms: 36.63036 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: main-agent model turns receive one stable workspace and run-contract prompt services/api test: ok 331 - main-agent model turns receive one stable workspace and run-contract prompt services/api test: --- services/api test: duration_ms: 57.655792 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dynamic context mode is wired into model input without an external worker services/api test: ok 332 - dynamic context mode is wired into model input without an external worker services/api test: --- services/api test: duration_ms: 5.678168 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: capability-package contributor factories are scoped and included without editing NativeAgent services/api test: ok 333 - capability-package contributor factories are scoped and included without editing NativeAgent services/api test: --- services/api test: duration_ms: 6.940338 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: shadow context mode runs native assembly but sends byte-compatible legacy prompt services/api test: ok 334 - shadow context mode runs native assembly but sends byte-compatible legacy prompt services/api test: --- services/api test: duration_ms: 5.102866 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dynamic context keeps one Skill body and adds a durable lower-authority reference services/api test: ok 335 - dynamic context keeps one Skill body and adds a durable lower-authority reference services/api test: --- services/api test: duration_ms: 10.762843 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run-scoped extra tools are visible and executable only when supplied to the Lead Native Agent services/api test: ok 336 - run-scoped extra tools are visible and executable only when supplied to the Lead Native Agent services/api test: --- services/api test: duration_ms: 11.107171 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: dynamic capability assembly follows deferred tool promotion on the next turn services/api test: ok 337 - dynamic capability assembly follows deferred tool promotion on the next turn services/api test: --- services/api test: duration_ms: 10.387231 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: native loop loads skill-creator before creating a managed Skill services/api test: ok 338 - native loop loads skill-creator before creating a managed Skill services/api test: --- services/api test: duration_ms: 21.171512 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: raw assistant tool-call fields replay verbatim on the next model call services/api test: ok 339 - raw assistant tool-call fields replay verbatim on the next model call services/api test: --- services/api test: duration_ms: 18.416293 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: session history preserves provider reasoning context on the first model call services/api test: ok 340 - session history preserves provider reasoning context on the first model call services/api test: --- services/api test: duration_ms: 7.991759 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: deferred tools stay hidden until tool_search promotes them services/api test: ok 341 - deferred tools stay hidden until tool_search promotes them services/api test: --- services/api test: duration_ms: 20.490326 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: routing keywords auto-promote deferred tools for the request services/api test: ok 342 - routing keywords auto-promote deferred tools for the request services/api test: --- services/api test: duration_ms: 5.592036 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: idle timeout aborts a stalled model stream with a timeout error services/api test: ok 343 - idle timeout aborts a stalled model stream with a timeout error services/api test: --- services/api test: duration_ms: 61.635065 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: turn timeout bounds the whole run services/api test: ok 344 - turn timeout bounds the whole run services/api test: --- services/api test: duration_ms: 81.178382 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: beginExternalWait pauses both deadlines until released services/api test: ok 345 - beginExternalWait pauses both deadlines until released services/api test: --- services/api test: duration_ms: 251.535479 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: gateway progress cannot re-arm idle while an external wait is active services/api test: ok 346 - gateway progress cannot re-arm idle while an external wait is active services/api test: --- services/api test: duration_ms: 106.21586 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: one completed parallel wait cannot start parent idle while another remains services/api test: ok 347 - one completed parallel wait cannot start parent idle while another remains services/api test: --- services/api test: duration_ms: 105.72263 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: abort cancels the run and pre-abort rejects immediately services/api test: ok 348 - abort cancels the run and pre-abort rejects immediately services/api test: --- services/api test: duration_ms: 1.351081 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: abort preserves reported usage from a completed model turn services/api test: ok 349 - abort preserves reported usage from a completed model turn services/api test: --- services/api test: duration_ms: 5.877857 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an agent handle executes exactly once services/api test: ok 350 - an agent handle executes exactly once services/api test: --- services/api test: duration_ms: 5.241085 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: history over the trigger compacts into a summary checkpoint services/api test: ok 351 - history over the trigger compacts into a summary checkpoint services/api test: --- services/api test: duration_ms: 6.803902 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: remote tool results are neutralized before reaching history or the UI services/api test: ok 352 - remote tool results are neutralized before reaching history or the UI services/api test: --- services/api test: duration_ms: 20.669394 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: local tool output is never mangled by sanitization services/api test: ok 353 - local tool output is never mangled by sanitization services/api test: --- services/api test: duration_ms: 9.052636 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: summary checkpoint carries the full durable-context authority contract services/api test: ok 354 - summary checkpoint carries the full durable-context authority contract services/api test: --- services/api test: duration_ms: 9.830819 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: evolve tools appear on the first model step only when a runtime is registered services/api test: ok 355 - evolve tools appear on the first model step only when a runtime is registered services/api test: --- services/api test: duration_ms: 24.100749 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an oversized execution result enters history as a head/tail preview the model can page back services/api test: ok 356 - an oversized execution result enters history as a head/tail preview the model can page back services/api test: --- services/api test: duration_ms: 208.576894 services/api test: type: 'test' services/api test: ... services/api test: # (node:6900) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: turn state uses a committed Workspace tree while the next execution is still writing services/api test: ok 357 - turn state uses a committed Workspace tree while the next execution is still writing services/api test: --- services/api test: duration_ms: 160.120404 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: production AgentRun records exact contexts, complete observations, sequential MCP overwrite and manifest lineage services/api test: ok 358 - production AgentRun records exact contexts, complete observations, sequential MCP overwrite and manifest lineage services/api test: --- services/api test: duration_ms: 2146.237841 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: overflow retry retains both exact inputs and commits only the successful input services/api test: ok 359 - overflow retry retains both exact inputs and commits only the successful input services/api test: --- services/api test: duration_ms: 174.99964 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: parent Step links the child trajectory using the same state and revision model services/api test: ok 360 - parent Step links the child trajectory using the same state and revision model services/api test: --- services/api test: duration_ms: 684.822114 services/api test: type: 'test' services/api test: ... services/api test: # (node:6913) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: busy inbox waits; idle dispatch persists context once without reopening stopped gates services/api test: ok 361 - busy inbox waits; idle dispatch persists context once without reopening stopped gates services/api test: --- services/api test: duration_ms: 7.396569 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: failed enqueue retains unread; child notices are never redirected to Main services/api test: ok 362 - failed enqueue retains unread; child notices are never redirected to Main services/api test: --- services/api test: duration_ms: 2.348393 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a delivery is counted for the transcript and re-attached only for the model services/api test: ok 363 - a delivery is counted for the transcript and re-attached only for the model services/api test: --- services/api test: duration_ms: 2.980346 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: child dispatch preserves owner and requires a saved idle context services/api test: ok 364 - child dispatch preserves owner and requires a saved idle context services/api test: --- services/api test: duration_ms: 1.807182 services/api test: type: 'test' services/api test: ... services/api test: # (node:6920) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: saving an NPU selection reads the Runner's current inventory, not a stored connection record services/api test: # Subtest: a ticked card that has since been claimed can still be unticked services/api test: ok 1 - a ticked card that has since been claimed can still be unticked services/api test: --- services/api test: duration_ms: 11.223799 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: ticking a card that is unusable now still fails, with the driver's reason services/api test: ok 2 - ticking a card that is unusable now still fails, with the driver's reason services/api test: --- services/api test: duration_ms: 14.021545 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a Runner that cannot be reached refuses the tick instead of storing it blind services/api test: ok 3 - a Runner that cannot be reached refuses the tick instead of storing it blind services/api test: --- services/api test: duration_ms: 84.152272 services/api test: type: 'test' services/api test: ... services/api test: 1..3 services/api test: ok 365 - saving an NPU selection reads the Runner's current inventory, not a stored connection record services/api test: --- services/api test: duration_ms: 522.972505 services/api test: type: 'test' services/api test: ... services/api test: # (node:6933) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: explicit PDF extraction persists lifecycle and is idempotent after completion services/api test: ok 366 - explicit PDF extraction persists lifecycle and is idempotent after completion services/api test: --- services/api test: duration_ms: 2061.107269 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: failed PDF extraction persists a terminal failed task services/api test: ok 367 - failed PDF extraction persists a terminal failed task services/api test: --- services/api test: duration_ms: 90.330922 services/api test: type: 'test' services/api test: ... services/api test: # (node:6951) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: all built-in source plugins support project isolation, session inheritance and persisted Bridge configuration services/api test: ok 368 - all built-in source plugins support project isolation, session inheritance and persisted Bridge configuration services/api test: --- services/api test: duration_ms: 275.124131 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: ApplyPort and every classic settings writer share the catalog mutation boundary services/api test: # Subtest: project services/api test: ok 1 - project services/api test: --- services/api test: duration_ms: 106.666087 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: session services/api test: ok 2 - session services/api test: --- services/api test: duration_ms: 115.684768 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: global services/api test: ok 3 - global services/api test: --- services/api test: duration_ms: 111.438882 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: composer services/api test: ok 4 - composer services/api test: --- services/api test: duration_ms: 133.963783 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runner services/api test: ok 5 - runner services/api test: --- services/api test: duration_ms: 180.759514 services/api test: type: 'test' services/api test: ... services/api test: 1..5 services/api test: ok 369 - ApplyPort and every classic settings writer share the catalog mutation boundary services/api test: --- services/api test: duration_ms: 649.915942 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Bridge rechecks inherited revision after queued classic writes, and a rejected CAS releases the queue services/api test: # Subtest: host.settings services/api test: ok 1 - host.settings services/api test: --- services/api test: duration_ms: 116.92057 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill services/api test: ok 2 - skill services/api test: --- services/api test: duration_ms: 121.593155 services/api test: type: 'test' services/api test: ... services/api test: 1..2 services/api test: ok 370 - Bridge rechecks inherited revision after queued classic writes, and a rejected CAS releases the queue services/api test: --- services/api test: duration_ms: 239.40245 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: project and session overrides persist, retain inheritance and reject undeclared configuration services/api test: ok 371 - project and session overrides persist, retain inheritance and reject undeclared configuration services/api test: --- services/api test: duration_ms: 106.083583 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Bridge commands enforce scope, CAS and ownership while subscriptions only invalidate services/api test: ok 372 - Bridge commands enforce scope, CAS and ownership while subscriptions only invalidate services/api test: --- services/api test: duration_ms: 120.813575 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: candidate compare, approval and ApplyPort are separate; application is durable and idempotent services/api test: ok 373 - candidate compare, approval and ApplyPort are separate; application is durable and idempotent services/api test: --- services/api test: duration_ms: 197.163106 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: rejection and conflicting active settings never apply a candidate services/api test: ok 374 - rejection and conflicting active settings never apply a candidate services/api test: --- services/api test: duration_ms: 209.37322 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: ApplyPort rolls back settings and receipt when durable receipt fails services/api test: ok 375 - ApplyPort rolls back settings and receipt when durable receipt fails services/api test: --- services/api test: duration_ms: 75.781201 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: candidate only replaces allowed names and refuses incomplete or cross-experiment comparison services/api test: ok 376 - candidate only replaces allowed names and refuses incomplete or cross-experiment comparison services/api test: --- services/api test: duration_ms: 172.096308 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: candidate CAS records preserve pinned assets and asset drift refuses preparation services/api test: ok 377 - candidate CAS records preserve pinned assets and asset drift refuses preparation services/api test: --- services/api test: duration_ms: 129.375969 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: HTTP Bridge preserves errors and subscriptions release when transport closes services/api test: ok 378 - HTTP Bridge preserves errors and subscriptions release when transport closes services/api test: --- services/api test: duration_ms: 147.955039 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runtime scope main honors inherited disables before creating tools or state services/api test: ok 379 - runtime scope main honors inherited disables before creating tools or state services/api test: --- services/api test: duration_ms: 3.592925 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runtime scope subagent honors inherited disables before creating tools or state services/api test: ok 380 - runtime scope subagent honors inherited disables before creating tools or state services/api test: --- services/api test: duration_ms: 0.584794 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runtime scope reviewer honors inherited disables before creating tools or state services/api test: ok 381 - runtime scope reviewer honors inherited disables before creating tools or state services/api test: --- services/api test: duration_ms: 0.464088 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: installed Plan is unavailable without its port; activation and disposal are observable separately services/api test: ok 382 - installed Plan is unavailable without its port; activation and disposal are observable separately services/api test: --- services/api test: duration_ms: 2.422402 services/api test: type: 'test' services/api test: ... services/api test: # (node:6973) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: USG-006 prompt manifests backfill reported usage fields services/api test: ok 383 - USG-006 prompt manifests backfill reported usage fields services/api test: --- services/api test: duration_ms: 79.70184 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: prompt manifests record version-pinned skill library references services/api test: ok 384 - prompt manifests record version-pinned skill library references services/api test: --- services/api test: duration_ms: 99.829638 services/api test: type: 'test' services/api test: ... services/api test: # (node:6984) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: multi-step persistent R executions create separate runs and an artifact derivation services/api test: ok 385 - multi-step persistent R executions create separate runs and an artifact derivation services/api test: --- services/api test: duration_ms: 1008.746134 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: shell execution records authoritative code, logs, environment, and generated files services/api test: ok 386 - shell execution records authoritative code, logs, environment, and generated files services/api test: --- services/api test: duration_ms: 450.516624 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: execution provenance distinguishes runs by working directory and env snapshot services/api test: ok 387 - execution provenance distinguishes runs by working directory and env snapshot services/api test: --- services/api test: duration_ms: 360.419334 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent execution prefixes generated artifact paths with the private workspace path services/api test: ok 388 - subagent execution prefixes generated artifact paths with the private workspace path services/api test: --- services/api test: duration_ms: 558.709641 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a report version drains the chip references + claim ids accumulated earlier in the run services/api test: ok 389 - a report version drains the chip references + claim ids accumulated earlier in the run services/api test: --- services/api test: duration_ms: 542.766525 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a failed declare_artifact (missing path) does not swallow the chip buffer services/api test: ok 390 - a failed declare_artifact (missing path) does not swallow the chip buffer services/api test: --- services/api test: duration_ms: 164.317628 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: drain is scoped by turnId: a report in one context does not absorb another context's chips services/api test: ok 391 - drain is scoped by turnId: a report in one context does not absorb another context's chips services/api test: --- services/api test: duration_ms: 373.4555 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: artifact saves create immutable versions, dependencies, and attachable annotations services/api test: ok 392 - artifact saves create immutable versions, dependencies, and attachable annotations services/api test: --- services/api test: duration_ms: 314.811554 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: declaring an execution output preserves inferred input provenance without auto-cataloging the file services/api test: ok 393 - declaring an execution output preserves inferred input provenance without auto-cataloging the file services/api test: --- services/api test: duration_ms: 406.47725 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an execution that produces two artifacts in one run does not wire them as inputs to each other services/api test: ok 394 - an execution that produces two artifacts in one run does not wire them as inputs to each other services/api test: --- services/api test: duration_ms: 421.896846 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an execution interrupted by a run abort is recorded as cancelled, not failed services/api test: ok 395 - an execution interrupted by a run abort is recorded as cancelled, not failed services/api test: --- services/api test: duration_ms: 312.406642 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: recorder mirrors provenance addressing fields to the memory graph on shell execution services/api test: ok 396 - recorder mirrors provenance addressing fields to the memory graph on shell execution services/api test: --- services/api test: duration_ms: 460.332222 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: pulled child Runner artifacts retain private paths and immutable versions services/api test: ok 397 - pulled child Runner artifacts retain private paths and immutable versions services/api test: --- services/api test: duration_ms: 248.559919 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a `./`-prefixed sourcePath still mirrors the artifact to the memory graph services/api test: ok 398 - a `./`-prefixed sourcePath still mirrors the artifact to the memory graph services/api test: --- services/api test: duration_ms: 405.305947 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: concurrent runs drain their own chip buffer: a later run's provider never clobbers the earlier run's drain services/api test: ok 399 - concurrent runs drain their own chip buffer: a later run's provider never clobbers the earlier run's drain services/api test: --- services/api test: duration_ms: 549.486801 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a report declare without a referencesProvider degrades gracefully to empty references services/api test: ok 400 - a report declare without a referencesProvider degrades gracefully to empty references services/api test: --- services/api test: duration_ms: 358.967061 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: parentSubagentId threads through executeShell and declareWorkspaceArtifact; absent in main-agent context services/api test: ok 401 - parentSubagentId threads through executeShell and declareWorkspaceArtifact; absent in main-agent context services/api test: --- services/api test: duration_ms: 639.682852 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-014 provider usage derives total and accepts cache field aliases services/api test: ok 402 - USG-014 provider usage derives total and accepts cache field aliases services/api test: --- services/api test: duration_ms: 1.054796 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: USG-015 incomplete provider usage stays unreported services/api test: ok 403 - USG-015 incomplete provider usage stays unreported services/api test: --- services/api test: duration_ms: 0.278703 services/api test: type: 'test' services/api test: ... services/api test: # (node:7010) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: remote runner executable accepts only one safe executable token services/api test: ok 404 - remote runner executable accepts only one safe executable token services/api test: --- services/api test: duration_ms: 1.663499 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the capability probe is read-only and carries the machine's own credentials services/api test: ok 405 - the capability probe is read-only and carries the machine's own credentials services/api test: --- services/api test: duration_ms: 2.05551 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: remote diagnostics redact credentials before reaching an injected logger services/api test: ok 406 - remote diagnostics redact credentials before reaching an injected logger services/api test: --- services/api test: duration_ms: 1.062017 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the probe, the deployment and the tunnel all use the same credentials and trusted key services/api test: ok 407 - the probe, the deployment and the tunnel all use the same credentials and trusted key services/api test: --- services/api test: duration_ms: 30049.092009 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a connect attempt tells its story as a pollable log, ending with the failure cause services/api test: ok 408 - a connect attempt tells its story as a pollable log, ending with the failure cause services/api test: --- services/api test: duration_ms: 0.980823 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a machine whose key is not trusted is refused with the fingerprint to trust services/api test: ok 409 - a machine whose key is not trusted is refused with the fingerprint to trust services/api test: --- services/api test: duration_ms: 0.532099 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a machine whose key changed says so, so it is not read as a first connection services/api test: ok 410 - a machine whose key changed says so, so it is not read as a first connection services/api test: --- services/api test: duration_ms: 0.414118 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the transport has no bare SSH or SLURM job execution methods services/api test: ok 411 - the transport has no bare SSH or SLURM job execution methods services/api test: --- services/api test: duration_ms: 0.094564 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a Runner whose clock is minutes off still gets signatures it accepts services/api test: ok 412 - a Runner whose clock is minutes off still gets signatures it accepts services/api test: --- services/api test: duration_ms: 24.135085 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: times the Runner reported come back on this machine's clock, with its measured duration intact services/api test: ok 413 - times the Runner reported come back on this machine's clock, with its measured duration intact services/api test: --- services/api test: duration_ms: 8.420172 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a machine with no Runner connected still reports whether it answers services/api test: ok 414 - a machine with no Runner connected still reports whether it answers services/api test: --- services/api test: duration_ms: 0.64396 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a machine this installation cannot reach at all is unknown, not offline services/api test: ok 415 - a machine this installation cannot reach at all is unknown, not offline services/api test: --- services/api test: duration_ms: 0.304824 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a self-deployed Runner is asked for its health endpoint rather than a shell services/api test: ok 416 - a self-deployed Runner is asked for its health endpoint rather than a shell services/api test: --- services/api test: duration_ms: 18.36956 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a self-deployed runner is reachable by address only with the token it was started with services/api test: ok 417 - a self-deployed runner is reachable by address only with the token it was started with services/api test: --- services/api test: duration_ms: 38.746236 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a self-deployed runner that is not on Linux is refused services/api test: ok 418 - a self-deployed runner that is not on Linux is refused services/api test: --- services/api test: duration_ms: 4.358353 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SEA deploys without remote Node, reuses complete binaries and never starts an interrupted upload services/api test: # Subtest: install services/api test: ok 1 - install services/api test: --- services/api test: duration_ms: 8.164307 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: reuse services/api test: ok 2 - reuse services/api test: --- services/api test: duration_ms: 3.541529 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: interrupted services/api test: ok 3 - interrupted services/api test: --- services/api test: duration_ms: 0.539319 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: checksum failure services/api test: ok 4 - checksum failure services/api test: --- services/api test: duration_ms: 0.563978 services/api test: type: 'test' services/api test: ... services/api test: 1..4 services/api test: ok 419 - SEA deploys without remote Node, reuses complete binaries and never starts an interrupted upload services/api test: --- services/api test: duration_ms: 14.32943 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an SSH machine's runner is reached only through the tunnel, never over a port services/api test: ok 420 - an SSH machine's runner is reached only through the tunnel, never over a port services/api test: --- services/api test: duration_ms: 6.285219 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API shutdown closes an SSH runner without reporting a lost connection services/api test: ok 421 - API shutdown closes an SSH runner without reporting a lost connection services/api test: --- services/api test: duration_ms: 5.227197 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a self-deployed runner keeps using its own address and port services/api test: ok 422 - a self-deployed runner keeps using its own address and port services/api test: --- services/api test: duration_ms: 3.347828 services/api test: type: 'test' services/api test: ... services/api test: # (node:7041) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: explicit remote workspace push and pull preserve independent files and records services/api test: # Subtest: legacy sync reports durable partial success instead of zeroing completed files services/api test: ok 1 - legacy sync reports durable partial success instead of zeroing completed files services/api test: --- services/api test: duration_ms: 183.568708 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: legacy sync refuses old Runners without reading their live files services/api test: ok 2 - legacy sync refuses old Runners without reading their live files services/api test: --- services/api test: duration_ms: 10.873422 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: legacy cancellation joins Transfer cleanup and leaves no partial target services/api test: ok 3 - legacy cancellation joins Transfer cleanup and leaves no partial target services/api test: --- services/api test: duration_ms: 70.333415 services/api test: type: 'test' services/api test: ... services/api test: 1..3 services/api test: ok 423 - explicit remote workspace push and pull preserve independent files and records services/api test: --- services/api test: duration_ms: 1178.715575 services/api test: type: 'test' services/api test: ... services/api test: # (node:7056) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: automatic audit is durable, non-blocking, and creates bounded feedback services/api test: ok 424 - automatic audit is durable, non-blocking, and creates bounded feedback services/api test: --- services/api test: duration_ms: 126.517924 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: feedback persistence failure leaves the audit task failed instead of completed services/api test: ok 425 - feedback persistence failure leaves the audit task failed instead of completed services/api test: --- services/api test: duration_ms: 161.067254 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: automatic lane is released when checkpoint admission fails services/api test: ok 426 - automatic lane is released when checkpoint admission fails services/api test: --- services/api test: duration_ms: 145.001051 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: automatic audit batches artifacts and retains only each Artifact's newest queued version services/api test: ok 427 - automatic audit batches artifacts and retains only each Artifact's newest queued version services/api test: --- services/api test: duration_ms: 219.10077 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a generated Artifact registered during a running audit waits for the next batch services/api test: ok 428 - a generated Artifact registered during a running audit waits for the next batch services/api test: --- services/api test: duration_ms: 170.452717 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a generated Artifact registered while drain is exiting schedules a new wakeup services/api test: ok 429 - a generated Artifact registered while drain is exiting schedules a new wakeup services/api test: --- services/api test: duration_ms: 147.081335 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: uploads and Agent code/data outputs remain Artifacts but are not automatically audited services/api test: ok 430 - uploads and Agent code/data outputs remain Artifacts but are not automatically audited services/api test: --- services/api test: duration_ms: 130.148705 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: manual review selects report deliverables and ignores code/data Artifacts services/api test: ok 431 - manual review selects report deliverables and ignores code/data Artifacts services/api test: --- services/api test: duration_ms: 122.362802 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session automatic-review settings skip background work but set the manual review level services/api test: ok 432 - Session automatic-review settings skip background work but set the manual review level services/api test: --- services/api test: duration_ms: 104.604512 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancelling a quiet-window batch before Session deletion prevents a later drain services/api test: ok 433 - cancelling a quiet-window batch before Session deletion prevents a later drain services/api test: --- services/api test: duration_ms: 749.461124 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Stop review settles a stale running checkpoint after its task has already failed services/api test: ok 434 - Stop review settles a stale running checkpoint after its task has already failed services/api test: --- services/api test: duration_ms: 132.073534 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an automatic audit with no current report is silently superseded without checkpoint or feedback services/api test: ok 435 - an automatic audit with no current report is silently superseded without checkpoint or feedback services/api test: --- services/api test: duration_ms: 126.770861 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: automatic Deep audits wait for the lead Agent to be idle services/api test: ok 436 - automatic Deep audits wait for the lead Agent to be idle services/api test: --- services/api test: duration_ms: 184.217809 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: automatic Quick audits run after the quiet window while the lead Agent is busy services/api test: ok 437 - automatic Quick audits run after the quiet window while the lead Agent is busy services/api test: --- services/api test: duration_ms: 111.800896 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: automatic audits share one process-wide background lane services/api test: ok 438 - automatic audits share one process-wide background lane services/api test: --- services/api test: duration_ms: 206.747468 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the Deep cooldown is applied once to the next automatic batch services/api test: ok 439 - the Deep cooldown is applied once to the next automatic batch services/api test: --- services/api test: duration_ms: 120.110456 services/api test: type: 'test' services/api test: ... services/api test: # (node:7071) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Reviewer Specialist is disabled unless explicitly named services/api test: ok 440 - Reviewer Specialist is disabled unless explicitly named services/api test: --- services/api test: duration_ms: 1.409644 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer Specialist requires both the system switch and an explicit request services/api test: ok 441 - Reviewer Specialist requires both the system switch and an explicit request services/api test: --- services/api test: duration_ms: 0.173869 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: offline MVP accepts a recognizable citation identifier services/api test: ok 442 - offline MVP accepts a recognizable citation identifier services/api test: --- services/api test: duration_ms: 2.85806 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: offline MVP reports a source without an inline citation marker services/api test: ok 443 - offline MVP reports a source without an inline citation marker services/api test: --- services/api test: duration_ms: 1.657953 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep citation candidate requires an explicit literature reference services/api test: ok 444 - Deep citation candidate requires an explicit literature reference services/api test: --- services/api test: duration_ms: 0.742532 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick citation review accepts a standard author-year citation without requiring a persistent identifier services/api test: ok 445 - Quick citation review accepts a standard author-year citation without requiring a persistent identifier services/api test: --- services/api test: duration_ms: 0.221895 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick citation review accepts Markdown footnotes and Chinese numeric markers services/api test: ok 446 - Quick citation review accepts Markdown footnotes and Chinese numeric markers services/api test: --- services/api test: duration_ms: 1.346324 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick citation review does not treat a provenance chip as an academic citation services/api test: ok 447 - Quick citation review does not treat a provenance chip as an academic citation services/api test: --- services/api test: duration_ms: 0.409367 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick citation review reports only obvious dangling or unfinished references services/api test: ok 448 - Quick citation review reports only obvious dangling or unfinished references services/api test: --- services/api test: duration_ms: 0.484891 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: offline MVP skips content without a literature citation services/api test: ok 449 - offline MVP skips content without a literature citation services/api test: --- services/api test: duration_ms: 0.554653 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep citation review validates Citation findings inside the Citation capability services/api test: ok 450 - Deep citation review validates Citation findings inside the Citation capability services/api test: --- services/api test: duration_ms: 0.604317 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep citation discards model identifier findings without an exact verified source services/api test: ok 451 - Deep citation discards model identifier findings without an exact verified source services/api test: --- services/api test: duration_ms: 0.158566 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation protocol verifies paper identity before lightweight claim support services/api test: ok 452 - Deep Citation protocol verifies paper identity before lightweight claim support services/api test: --- services/api test: duration_ms: 0.239459 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation recognizes Europe PMC citation aliases services/api test: ok 453 - Deep Citation recognizes Europe PMC citation aliases services/api test: --- services/api test: duration_ms: 0.089183 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Citation source preflight resolves stable identifiers and keeps provider output bounded services/api test: ok 454 - Citation source preflight resolves stable identifiers and keeps provider output bounded services/api test: --- services/api test: duration_ms: 0.568414 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer computation evidence gateway issues E4 material only for a successful pinned run services/api test: ok 455 - Reviewer computation evidence gateway issues E4 material only for a successful pinned run services/api test: --- services/api test: duration_ms: 3.969784 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer computation evidence gateway refuses a numeric claim absent from a locked data Artifact services/api test: ok 456 - Reviewer computation evidence gateway refuses a numeric claim absent from a locked data Artifact services/api test: --- services/api test: duration_ms: 0.663471 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer computation evidence gateway accepts only the unit-safe 0.42 to 42% normalization services/api test: ok 457 - Reviewer computation evidence gateway accepts only the unit-safe 0.42 to 42% normalization services/api test: --- services/api test: duration_ms: 0.685164 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer computation evidence gateway refuses numeric substring matches services/api test: ok 458 - Reviewer computation evidence gateway refuses numeric substring matches services/api test: --- services/api test: duration_ms: 0.663639 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer computation evidence gateway never accepts failed or unrecorded executions services/api test: ok 459 - Reviewer computation evidence gateway never accepts failed or unrecorded executions services/api test: --- services/api test: duration_ms: 0.351577 services/api test: type: 'test' services/api test: ... services/api test: # (node:7087) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Quick computation review derives a version-pinned reference from the Artifact services/api test: ok 460 - Quick computation review derives a version-pinned reference from the Artifact services/api test: --- services/api test: duration_ms: 1.808413 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review checks every Artifact without classifying its content services/api test: ok 461 - Quick computation review checks every Artifact without classifying its content services/api test: --- services/api test: duration_ms: 0.670455 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review reports numeric claims cited without an Evidence mapping services/api test: ok 462 - Quick computation review reports numeric claims cited without an Evidence mapping services/api test: --- services/api test: duration_ms: 2.029148 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review recognises Chinese author-year and PMID citations services/api test: ok 463 - Quick computation review recognises Chinese author-year and PMID citations services/api test: --- services/api test: duration_ms: 0.836286 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review ignores unavailable quantitative fields services/api test: ok 464 - Quick computation review ignores unavailable quantitative fields services/api test: --- services/api test: duration_ms: 0.326221 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review accepts a numeric claim with a local Evidence mapping services/api test: ok 465 - Quick computation review accepts a numeric claim with a local Evidence mapping services/api test: --- services/api test: duration_ms: 0.56542 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review accepts a numeric claim carrying the full-name [evidenceN] alias services/api test: ok 466 - Quick computation review accepts a numeric claim carrying the full-name [evidenceN] alias services/api test: --- services/api test: duration_ms: 0.260576 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review accepts a numeric claim linked to a generated-data Artifact services/api test: ok 467 - Quick computation review accepts a numeric claim linked to a generated-data Artifact services/api test: --- services/api test: duration_ms: 0.356216 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review reports a numeric claim without any traceable support services/api test: ok 468 - Quick computation review reports a numeric claim without any traceable support services/api test: --- services/api test: duration_ms: 0.406698 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review reports an unresolved generated-data alias services/api test: ok 469 - Quick computation review reports an unresolved generated-data alias services/api test: --- services/api test: duration_ms: 0.549751 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review does not treat a publication year as a numeric claim services/api test: ok 470 - Quick computation review does not treat a publication year as a numeric claim services/api test: --- services/api test: duration_ms: 0.27619 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review ignores Markdown headings and quoted source text services/api test: ok 471 - Quick computation review ignores Markdown headings and quoted source text services/api test: --- services/api test: duration_ms: 0.18853 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review reports missing and broken Artifact provenance services/api test: ok 472 - Quick computation review reports missing and broken Artifact provenance services/api test: --- services/api test: duration_ms: 0.378811 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review treats graph unavailability as inconclusive services/api test: ok 473 - Quick computation review treats graph unavailability as inconclusive services/api test: --- services/api test: duration_ms: 0.473525 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review accepts an older node from the same Artifact version lineage services/api test: ok 474 - Quick computation review accepts an older node from the same Artifact version lineage services/api test: --- services/api test: duration_ms: 0.230837 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review rejects a trace for a different Artifact services/api test: ok 475 - Quick computation review rejects a trace for a different Artifact services/api test: --- services/api test: duration_ms: 0.205264 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review still validates the exact Artifact version hash services/api test: ok 476 - Quick computation review still validates the exact Artifact version hash services/api test: --- services/api test: duration_ms: 0.201547 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review stops before graph access when cancelled services/api test: ok 477 - Quick computation review stops before graph access when cancelled services/api test: --- services/api test: duration_ms: 0.529433 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review stops promptly when cancellation happens during graph access services/api test: ok 478 - Quick computation review stops promptly when cancellation happens during graph access services/api test: --- services/api test: duration_ms: 0.498796 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review extracts unique case-insensitive Evidence aliases services/api test: ok 479 - Quick computation review extracts unique case-insensitive Evidence aliases services/api test: --- services/api test: duration_ms: 0.25839 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review extracts full-name [evidenceN] aliases alongside legacy [evN] services/api test: ok 480 - Quick computation review extracts full-name [evidenceN] aliases alongside legacy [evN] services/api test: --- services/api test: duration_ms: 0.127448 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review reports an Artifact alias without a persisted Evidence mapping services/api test: ok 481 - Quick computation review reports an Artifact alias without a persisted Evidence mapping services/api test: --- services/api test: duration_ms: 0.35473 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review distinguishes missing Evidence nodes and broken Paper links services/api test: ok 482 - Quick computation review distinguishes missing Evidence nodes and broken Paper links services/api test: --- services/api test: duration_ms: 0.559441 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review passes Evidence nodes linked to Papers services/api test: ok 483 - Quick computation review passes Evidence nodes linked to Papers services/api test: --- services/api test: duration_ms: 0.28035 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation review marks unavailable or truncated Evidence queries as inconclusive services/api test: ok 484 - Quick computation review marks unavailable or truncated Evidence queries as inconclusive services/api test: --- services/api test: duration_ms: 0.336539 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick computation Evidence tracer reuses one extracts edge query services/api test: ok 485 - Quick computation Evidence tracer reuses one extracts edge query services/api test: --- services/api test: duration_ms: 0.549723 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep computation review validates value mismatches inside the Computation capability services/api test: ok 486 - Deep computation review validates value mismatches inside the Computation capability services/api test: --- services/api test: duration_ms: 0.429003 services/api test: type: 'test' services/api test: ... services/api test: # (node:7096) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Reviewer Paper evidence gateway reads only matching Session CAS-pinned full text and tables services/api test: ok 487 - Reviewer Paper evidence gateway reads only matching Session CAS-pinned full text and tables services/api test: --- services/api test: duration_ms: 68.813981 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer Paper evidence gateway rejects a replaced mutable workspace revision services/api test: ok 488 - Reviewer Paper evidence gateway rejects a replaced mutable workspace revision services/api test: --- services/api test: duration_ms: 1.732013 services/api test: type: 'test' services/api test: ... services/api test: # (node:7107) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: report candidate policy requires an approved report extension and matching media type services/api test: ok 489 - report candidate policy requires an approved report extension and matching media type services/api test: --- services/api test: duration_ms: 1.535288 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: citation claim planner requires E3 evidence for exact numeric results services/api test: ok 490 - citation claim planner requires E3 evidence for exact numeric results services/api test: --- services/api test: duration_ms: 1.292428 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick checkpoint normalizes media type parameters before narrative checks services/api test: ok 491 - Quick checkpoint normalizes media type parameters before narrative checks services/api test: --- services/api test: duration_ms: 4.355124 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick checkpoint combines Citation and Artifact computation checks services/api test: ok 492 - Quick checkpoint combines Citation and Artifact computation checks services/api test: --- services/api test: duration_ms: 41.352697 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick checkpoint skips graph-linked checks when the graph is disabled services/api test: ok 493 - Quick checkpoint skips graph-linked checks when the graph is disabled services/api test: --- services/api test: duration_ms: 11.389666 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint excludes Artifacts and versions created by another Session in the same Project services/api test: ok 494 - Reviewer checkpoint excludes Artifacts and versions created by another Session in the same Project services/api test: --- services/api test: duration_ms: 1.755866 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick checkpoint keeps Citation findings available when the graph is disabled services/api test: ok 495 - Quick checkpoint keeps Citation findings available when the graph is disabled services/api test: --- services/api test: duration_ms: 1.777415 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quick checkpoint reuses an unchanged complete review without running checks again services/api test: ok 496 - Quick checkpoint reuses an unchanged complete review without running checks again services/api test: --- services/api test: duration_ms: 2.032585 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint feedback exposes findings to the next model context services/api test: ok 497 - Reviewer checkpoint feedback exposes findings to the next model context services/api test: --- services/api test: duration_ms: 1.16564 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint sends only source contradictions to the main-Agent context services/api test: ok 498 - Reviewer checkpoint sends only source contradictions to the main-Agent context services/api test: --- services/api test: duration_ms: 0.56484 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint failure is context, not an Artifact defect services/api test: ok 499 - Reviewer checkpoint failure is context, not an Artifact defect services/api test: --- services/api test: duration_ms: 0.143558 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint keeps an operationally incomplete Deep stage out of main-Agent feedback services/api test: ok 500 - Reviewer checkpoint keeps an operationally incomplete Deep stage out of main-Agent feedback services/api test: --- services/api test: duration_ms: 0.204577 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep computation accepts a generated Artifact claim only with issued E4 locators services/api test: ok 501 - Deep computation accepts a generated Artifact claim only with issued E4 locators services/api test: --- services/api test: duration_ms: 20.798214 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep checkpoint reuses an identical locked Artifact without rereading CAS or graph services/api test: ok 502 - Deep checkpoint reuses an identical locked Artifact without rereading CAS or graph services/api test: --- services/api test: duration_ms: 6.035365 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint ignores structured source Artifacts instead of treating them as reports services/api test: ok 503 - Reviewer checkpoint ignores structured source Artifacts instead of treating them as reports services/api test: --- services/api test: duration_ms: 0.36096 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer checkpoint ignores malformed JSON rather than reporting it as a report defect services/api test: ok 504 - Reviewer checkpoint ignores malformed JSON rather than reporting it as a report defect services/api test: --- services/api test: duration_ms: 0.23411 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep review runs Computation for an Evidence-backed report without a bibliography services/api test: ok 505 - Deep review runs Computation for an Evidence-backed report without a bibliography services/api test: --- services/api test: duration_ms: 3.758635 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation remains independently verifiable when ScienceMemory is disabled services/api test: ok 506 - Deep Citation remains independently verifiable when ScienceMemory is disabled services/api test: --- services/api test: duration_ms: 2.399617 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation discards a strong model verdict without an issued locator services/api test: ok 507 - Deep Citation discards a strong model verdict without an issued locator services/api test: --- services/api test: duration_ms: 1.992502 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation rejects an E1 verdict for a numeric claim that requires E3 evidence services/api test: ok 508 - Deep Citation rejects an E1 verdict for a numeric claim that requires E3 evidence services/api test: --- services/api test: duration_ms: 1.37077 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep review does not duplicate Quick missing Evidence mapping as semantic unavailable services/api test: ok 509 - Deep review does not duplicate Quick missing Evidence mapping as semantic unavailable services/api test: --- services/api test: duration_ms: 2.054878 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Malformed semantic output is retryable and does not invent a finding services/api test: ok 510 - Malformed semantic output is retryable and does not invent a finding services/api test: --- services/api test: duration_ms: 4.524513 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation timeout preserves completed local Computation findings services/api test: ok 511 - Deep Citation timeout preserves completed local Computation findings services/api test: --- services/api test: duration_ms: 2.457178 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation queues every identifiable reference and retries only the failed one services/api test: ok 512 - Deep Citation queues every identifiable reference and retries only the failed one services/api test: --- services/api test: duration_ms: 3.593732 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation opens one provider cooldown circuit after a 429 services/api test: ok 513 - Deep Citation opens one provider cooldown circuit after a 429 services/api test: --- services/api test: duration_ms: 1.68074 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep checkpoints serialize per Session and avoid concurrent duplicate model calls services/api test: ok 514 - Deep checkpoints serialize per Session and avoid concurrent duplicate model calls services/api test: --- services/api test: duration_ms: 77.2217 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session cancellation aborts an active Deep Reviewer services/api test: ok 515 - Session cancellation aborts an active Deep Reviewer services/api test: --- services/api test: duration_ms: 1.944216 services/api test: type: 'test' services/api test: ... services/api test: # (node:7118) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Reviewer execution log preserves trace context and redacts credentials services/api test: ok 516 - Reviewer execution log preserves trace context and redacts credentials services/api test: --- services/api test: duration_ms: 9.406176 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer execution log writes stage progress synchronously services/api test: ok 517 - Reviewer execution log writes stage progress synchronously services/api test: --- services/api test: duration_ms: 2.740833 services/api test: type: 'test' services/api test: ... services/api test: # (node:7131) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Literature candidates split a bibliography into stable individual tasks services/api test: ok 518 - Literature candidates split a bibliography into stable individual tasks services/api test: --- services/api test: duration_ms: 6.853975 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation queues every identifiable reference services/api test: ok 519 - Deep Citation queues every identifiable reference services/api test: --- services/api test: duration_ms: 1.083935 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation recognizes Europe PMC identifiers used inline with a claim services/api test: ok 520 - Deep Citation recognizes Europe PMC identifiers used inline with a claim services/api test: --- services/api test: duration_ms: 0.402295 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation normalizes canonical literature URLs to stable identifiers services/api test: ok 521 - Deep Citation normalizes canonical literature URLs to stable identifiers services/api test: --- services/api test: duration_ms: 2.795752 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation resolves table short citations through a descriptive Chinese bibliography heading services/api test: ok 522 - Deep Citation resolves table short citations through a descriptive Chinese bibliography heading services/api test: --- services/api test: duration_ms: 2.222927 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation retains a full unidentifiable bibliography entry instead of querying only author-year services/api test: ok 523 - Deep Citation retains a full unidentifiable bibliography entry instead of querying only author-year services/api test: --- services/api test: duration_ms: 0.625078 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Citation ignores numbered action lists and recognizes PPR preprints in References services/api test: ok 524 - Deep Citation ignores numbered action lists and recognizes PPR preprints in References services/api test: --- services/api test: duration_ms: 0.472976 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Evidence Bundle resolves only aliases present in the locked Artifact services/api test: ok 525 - Evidence Bundle resolves only aliases present in the locked Artifact services/api test: --- services/api test: duration_ms: 0.676964 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quantitative claim extraction ignores bare Evidence chips services/api test: ok 526 - Quantitative claim extraction ignores bare Evidence chips services/api test: --- services/api test: duration_ms: 1.815601 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quantitative claim extraction accepts the full-name [evidenceN] alias format services/api test: ok 527 - Quantitative claim extraction accepts the full-name [evidenceN] alias format services/api test: --- services/api test: duration_ms: 0.562988 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Computation claim extraction accepts only declared generated-Artifact chips services/api test: ok 528 - Computation claim extraction accepts only declared generated-Artifact chips services/api test: --- services/api test: duration_ms: 0.507287 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: E4 rejects a strong model verdict that omits code or execution evidence services/api test: ok 529 - E4 rejects a strong model verdict that omits code or execution evidence services/api test: --- services/api test: duration_ms: 0.465352 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: artifactEvidenceAliases accepts both [evN] and [evidenceN] formats services/api test: ok 530 - artifactEvidenceAliases accepts both [evN] and [evidenceN] formats services/api test: --- services/api test: duration_ms: 0.106889 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quantitative claim extraction keeps Markdown table Evidence aliases in their own cells services/api test: ok 531 - Quantitative claim extraction keeps Markdown table Evidence aliases in their own cells services/api test: --- services/api test: duration_ms: 0.28256 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Quantitative claim extraction ignores years and stable identifiers services/api test: ok 532 - Quantitative claim extraction ignores years and stable identifiers services/api test: --- services/api test: duration_ms: 0.1779 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Deep Computation queues every numeric Evidence claim services/api test: ok 533 - Deep Computation queues every numeric Evidence claim services/api test: --- services/api test: duration_ms: 0.360471 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Semantic fingerprint changes when Evidence content changes services/api test: ok 534 - Semantic fingerprint changes when Evidence content changes services/api test: --- services/api test: duration_ms: 16.935692 services/api test: type: 'test' services/api test: ... services/api test: # (node:7140) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Reviewer quality metrics expose locator safety and Deep P95 without source text services/api test: ok 535 - Reviewer quality metrics expose locator safety and Deep P95 without source text services/api test: --- services/api test: duration_ms: 1.782612 services/api test: type: 'test' services/api test: ... services/api test: # (node:7149) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: cancelling a queued run does not start it or append it to Session context services/api test: ok 536 - cancelling a queued run does not start it or append it to Session context services/api test: --- services/api test: duration_ms: 1858.543761 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a blocked run holds its Session queue until the user decides permission services/api test: ok 537 - a blocked run holds its Session queue until the user decides permission services/api test: --- services/api test: duration_ms: 1296.712254 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: GET session usage reports gateway token usage for a completed run services/api test: ok 538 - GET session usage reports gateway token usage for a completed run services/api test: --- services/api test: duration_ms: 925.820897 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancelling a blocked run preserves reported model usage services/api test: ok 539 - cancelling a blocked run preserves reported model usage services/api test: --- services/api test: duration_ms: 982.609105 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stopping a stuck run ends the stream as cancelled and frees the Session services/api test: ok 540 - stopping a stuck run ends the stream as cancelled and frees the Session services/api test: --- services/api test: duration_ms: 847.926873 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer stop has its own route and does not cancel an Agent run services/api test: ok 541 - Reviewer stop has its own route and does not cancel an Agent run services/api test: --- services/api test: duration_ms: 813.293391 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a stuck Session does not block runs in another Session services/api test: ok 542 - a stuck Session does not block runs in another Session services/api test: --- services/api test: duration_ms: 777.192316 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancelling a blocked run persists the approval's terminal state and the tool input in the replay services/api test: ok 543 - cancelling a blocked run persists the approval's terminal state and the tool input in the replay services/api test: --- services/api test: duration_ms: 972.785276 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run child stream endpoint serves empty streams and rejects invalid ids services/api test: ok 544 - run child stream endpoint serves empty streams and rejects invalid ids services/api test: --- services/api test: duration_ms: 1171.043096 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run failures classify into stable codes services/api test: ok 545 - run failures classify into stable codes services/api test: --- services/api test: duration_ms: 1.239726 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classification never discards the provider's own text services/api test: ok 546 - classification never discards the provider's own text services/api test: --- services/api test: duration_ms: 0.225242 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: non-Error failures still yield a message and a code services/api test: ok 547 - non-Error failures still yield a message and a code services/api test: --- services/api test: duration_ms: 1.06449 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: token estimates containing status-code digits are not misclassified services/api test: ok 548 - token estimates containing status-code digits are not misclassified services/api test: --- services/api test: duration_ms: 0.172463 services/api test: type: 'test' services/api test: ... services/api test: # (node:7177) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: remote environment management forwards every operation without writing into the local catalog services/api test: ok 549 - remote environment management forwards every operation without writing into the local catalog services/api test: --- services/api test: duration_ms: 2.692323 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: workspace management includes other Projects, archived Sessions and previous use after deselection services/api test: ok 550 - workspace management includes other Projects, archived Sessions and previous use after deselection services/api test: --- services/api test: duration_ms: 0.543105 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: local exposes the same connection and workspace contract services/api test: ok 551 - local exposes the same connection and workspace contract services/api test: --- services/api test: duration_ms: 0.741 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: host exposes the same connection and workspace contract services/api test: ok 552 - host exposes the same connection and workspace contract services/api test: --- services/api test: duration_ms: 0.270237 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: built-in Runner reports connection and resource errors without claiming it is ready services/api test: ok 553 - built-in Runner reports connection and resource errors without claiming it is ready services/api test: --- services/api test: duration_ms: 0.463488 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the unified catalog retains machine reachability when its Runner is disconnected services/api test: ok 554 - the unified catalog retains machine reachability when its Runner is disconnected services/api test: --- services/api test: duration_ms: 0.351511 services/api test: type: 'test' services/api test: ... services/api test: # (node:7186) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: splitArtifactVersionSuffix strips a \#vN suffix into bare id + version services/api test: ok 555 - splitArtifactVersionSuffix strips a \#vN suffix into bare id + version services/api test: --- services/api test: duration_ms: 1.807132 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a bare id with no suffix returns version undefined services/api test: ok 556 - a bare id with no suffix returns version undefined services/api test: --- services/api test: duration_ms: 0.172831 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a malformed \#v suffix is left whole rather than mis-parsed services/api test: ok 557 - a malformed \#v suffix is left whole rather than mis-parsed services/api test: --- services/api test: duration_ms: 0.209354 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an id that merely contains \#v mid-string is not split services/api test: ok 558 - an id that merely contains \#v mid-string is not split services/api test: --- services/api test: duration_ms: 0.138586 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Skill authoring slash commands expand into guarded Agent workflows services/api test: ok 559 - Skill authoring slash commands expand into guarded Agent workflows services/api test: --- services/api test: duration_ms: 0.755027 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run event details clone falls back to JSON-safe values services/api test: ok 560 - run event details clone falls back to JSON-safe values services/api test: --- services/api test: duration_ms: 0.31201 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run event details clone omits values that cannot be safely serialized services/api test: ok 561 - run event details clone omits values that cannot be safely serialized services/api test: --- services/api test: duration_ms: 0.279278 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: completed tool traces retain cloneable details through the assembly path services/api test: ok 562 - completed tool traces retain cloneable details through the assembly path services/api test: --- services/api test: duration_ms: 0.351931 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent tool steps retain cloneable details through the assembly path services/api test: ok 563 - subagent tool steps retain cloneable details through the assembly path services/api test: --- services/api test: duration_ms: 0.51293 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: tool trace assembly omits details that cannot be cloned or serialized services/api test: ok 564 - tool trace assembly omits details that cannot be cloned or serialized services/api test: --- services/api test: duration_ms: 0.49169 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run snapshots narrow legacy Responses max to the selected model wire capability services/api test: ok 565 - run snapshots narrow legacy Responses max to the selected model wire capability services/api test: --- services/api test: duration_ms: 119.965438 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the 128th model-turn boundary drops an unmatched final assistant call services/api test: ok 566 - the 128th model-turn boundary drops an unmatched final assistant call services/api test: --- services/api test: duration_ms: 3.031218 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: closed Chat Completions and Responses tool segments replay unchanged services/api test: ok 567 - closed Chat Completions and Responses tool segments replay unchanged services/api test: --- services/api test: duration_ms: 0.944557 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a partial multi-tool result is removed together with its unclosed assistant services/api test: ok 568 - a partial multi-tool result is removed together with its unclosed assistant services/api test: --- services/api test: duration_ms: 0.207227 services/api test: type: 'test' services/api test: ... services/api test: # (node:7206) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: workspace refresh stays silent when only subagent private files change services/api test: ok 569 - workspace refresh stays silent when only subagent private files change services/api test: --- services/api test: duration_ms: 152.398993 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: workspace refresh still reports ordinary workspace changes services/api test: ok 570 - workspace refresh still reports ordinary workspace changes services/api test: --- services/api test: duration_ms: 107.156035 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a mixed change set still reports the ordinary workspace change services/api test: ok 571 - a mixed change set still reports the ordinary workspace change services/api test: --- services/api test: duration_ms: 95.806019 services/api test: type: 'test' services/api test: ... services/api test: # (node:7219) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: sandbox network settings are normalized and rejected when malformed services/api test: ok 572 - sandbox network settings are normalized and rejected when malformed services/api test: --- services/api test: duration_ms: 2.569942 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the egress proxy policy takes the same shape as every other module policy services/api test: ok 573 - the egress proxy policy takes the same shape as every other module policy services/api test: --- services/api test: duration_ms: 0.510408 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the policy revision follows the content, not the write services/api test: ok 574 - the policy revision follows the content, not the write services/api test: --- services/api test: duration_ms: 0.657327 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: new Permission Epochs snapshot the policy and a policy change rotates open Sessions services/api test: ok 575 - new Permission Epochs snapshot the policy and a policy change rotates open Sessions services/api test: --- services/api test: duration_ms: 118.570316 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the epoch's egress policy resolves per execution and pins the proxy it names services/api test: ok 576 - the epoch's egress policy resolves per execution and pins the proxy it names services/api test: --- services/api test: duration_ms: 139.320244 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an open epoch resolves its egress proxy the same way an allowlist epoch does services/api test: ok 577 - an open epoch resolves its egress proxy the same way an allowlist epoch does services/api test: --- services/api test: duration_ms: 116.712942 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the saved policy survives a reload and reaches later epochs services/api test: ok 578 - the saved policy survives a reload and reaches later epochs services/api test: --- services/api test: duration_ms: 112.332589 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: open mode snapshots into the epoch, keeps a stable revision and still routes egress services/api test: ok 579 - open mode snapshots into the epoch, keeps a stable revision and still routes egress services/api test: --- services/api test: duration_ms: 110.465777 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SCIENTIFIC_ARTIFACT_KINDS matches the canonical kinds services/api test: ok 580 - SCIENTIFIC_ARTIFACT_KINDS matches the canonical kinds services/api test: --- services/api test: duration_ms: 1.85658 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SCIENTIFIC_ARTIFACT_KIND_SET accepts every canonical kind and rejects typos services/api test: ok 581 - SCIENTIFIC_ARTIFACT_KIND_SET accepts every canonical kind and rejects typos services/api test: --- services/api test: duration_ms: 0.294581 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact recognises figure extensions services/api test: ok 582 - classifyScientificArtifact recognises figure extensions services/api test: --- services/api test: duration_ms: 0.202313 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact recognises text dataset extensions services/api test: ok 583 - classifyScientificArtifact recognises text dataset extensions services/api test: --- services/api test: duration_ms: 0.125151 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact classifies .json as json, not dataset services/api test: ok 584 - classifyScientificArtifact classifies .json as json, not dataset services/api test: --- services/api test: duration_ms: 0.229653 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact recognises binary dataset extensions even though the preview endpoint declines to parse them services/api test: ok 585 - classifyScientificArtifact recognises binary dataset extensions even though the preview endpoint declines to parse them services/api test: --- services/api test: duration_ms: 0.15908 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact routes .structure.json to structure, not json services/api test: ok 586 - classifyScientificArtifact routes .structure.json to structure, not json services/api test: --- services/api test: duration_ms: 0.190712 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: resolveScientificArtifactKind upgrades legacy .json catalog entries and leaves every other kind alone services/api test: ok 587 - resolveScientificArtifactKind upgrades legacy .json catalog entries and leaves every other kind alone services/api test: --- services/api test: duration_ms: 0.143868 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact recognises molecular structure extensions including .xyz services/api test: ok 588 - classifyScientificArtifact recognises molecular structure extensions including .xyz services/api test: --- services/api test: duration_ms: 0.356961 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact recognises report, markdown, latex, html, and notebook extensions services/api test: ok 589 - classifyScientificArtifact recognises report, markdown, latex, html, and notebook extensions services/api test: --- services/api test: duration_ms: 0.489016 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact is case-insensitive on extensions and ignores query strings only via path semantics services/api test: ok 590 - classifyScientificArtifact is case-insensitive on extensions and ignores query strings only via path semantics services/api test: --- services/api test: duration_ms: 1.030376 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact returns undefined for unknown extensions services/api test: ok 591 - classifyScientificArtifact returns undefined for unknown extensions services/api test: --- services/api test: duration_ms: 0.111026 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: classifyScientificArtifact treats hidden dotfiles without a real extension as unknown services/api test: ok 592 - classifyScientificArtifact treats hidden dotfiles without a real extension as unknown services/api test: --- services/api test: duration_ms: 0.077006 services/api test: type: 'test' services/api test: ... services/api test: # (node:7241) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: the passthrough sandbox resolves its stable Python path through the host PATH services/api test: ok 593 - the passthrough sandbox resolves its stable Python path through the host PATH services/api test: --- services/api test: duration_ms: 78.235918 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: closing the API server drains active connections before closing the MCP transport services/api test: ok 594 - closing the API server drains active connections before closing the MCP transport services/api test: --- services/api test: duration_ms: 1119.28196 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: global Runner management routes remotely, requires authentication and never falls back locally services/api test: ok 595 - global Runner management routes remotely, requires authentication and never falls back locally services/api test: --- services/api test: duration_ms: 325.181691 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: updating SSH credentials immediately probes with the newly stored username and password services/api test: ok 596 - updating SSH credentials immediately probes with the newly stored username and password services/api test: --- services/api test: duration_ms: 249.156653 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: authenticated proxy REST returns complete settings URLs and manages MCP policies services/api test: ok 597 - authenticated proxy REST returns complete settings URLs and manages MCP policies services/api test: --- services/api test: duration_ms: 275.953651 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loadServerConfig uses safe local defaults services/api test: ok 598 - loadServerConfig uses safe local defaults services/api test: --- services/api test: duration_ms: 5.129373 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loadServerConfig defaults the data directory to the repository data dir services/api test: ok 599 - loadServerConfig defaults the data directory to the repository data dir services/api test: --- services/api test: duration_ms: 0.399816 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loadServerConfig preserves an explicit network bind services/api test: ok 600 - loadServerConfig preserves an explicit network bind services/api test: --- services/api test: duration_ms: 0.163519 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loadServerConfig derives the paper env from a relocated data dir services/api test: ok 601 - loadServerConfig derives the paper env from a relocated data dir services/api test: --- services/api test: duration_ms: 0.278119 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loadServerConfig validates the port services/api test: ok 602 - loadServerConfig validates the port services/api test: --- services/api test: duration_ms: 0.585878 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: loadServerConfig validates gateway timeout bounds services/api test: ok 603 - loadServerConfig validates gateway timeout bounds services/api test: --- services/api test: duration_ms: 0.354593 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: creating a Project opens an implicit Session and refines its first-message title services/api test: ok 604 - creating a Project opens an implicit Session and refines its first-message title services/api test: --- services/api test: duration_ms: 1763.577691 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: every later unnamed Session independently reuses first-message automatic naming services/api test: ok 605 - every later unnamed Session independently reuses first-message automatic naming services/api test: --- services/api test: duration_ms: 2031.616767 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement completes while the first task is still running services/api test: ok 606 - Session title refinement completes while the first task is still running services/api test: --- services/api test: duration_ms: 812.852811 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement persists when the naming model finishes after the run stream closes services/api test: ok 607 - Session title refinement persists when the naming model finishes after the run stream closes services/api test: --- services/api test: duration_ms: 863.957476 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: concurrent first messages keep every run and auto-name only once from queue order one services/api test: ok 608 - concurrent first messages keep every run and auto-name only once from queue order one services/api test: --- services/api test: duration_ms: 1509.738696 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an asynchronous title refinement never overwrites a manual rename services/api test: ok 609 - an asynchronous title refinement never overwrites a manual rename services/api test: --- services/api test: duration_ms: 914.327281 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a second message never triggers another naming request services/api test: ok 610 - a second message never triggers another naming request services/api test: --- services/api test: duration_ms: 1484.912121 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an explicitly named Session is never auto-renamed services/api test: ok 611 - an explicitly named Session is never auto-renamed services/api test: --- services/api test: duration_ms: 797.848101 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: aggregateToolText preserves every textual tool-result block services/api test: ok 612 - aggregateToolText preserves every textual tool-result block services/api test: --- services/api test: duration_ms: 0.449689 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: permission wait timeout and abort cancel only the abandoned request and emit its terminal state services/api test: ok 613 - permission wait timeout and abort cancel only the abandoned request and emit its terminal state services/api test: --- services/api test: duration_ms: 209.785604 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runtime-status Kernel teardown is authenticated and proxied to the Runner services/api test: ok 614 - runtime-status Kernel teardown is authenticated and proxied to the Runner services/api test: --- services/api test: duration_ms: 195.900834 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: timeout settings drive live runs, runtime status, and persistent explainable timeout messages services/api test: ok 615 - timeout settings drive live runs, runtime status, and persistent explainable timeout messages services/api test: --- services/api test: duration_ms: 6321.096028 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: native MCP literature flow produces an audited cited summary services/api test: ok 616 - native MCP literature flow produces an audited cited summary services/api test: --- services/api test: duration_ms: 2062.812947 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: workbench search and Composer references use authenticated authoritative identities services/api test: ok 617 - workbench search and Composer references use authenticated authoritative identities services/api test: --- services/api test: duration_ms: 1025.227467 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: running sessions accept queued runs and start them after the active run completes services/api test: ok 618 - running sessions accept queued runs and start them after the active run completes services/api test: --- services/api test: duration_ms: 1527.543717 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: completed runs persist the assistant message identity used by hydrated timeline deduplication services/api test: ok 619 - completed runs persist the assistant message identity used by hydrated timeline deduplication services/api test: --- services/api test: duration_ms: 691.987439 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: environment setup and mutation routes reject unauthenticated callers services/api test: ok 620 - environment setup and mutation routes reject unauthenticated callers services/api test: --- services/api test: duration_ms: 243.88221 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: authenticated environment catalog routes proxy create, install, uninstall, and delete services/api test: ok 621 - authenticated environment catalog routes proxy create, install, uninstall, and delete services/api test: --- services/api test: duration_ms: 340.607193 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the built-in Runner answers setup queries before its scientific environments exist services/api test: ok 622 - the built-in Runner answers setup queries before its scientific environments exist services/api test: --- services/api test: duration_ms: 254.380599 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an active run keeps its effective settings snapshot while later runs use updates services/api test: ok 623 - an active run keeps its effective settings snapshot while later runs use updates services/api test: --- services/api test: duration_ms: 1760.988656 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill lifecycle APIs author, import, edit, select, audit impact, and delete safely services/api test: ok 624 - skill lifecycle APIs author, import, edit, select, audit impact, and delete safely services/api test: --- services/api test: duration_ms: 603.221793 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Agent-created Skill stays in draft until review publishes it to a Skill Library services/api test: ok 625 - Agent-created Skill stays in draft until review publishes it to a Skill Library services/api test: --- services/api test: duration_ms: 1801.60055 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: PDF upload extracts full text and tables into the session workspace services/api test: ok 626 - PDF upload extracts full text and tables into the session workspace services/api test: --- services/api test: duration_ms: 1450.918333 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: legacy Reviewer does not inject findings or block the main agent services/api test: ok 627 - legacy Reviewer does not inject findings or block the main agent services/api test: --- services/api test: duration_ms: 853.665507 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API runs a configured OpenAI-compatible model through the gateway and Python services/api test: ok 628 - API runs a configured OpenAI-compatible model through the gateway and Python services/api test: --- services/api test: duration_ms: 3216.322174 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API runs one observable subagent through task and keeps nested task denied services/api test: ok 629 - API runs one observable subagent through task and keeps nested task denied services/api test: --- services/api test: duration_ms: 1639.791068 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API does not auto-select a specialist by description for a subagent type services/api test: ok 630 - API does not auto-select a specialist by description for a subagent type services/api test: --- services/api test: duration_ms: 1756.543529 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API validates subagent Brief v1 structured output before summarizing task result services/api test: ok 631 - API validates subagent Brief v1 structured output before summarizing task result services/api test: --- services/api test: duration_ms: 1691.296181 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent handoff skips oversized parent files instead of failing the run setup services/api test: ok 632 - subagent handoff skips oversized parent files instead of failing the run setup services/api test: --- services/api test: duration_ms: 630.485991 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent handoff copies only declared or referenced parent files services/api test: ok 633 - subagent handoff copies only declared or referenced parent files services/api test: --- services/api test: duration_ms: 466.800704 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent handoff keeps both aliases on one committed source despite parent changes services/api test: ok 634 - subagent handoff keeps both aliases on one committed source despite parent changes services/api test: --- services/api test: duration_ms: 362.220513 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent handoff does not implicitly copy the only parent file services/api test: ok 635 - subagent handoff does not implicitly copy the only parent file services/api test: --- services/api test: duration_ms: 248.731651 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent handoff preserves copied input snapshots for audit services/api test: ok 636 - subagent handoff preserves copied input snapshots for audit services/api test: --- services/api test: duration_ms: 415.314613 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API fails subagents when structured output fails schema validation services/api test: ok 637 - API fails subagents when structured output fails schema validation services/api test: --- services/api test: duration_ms: 1714.027088 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API preserves raw subagent structured output when final JSON parsing fails services/api test: ok 638 - API preserves raw subagent structured output when final JSON parsing fails services/api test: --- services/api test: duration_ms: 1566.205278 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API PATCH endpoint updates a non-running subagent brief and rejects running updates services/api test: ok 639 - API PATCH endpoint updates a non-running subagent brief and rejects running updates services/api test: --- services/api test: duration_ms: 1762.193636 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: manual subagent permission requests use the outer SSE sink and refresh the shared epoch services/api test: ok 640 - manual subagent permission requests use the outer SSE sink and refresh the shared epoch services/api test: --- services/api test: duration_ms: 2709.767857 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: concurrent permission decisions serialize and return an authoritative conflict services/api test: ok 641 - concurrent permission decisions serialize and return an authoritative conflict services/api test: --- services/api test: duration_ms: 246.85582 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: switching an active run to always-allow resolves its pending subagent action services/api test: ok 642 - switching an active run to always-allow resolves its pending subagent action services/api test: --- services/api test: duration_ms: 2903.964365 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: switching to always-allow during a run stops asking for the tool calls that follow services/api test: ok 643 - switching to always-allow during a run stops asking for the tool calls that follow services/api test: --- services/api test: duration_ms: 2890.546289 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: switching to ask during a run stops the tool calls that follow for approval services/api test: ok 644 - switching to ask during a run stops the tool calls that follow for approval services/api test: --- services/api test: duration_ms: 3037.482981 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: manual concurrent actions keep independent live waiters and resume independently services/api test: ok 645 - manual concurrent actions keep independent live waiters and resume independently services/api test: --- services/api test: duration_ms: 3668.26589 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: allow-matching resolves every currently pending action covered by the Session grant services/api test: ok 646 - allow-matching resolves every currently pending action covered by the Session grant services/api test: --- services/api test: duration_ms: 3402.893629 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: always-allow executes subagent code without permission requests or grants services/api test: ok 647 - always-allow executes subagent code without permission requests or grants services/api test: --- services/api test: duration_ms: 2721.351459 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: failed subagent tool steps retain raw input and the full error result services/api test: ok 648 - failed subagent tool steps retain raw input and the full error result services/api test: --- services/api test: duration_ms: 2601.291068 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API flushes in-flight subagent progress before the run completes services/api test: ok 649 - API flushes in-flight subagent progress before the run completes services/api test: --- services/api test: duration_ms: 1761.238083 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API runs two task calls concurrently with independent persisted records services/api test: ok 650 - API runs two task calls concurrently with independent persisted records services/api test: --- services/api test: duration_ms: 2145.681988 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: API rolls surplus task calls through the bounded per-run concurrency pool services/api test: ok 651 - API rolls surplus task calls through the bounded per-run concurrency pool services/api test: --- services/api test: duration_ms: 5971.508889 services/api test: type: 'test' services/api test: ... services/api test: # Could not clean up deleted Session research: TypeError: fetch failed services/api test: # at node:internal/deps/undici/undici:13510:13 services/api test: # at process.processTicksAndRejections (node:internal/process/task_queues:105:5) services/api test: # at async Object.cleanup (file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/api/dist/idea-tree/research.js:89:26) { services/api test: # [cause]: Error: connect ECONNREFUSED 127.0.0.1:4313 services/api test: # at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1637:16) services/api test: # at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) { services/api test: # errno: -111, services/api test: # code: 'ECONNREFUSED', services/api test: # syscall: 'connect', services/api test: # address: '127.0.0.1', services/api test: # port: 4313 services/api test: # } services/api test: # } services/api test: # Could not clean up deleted Project research: TypeError: fetch failed services/api test: # at node:internal/deps/undici/undici:13510:13 services/api test: # at process.processTicksAndRejections (node:internal/process/task_queues:105:5) services/api test: # at async Object.cleanup (file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/api/dist/idea-tree/research.js:89:26) services/api test: # at async Promise.all (index 0) { services/api test: # [cause]: Error: connect ECONNREFUSED 127.0.0.1:4313 services/api test: # at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1637:16) services/api test: # at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) { services/api test: # errno: -111, services/api test: # code: 'ECONNREFUSED', services/api test: # syscall: 'connect', services/api test: # address: '127.0.0.1', services/api test: # port: 4313 services/api test: # } services/api test: # } services/api test: # Subtest: hierarchical settings and Project/Session lifecycle APIs preserve and delete the expected data services/api test: ok 652 - hierarchical settings and Project/Session lifecycle APIs preserve and delete the expected data services/api test: --- services/api test: duration_ms: 843.478387 services/api test: type: 'test' services/api test: ... services/api test: # Could not clean up deleted Session research: TypeError: fetch failed services/api test: # at node:internal/deps/undici/undici:13510:13 services/api test: # at process.processTicksAndRejections (node:internal/process/task_queues:105:5) services/api test: # at async Object.cleanup (file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/api/dist/idea-tree/research.js:89:26) { services/api test: # [cause]: Error: connect ECONNREFUSED 127.0.0.1:4313 services/api test: # at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1637:16) services/api test: # at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) { services/api test: # errno: -111, services/api test: # code: 'ECONNREFUSED', services/api test: # syscall: 'connect', services/api test: # address: '127.0.0.1', services/api test: # port: 4313 services/api test: # } services/api test: # } services/api test: # Could not clean up deleted Project research: TypeError: fetch failed services/api test: # at node:internal/deps/undici/undici:13510:13 services/api test: # at process.processTicksAndRejections (node:internal/process/task_queues:105:5) services/api test: # at async Object.cleanup (file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/api/dist/idea-tree/research.js:89:26) services/api test: # at async Promise.all (index 0) { services/api test: # [cause]: Error: connect ECONNREFUSED 127.0.0.1:4313 services/api test: # at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1637:16) services/api test: # at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) { services/api test: # errno: -111, services/api test: # code: 'ECONNREFUSED', services/api test: # syscall: 'connect', services/api test: # address: '127.0.0.1', services/api test: # port: 4313 services/api test: # } services/api test: # } services/api test: # Subtest: deleting a session/project mirrors the cleanup to the memory-graph sidecar services/api test: ok 653 - deleting a session/project mirrors the cleanup to the memory-graph sidecar services/api test: --- services/api test: duration_ms: 484.69734 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: model connectivity endpoint uses the encrypted saved credential services/api test: ok 654 - model connectivity endpoint uses the encrypted saved credential services/api test: --- services/api test: duration_ms: 206.445953 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: provider REST discovers models, reports upstream failure, and keeps manual fallback honest services/api test: ok 655 - provider REST discovers models, reports upstream failure, and keeps manual fallback honest services/api test: --- services/api test: duration_ms: 235.426529 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: model registry persists multiple profiles and assigns them per session services/api test: ok 656 - model registry persists multiple profiles and assigns them per session services/api test: --- services/api test: duration_ms: 436.35094 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Workspace HTTP writes wait for the active writer and publish refs before returning services/api test: ok 657 - Workspace HTTP writes wait for the active writer and publish refs before returning services/api test: --- services/api test: duration_ms: 692.385435 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WSP-001 multipart upload preserves hashes and exposes specific workspace preview kinds services/api test: ok 658 - WSP-001 multipart upload preserves hashes and exposes specific workspace preview kinds services/api test: --- services/api test: duration_ms: 880.220768 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WSP-003 rejects traversal upload paths and leaves the host untouched services/api test: ok 659 - WSP-003 rejects traversal upload paths and leaves the host untouched services/api test: --- services/api test: duration_ms: 360.857393 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: same-named uploads remain physically isolated and append one Project artifact version chain services/api test: ok 660 - same-named uploads remain physically isolated and append one Project artifact version chain services/api test: --- services/api test: duration_ms: 630.647131 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: artifact outputs endpoint is Session-scoped and rejects an unknown Session services/api test: ok 661 - artifact outputs endpoint is Session-scoped and rejects an unknown Session services/api test: --- services/api test: duration_ms: 253.298842 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Artifact deletion endpoint logically deletes without removing history or workspace files services/api test: ok 662 - Artifact deletion endpoint logically deletes without removing history or workspace files services/api test: --- services/api test: duration_ms: 559.717073 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: recovery cancels and replays undecided approvals for run and subagent scopes services/api test: ok 663 - recovery cancels and replays undecided approvals for run and subagent scopes services/api test: --- services/api test: duration_ms: 224.120752 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancelling a run while a subagent approval is pending persists its terminal state once services/api test: ok 664 - cancelling a run while a subagent approval is pending persists its terminal state once services/api test: --- services/api test: duration_ms: 1049.53517 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stopping a child Agent closes only its wake gate and joins its active model call services/api test: ok 665 - stopping a child Agent closes only its wake gate and joins its active model call services/api test: --- services/api test: duration_ms: 1542.335011 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: delta coalescing merges streamed text without reordering surrounding events services/api test: ok 666 - delta coalescing merges streamed text without reordering surrounding events services/api test: --- services/api test: duration_ms: 0.625294 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: delta coalescing publishes a window when its timer fires services/api test: ok 667 - delta coalescing publishes a window when its timer fires services/api test: --- services/api test: duration_ms: 80.785138 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: delta coalescing preserves producer interval and cannot cross evidence boundaries services/api test: ok 668 - delta coalescing preserves producer interval and cannot cross evidence boundaries services/api test: --- services/api test: duration_ms: 0.475114 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: delta coalescing never merges text across response identities services/api test: ok 669 - delta coalescing never merges text across response identities services/api test: --- services/api test: duration_ms: 0.339309 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: response lifecycle events flush the open delta window before publishing services/api test: ok 670 - response lifecycle events flush the open delta window before publishing services/api test: --- services/api test: duration_ms: 0.199488 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: publishing routes growable payloads into child streams and keeps the main timeline slim services/api test: ok 671 - publishing routes growable payloads into child streams and keeps the main timeline slim services/api test: --- services/api test: duration_ms: 106.786056 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the model catalog endpoint serves the packaged snapshot and keeps it when a refresh fails services/api test: ok 672 - the model catalog endpoint serves the packaged snapshot and keeps it when a refresh fails services/api test: --- services/api test: duration_ms: 203.062879 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: provider model REST saves stated facts and shows them back on the listing services/api test: ok 673 - provider model REST saves stated facts and shows them back on the listing services/api test: --- services/api test: duration_ms: 261.635021 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: closing the server closes the MCP transport it connected at startup services/api test: ok 674 - closing the server closes the MCP transport it connected at startup services/api test: --- services/api test: duration_ms: 95.413607 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WPC-001 GET /api/sessions//web-pages//content returns the CAS body with immutable cache headers services/api test: ok 675 - WPC-001 GET /api/sessions//web-pages//content returns the CAS body with immutable cache headers services/api test: --- services/api test: duration_ms: 251.808023 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WPC-002 GET /api/sessions//web-pages//content returns 404 for every absent precondition services/api test: ok 676 - WPC-002 GET /api/sessions//web-pages//content returns 404 for every absent precondition services/api test: --- services/api test: duration_ms: 228.707181 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WPC-003 the web-page content endpoint requires auth like the rest of /api services/api test: ok 677 - WPC-003 the web-page content endpoint requires auth like the rest of /api services/api test: --- services/api test: duration_ms: 191.290963 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WPC-004 the memory-graph disabled toggle short-circuits the endpoint without crashing services/api test: ok 678 - WPC-004 the memory-graph disabled toggle short-circuits the endpoint without crashing services/api test: --- services/api test: duration_ms: 243.90493 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: WPC-005 a reachable sidecar whose graph is down returns 502, not 404 services/api test: ok 679 - WPC-005 a reachable sidecar whose graph is down returns 502, not 404 services/api test: --- services/api test: duration_ms: 250.459349 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: local Session titles collapse whitespace and truncate by Unicode character services/api test: ok 680 - local Session titles collapse whitespace and truncate by Unicode character services/api test: --- services/api test: duration_ms: 1.344116 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: refined Session titles remove wrappers, labels, and terminal punctuation services/api test: ok 681 - refined Session titles remove wrappers, labels, and terminal punctuation services/api test: --- services/api test: duration_ms: 1.074008 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement uses an OpenAI-compatible model and records provider usage services/api test: ok 682 - Session title refinement uses an OpenAI-compatible model and records provider usage services/api test: --- services/api test: duration_ms: 28.863399 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement disables DeepSeek thinking mode services/api test: ok 683 - Session title refinement disables DeepSeek thinking mode services/api test: --- services/api test: duration_ms: 0.912795 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement disables thinking on ark too, not just deepseek services/api test: ok 684 - Session title refinement disables thinking on ark too, not just deepseek services/api test: --- services/api test: duration_ms: 0.737422 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement leaves thinking alone on endpoints that do not take the flag services/api test: ok 685 - Session title refinement leaves thinking alone on endpoints that do not take the flag services/api test: --- services/api test: duration_ms: 0.585523 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement disables thinking for compatible DeepSeek and GLM model IDs services/api test: ok 686 - Session title refinement disables thinking for compatible DeepSeek and GLM model IDs services/api test: --- services/api test: duration_ms: 1.124018 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement retries without thinking for a strict compatible endpoint services/api test: ok 687 - Session title refinement retries without thinking for a strict compatible endpoint services/api test: --- services/api test: duration_ms: 3.990691 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement retries without a token limit when a gateway ignores thinking control services/api test: ok 688 - Session title refinement retries without a token limit when a gateway ignores thinking control services/api test: --- services/api test: duration_ms: 1.927142 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement keeps a usable provider-limited title services/api test: ok 689 - Session title refinement keeps a usable provider-limited title services/api test: --- services/api test: duration_ms: 0.911286 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Session title refinement rejects a provider-truncated empty title services/api test: ok 690 - Session title refinement rejects a provider-truncated empty title services/api test: --- services/api test: duration_ms: 0.910395 services/api test: type: 'test' services/api test: ... services/api test: # (node:7627) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: accepted background work outlives waiting and publishes a notice only after provenance services/api test: ok 691 - accepted background work outlives waiting and publishes a notice only after provenance services/api test: --- services/api test: duration_ms: 69.492399 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: explicit cancellation retains committed result and stopped Agent inbox without waking it services/api test: ok 692 - explicit cancellation retains committed result and stopped Agent inbox without waking it services/api test: --- services/api test: duration_ms: 37.600504 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: lost submission and API restart are unknown, never command replay services/api test: ok 693 - lost submission and API restart are unknown, never command replay services/api test: --- services/api test: duration_ms: 39.548356 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: uncommitted Runner result or mismatched identity cannot publish successful completion services/api test: ok 694 - uncommitted Runner result or mismatched identity cannot publish successful completion services/api test: --- services/api test: duration_ms: 42.240152 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancellation before process admission records a terminal outcome without fabricating a snapshot services/api test: ok 695 - cancellation before process admission records a terminal outcome without fabricating a snapshot services/api test: --- services/api test: duration_ms: 28.845306 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: remote execution observations keep Runner receipts outside the API CAS closure, including saved results services/api test: ok 696 - remote execution observations keep Runner receipts outside the API CAS closure, including saved results services/api test: --- services/api test: duration_ms: 107.42524 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: local execution results retain strong snapshot dependencies and reject missing local objects services/api test: ok 697 - local execution results retain strong snapshot dependencies and reject missing local objects services/api test: --- services/api test: duration_ms: 40.821862 services/api test: type: 'test' services/api test: ... services/api test: # (node:7640) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: skill library HTTP APIs create, dry-run, commit, diff, and rollback versions services/api test: ok 698 - skill library HTTP APIs create, dry-run, commit, diff, and rollback versions services/api test: --- services/api test: duration_ms: 72.100275 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library HTTP APIs return conflicts without publishing stale writes services/api test: ok 699 - skill library HTTP APIs return conflicts without publishing stale writes services/api test: --- services/api test: duration_ms: 11.199561 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library HTTP APIs create, list, reject, and publish self-evolution proposals services/api test: ok 700 - skill library HTTP APIs create, list, reject, and publish self-evolution proposals services/api test: --- services/api test: duration_ms: 16.60779 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library HTTP APIs publish selected self-evolution proposals as one version services/api test: ok 701 - skill library HTTP APIs publish selected self-evolution proposals as one version services/api test: --- services/api test: duration_ms: 32.206883 services/api test: type: 'test' services/api test: ... services/api test: # (node:7653) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: skill libraries commit batches atomically, diff versions, and rollback by creating a new version services/api test: ok 702 - skill libraries commit batches atomically, diff versions, and rollback by creating a new version services/api test: --- services/api test: duration_ms: 50.222761 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library commits report stale base conflicts without moving head services/api test: ok 703 - skill library commits report stale base conflicts without moving head services/api test: --- services/api test: duration_ms: 27.157955 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library self-evolution proposals dry-run before user publication services/api test: ok 704 - skill library self-evolution proposals dry-run before user publication services/api test: --- services/api test: duration_ms: 15.765978 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library self-evolution proposals publish as one merged version services/api test: ok 705 - skill library self-evolution proposals publish as one merged version services/api test: --- services/api test: duration_ms: 36.680664 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library self-evolution proposals reject read-only built-in libraries services/api test: ok 706 - skill library self-evolution proposals reject read-only built-in libraries services/api test: --- services/api test: duration_ms: 96.715273 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library references are validated against immutable version hashes services/api test: ok 707 - skill library references are validated against immutable version hashes services/api test: --- services/api test: duration_ms: 6.37954 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library search returns bounded candidates from mounted versions services/api test: ok 708 - skill library search returns bounded candidates from mounted versions services/api test: --- services/api test: duration_ms: 27.958967 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: recalled skill library snapshots expose immutable complete package files services/api test: ok 709 - recalled skill library snapshots expose immutable complete package files services/api test: --- services/api test: duration_ms: 9.97525 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library package storage accepts paths whose segment starts with dots services/api test: ok 710 - skill library package storage accepts paths whose segment starts with dots services/api test: --- services/api test: duration_ms: 8.575733 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: queued runs pin enabled skill library heads to immutable version refs services/api test: ok 711 - queued runs pin enabled skill library heads to immutable version refs services/api test: --- services/api test: duration_ms: 180.326649 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run-level skill self-evolution queues a guided proposal run services/api test: ok 712 - run-level skill self-evolution queues a guided proposal run services/api test: --- services/api test: duration_ms: 153.146741 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill library catalog seeds bundled skills into a stable built-in library services/api test: ok 713 - skill library catalog seeds bundled skills into a stable built-in library services/api test: --- services/api test: duration_ms: 108.86681 services/api test: type: 'test' services/api test: ... services/api test: # (node:7666) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: prepares only selected complete frozen Skill packages before sandbox execution services/api test: ok 714 - prepares only selected complete frozen Skill packages before sandbox execution services/api test: --- services/api test: duration_ms: 24.558092 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the package set hash is stable per selected Skill set so one snapshot is shared services/api test: ok 715 - the package set hash is stable per selected Skill set so one snapshot is shared services/api test: --- services/api test: duration_ms: 10.781707 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stages the frozen revision even after the live package is edited on disk services/api test: ok 716 - stages the frozen revision even after the live package is edited on disk services/api test: --- services/api test: duration_ms: 57.802975 services/api test: type: 'test' services/api test: ... services/api test: # (node:7679) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: bundled skill registry covers all repository skill directories services/api test: ok 717 - bundled skill registry covers all repository skill directories services/api test: --- services/api test: duration_ms: 16.414833 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: parses Agent Skills frontmatter and rejects invalid metadata services/api test: ok 718 - parses Agent Skills frontmatter and rejects invalid metadata services/api test: --- services/api test: duration_ms: 9.615429 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: discovers multiple Skills in common marketplace repository layouts services/api test: ok 719 - discovers multiple Skills in common marketplace repository layouts services/api test: --- services/api test: duration_ms: 18.233377 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: keeps exact Git commit provenance through review and confirmation services/api test: ok 720 - keeps exact Git commit provenance through review and confirmation services/api test: --- services/api test: duration_ms: 78.975021 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: creates reviewable dialogue and Session drafts without activating them services/api test: ok 721 - creates reviewable dialogue and Session drafts without activating them services/api test: --- services/api test: duration_ms: 0.942766 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: accepts credential-helper Git URLs and rejects embedded credentials or unsafe paths services/api test: ok 722 - accepts credential-helper Git URLs and rejects embedded credentials or unsafe paths services/api test: --- services/api test: duration_ms: 0.810966 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: package validation is path-safe and hashes the complete tree deterministically services/api test: ok 723 - package validation is path-safe and hashes the complete tree deterministically services/api test: --- services/api test: duration_ms: 5.308343 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: imports a rooted ZIP and rejects traversal archives services/api test: ok 724 - imports a rooted ZIP and rejects traversal archives services/api test: --- services/api test: duration_ms: 7.761979 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: creates an Agent-authored managed package with bounded text resources services/api test: ok 725 - creates an Agent-authored managed package with bounded text resources services/api test: --- services/api test: duration_ms: 48.299725 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: keeps Agent-authored Skills inactive until a user confirms the reviewed files services/api test: ok 726 - keeps Agent-authored Skills inactive until a user confirms the reviewed files services/api test: --- services/api test: duration_ms: 57.995528 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: keeps a reviewed Agent draft when its external Library publication fails services/api test: ok 727 - keeps a reviewed Agent draft when its external Library publication fails services/api test: --- services/api test: duration_ms: 20.138905 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: updates one pending Agent Skill draft and compares it with the previous proposal services/api test: ok 728 - updates one pending Agent Skill draft and compares it with the previous proposal services/api test: --- services/api test: duration_ms: 20.035654 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: combines separately named Agent drafts into one stable Skill version history services/api test: ok 729 - combines separately named Agent drafts into one stable Skill version history services/api test: --- services/api test: duration_ms: 28.926215 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: merges drafts that share a timestamp in the order they were listed services/api test: ok 730 - merges drafts that share a timestamp in the order they were listed services/api test: --- services/api test: duration_ms: 56.148458 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: lists every managed revision and edits any UTF-8 package file as a new revision services/api test: ok 731 - lists every managed revision and edits any UTF-8 package file as a new revision services/api test: --- services/api test: duration_ms: 29.300934 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: consolidates legacy duplicate drafts into one review with a proposal diff services/api test: ok 732 - consolidates legacy duplicate drafts into one review with a proposal diff services/api test: --- services/api test: duration_ms: 17.099552 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: persists immutable managed revisions and enforces optimistic concurrency services/api test: ok 733 - persists immutable managed revisions and enforces optimistic concurrency services/api test: --- services/api test: duration_ms: 51.336358 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: complete frozen Skill package files bypass the text read limit and remain immutable services/api test: ok 734 - complete frozen Skill package files bypass the text read limit and remain immutable services/api test: --- services/api test: duration_ms: 109.466808 services/api test: type: 'test' services/api test: ... services/api test: # (node:7694) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: SSH settings preserve credentials and destination through persistence and trust retries services/api test: # Subtest: key file browser is authenticated, metadata-only and reports invalid locations services/api test: ok 1 - key file browser is authenticated, metadata-only and reports invalid locations services/api test: --- services/api test: duration_ms: 277.36205 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: independent job submission and old approval endpoints are retired services/api test: ok 2 - independent job submission and old approval endpoints are retired services/api test: --- services/api test: duration_ms: 13.915148 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: method-level authentication diagnostics persist on credential save and subsequent reads services/api test: ok 3 - method-level authentication diagnostics persist on credential save and subsequent reads services/api test: --- services/api test: duration_ms: 48.210237 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: resolving a historical approval cannot restart bare SSH execution services/api test: ok 4 - resolving a historical approval cannot restart bare SSH execution services/api test: --- services/api test: duration_ms: 0.38666 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: parallel Runner identities on one host retain independent credentials and metadata services/api test: ok 5 - parallel Runner identities on one host retain independent credentials and metadata services/api test: --- services/api test: duration_ms: 37.433063 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: port, password and passphrase survive registration, probe and credential updates services/api test: ok 6 - port, password and passphrase survive registration, probe and credential updates services/api test: --- services/api test: duration_ms: 41.262648 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: generated keys are consumed after saving and trust retries use the saved host services/api test: ok 7 - generated keys are consumed after saving and trust retries use the saved host services/api test: --- services/api test: duration_ms: 29.159158 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: explicit credentials override login without bypassing config destination defaults services/api test: ok 8 - explicit credentials override login without bypassing config destination defaults services/api test: --- services/api test: duration_ms: 23.946851 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: connect host-key failures use the same structured error as probe services/api test: ok 9 - connect host-key failures use the same structured error as probe services/api test: --- services/api test: duration_ms: 6.893717 services/api test: type: 'test' services/api test: ... services/api test: 1..9 services/api test: ok 735 - SSH settings preserve credentials and destination through persistence and trust retries services/api test: --- services/api test: duration_ms: 548.830116 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: key browsing navigates the application filesystem without returning file contents services/api test: ok 736 - key browsing navigates the application filesystem without returning file contents services/api test: --- services/api test: duration_ms: 24.147026 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: key browsing pages large directories without hiding remaining entries services/api test: ok 737 - key browsing pages large directories without hiding remaining entries services/api test: --- services/api test: duration_ms: 28.798376 services/api test: type: 'test' services/api test: ... services/api test: # (node:7718) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: Session deletion waits for main/child commits and fences late creation; final CAS is retained services/api test: ok 738 - Session deletion waits for main/child commits and fences late creation; final CAS is retained services/api test: --- services/api test: duration_ms: 465.970976 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: catalog failure rolls back Session root and reopens admission only after restoring files services/api test: ok 739 - catalog failure rolls back Session root and reopens admission only after restoring files services/api test: --- services/api test: duration_ms: 281.329056 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: startup restores a staged Session under its persistent deletion gate services/api test: ok 740 - startup restores a staged Session under its persistent deletion gate services/api test: --- services/api test: duration_ms: 262.395037 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Project deletion waits for admitted Session creation and blocks subsequent creation services/api test: ok 741 - Project deletion waits for admitted Session creation and blocks subsequent creation services/api test: --- services/api test: duration_ms: 298.91404 services/api test: type: 'test' services/api test: ... services/api test: # (node:7733) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: remote environment audit revisions never replace the local catalog or disappear on refresh services/api test: ok 742 - remote environment audit revisions never replace the local catalog or disappear on refresh services/api test: --- services/api test: duration_ms: 110.254671 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: server-generated Artifacts reject non-server versions with the same logical name services/api test: ok 743 - server-generated Artifacts reject non-server versions with the same logical name services/api test: --- services/api test: duration_ms: 108.750016 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists global package sources and migrates old catalogs to upstream services/api test: ok 744 - SessionStore persists global package sources and migrates old catalogs to upstream services/api test: --- services/api test: duration_ms: 91.45152 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore seeds web connector on first load of a pre-migration catalog and never re-seeds services/api test: ok 745 - SessionStore seeds web connector on first load of a pre-migration catalog and never re-seeds services/api test: --- services/api test: duration_ms: 86.223855 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: late execution provenance retains history without rolling back the latest business revision services/api test: ok 746 - late execution provenance retains history without rolling back the latest business revision services/api test: --- services/api test: duration_ms: 348.694806 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Reviewer Specialist levels are cumulative services/api test: ok 747 - Reviewer Specialist levels are cumulative services/api test: --- services/api test: duration_ms: 0.371987 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore keeps stable Workspace file identities, revisions, and cross-Session lineage services/api test: ok 748 - SessionStore keeps stable Workspace file identities, revisions, and cross-Session lineage services/api test: --- services/api test: duration_ms: 302.897409 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore marks an unrecorded Workspace overwrite as unknown services/api test: ok 749 - SessionStore marks an unrecorded Workspace overwrite as unknown services/api test: --- services/api test: duration_ms: 170.862659 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: truncated Workspace scans preserve provenance beyond the 500-file list limit services/api test: ok 750 - truncated Workspace scans preserve provenance beyond the 500-file list limit services/api test: --- services/api test: duration_ms: 377.130439 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists a Reviewer Specialist conversation checkpoint services/api test: ok 751 - SessionStore persists a Reviewer Specialist conversation checkpoint services/api test: --- services/api test: duration_ms: 104.596481 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists the global Reviewer switch and per-Session automatic review settings services/api test: ok 752 - SessionStore persists the global Reviewer switch and per-Session automatic review settings services/api test: --- services/api test: duration_ms: 94.046324 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore appends run events losslessly and survives reload services/api test: ok 753 - SessionStore appends run events losslessly and survives reload services/api test: --- services/api test: duration_ms: 648.185234 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore serializes concurrent model usage writes without losing records services/api test: ok 754 - SessionStore serializes concurrent model usage writes without losing records services/api test: --- services/api test: duration_ms: 146.787584 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore ignores duplicate model usage attempts but keeps retries services/api test: ok 755 - SessionStore ignores duplicate model usage attempts but keeps retries services/api test: --- services/api test: duration_ms: 136.92812 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore serializes concurrent Session run creation and updates services/api test: ok 756 - SessionStore serializes concurrent Session run creation and updates services/api test: --- services/api test: duration_ms: 150.208055 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists global web settings while keeping provider keys write-only services/api test: ok 757 - SessionStore persists global web settings while keeping provider keys write-only services/api test: --- services/api test: duration_ms: 89.697917 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore manages registry defaults and independent module policies services/api test: ok 758 - SessionStore manages registry defaults and independent module policies services/api test: --- services/api test: duration_ms: 93.530121 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore migrates legacy web proxy modes into the authenticated settings projection services/api test: ok 759 - SessionStore migrates legacy web proxy modes into the authenticated settings projection services/api test: --- services/api test: duration_ms: 204.783612 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: proxy settings project supported authenticated URLs while catalog and SQLite remain secret-safe services/api test: ok 760 - proxy settings project supported authenticated URLs while catalog and SQLite remain secret-safe services/api test: --- services/api test: duration_ms: 74.883404 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: recovering a large run stream does not load the whole file into the heap services/api test: ok 761 - recovering a large run stream does not load the whole file into the heap services/api test: --- services/api test: duration_ms: 1434.37062 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run event streams repair a torn tail and keep sequences monotonic services/api test: ok 762 - run event streams repair a torn tail and keep sequences monotonic services/api test: --- services/api test: duration_ms: 129.505169 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: legacy array run event files stay readable and later appends continue their sequences services/api test: ok 763 - legacy array run event files stay readable and later appends continue their sequences services/api test: --- services/api test: duration_ms: 89.235737 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: run child streams append independently of the main timeline services/api test: ok 764 - run child streams append independently of the main timeline services/api test: --- services/api test: duration_ms: 100.106553 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore serializes concurrent artifact job updates and writes complete JSON services/api test: ok 765 - SessionStore serializes concurrent artifact job updates and writes complete JSON services/api test: --- services/api test: duration_ms: 97.561499 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore serializes concurrent session run mutations without losing updates services/api test: ok 766 - SessionStore serializes concurrent session run mutations without losing updates services/api test: --- services/api test: duration_ms: 108.407607 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore serializes concurrent execution appends without losing provenance services/api test: ok 767 - SessionStore serializes concurrent execution appends without losing provenance services/api test: --- services/api test: duration_ms: 92.780435 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore encrypts model API tokens and preserves them across reloads services/api test: ok 768 - SessionStore encrypts model API tokens and preserves them across reloads services/api test: --- services/api test: duration_ms: 77.651092 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists model protocol settings and migrates legacy defaults services/api test: ok 769 - SessionStore persists model protocol settings and migrates legacy defaults services/api test: --- services/api test: duration_ms: 68.066487 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore preserves provider model context across user turns services/api test: ok 770 - SessionStore preserves provider model context across user turns services/api test: --- services/api test: duration_ms: 108.346425 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore removes the legacy demo profile and reassigns sessions to a configured model services/api test: ok 771 - SessionStore removes the legacy demo profile and reassigns sessions to a configured model services/api test: --- services/api test: duration_ms: 72.331718 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore leaves legacy sessions unassigned when no configured model exists services/api test: ok 772 - SessionStore leaves legacy sessions unassigned when no configured model exists services/api test: --- services/api test: duration_ms: 65.944024 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore migrates legacy delegation tracks into subagent records services/api test: ok 773 - SessionStore migrates legacy delegation tracks into subagent records services/api test: --- services/api test: duration_ms: 68.769525 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore migrates legacy runtime settings once and preserves effective values across reloads services/api test: ok 774 - SessionStore migrates legacy runtime settings once and preserves effective values across reloads services/api test: --- services/api test: duration_ms: 73.542375 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore defaults new projects to selected mode with no mounted skill libraries services/api test: ok 775 - SessionStore defaults new projects to selected mode with no mounted skill libraries services/api test: --- services/api test: duration_ms: 108.267504 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore resolves and persists hierarchical runtime settings services/api test: ok 776 - SessionStore resolves and persists hierarchical runtime settings services/api test: --- services/api test: duration_ms: 130.359326 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore seeds, validates, and persists product timeout settings services/api test: ok 777 - SessionStore seeds, validates, and persists product timeout settings services/api test: --- services/api test: duration_ms: 61.32213 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore seeds, validates, and persists memory-graph settings + password services/api test: ok 778 - SessionStore seeds, validates, and persists memory-graph settings + password services/api test: --- services/api test: duration_ms: 77.863121 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore tolerates a legacy neo4jBolt key without wedging boot services/api test: ok 779 - SessionStore tolerates a legacy neo4jBolt key without wedging boot services/api test: --- services/api test: duration_ms: 0.182069 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore seeds the memory-graph password from env on first load only services/api test: ok 780 - SessionStore seeds the memory-graph password from env on first load only services/api test: --- services/api test: duration_ms: 64.587231 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore keeps an explicit local backend even when a Neo4j password is saved services/api test: ok 781 - SessionStore keeps an explicit local backend even when a Neo4j password is saved services/api test: --- services/api test: duration_ms: 66.026554 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore preserves managed skill selections when the catalog is restored before settings migration services/api test: ok 782 - SessionStore preserves managed skill selections when the catalog is restored before settings migration services/api test: --- services/api test: duration_ms: 104.218356 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: skill selection defaults to all, is configured from Project down, and ignores Global services/api test: ok 783 - skill selection defaults to all, is configured from Project down, and ignores Global services/api test: --- services/api test: duration_ms: 165.575264 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore rejects invalid settings atomically and protects referenced models services/api test: ok 784 - SessionStore rejects invalid settings atomically and protects referenced models services/api test: --- services/api test: duration_ms: 109.239092 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore validates the effective task model before creating Session data services/api test: ok 785 - SessionStore validates the effective task model before creating Session data services/api test: --- services/api test: duration_ms: 65.77286 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore defaults the global task model to the first configured model services/api test: ok 786 - SessionStore defaults the global task model to the first configured model services/api test: --- services/api test: duration_ms: 106.243619 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists validated Project and Session renames services/api test: ok 787 - SessionStore persists validated Project and Session renames services/api test: --- services/api test: duration_ms: 124.794848 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore archives Sessions as read-only and restores all historical data services/api test: ok 788 - SessionStore archives Sessions as read-only and restores all historical data services/api test: --- services/api test: duration_ms: 113.189008 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore permanently deletes Session and Project cascades from catalog and disk services/api test: ok 789 - SessionStore permanently deletes Session and Project cascades from catalog and disk services/api test: --- services/api test: duration_ms: 299.380695 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: listSessionArtifactOutputs returns only declared, live Artifact versions from the requested Session services/api test: ok 790 - listSessionArtifactOutputs returns only declared, live Artifact versions from the requested Session services/api test: --- services/api test: duration_ms: 108.841305 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: deleting a Session removes the stored tool output its history still references services/api test: ok 791 - deleting a Session removes the stored tool output its history still references services/api test: --- services/api test: duration_ms: 194.867169 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore preserves data when deletion staging cannot start services/api test: ok 792 - SessionStore preserves data when deletion staging cannot start services/api test: --- services/api test: duration_ms: 112.53873 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore recovers uncommitted trash and removes committed orphan trash on startup services/api test: ok 793 - SessionStore recovers uncommitted trash and removes committed orphan trash on startup services/api test: --- services/api test: duration_ms: 126.802976 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore persists specialists and isolated subagents services/api test: ok 794 - SessionStore persists specialists and isolated subagents services/api test: --- services/api test: duration_ms: 188.382359 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore falls back to an ordinary subagent when a specialist id is missing services/api test: ok 795 - SessionStore falls back to an ordinary subagent when a specialist id is missing services/api test: --- services/api test: duration_ms: 106.949111 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore updates a non-running subagent brief with auto-incrementing version services/api test: ok 796 - SessionStore updates a non-running subagent brief with auto-incrementing version services/api test: --- services/api test: duration_ms: 113.704577 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore owns subagent brief versions and serializes concurrent PATCH responses services/api test: ok 797 - SessionStore owns subagent brief versions and serializes concurrent PATCH responses services/api test: --- services/api test: duration_ms: 108.678559 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore recovers flushed running subagents as failed after restart services/api test: ok 798 - SessionStore recovers flushed running subagents as failed after restart services/api test: --- services/api test: duration_ms: 117.57055 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore gates privileged actions with Session-scoped matching grants and per-action authorizations services/api test: ok 799 - SessionStore gates privileged actions with Session-scoped matching grants and per-action authorizations services/api test: --- services/api test: duration_ms: 140.855014 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore allow-once leaves matching pending siblings independently decidable services/api test: ok 800 - SessionStore allow-once leaves matching pending siblings independently decidable services/api test: --- services/api test: duration_ms: 142.779037 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore always-allow bypasses permission cards without leaving reusable grants services/api test: ok 801 - SessionStore always-allow bypasses permission cards without leaving reusable grants services/api test: --- services/api test: duration_ms: 348.813823 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore resolves every pending action when always-allow is enabled and cancels orphaned executions services/api test: ok 802 - SessionStore resolves every pending action when always-allow is enabled and cancels orphaned executions services/api test: --- services/api test: duration_ms: 118.723805 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: one-time preflight authorizations are consumed once without creating a grant services/api test: ok 803 - one-time preflight authorizations are consumed once without creating a grant services/api test: --- services/api test: duration_ms: 123.04288 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Project runner defaults are inherited, not a ceiling on independent Session selections services/api test: ok 804 - Project runner defaults are inherited, not a ceiling on independent Session selections services/api test: --- services/api test: duration_ms: 156.022076 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SessionStore auto-submits remote jobs and keeps manual jobs independently approval-gated services/api test: ok 805 - SessionStore auto-submits remote jobs and keeps manual jobs independently approval-gated services/api test: --- services/api test: duration_ms: 148.883555 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: latestReportReferences returns the chip references on the newest report version without draining services/api test: ok 806 - latestReportReferences returns the chip references on the newest report version without draining services/api test: --- services/api test: duration_ms: 183.752877 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: updateMessageReferences back-fills chip references onto an assistant message and survives reload services/api test: ok 807 - updateMessageReferences back-fills chip references onto an assistant message and survives reload services/api test: --- services/api test: duration_ms: 107.270685 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: updateMessageReferences leaves a failed run's assistant message with chips once a report version lands services/api test: ok 808 - updateMessageReferences leaves a failed run's assistant message with chips once a report version lands services/api test: --- services/api test: duration_ms: 99.215139 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: model providers: preset creation, token fallback, sync, and lifecycle services/api test: ok 809 - model providers: preset creation, token fallback, sync, and lifecycle services/api test: --- services/api test: duration_ms: 78.623178 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: provider models materialize exact Kimi, Responses, and Anthropic capabilities services/api test: ok 810 - provider models materialize exact Kimi, Responses, and Anthropic capabilities services/api test: --- services/api test: duration_ms: 72.006315 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: model providers: custom provider persistence and token-optional runs services/api test: ok 811 - model providers: custom provider persistence and token-optional runs services/api test: --- services/api test: duration_ms: 65.571524 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: runtime settings carry legal thinking overrides through scopes and narrow invalid updates services/api test: ok 812 - runtime settings carry legal thinking overrides through scopes and narrow invalid updates services/api test: --- services/api test: duration_ms: 104.530275 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: switching Session models persists a legal model-level effort across reloads services/api test: ok 813 - switching Session models persists a legal model-level effort across reloads services/api test: --- services/api test: duration_ms: 134.721069 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: standalone profiles are grouped into one migrated provider per connection services/api test: ok 814 - standalone profiles are grouped into one migrated provider per connection services/api test: --- services/api test: duration_ms: 135.046073 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: migrating never merges credentials across profiles in the same group services/api test: ok 815 - migrating never merges credentials across profiles in the same group services/api test: --- services/api test: duration_ms: 75.646466 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a legacy catalog with standalone profiles migrates on load without any user step services/api test: ok 816 - a legacy catalog with standalone profiles migrates on load without any user step services/api test: --- services/api test: duration_ms: 62.087135 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: manually added provider models accept a name, vision and legal thinking defaults services/api test: ok 817 - manually added provider models accept a name, vision and legal thinking defaults services/api test: --- services/api test: duration_ms: 65.290538 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: facts the user states for a model are persisted and survive a reopen services/api test: ok 818 - facts the user states for a model are persisted and survive a reopen services/api test: --- services/api test: duration_ms: 76.126634 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: refreshing the model catalog does not overwrite what the user stated services/api test: ok 819 - refreshing the model catalog does not overwrite what the user stated services/api test: --- services/api test: duration_ms: 76.189651 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: re-adding a model replaces only the facts the caller states again services/api test: ok 820 - re-adding a model replaces only the facts the caller states again services/api test: --- services/api test: duration_ms: 77.546184 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: stated facts that cannot be true are rejected instead of stored services/api test: ok 821 - stated facts that cannot be true are rejected instead of stored services/api test: --- services/api test: duration_ms: 60.270666 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: declared effort stops are normalized, narrowed against, and survive a reopen services/api test: ok 822 - declared effort stops are normalized, narrowed against, and survive a reopen services/api test: --- services/api test: duration_ms: 94.185436 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an effort name outside the product's own scale is rejected services/api test: ok 823 - an effort name outside the product's own scale is rejected services/api test: --- services/api test: duration_ms: 63.556648 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a provider saved without a token lets its models run tokenless services/api test: ok 824 - a provider saved without a token lets its models run tokenless services/api test: --- services/api test: duration_ms: 102.834125 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a standalone profile still needs its own token services/api test: ok 825 - a standalone profile still needs its own token services/api test: --- services/api test: duration_ms: 59.8843 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a catalog that stored the removed catalog-only mode is migrated to asking the provider services/api test: ok 826 - a catalog that stored the removed catalog-only mode is migrated to asking the provider services/api test: --- services/api test: duration_ms: 97.030173 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a self-deployed runner keeps its token out of the catalog and loses it with the host services/api test: ok 827 - a self-deployed runner keeps its token out of the catalog and loses it with the host services/api test: --- services/api test: duration_ms: 87.74535 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: hosts saved before self-deployed runners existed load as SSH targets services/api test: ok 828 - hosts saved before self-deployed runners existed load as SSH targets services/api test: --- services/api test: duration_ms: 78.72889 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an SSH machine keeps its optional port, and a Session pinned under the old model keeps that machine allowed services/api test: ok 829 - an SSH machine keeps its optional port, and a Session pinned under the old model keeps that machine allowed services/api test: --- services/api test: duration_ms: 134.967865 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: SSH credentials and a trusted host key are stored encrypted and never returned services/api test: ok 830 - SSH credentials and a trusted host key are stored encrypted and never returned services/api test: --- services/api test: duration_ms: 110.873318 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a runner token stored before SSH credentials existed keeps working services/api test: ok 831 - a runner token stored before SSH credentials existed keeps working services/api test: --- services/api test: duration_ms: 85.256552 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Runner selections treat local and remote alike and preserve legacy defaults across reload services/api test: ok 832 - Runner selections treat local and remote alike and preserve legacy defaults across reload services/api test: --- services/api test: duration_ms: 106.984376 services/api test: type: 'test' services/api test: ... services/api test: # (node:7754) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: a stored paid route migrates to that paid provider alone, free tier off services/api test: ok 833 - a stored paid route migrates to that paid provider alone, free tier off services/api test: --- services/api test: duration_ms: 1.826664 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a stored free route migrates to the free tier without enabling paid providers services/api test: ok 834 - a stored free route migrates to the free tier without enabling paid providers services/api test: --- services/api test: duration_ms: 0.211051 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a paid route with a free fallback keeps both tiers services/api test: ok 835 - a paid route with a free fallback keeps both tiers services/api test: --- services/api test: duration_ms: 0.241722 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: paid providers are stored in the fixed attempt order regardless of input order services/api test: ok 836 - paid providers are stored in the fixed attempt order regardless of input order services/api test: --- services/api test: duration_ms: 0.2697 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: unknown engines and non-boolean switches are rejected rather than coerced services/api test: ok 837 - unknown engines and non-boolean switches are rejected rather than coerced services/api test: --- services/api test: duration_ms: 0.694755 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Idea Tree research budgets survive storage and omitted fields retain their values services/api test: ok 838 - Idea Tree research budgets survive storage and omitted fields retain their values services/api test: --- services/api test: duration_ms: 0.852387 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Idea Tree accepts the server Lead Agent output ceiling services/api test: ok 839 - Idea Tree accepts the server Lead Agent output ceiling services/api test: --- services/api test: duration_ms: 0.300252 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: an existing ssh_config Host can be imported, and an unreadable key says so services/api test: ok 840 - an existing ssh_config Host can be imported, and an unreadable key says so services/api test: --- services/api test: duration_ms: 12.129993 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: the importable ssh_config hosts are listed without touching key material services/api test: ok 841 - the importable ssh_config hosts are listed without touching key material services/api test: --- services/api test: duration_ms: 3.597502 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a generated key waits in the product data directory and is removed once stored services/api test: ok 842 - a generated key waits in the product data directory and is removed once stored services/api test: --- services/api test: duration_ms: 11.850763 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Brief v1 normalization enforces field limits and server-owned version services/api test: ok 843 - Brief v1 normalization enforces field limits and server-owned version services/api test: --- services/api test: duration_ms: 1.51328 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Brief outputJsonSchema uses JSON Schema 2020-12 validation instead of a hand-rolled subset services/api test: ok 844 - Brief outputJsonSchema uses JSON Schema 2020-12 validation instead of a hand-rolled subset services/api test: --- services/api test: duration_ms: 55.921924 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: reopening a child for a wake turn keeps when and how its task ended services/api test: ok 845 - reopening a child for a wake turn keeps when and how its task ended services/api test: --- services/api test: duration_ms: 0.98546 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a wake turn that closes normally does not turn a failed task into a clean success services/api test: ok 846 - a wake turn that closes normally does not turn a failed task into a clean success services/api test: --- services/api test: duration_ms: 0.261649 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: a wake turn's own failure and a completed task's normal wake turn are recorded as they happened services/api test: ok 847 - a wake turn's own failure and a completed task's normal wake turn are recorded as they happened services/api test: --- services/api test: duration_ms: 0.427227 services/api test: type: 'test' services/api test: ... services/api test: # (node:7790) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: parent gateway deadline exceeds the largest allowed subagent timeout services/api test: ok 848 - parent gateway deadline exceeds the largest allowed subagent timeout services/api test: --- services/api test: duration_ms: 1.236327 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent lifecycle distinguishes timeout and max-turn caps services/api test: ok 849 - subagent lifecycle distinguishes timeout and max-turn caps services/api test: --- services/api test: duration_ms: 0.931167 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: subagent lifecycle maps parent abort to cancelled and preserves other failures services/api test: ok 850 - subagent lifecycle maps parent abort to cancelled and preserves other failures services/api test: --- services/api test: duration_ms: 0.294858 services/api test: type: 'test' services/api test: ... services/api test: # (node:7799) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: search tries paid engines first, then free ones, and caches under the engine that answered services/api test: ok 851 - search tries paid engines first, then free ones, and caches under the engine that answered services/api test: --- services/api test: duration_ms: 83.303052 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: unkeyed paid providers and switched-off free engines are never requested services/api test: ok 852 - unkeyed paid providers and switched-off free engines are never requested services/api test: --- services/api test: duration_ms: 76.306084 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: search fails as invalid input when every engine is unavailable services/api test: ok 853 - search fails as invalid input when every engine is unavailable services/api test: --- services/api test: duration_ms: 29.324193 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: web broker hands the resolved registry proxy to the provider services/api test: ok 854 - web broker hands the resolved registry proxy to the provider services/api test: --- services/api test: duration_ms: 68.041419 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: environment policy reaches the provider and still drives the audited proxy flag services/api test: ok 855 - environment policy reaches the provider and still drives the audited proxy flag services/api test: --- services/api test: duration_ms: 72.763687 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: semantic no-results failures give the agent a corrective hint services/api test: ok 856 - semantic no-results failures give the agent a corrective hint services/api test: --- services/api test: duration_ms: 26.687624 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: provider contract failures remain distinct and non-retryable services/api test: ok 857 - provider contract failures remain distinct and non-retryable services/api test: --- services/api test: duration_ms: 44.412829 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: fetch requests host permission and never switch provider services/api test: ok 858 - fetch requests host permission and never switch provider services/api test: --- services/api test: duration_ms: 26.771588 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: successful search mirrors web_page products to the memory graph on live and cache paths services/api test: ok 859 - successful search mirrors web_page products to the memory graph on live and cache paths services/api test: --- services/api test: duration_ms: 64.036521 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: malformed search content never throws and never emits services/api test: ok 860 - malformed search content never throws and never emits services/api test: --- services/api test: duration_ms: 147.241402 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: successful web_fetch mirrors a WebPage with contentHash to the memory graph services/api test: ok 861 - successful web_fetch mirrors a WebPage with contentHash to the memory graph services/api test: --- services/api test: duration_ms: 142.472479 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: server-side query reaches matching mixed-catalog records beyond the first 250 services/api test: ok 862 - server-side query reaches matching mixed-catalog records beyond the first 250 services/api test: --- services/api test: duration_ms: 4.235094 services/api test: type: 'test' services/api test: ... services/api test: # (node:7817) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: local copies have separate bytes and identities, not shared mutable hard links services/api test: ok 863 - local copies have separate bytes and identities, not shared mutable hard links services/api test: --- services/api test: duration_ms: 28.153522 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: publication rejects a file created during streaming, and explicit overwrite replaces it services/api test: ok 864 - publication rejects a file created during streaming, and explicit overwrite replaces it services/api test: --- services/api test: duration_ms: 18.192373 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: source verification and checksum failures clean temporary files without publishing services/api test: ok 865 - source verification and checksum failures clean temporary files without publishing services/api test: --- services/api test: duration_ms: 8.451853 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancelling a streaming publication cleans unfinished data but retains earlier completed files services/api test: ok 866 - cancelling a streaming publication cleans unfinished data but retains earlier completed files services/api test: --- services/api test: duration_ms: 13.014171 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: copy denies traversal and symbolic links at the source, destination and intermediate directory services/api test: ok 867 - copy denies traversal and symbolic links at the source, destination and intermediate directory services/api test: --- services/api test: duration_ms: 40.183937 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: Workspace identity includes Agent and Runner; new child audit paths resolve outside the parent tree services/api test: ok 868 - Workspace identity includes Agent and Runner; new child audit paths resolve outside the parent tree services/api test: --- services/api test: duration_ms: 111.466191 services/api test: type: 'test' services/api test: ... services/api test: # (node:7830) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: one Transfer service covers local/local, local/remote, remote/local and remote/remote services/api test: ok 869 - one Transfer service covers local/local, local/remote, remote/local and remote/remote services/api test: --- services/api test: duration_ms: 483.456925 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: partial failure retains completed files and never labels the entire transfer completed services/api test: ok 870 - partial failure retains completed files and never labels the entire transfer completed services/api test: --- services/api test: duration_ms: 280.872956 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: cancellation after the first publication preserves that file and cancels pending files services/api test: ok 871 - cancellation after the first publication preserves that file and cancels pending files services/api test: --- services/api test: duration_ms: 196.560236 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: old Runner snapshot failure never falls back to live source reads; restart does not replay services/api test: ok 872 - old Runner snapshot failure never falls back to live source reads; restart does not replay services/api test: --- services/api test: duration_ms: 49.379782 services/api test: type: 'test' services/api test: ... services/api test: # (node:7843) ExperimentalWarning: SQLite is an experimental feature and might change at any time services/api test: # (Use `node --trace-warnings ...` to show where the warning was created) services/api test: # Subtest: sanitizeUploadFilename rejects absolute and traversal names services/api test: ok 873 - sanitizeUploadFilename rejects absolute and traversal names services/api test: --- services/api test: duration_ms: 2.447601 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: parseConflictPolicy defaults to rename services/api test: ok 874 - parseConflictPolicy defaults to rename services/api test: --- services/api test: duration_ms: 0.242091 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: allocateUploadPath renames on conflict by default services/api test: ok 875 - allocateUploadPath renames on conflict by default services/api test: --- services/api test: duration_ms: 39.646453 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: writeWorkspaceUpload rejects traversal names instead of basename collapse services/api test: ok 876 - writeWorkspaceUpload rejects traversal names instead of basename collapse services/api test: --- services/api test: duration_ms: 3.572033 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: readMultipartUploads keeps zero-byte file parts services/api test: ok 877 - readMultipartUploads keeps zero-byte file parts services/api test: --- services/api test: duration_ms: 2.764118 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: writeWorkspaceUpload accepts empty files services/api test: ok 878 - writeWorkspaceUpload accepts empty files services/api test: --- services/api test: duration_ms: 5.911291 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: readMultipartUploads allows body when maxRequestBytes is 0 (unlimited) services/api test: ok 879 - readMultipartUploads allows body when maxRequestBytes is 0 (unlimited) services/api test: --- services/api test: duration_ms: 1.557738 services/api test: type: 'test' services/api test: ... services/api test: # Subtest: writeWorkspaceUpload enforces file and workspace quotas services/api test: ok 880 - writeWorkspaceUpload enforces file and workspace quotas services/api test: --- services/api test: duration_ms: 5.08277 services/api test: type: 'test' services/api test: ... services/api test: 1..880 services/api test: # tests 906 services/api test: # suites 0 services/api test: # pass 905 services/api test: # fail 0 services/api test: # cancelled 0 services/api test: # skipped 1 services/api test: # todo 0 services/api test: # duration_ms 237975.804651 services/api test: Done $ pnpm paper:test $ uv run --project services/paper --locked python -m unittest discover -s services/paper/tests .. ---------------------------------------------------------------------- Ran 2 tests in 0.095s OK $ pnpm gateway:test $ uv run --project services/gateway python -m unittest discover -s services/gateway/tests -p 'test_*.py' ......HTTP Request: POST http://127.0.0.1:8100/api/v1/wiki/pages/batch "HTTP/1.1 200 OK" HTTP Request: POST http://127.0.0.1:8100/api/v1/wiki/pages/batch "HTTP/1.1 200 OK" .HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/%E7%9F%A5%E8%AF%86/Overview%201.md "HTTP/1.1 200 OK" .HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 302 Found" HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 404 Not Found" HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 503 Service Unavailable" HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 200 OK" ..HTTP Request: POST http://127.0.0.1:8100/api/v1/query/structured "HTTP/1.1 200 OK" .Executing cb=[_run_until_complete_cb() at /usr/lib/python3.12/asyncio/base_events.py:182] created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.347 seconds HTTP Request: GET http://data.rcsb.org/rest/v1/core/entry/1CRN "HTTP/1.0 200 OK" Executing result=None created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.494 seconds .HTTP Request: GET http://data.rcsb.org/rest/v1/core/entry/1CRN "HTTP/1.0 200 OK" Executing result=None created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.497 seconds .HTTP Request: GET http://127.0.0.1:35651/rest/v1/core/entry/1CRN "HTTP/1.0 200 OK" Executing result=None created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.962 seconds ............. ---------------------------------------------------------------------- Ran 26 tests in 2.718s OK $ pnpm memory-graph:test $ uv run --project services/memory-graph --extra test pytest services/memory-graph/tests Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Creating virtual environment at: services/memory-graph/.venv Building sciencediscovery-memory-graph @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph Downloading pygments (1.2MiB) Downloading uvloop (4.2MiB) Downloaded pygments Downloaded uvloop Built sciencediscovery-memory-graph @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 28 packages in 83ms ============================= test session starts ============================== platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0 rootdir: /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph configfile: pyproject.toml plugins: anyio-4.14.2 collected 171 items services/memory-graph/tests/test_http_adapter.py ........... [ 6%] services/memory-graph/tests/test_local_backend.py ........... [ 12%] services/memory-graph/tests/test_logging_config.py . [ 13%] services/memory-graph/tests/test_search_graph.py .................... [ 25%] services/memory-graph/tests/test_smoke.py .............................. [ 42%] ...ssssssssssssss..sssssssss.....ssssssssssssssssssssssss......ssss [ 81%] services/memory-graph/tests/test_upsert_tool_call.py ...ssssss.s [ 88%] services/memory-graph/tests/test_webpage_content.py sssss [ 91%] services/memory-graph/tests/test_webpage_evidence.py .ssssssssssssss [100%] =============================== warnings summary =============================== services/memory-graph/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1 /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead. from starlette.testclient import TestClient as TestClient # noqa -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================== 94 passed, 77 skipped, 1 warning in 5.35s =================== $ pnpm evolve:test $ uv run --project services/evolve --extra test --extra candidates pytest services/evolve/tests Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Creating virtual environment at: services/evolve/.venv Building sciencediscovery-evolve @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve Downloading pandas (10.5MiB) Downloading scipy (33.7MiB) Downloading scikit-learn (8.7MiB) Downloading pygments (1.2MiB) Downloading numpy (15.9MiB) Downloaded pygments Built sciencediscovery-evolve @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve Downloaded pandas Downloaded scikit-learn Downloaded numpy Downloaded scipy warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 38 packages in 563ms ============================= test session starts ============================== platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0 rootdir: /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve configfile: pyproject.toml plugins: anyio-4.14.2 collected 326 items services/evolve/tests/test_idea_research.py .................. [ 5%] services/evolve/tests/test_idea_tree.py ....... [ 7%] services/evolve/tests/test_judge_domain.py ............. [ 11%] services/evolve/tests/test_measurement.py ............s. [ 15%] services/evolve/tests/test_openevolve_engine.py ................... [ 21%] services/evolve/tests/test_openevolve_fidelity.py ...................... [ 28%] .......... [ 31%] services/evolve/tests/test_openevolve_integration.py ....... [ 33%] services/evolve/tests/test_prior.py ....... [ 35%] services/evolve/tests/test_probe.py ........................... [ 44%] services/evolve/tests/test_provision.py .......... [ 47%] services/evolve/tests/test_puct_end_to_end.py s [ 47%] services/evolve/tests/test_puct_engine.py .............................. [ 56%] ........................... [ 65%] services/evolve/tests/test_puct_fidelity.py .............. [ 69%] services/evolve/tests/test_puct_sandbox.py ss....s..... [ 73%] services/evolve/tests/test_sandbox_run.py ....... [ 75%] services/evolve/tests/test_scorecard.py .................... [ 81%] services/evolve/tests/test_script_domain.py sssssssss..sssss.sssss..ss [ 89%] services/evolve/tests/test_server.py .............. [ 93%] services/evolve/tests/test_stub_engine.py .......... [ 96%] services/evolve/tests/test_test_gate.py .........ss [100%] =============================== warnings summary =============================== services/evolve/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1 /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead. from starlette.testclient import TestClient as TestClient # noqa services/evolve/src/sciencediscovery_evolve/test_gate_domain.py:73 /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve/src/sciencediscovery_evolve/test_gate_domain.py:73: PytestCollectionWarning: cannot collect test class 'TestGateError' because it has a __init__ constructor (from: tests/test_test_gate.py) class TestGateError(RuntimeError): -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================= 298 passed, 28 skipped, 2 warnings in 14.43s ================= UT-HOST result: passed; summary=/devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/.ci-results/ut-host/summary.json; log=/devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/.ci-results/ut-host/run.log === ut-host run.log (last 120 lines) === HTTP Request: POST http://127.0.0.1:8100/api/v1/wiki/pages/batch "HTTP/1.1 200 OK" .HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/%E7%9F%A5%E8%AF%86/Overview%201.md "HTTP/1.1 200 OK" .HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 302 Found" HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 404 Not Found" HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 503 Service Unavailable" HTTP Request: GET http://127.0.0.1:8100/api/v1/wiki/a.md "HTTP/1.1 200 OK" ..HTTP Request: POST http://127.0.0.1:8100/api/v1/query/structured "HTTP/1.1 200 OK" .Executing cb=[_run_until_complete_cb() at /usr/lib/python3.12/asyncio/base_events.py:182] created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.347 seconds HTTP Request: GET http://data.rcsb.org/rest/v1/core/entry/1CRN "HTTP/1.0 200 OK" Executing result=None created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.494 seconds .HTTP Request: GET http://data.rcsb.org/rest/v1/core/entry/1CRN "HTTP/1.0 200 OK" Executing result=None created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.497 seconds .HTTP Request: GET http://127.0.0.1:35651/rest/v1/core/entry/1CRN "HTTP/1.0 200 OK" Executing result=None created at /usr/lib/python3.12/asyncio/runners.py:100> took 0.962 seconds ............. ---------------------------------------------------------------------- Ran 26 tests in 2.718s OK $ pnpm memory-graph:test $ uv run --project services/memory-graph --extra test pytest services/memory-graph/tests Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Creating virtual environment at: services/memory-graph/.venv Building sciencediscovery-memory-graph @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph Downloading pygments (1.2MiB) Downloading uvloop (4.2MiB) Downloaded pygments Downloaded uvloop Built sciencediscovery-memory-graph @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 28 packages in 83ms ============================= test session starts ============================== platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0 rootdir: /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph configfile: pyproject.toml plugins: anyio-4.14.2 collected 171 items services/memory-graph/tests/test_http_adapter.py ........... [ 6%] services/memory-graph/tests/test_local_backend.py ........... [ 12%] services/memory-graph/tests/test_logging_config.py . [ 13%] services/memory-graph/tests/test_search_graph.py .................... [ 25%] services/memory-graph/tests/test_smoke.py .............................. [ 42%] ...ssssssssssssss..sssssssss.....ssssssssssssssssssssssss......ssss [ 81%] services/memory-graph/tests/test_upsert_tool_call.py ...ssssss.s [ 88%] services/memory-graph/tests/test_webpage_content.py sssss [ 91%] services/memory-graph/tests/test_webpage_evidence.py .ssssssssssssss [100%] =============================== warnings summary =============================== services/memory-graph/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1 /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/memory-graph/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead. from starlette.testclient import TestClient as TestClient # noqa -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================== 94 passed, 77 skipped, 1 warning in 5.35s =================== $ pnpm evolve:test $ uv run --project services/evolve --extra test --extra candidates pytest services/evolve/tests Using CPython 3.12.3 interpreter at: /usr/bin/python3.12 Creating virtual environment at: services/evolve/.venv Building sciencediscovery-evolve @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve Downloading pandas (10.5MiB) Downloading scipy (33.7MiB) Downloading scikit-learn (8.7MiB) Downloading pygments (1.2MiB) Downloading numpy (15.9MiB) Downloaded pygments Built sciencediscovery-evolve @ file:///devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve Downloaded pandas Downloaded scikit-learn Downloaded numpy Downloaded scipy warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 38 packages in 563ms ============================= test session starts ============================== platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0 rootdir: /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve configfile: pyproject.toml plugins: anyio-4.14.2 collected 326 items services/evolve/tests/test_idea_research.py .................. [ 5%] services/evolve/tests/test_idea_tree.py ....... [ 7%] services/evolve/tests/test_judge_domain.py ............. [ 11%] services/evolve/tests/test_measurement.py ............s. [ 15%] services/evolve/tests/test_openevolve_engine.py ................... [ 21%] services/evolve/tests/test_openevolve_fidelity.py ...................... [ 28%] .......... [ 31%] services/evolve/tests/test_openevolve_integration.py ....... [ 33%] services/evolve/tests/test_prior.py ....... [ 35%] services/evolve/tests/test_probe.py ........................... [ 44%] services/evolve/tests/test_provision.py .......... [ 47%] services/evolve/tests/test_puct_end_to_end.py s [ 47%] services/evolve/tests/test_puct_engine.py .............................. [ 56%] ........................... [ 65%] services/evolve/tests/test_puct_fidelity.py .............. [ 69%] services/evolve/tests/test_puct_sandbox.py ss....s..... [ 73%] services/evolve/tests/test_sandbox_run.py ....... [ 75%] services/evolve/tests/test_scorecard.py .................... [ 81%] services/evolve/tests/test_script_domain.py sssssssss..sssss.sssss..ss [ 89%] services/evolve/tests/test_server.py .............. [ 93%] services/evolve/tests/test_stub_engine.py .......... [ 96%] services/evolve/tests/test_test_gate.py .........ss [100%] =============================== warnings summary =============================== services/evolve/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1 /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve/.venv/lib/python3.12/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead. from starlette.testclient import TestClient as TestClient # noqa services/evolve/src/sciencediscovery_evolve/test_gate_domain.py:73 /devcloud/slavespace/slave1-new/workspace/j_K2tjhUTZ/.codearts-build/repository/services/evolve/src/sciencediscovery_evolve/test_gate_domain.py:73: PytestCollectionWarning: cannot collect test class 'TestGateError' because it has a __init__ constructor (from: tests/test_test_gate.py) class TestGateError(RuntimeError): -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ================= 298 passed, 28 skipped, 2 warnings in 14.43s ================= ut-host exited with status 0