LUCIRUNSDOCSPUBLIC CI
Run summary

Run passed.

1 passed.

pi-ext / push

release: publish reachable archives for v0.1.9

··
Result output · ci
[luci] step 1/6: export HOME=/tmp/pi-ext-home MISE_DATA_DIR=/cache/toolchains/mise MISE_CACHE_DIR=/cache/toolchains/downloads GOCACHE=/cache/toolchains/go-build GOPATH=/cache/toolchains/go NPM_CONFIG_CACHE=/cache/npm PI_EXT_CI_CACHE_ROOT=/cache/toolchains && mkdir -p "$HOME" /cache/toolchains/bin
[luci] step 1/6 done in 0s
[luci] step 2/6: export PATH="/cache/toolchains/bin:$HOME/.local/bin:$PATH"
[luci] step 2/6 done in 0s
[luci] step 3/6: command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp "$HOME/.local/bin/mise" /cache/toolchains/bin/mise; }
[luci] step 3/6 done in 0s
[luci] step 4/6: mise trust
mise trusted /work
[luci] step 4/6 done in 0s
[luci] step 5/6: mise install
mise by @jdx – installing 7 tools
mise ⇢ node@latest                                5ms · already installed
mise ⇢ go@latest                                  0ms · already installed
mise ⇢ biome@latest                               0ms · already installed
mise ⇢ aqua:mikefarah/yq@latest                   0ms · already installed
mise ⇢ aqua:rvben/rumdl@latest                    0ms · already installed
mise ⇢ aqua:tamasfe/taplo@latest                  0ms · already installed
mise ⇢ go:golang.org/x/perf/cmd/benchstat@latest  0ms · already installed
mise ████████████████ 7/7 · installed 0 tools · 7 already installed in 56ms
mise all tools are installed
[luci] step 5/6 done in 1s
[luci] step 6/6: CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci
[//:install] $ npm ci
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 720 packages, and audited 761 packages in 48s

181 packages are looking for funding
  run `npm fund` for details

3 vulnerabilities (2 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
[//:install] $ node scripts/patch_pi_test_harness.mjs
[//:check] $ npm run typecheck
[//:lint] $ npm run lint

> pi-ext@0.1.9 typecheck
> tsc --noEmit


> pi-ext@0.1.9 lint
> biome ci . && rumdl check .

Checked 653 files in 6s. No fixes applied.

Success: No issues found in 127 files (217ms)
[//:lint] $ taplo format --check
 INFO taplo:format_files:load_config: found configuration file path="/work/.taplo.toml"
 INFO taplo:format_files:collect_files: found files total=85 excluded=40 files=["/work/.miserc.toml", "/work/.rumdl.toml", "/work/.taplo.toml", "/work/extensions/angel/mise.toml", "/work/extensions/ask/mise.toml", "/work/extensions/bak/mise.toml", "/work/extensions/chrome-cdp/mise.toml", "/work/extensions/context-size/mise.toml", "/work/extensions/continuity/mise.toml", "/work/extensions/cost/mise.toml", "/work/extensions/decay/mise.toml", "/work/extensions/fast/mise.toml", "/work/extensions/firefox-bidi/mise.toml", "/work/extensions/footer/mise.toml", "/work/extensions/git-safe/mise.toml", "/work/extensions/good-job/mise.toml", "/work/extensions/gratis/mise.toml", "/work/extensions/horst/mise.toml", "/work/extensions/intellij/mise.toml", "/work/extensions/klaus/mise.toml", "/work/extensions/masks/mise.toml", "/work/extensions/mockup/mise.toml", "/work/extensions/model-info/mise.toml", "/work/extensions/notes/mise.toml", "/work/extensions/nu-bang/mise.toml", "/work/extensions/nushell/mise.toml", "/work/extensions/open/mise.toml", "/work/extensions/os-notifier/mise.toml", "/work/extensions/pfui/mise.toml", "/work/extensions/prompt-autopsy/mise.toml", "/work/extensions/quota/mise.toml", "/work/extensions/rtk/mise.toml", "/work/extensions/runtime/mise.toml", "/work/extensions/session-rename/mise.toml", "/work/extensions/skillz/mise.toml", "/work/extensions/strata/mise.toml", "/work/extensions/the-system/mise.toml", "/work/extensions/tps/mise.toml", "/work/extensions/ultra/mise.toml", "/work/extensions/usage/mise.toml", "/work/extensions/uv/mise.toml", "/work/extensions/vcs-status/mise.toml", "/work/extensions/web/mise.toml", "/work/mise.android.toml", "/work/mise.toml"] cwd="/work"
[//:lint] $ node scripts/check_frontmatter.mjs
[//:lint] $ node scripts/check_skills.mjs
[//:check] $ node scripts/check_skills.mjs
[//:check] $ node scripts/test_extensions_static_check.mjs
OK static-check tests
[//:check] $ node scripts/extensions.mjs check
OK static 40 extension package(s)
[//:test] $ npm run test --

> pi-ext@0.1.9 test
> vitest run


 RUN  v4.1.11 /work


 Test Files  202 passed (202)
      Tests  2404 passed | 1 skipped (2405)
   Start at  10:32:01
   Duration  200.80s (transform 13.76s, setup 0ms, import 69.94s, tests 278.02s, environment 78ms)

[//:test] $ node --test .pi/skills/modernize/scripts/audit.test.mjs
✔ parses release sections newest first (3.772571ms)
✔ extracts migration sections and keyword bullets in the version interval (1.081536ms)
✔ rejects changelogs without release sections (0.78855ms)
✔ compares semantic versions numerically (0.3972ms)
✔ fails when installed Pi is not latest (0.563191ms)
✔ resolves the installed Pi package from launcher and CLI paths (3.86955ms)
✔ fails when no installed Pi package is near the launcher (1.365683ms)
✔ reports inherited-stdio child failures by exit code (47.617121ms)
✔ collects resolved earendil Pi package versions (18.076489ms)
✔ reports only evidence needed before tool-driven inspection (0.453628ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 217.613056
[//:e2e] $ node scripts/e2e.mjs //extensions/chrome-cdp:e2e //extensions/klaus:e2e //extensions/mockup:e2e //extensions/strata:e2e //extensions/the-system:e2e
[//:install] sources up-to-date, skipping
[//extensions/chrome-cdp:e2e] $ npm exec -- vitest run --config vitest.e2e.config.ts

 RUN  v4.1.11 /work/extensions/chrome-cdp

stderr | __e2e__/browser.test.ts > real Chrome: raw, events, captures, trace, persistent profile, headed and public smoke
public site verification unavailable: wait timed out: Page.loadEventFired on D598B2ABAE5BC0BCC31D37575C57A4F9

 ✓ __e2e__/browser.test.ts (3 tests) 22209ms
   ✓ real Chrome: raw, events, captures, trace, persistent profile, headed and public smoke  22180ms
 ✓ __e2e__/extension.test.ts (1 test) 3386ms
   ✓ Pi registration, /chrome toggle, raw command, screenshot, agent close  3383ms
 ✓ __e2e__/cleanup.test.ts (1 test) 1094ms
   ✓ only tagged dead-owner temporary directories are reclaimed  1090ms

 Test Files  3 passed (3)
      Tests  5 passed (5)
   Start at  10:35:27
   Duration  31.38s (transform 436ms, setup 0ms, import 4.02s, tests 26.69s, environment 1ms)

Finished in 33.08s
[//:install] sources up-to-date, skipping
[//extensions/klaus:e2e] $ npx vitest run --config vitest.e2e.config.ts

 RUN  v4.1.11 /work/extensions/klaus

 ✓ __e2e__/provider-scenarios.test.ts (34 tests) 205249ms
     ✓ translates interleaved text, thinking, signatures, redaction, and Unicode  5041ms
     ✓ fails closed when Claude emits malformed tool arguments  2652ms
     ✓ fails closed when Claude emits array tool arguments  2665ms
     ✓ fails closed when Claude emits scalar tool arguments  2658ms
     ✓ fails closed when Claude emits null tool arguments  2631ms
     ✓ preserves parallel tool calls and forwards mixed Pi results exactly once  973ms
     ✓ continues a Pi parallel-tool batch without deadlocking on serial MCP dispatch  1123ms
     ✓ replays canonically when history changes across a parked tool boundary  1525ms
     ✓ fails a sessionless parked tool call instead of attaching later state  857ms
     ✓ caps max-token recovery and replays the next turn canonically  1582ms
     ✓ prices recognized fallbacks and ignores unknown returned models  1748ms
     ✓ accepts an empty successful assistant response without inventing content  706ms
     ✓ reports Pi abort as aborted and closes a stalled Claude request  671ms
     ✓ applies payload, headers, thinking, and virtual-response hooks without metadata leakage  783ms
     ✓ reapplies payload redaction when a transformed resume becomes a cold replay  1470ms
     ✓ normalizes a fake provider context overflow for Pi compaction detection  696ms
     ✓ runs independent sessions concurrently without response cross-talk  3994ms
     ✓ keeps overlapping calls with the same session ID concurrent and isolated  3971ms
     ✓ targets Fable 5.1 and warns once per Pi session  1481ms
     ✓ sends exact Pi tool schemas while disabling every Claude built-in tool  747ms
     ✓ reuses the idle child for the next turn in the same session  930ms
     ✓ discards the idle child when Pi edits the prior turn  1664ms
     ✓ discards the idle child when the system prompt changes  1523ms
     ✓ parks a tool call from a reused child and settles it  851ms
     ✓ swaps tools on the idle child instead of replaying  967ms
     ✓ drops the idle child when its reuse lease expires  3173ms
     ✓ sends only Pi's system prompt and no Claude Code preset  794ms
     ✓ names the tool behind an invalid input schema rejection  694ms
     ✓ surfaces child API retries as notices  2691ms
     ✓ keeps ambient CLAUDE.md memory out of the child request  744ms
     ✓ forwards a tool result larger than the child MCP output cap  894ms
     ✓ keeps a parked tool call alive past the auto-background window  150914ms
     ✓ keeps every retry of a broken stream streaming  1426ms
 ✓ __e2e__/fake-anthropic.test.ts (7 tests) 9585ms
     ✓ streams through the registered Pi provider route  2438ms
     ✓ aborts a stalled real Claude request on Pi activity timeout  707ms
     ✓ streams text through the real Claude child and fake Anthropic endpoint  747ms
     ✓ sends Pi images as native Agent SDK image blocks  768ms
     ✓ parks an MCP tool in Claude and resumes it with a Pi result  834ms
     ✓ restarts canonically when Pi changes tools across a parked call  1560ms
     ✓ resumes an opaque mirrored session through the public SessionStore  2528ms
 ↓ __e2e__/reuse-benchmark.test.ts (1 test | 1 skipped)

 Test Files  2 passed | 1 skipped (3)
      Tests  41 passed | 1 skipped (42)
   Start at  10:35:59
   Duration  222.13s (transform 756ms, setup 0ms, import 6.64s, tests 214.83s, environment 1ms)

Finished in 223.26s
[//:install] sources up-to-date, skipping
[//extensions/mockup:e2e] $ npm exec -- playwright test --config playwright.config.ts

Running 8 tests using 1 worker
········
  8 passed (28.5s)
Finished in 30.29s
[//:install] sources up-to-date, skipping
[//extensions/strata:e2e] $ npm exec -- playwright test --config playwright.config.ts

Running 66 tests using 1 worker
··································································
  66 passed (2.2m)
Finished in 131.75s
[//:install] sources up-to-date, skipping
[//extensions/the-system:e2e] $ npm exec -- playwright test --config playwright.config.ts

Running 8 tests using 1 worker
········
  8 passed (45.1s)
Finished in 46.87s
[//:release-all] $ node --no-warnings scripts/build/release.ts
OK release angel@0.1.9: relocated load + archive bytes
OK release ask@0.1.9: relocated load + archive bytes
OK release bak@0.1.9: relocated load + archive bytes
OK release chrome-cdp@0.1.9: relocated load + archive bytes
OK release context-size@0.1.9: relocated load + archive bytes
OK release continuity@0.1.9: relocated load + archive bytes
OK release cost@0.1.9: relocated load + archive bytes
OK release decay@0.1.9: relocated load + archive bytes
OK release fast@0.1.9: relocated load + archive bytes
OK release firefox-bidi@0.1.9: relocated load + archive bytes
OK release footer@0.1.9: relocated load + archive bytes
OK release git-safe@0.1.9: relocated load + archive bytes
OK release good-job@0.1.9: relocated load + archive bytes
OK release gratis@0.1.9: relocated load + archive bytes
OK release horst@0.1.9: relocated load + archive bytes
OK release intellij@0.1.9: relocated load + archive bytes
OK release klaus@0.1.9: relocated load + archive bytes
OK release masks@0.1.9: relocated load + archive bytes
OK release mockup@0.1.9: relocated load + archive bytes
OK release model-info@0.1.9: relocated load + archive bytes
OK release notes@0.1.9: relocated load + archive bytes
OK release nu-bang@0.1.9: relocated load + archive bytes
OK release nushell@0.1.9: relocated load + archive bytes
OK release open@0.1.9: relocated load + archive bytes
OK release os-notifier@0.1.9: relocated load + archive bytes
OK release pfui@0.1.9: relocated load + archive bytes
OK release prompt-autopsy@0.1.9: relocated load + archive bytes
OK release quota@0.1.9: relocated load + archive bytes
OK release rtk@0.1.9: relocated load + archive bytes
OK release runtime@0.1.9: relocated load + archive bytes
OK release session-rename@0.1.9: relocated load + archive bytes
OK release skillz@0.1.9: relocated load + archive bytes
OK release strata@0.1.9: relocated load + archive bytes
node_modules/mathjax-full/js/components/version.js (6:19) [EVAL] Use of direct `eval` function is strongly discouraged as it poses security risks and may cause issues with minification.
   ╭─[ ../../node_modules/mathjax-full/js/components/version.js:6:20 ]
   │
 6 │         var load = eval('require');
   │                    ──┬─  
   │                      ╰─── Use of direct `eval` here.
   │ 
   │ Help: Consider using indirect eval. For more information, check the documentation: https://rolldown.rs/guide/troubleshooting#avoiding-direct-eval
───╯

node_modules/mathjax-full/js/components/version.js (7:22) [EVAL] Use of direct `eval` function is strongly discouraged as it poses security risks and may cause issues with minification.
   ╭─[ ../../node_modules/mathjax-full/js/components/version.js:7:23 ]
   │
 7 │         var dirname = eval('__dirname');
   │                       ──┬─  
   │                         ╰─── Use of direct `eval` here.
   │ 
   │ Help: Consider using indirect eval. For more information, check the documentation: https://rolldown.rs/guide/troubleshooting#avoiding-direct-eval
───╯

OK release the-system@0.1.9: relocated load + archive bytes
OK release tps@0.1.9: relocated load + archive bytes
OK release ultra@0.1.9: relocated load + archive bytes
OK release usage@0.1.9: relocated load + archive bytes
OK release uv@0.1.9: relocated load + archive bytes
OK release vcs-status@0.1.9: relocated load + archive bytes
OK release web@0.1.9: relocated load + archive bytes
OK release pi-ext@0.1.9: 40 extensions; /work/.pi/tmp/release-artifacts
[luci] step 6/6 done in 924s

Complete raw log

Passed · 1 executions
PASSEDci15m

Execution configuration

Imagemcr.microsoft.com/playwright:v1.61.0-noble

Matrixnone

Triggerpush

Commands

export HOME=/tmp/pi-ext-home MISE_DATA_DIR=/cache/toolchains/mise MISE_CACHE_DIR=/cache/toolchains/downloads GOCACHE=/cache/toolchains/go-build GOPATH=/cache/toolchains/go NPM_CONFIG_CACHE=/cache/npm PI_EXT_CI_CACHE_ROOT=/cache/toolchains && mkdir -p "$HOME" /cache/toolchains/bin
export PATH="/cache/toolchains/bin:$HOME/.local/bin:$PATH"
command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp "$HOME/.local/bin/mise" /cache/toolchains/bin/mise; }
mise trust
mise install
CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci
Job source · .ci/ci.kdl
job "ci" {
image "mcr.microsoft.com/playwright:v1.61.0-noble"trigger {
push {
branch "trunk"tag "v*"		}	}mount "cache" "toolchains" "/cache/toolchains"mount "cache" "npm" "/cache/npm"run "export HOME=/tmp/pi-ext-home MISE_DATA_DIR=/cache/toolchains/mise MISE_CACHE_DIR=/cache/toolchains/downloads GOCACHE=/cache/toolchains/go-build GOPATH=/cache/toolchains/go NPM_CONFIG_CACHE=/cache/npm PI_EXT_CI_CACHE_ROOT=/cache/toolchains && mkdir -p \"$HOME\" /cache/toolchains/bin"run "export PATH=\"/cache/toolchains/bin:$HOME/.local/bin:$PATH\""run "command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp \"$HOME/.local/bin/mise\" /cache/toolchains/bin/mise; }"run "mise trust"run "mise install"run "CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci"artifact "release" {
path "release-manifest.json"required true	}publish "pkg" {
from ".pi/tmp/release-artifacts"to "releases/pi-ext/${rev}"	}}
step timing
StepCommandTime
1/6export HOME=/tmp/pi-ext-home MISE_DATA_DIR=/cache/toolchains/mise MISE_CACHE_DIR=/cache/toolchains/downloads GOCACHE=/cache/toolchains/go-build GOPATH=/cache/toolchains/go NPM_CONFIG_CACHE=/cache/npm PI_EXT_CI_CACHE_ROOT=/cache/toolchains && mkdir -p "$HOME" /cache/toolchains/bin0s
2/6export PATH="/cache/toolchains/bin:$HOME/.local/bin:$PATH"0s
3/6command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp "$HOME/.local/bin/mise" /cache/toolchains/bin/mise; }0s
4/6mise trust0s
5/6mise install1s
6/6CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci924s

Complete raw log

Log tail
[luci] step 1/6: export HOME=/tmp/pi-ext-home MISE_DATA_DIR=/cache/toolchains/mise MISE_CACHE_DIR=/cache/toolchains/downloads GOCACHE=/cache/toolchains/go-build GOPATH=/cache/toolchains/go NPM_CONFIG_CACHE=/cache/npm PI_EXT_CI_CACHE_ROOT=/cache/toolchains && mkdir -p "$HOME" /cache/toolchains/bin
[luci] step 1/6 done in 0s
[luci] step 2/6: export PATH="/cache/toolchains/bin:$HOME/.local/bin:$PATH"
[luci] step 2/6 done in 0s
[luci] step 3/6: command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp "$HOME/.local/bin/mise" /cache/toolchains/bin/mise; }
[luci] step 3/6 done in 0s
[luci] step 4/6: mise trust
mise trusted /work
[luci] step 4/6 done in 0s
[luci] step 5/6: mise install
mise by @jdx – installing 7 tools
mise ⇢ node@latest                                5ms · already installed
mise ⇢ go@latest                                  0ms · already installed
mise ⇢ biome@latest                               0ms · already installed
mise ⇢ aqua:mikefarah/yq@latest                   0ms · already installed
mise ⇢ aqua:rvben/rumdl@latest                    0ms · already installed
mise ⇢ aqua:tamasfe/taplo@latest                  0ms · already installed
mise ⇢ go:golang.org/x/perf/cmd/benchstat@latest  0ms · already installed
mise ████████████████ 7/7 · installed 0 tools · 7 already installed in 56ms
mise all tools are installed
[luci] step 5/6 done in 1s
[luci] step 6/6: CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci
[//:install] $ npm ci
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 720 packages, and audited 761 packages in 48s

181 packages are looking for funding
  run `npm fund` for details

3 vulnerabilities (2 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
[//:install] $ node scripts/patch_pi_test_harness.mjs
[//:check] $ npm run typecheck
[//:lint] $ npm run lint

> pi-ext@0.1.9 typecheck
> tsc --noEmit


> pi-ext@0.1.9 lint
> biome ci . && rumdl check .

Checked 653 files in 6s. No fixes applied.

Success: No issues found in 127 files (217ms)
[//:lint] $ taplo format --check
 INFO taplo:format_files:load_config: found configuration file path="/work/.taplo.toml"
 INFO taplo:format_files:collect_files: found files total=85 excluded=40 files=["/work/.miserc.toml", "/work/.rumdl.toml", "/work/.taplo.toml", "/work/extensions/angel/mise.toml", "/work/extensions/ask/mise.toml", "/work/extensions/bak/mise.toml", "/work/extensions/chrome-cdp/mise.toml", "/work/extensions/context-size/mise.toml", "/work/extensions/continuity/mise.toml", "/work/extensions/cost/mise.toml", "/work/extensions/decay/mise.toml", "/work/extensions/fast/mise.toml", "/work/extensions/firefox-bidi/mise.toml", "/work/extensions/footer/mise.toml", "/work/extensions/git-safe/mise.toml", "/work/extensions/good-job/mise.toml", "/work/extensions/gratis/mise.toml", "/work/extensions/horst/mise.toml", "/work/extensions/intellij/mise.toml", "/work/extensions/klaus/mise.toml", "/work/extensions/masks/mise.toml", "/work/extensions/mockup/mise.toml", "/work/extensions/model-info/mise.toml", "/work/extensions/notes/mise.toml", "/work/extensions/nu-bang/mise.toml", "/work/extensions/nushell/mise.toml", "/work/extensions/open/mise.toml", "/work/extensions/os-notifier/mise.toml", "/work/extensions/pfui/mise.toml", "/work/extensions/prompt-autopsy/mise.toml", "/work/extensions/quota/mise.toml", "/work/extensions/rtk/mise.toml", "/work/extensions/runtime/mise.toml", "/work/extensions/session-rename/mise.toml", "/work/extensions/skillz/mise.toml", "/work/extensions/strata/mise.toml", "/work/extensions/the-system/mise.toml", "/work/extensions/tps/mise.toml", "/work/extensions/ultra/mise.toml", "/work/extensions/usage/mise.toml", "/work/extensions/uv/mise.toml", "/work/extensions/vcs-status/mise.toml", "/work/extensions/web/mise.toml", "/work/mise.android.toml", "/work/mise.toml"] cwd="/work"
[//:lint] $ node scripts/check_frontmatter.mjs
[//:lint] $ node scripts/check_skills.mjs
[//:check] $ node scripts/check_skills.mjs
[//:check] $ node scripts/test_extensions_static_check.mjs
OK static-check tests
[//:check] $ node scripts/extensions.mjs check
OK static 40 extension package(s)
[//:test] $ npm run test --

> pi-ext@0.1.9 test
> vitest run


 RUN  v4.1.11 /work


 Test Files  202 passed (202)
      Tests  2404 passed | 1 skipped (2405)
   Start at  10:32:01
   Duration  200.80s (transform 13.76s, setup 0ms, import 69.94s, tests 278.02s, environment 78ms)

[//:test] $ node --test .pi/skills/modernize/scripts/audit.test.mjs
✔ parses release sections newest first (3.772571ms)
✔ extracts migration sections and keyword bullets in the version interval (1.081536ms)
✔ rejects changelogs without release sections (0.78855ms)
✔ compares semantic versions numerically (0.3972ms)
✔ fails when installed Pi is not latest (0.563191ms)
✔ resolves the installed Pi package from launcher and CLI paths (3.86955ms)
✔ fails when no installed Pi package is near the launcher (1.365683ms)
✔ reports inherited-stdio child failures by exit code (47.617121ms)
✔ collects resolved earendil Pi package versions (18.076489ms)
✔ reports only evidence needed before tool-driven inspection (0.453628ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 217.613056
[//:e2e] $ node scripts/e2e.mjs //extensions/chrome-cdp:e2e //extensions/klaus:e2e //extensions/mockup:e2e //extensions/strata:e2e //extensions/the-system:e2e
[//:install] sources up-to-date, skipping
[//extensions/chrome-cdp:e2e] $ npm exec -- vitest run --config vitest.e2e.config.ts

 RUN  v4.1.11 /work/extensions/chrome-cdp

stderr | __e2e__/browser.test.ts > real Chrome: raw, events, captures, trace, persistent profile, headed and public smoke
public site verification unavailable: wait timed out: Page.loadEventFired on D598B2ABAE5BC0BCC31D37575C57A4F9

 ✓ __e2e__/browser.test.ts (3 tests) 22209ms
   ✓ real Chrome: raw, events, captures, trace, persistent profile, headed and public smoke  22180ms
 ✓ __e2e__/extension.test.ts (1 test) 3386ms
   ✓ Pi registration, /chrome toggle, raw command, screenshot, agent close  3383ms
 ✓ __e2e__/cleanup.test.ts (1 test) 1094ms
   ✓ only tagged dead-owner temporary directories are reclaimed  1090ms

 Test Files  3 passed (3)
      Tests  5 passed (5)
   Start at  10:35:27
   Duration  31.38s (transform 436ms, setup 0ms, import 4.02s, tests 26.69s, environment 1ms)

Finished in 33.08s
[//:install] sources up-to-date, skipping
[//extensions/klaus:e2e] $ npx vitest run --config vitest.e2e.config.ts

 RUN  v4.1.11 /work/extensions/klaus

 ✓ __e2e__/provider-scenarios.test.ts (34 tests) 205249ms
     ✓ translates interleaved text, thinking, signatures, redaction, and Unicode  5041ms
     ✓ fails closed when Claude emits malformed tool arguments  2652ms
     ✓ fails closed when Claude emits array tool arguments  2665ms
     ✓ fails closed when Claude emits scalar tool arguments  2658ms
     ✓ fails closed when Claude emits null tool arguments  2631ms
     ✓ preserves parallel tool calls and forwards mixed Pi results exactly once  973ms
     ✓ continues a Pi parallel-tool batch without deadlocking on serial MCP dispatch  1123ms
     ✓ replays canonically when history changes across a parked tool boundary  1525ms
     ✓ fails a sessionless parked tool call instead of attaching later state  857ms
     ✓ caps max-token recovery and replays the next turn canonically  1582ms
     ✓ prices recognized fallbacks and ignores unknown returned models  1748ms
     ✓ accepts an empty successful assistant response without inventing content  706ms
     ✓ reports Pi abort as aborted and closes a stalled Claude request  671ms
     ✓ applies payload, headers, thinking, and virtual-response hooks without metadata leakage  783ms
     ✓ reapplies payload redaction when a transformed resume becomes a cold replay  1470ms
     ✓ normalizes a fake provider context overflow for Pi compaction detection  696ms
     ✓ runs independent sessions concurrently without response cross-talk  3994ms
     ✓ keeps overlapping calls with the same session ID concurrent and isolated  3971ms
     ✓ targets Fable 5.1 and warns once per Pi session  1481ms
     ✓ sends exact Pi tool schemas while disabling every Claude built-in tool  747ms
     ✓ reuses the idle child for the next turn in the same session  930ms
     ✓ discards the idle child when Pi edits the prior turn  1664ms
     ✓ discards the idle child when the system prompt changes  1523ms
     ✓ parks a tool call from a reused child and settles it  851ms
     ✓ swaps tools on the idle child instead of replaying  967ms
     ✓ drops the idle child when its reuse lease expires  3173ms
     ✓ sends only Pi's system prompt and no Claude Code preset  794ms
     ✓ names the tool behind an invalid input schema rejection  694ms
     ✓ surfaces child API retries as notices  2691ms
     ✓ keeps ambient CLAUDE.md memory out of the child request  744ms
     ✓ forwards a tool result larger than the child MCP output cap  894ms
     ✓ keeps a parked tool call alive past the auto-background window  150914ms
     ✓ keeps every retry of a broken stream streaming  1426ms
 ✓ __e2e__/fake-anthropic.test.ts (7 tests) 9585ms
     ✓ streams through the registered Pi provider route  2438ms
     ✓ aborts a stalled real Claude request on Pi activity timeout  707ms
     ✓ streams text through the real Claude child and fake Anthropic endpoint  747ms
     ✓ sends Pi images as native Agent SDK image blocks  768ms
     ✓ parks an MCP tool in Claude and resumes it with a Pi result  834ms
     ✓ restarts canonically when Pi changes tools across a parked call  1560ms
     ✓ resumes an opaque mirrored session through the public SessionStore  2528ms
 ↓ __e2e__/reuse-benchmark.test.ts (1 test | 1 skipped)

 Test Files  2 passed | 1 skipped (3)
      Tests  41 passed | 1 skipped (42)
   Start at  10:35:59
   Duration  222.13s (transform 756ms, setup 0ms, import 6.64s, tests 214.83s, environment 1ms)

Finished in 223.26s
[//:install] sources up-to-date, skipping
[//extensions/mockup:e2e] $ npm exec -- playwright test --config playwright.config.ts

Running 8 tests using 1 worker
········
  8 passed (28.5s)
Finished in 30.29s
[//:install] sources up-to-date, skipping
[//extensions/strata:e2e] $ npm exec -- playwright test --config playwright.config.ts

Running 66 tests using 1 worker
··································································
  66 passed (2.2m)
Finished in 131.75s
[//:install] sources up-to-date, skipping
[//extensions/the-system:e2e] $ npm exec -- playwright test --config playwright.config.ts

Running 8 tests using 1 worker
········
  8 passed (45.1s)
Finished in 46.87s
[//:release-all] $ node --no-warnings scripts/build/release.ts
OK release angel@0.1.9: relocated load + archive bytes
OK release ask@0.1.9: relocated load + archive bytes
OK release bak@0.1.9: relocated load + archive bytes
OK release chrome-cdp@0.1.9: relocated load + archive bytes
OK release context-size@0.1.9: relocated load + archive bytes
OK release continuity@0.1.9: relocated load + archive bytes
OK release cost@0.1.9: relocated load + archive bytes
OK release decay@0.1.9: relocated load + archive bytes
OK release fast@0.1.9: relocated load + archive bytes
OK release firefox-bidi@0.1.9: relocated load + archive bytes
OK release footer@0.1.9: relocated load + archive bytes
OK release git-safe@0.1.9: relocated load + archive bytes
OK release good-job@0.1.9: relocated load + archive bytes
OK release gratis@0.1.9: relocated load + archive bytes
OK release horst@0.1.9: relocated load + archive bytes
OK release intellij@0.1.9: relocated load + archive bytes
OK release klaus@0.1.9: relocated load + archive bytes
OK release masks@0.1.9: relocated load + archive bytes
OK release mockup@0.1.9: relocated load + archive bytes
OK release model-info@0.1.9: relocated load + archive bytes
OK release notes@0.1.9: relocated load + archive bytes
OK release nu-bang@0.1.9: relocated load + archive bytes
OK release nushell@0.1.9: relocated load + archive bytes
OK release open@0.1.9: relocated load + archive bytes
OK release os-notifier@0.1.9: relocated load + archive bytes
OK release pfui@0.1.9: relocated load + archive bytes
OK release prompt-autopsy@0.1.9: relocated load + archive bytes
OK release quota@0.1.9: relocated load + archive bytes
OK release rtk@0.1.9: relocated load + archive bytes
OK release runtime@0.1.9: relocated load + archive bytes
OK release session-rename@0.1.9: relocated load + archive bytes
OK release skillz@0.1.9: relocated load + archive bytes
OK release strata@0.1.9: relocated load + archive bytes
node_modules/mathjax-full/js/components/version.js (6:19) [EVAL] Use of direct `eval` function is strongly discouraged as it poses security risks and may cause issues with minification.
   ╭─[ ../../node_modules/mathjax-full/js/components/version.js:6:20 ]
   │
 6 │         var load = eval('require');
   │                    ──┬─  
   │                      ╰─── Use of direct `eval` here.
   │ 
   │ Help: Consider using indirect eval. For more information, check the documentation: https://rolldown.rs/guide/troubleshooting#avoiding-direct-eval
───╯

node_modules/mathjax-full/js/components/version.js (7:22) [EVAL] Use of direct `eval` function is strongly discouraged as it poses security risks and may cause issues with minification.
   ╭─[ ../../node_modules/mathjax-full/js/components/version.js:7:23 ]
   │
 7 │         var dirname = eval('__dirname');
   │                       ──┬─  
   │                         ╰─── Use of direct `eval` here.
   │ 
   │ Help: Consider using indirect eval. For more information, check the documentation: https://rolldown.rs/guide/troubleshooting#avoiding-direct-eval
───╯

OK release the-system@0.1.9: relocated load + archive bytes
OK release tps@0.1.9: relocated load + archive bytes
OK release ultra@0.1.9: relocated load + archive bytes
OK release usage@0.1.9: relocated load + archive bytes
OK release uv@0.1.9: relocated load + archive bytes
OK release vcs-status@0.1.9: relocated load + archive bytes
OK release web@0.1.9: relocated load + archive bytes
OK release pi-ext@0.1.9: 40 extensions; /work/.pi/tmp/release-artifacts
[luci] step 6/6 done in 924s
Continue in CLI

Nushell command · read-only.

luci log dogip-dapih-sahav-tafin 001

Local Luci data access required · no execution.

All configuration at this revision
ci.kdl @ 58f1
job "ci" {
  image "mcr.microsoft.com/playwright:v1.61.0-noble"
  trigger {
    push {
      branch "trunk"
      tag "v*"
    }
  }
  mount "cache" "toolchains" "/cache/toolchains"
  mount "cache" "npm" "/cache/npm"
  run "export HOME=/tmp/pi-ext-home MISE_DATA_DIR=/cache/toolchains/mise MISE_CACHE_DIR=/cache/toolchains/downloads GOCACHE=/cache/toolchains/go-build GOPATH=/cache/toolchains/go NPM_CONFIG_CACHE=/cache/npm PI_EXT_CI_CACHE_ROOT=/cache/toolchains && mkdir -p \"$HOME\" /cache/toolchains/bin"
  run "export PATH=\"/cache/toolchains/bin:$HOME/.local/bin:$PATH\""
  run "command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp \"$HOME/.local/bin/mise\" /cache/toolchains/bin/mise; }"
  run "mise trust"
  run "mise install"
  // Luci's capability-free container replaces Firefox's incompatible content sandbox.
  run "CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci"
  artifact "release" {
    path "release-manifest.json"
    required true
  }
  publish "pkg" {
    from ".pi/tmp/release-artifacts"
    to "releases/pi-ext/${rev}"
  }
}