LUCIRUNSDOCSPUBLIC CI
Run summary

Run passed.

1 passed.

pi-ext / push

release: gate live controls for v0.1.8

··
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                                4ms · 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 44ms
mise all tools are installed
[luci] step 5/6 done in 0s
[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 49s

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.8 lint
> biome ci . && rumdl check .


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

Checked 653 files in 5s. No fixes applied.

Success: No issues found in 127 files (115ms)
[//: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.8 test
> vitest run


 RUN  v4.1.11 /work


 Test Files  202 passed (202)
      Tests  2404 passed | 1 skipped (2405)
   Start at  10:11:38
   Duration  204.94s (transform 12.96s, setup 0ms, import 71.25s, tests 282.23s, environment 50ms)

[//:test] $ node --test .pi/skills/modernize/scripts/audit.test.mjs
✔ parses release sections newest first (3.483136ms)
✔ extracts migration sections and keyword bullets in the version interval (0.992753ms)
✔ rejects changelogs without release sections (0.734817ms)
✔ compares semantic versions numerically (0.346999ms)
✔ fails when installed Pi is not latest (0.520766ms)
✔ resolves the installed Pi package from launcher and CLI paths (3.621656ms)
✔ fails when no installed Pi package is near the launcher (1.262601ms)
✔ reports inherited-stdio child failures by exit code (50.446535ms)
✔ collects resolved earendil Pi package versions (16.867882ms)
✔ reports only evidence needed before tool-driven inspection (0.468975ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 210.512938
[//: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 2F4B0EA80E5BFAACB3BD2F632C15E389

 ✓ __e2e__/browser.test.ts (3 tests) 23064ms
   ✓ real Chrome: raw, events, captures, trace, persistent profile, headed and public smoke  23048ms
 ✓ __e2e__/extension.test.ts (1 test) 3340ms
   ✓ Pi registration, /chrome toggle, raw command, screenshot, agent close  3338ms
 ✓ __e2e__/cleanup.test.ts (1 test) 1054ms
   ✓ only tagged dead-owner temporary directories are reclaimed  1051ms

 Test Files  3 passed (3)
      Tests  5 passed (5)
   Start at  10:15:11
   Duration  32.11s (transform 375ms, setup 0ms, import 3.98s, tests 27.46s, environment 1ms)

Finished in 33.98s
[//: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) 203547ms
     ✓ translates interleaved text, thinking, signatures, redaction, and Unicode  3647ms
     ✓ fails closed when Claude emits malformed tool arguments  2634ms
     ✓ fails closed when Claude emits array tool arguments  2639ms
     ✓ fails closed when Claude emits scalar tool arguments  2638ms
     ✓ fails closed when Claude emits null tool arguments  2635ms
     ✓ preserves parallel tool calls and forwards mixed Pi results exactly once  848ms
     ✓ continues a Pi parallel-tool batch without deadlocking on serial MCP dispatch  1221ms
     ✓ replays canonically when history changes across a parked tool boundary  1734ms
     ✓ fails a sessionless parked tool call instead of attaching later state  739ms
     ✓ caps max-token recovery and replays the next turn canonically  1579ms
     ✓ prices recognized fallbacks and ignores unknown returned models  1620ms
     ✓ accepts an empty successful assistant response without inventing content  753ms
     ✓ reports Pi abort as aborted and closes a stalled Claude request  720ms
     ✓ applies payload, headers, thinking, and virtual-response hooks without metadata leakage  767ms
     ✓ reapplies payload redaction when a transformed resume becomes a cold replay  1458ms
     ✓ normalizes a fake provider context overflow for Pi compaction detection  763ms
     ✓ runs independent sessions concurrently without response cross-talk  4000ms
     ✓ keeps overlapping calls with the same session ID concurrent and isolated  4074ms
     ✓ targets Fable 5.1 and warns once per Pi session  1449ms
     ✓ sends exact Pi tool schemas while disabling every Claude built-in tool  739ms
     ✓ reuses the idle child for the next turn in the same session  789ms
     ✓ discards the idle child when Pi edits the prior turn  1670ms
     ✓ discards the idle child when the system prompt changes  1619ms
     ✓ parks a tool call from a reused child and settles it  861ms
     ✓ swaps tools on the idle child instead of replaying  934ms
     ✓ drops the idle child when its reuse lease expires  3012ms
     ✓ sends only Pi's system prompt and no Claude Code preset  759ms
     ✓ names the tool behind an invalid input schema rejection  710ms
     ✓ surfaces child API retries as notices  2721ms
     ✓ keeps ambient CLAUDE.md memory out of the child request  756ms
     ✓ forwards a tool result larger than the child MCP output cap  820ms
     ✓ keeps a parked tool call alive past the auto-background window  150856ms
     ✓ keeps every retry of a broken stream streaming  1375ms
 ✓ __e2e__/fake-anthropic.test.ts (7 tests) 9160ms
     ✓ streams through the registered Pi provider route  2365ms
     ✓ aborts a stalled real Claude request on Pi activity timeout  657ms
     ✓ streams text through the real Claude child and fake Anthropic endpoint  734ms
     ✓ sends Pi images as native Agent SDK image blocks  755ms
     ✓ parks an MCP tool in Claude and resumes it with a Pi result  872ms
     ✓ restarts canonically when Pi changes tools across a parked call  1439ms
     ✓ resumes an opaque mirrored session through the public SessionStore  2335ms
 ↓ __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:15:44
   Duration  220.06s (transform 743ms, setup 0ms, import 6.65s, tests 212.71s, environment 1ms)

Finished in 221.21s
[//: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 (30.8s)
Finished in 32.49s
[//: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 132.43s
[//: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 (46.0s)
Finished in 48.03s
[//:release-all] $ node --no-warnings scripts/build/release.ts
OK release angel@0.1.8: relocated load + archive bytes
OK release ask@0.1.8: relocated load + archive bytes
OK release bak@0.1.8: relocated load + archive bytes
OK release chrome-cdp@0.1.8: relocated load + archive bytes
OK release context-size@0.1.8: relocated load + archive bytes
OK release continuity@0.1.8: relocated load + archive bytes
OK release cost@0.1.8: relocated load + archive bytes
OK release decay@0.1.8: relocated load + archive bytes
OK release fast@0.1.8: relocated load + archive bytes
OK release firefox-bidi@0.1.8: relocated load + archive bytes
OK release footer@0.1.8: relocated load + archive bytes
OK release git-safe@0.1.8: relocated load + archive bytes
OK release good-job@0.1.8: relocated load + archive bytes
OK release gratis@0.1.8: relocated load + archive bytes
OK release horst@0.1.8: relocated load + archive bytes
OK release intellij@0.1.8: relocated load + archive bytes
OK release klaus@0.1.8: relocated load + archive bytes
OK release masks@0.1.8: relocated load + archive bytes
OK release mockup@0.1.8: relocated load + archive bytes
OK release model-info@0.1.8: relocated load + archive bytes
OK release notes@0.1.8: relocated load + archive bytes
OK release nu-bang@0.1.8: relocated load + archive bytes
OK release nushell@0.1.8: relocated load + archive bytes
OK release open@0.1.8: relocated load + archive bytes
OK release os-notifier@0.1.8: relocated load + archive bytes
OK release pfui@0.1.8: relocated load + archive bytes
OK release prompt-autopsy@0.1.8: relocated load + archive bytes
OK release quota@0.1.8: relocated load + archive bytes
OK release rtk@0.1.8: relocated load + archive bytes
OK release runtime@0.1.8: relocated load + archive bytes
OK release session-rename@0.1.8: relocated load + archive bytes
OK release skillz@0.1.8: relocated load + archive bytes
OK release strata@0.1.8: 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.8: relocated load + archive bytes
OK release tps@0.1.8: relocated load + archive bytes
OK release ultra@0.1.8: relocated load + archive bytes
OK release usage@0.1.8: relocated load + archive bytes
OK release uv@0.1.8: relocated load + archive bytes
OK release vcs-status@0.1.8: relocated load + archive bytes
OK release web@0.1.8: relocated load + archive bytes
OK release pi-ext@0.1.8: 40 extensions; /work/.pi/tmp/release-artifacts
[luci] step 6/6 done in 943s

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 "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 install0s
6/6CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci943s

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                                4ms · 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 44ms
mise all tools are installed
[luci] step 5/6 done in 0s
[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 49s

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.8 lint
> biome ci . && rumdl check .


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

Checked 653 files in 5s. No fixes applied.

Success: No issues found in 127 files (115ms)
[//: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.8 test
> vitest run


 RUN  v4.1.11 /work


 Test Files  202 passed (202)
      Tests  2404 passed | 1 skipped (2405)
   Start at  10:11:38
   Duration  204.94s (transform 12.96s, setup 0ms, import 71.25s, tests 282.23s, environment 50ms)

[//:test] $ node --test .pi/skills/modernize/scripts/audit.test.mjs
✔ parses release sections newest first (3.483136ms)
✔ extracts migration sections and keyword bullets in the version interval (0.992753ms)
✔ rejects changelogs without release sections (0.734817ms)
✔ compares semantic versions numerically (0.346999ms)
✔ fails when installed Pi is not latest (0.520766ms)
✔ resolves the installed Pi package from launcher and CLI paths (3.621656ms)
✔ fails when no installed Pi package is near the launcher (1.262601ms)
✔ reports inherited-stdio child failures by exit code (50.446535ms)
✔ collects resolved earendil Pi package versions (16.867882ms)
✔ reports only evidence needed before tool-driven inspection (0.468975ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 210.512938
[//: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 2F4B0EA80E5BFAACB3BD2F632C15E389

 ✓ __e2e__/browser.test.ts (3 tests) 23064ms
   ✓ real Chrome: raw, events, captures, trace, persistent profile, headed and public smoke  23048ms
 ✓ __e2e__/extension.test.ts (1 test) 3340ms
   ✓ Pi registration, /chrome toggle, raw command, screenshot, agent close  3338ms
 ✓ __e2e__/cleanup.test.ts (1 test) 1054ms
   ✓ only tagged dead-owner temporary directories are reclaimed  1051ms

 Test Files  3 passed (3)
      Tests  5 passed (5)
   Start at  10:15:11
   Duration  32.11s (transform 375ms, setup 0ms, import 3.98s, tests 27.46s, environment 1ms)

Finished in 33.98s
[//: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) 203547ms
     ✓ translates interleaved text, thinking, signatures, redaction, and Unicode  3647ms
     ✓ fails closed when Claude emits malformed tool arguments  2634ms
     ✓ fails closed when Claude emits array tool arguments  2639ms
     ✓ fails closed when Claude emits scalar tool arguments  2638ms
     ✓ fails closed when Claude emits null tool arguments  2635ms
     ✓ preserves parallel tool calls and forwards mixed Pi results exactly once  848ms
     ✓ continues a Pi parallel-tool batch without deadlocking on serial MCP dispatch  1221ms
     ✓ replays canonically when history changes across a parked tool boundary  1734ms
     ✓ fails a sessionless parked tool call instead of attaching later state  739ms
     ✓ caps max-token recovery and replays the next turn canonically  1579ms
     ✓ prices recognized fallbacks and ignores unknown returned models  1620ms
     ✓ accepts an empty successful assistant response without inventing content  753ms
     ✓ reports Pi abort as aborted and closes a stalled Claude request  720ms
     ✓ applies payload, headers, thinking, and virtual-response hooks without metadata leakage  767ms
     ✓ reapplies payload redaction when a transformed resume becomes a cold replay  1458ms
     ✓ normalizes a fake provider context overflow for Pi compaction detection  763ms
     ✓ runs independent sessions concurrently without response cross-talk  4000ms
     ✓ keeps overlapping calls with the same session ID concurrent and isolated  4074ms
     ✓ targets Fable 5.1 and warns once per Pi session  1449ms
     ✓ sends exact Pi tool schemas while disabling every Claude built-in tool  739ms
     ✓ reuses the idle child for the next turn in the same session  789ms
     ✓ discards the idle child when Pi edits the prior turn  1670ms
     ✓ discards the idle child when the system prompt changes  1619ms
     ✓ parks a tool call from a reused child and settles it  861ms
     ✓ swaps tools on the idle child instead of replaying  934ms
     ✓ drops the idle child when its reuse lease expires  3012ms
     ✓ sends only Pi's system prompt and no Claude Code preset  759ms
     ✓ names the tool behind an invalid input schema rejection  710ms
     ✓ surfaces child API retries as notices  2721ms
     ✓ keeps ambient CLAUDE.md memory out of the child request  756ms
     ✓ forwards a tool result larger than the child MCP output cap  820ms
     ✓ keeps a parked tool call alive past the auto-background window  150856ms
     ✓ keeps every retry of a broken stream streaming  1375ms
 ✓ __e2e__/fake-anthropic.test.ts (7 tests) 9160ms
     ✓ streams through the registered Pi provider route  2365ms
     ✓ aborts a stalled real Claude request on Pi activity timeout  657ms
     ✓ streams text through the real Claude child and fake Anthropic endpoint  734ms
     ✓ sends Pi images as native Agent SDK image blocks  755ms
     ✓ parks an MCP tool in Claude and resumes it with a Pi result  872ms
     ✓ restarts canonically when Pi changes tools across a parked call  1439ms
     ✓ resumes an opaque mirrored session through the public SessionStore  2335ms
 ↓ __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:15:44
   Duration  220.06s (transform 743ms, setup 0ms, import 6.65s, tests 212.71s, environment 1ms)

Finished in 221.21s
[//: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 (30.8s)
Finished in 32.49s
[//: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 132.43s
[//: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 (46.0s)
Finished in 48.03s
[//:release-all] $ node --no-warnings scripts/build/release.ts
OK release angel@0.1.8: relocated load + archive bytes
OK release ask@0.1.8: relocated load + archive bytes
OK release bak@0.1.8: relocated load + archive bytes
OK release chrome-cdp@0.1.8: relocated load + archive bytes
OK release context-size@0.1.8: relocated load + archive bytes
OK release continuity@0.1.8: relocated load + archive bytes
OK release cost@0.1.8: relocated load + archive bytes
OK release decay@0.1.8: relocated load + archive bytes
OK release fast@0.1.8: relocated load + archive bytes
OK release firefox-bidi@0.1.8: relocated load + archive bytes
OK release footer@0.1.8: relocated load + archive bytes
OK release git-safe@0.1.8: relocated load + archive bytes
OK release good-job@0.1.8: relocated load + archive bytes
OK release gratis@0.1.8: relocated load + archive bytes
OK release horst@0.1.8: relocated load + archive bytes
OK release intellij@0.1.8: relocated load + archive bytes
OK release klaus@0.1.8: relocated load + archive bytes
OK release masks@0.1.8: relocated load + archive bytes
OK release mockup@0.1.8: relocated load + archive bytes
OK release model-info@0.1.8: relocated load + archive bytes
OK release notes@0.1.8: relocated load + archive bytes
OK release nu-bang@0.1.8: relocated load + archive bytes
OK release nushell@0.1.8: relocated load + archive bytes
OK release open@0.1.8: relocated load + archive bytes
OK release os-notifier@0.1.8: relocated load + archive bytes
OK release pfui@0.1.8: relocated load + archive bytes
OK release prompt-autopsy@0.1.8: relocated load + archive bytes
OK release quota@0.1.8: relocated load + archive bytes
OK release rtk@0.1.8: relocated load + archive bytes
OK release runtime@0.1.8: relocated load + archive bytes
OK release session-rename@0.1.8: relocated load + archive bytes
OK release skillz@0.1.8: relocated load + archive bytes
OK release strata@0.1.8: 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.8: relocated load + archive bytes
OK release tps@0.1.8: relocated load + archive bytes
OK release ultra@0.1.8: relocated load + archive bytes
OK release usage@0.1.8: relocated load + archive bytes
OK release uv@0.1.8: relocated load + archive bytes
OK release vcs-status@0.1.8: relocated load + archive bytes
OK release web@0.1.8: relocated load + archive bytes
OK release pi-ext@0.1.8: 40 extensions; /work/.pi/tmp/release-artifacts
[luci] step 6/6 done in 943s
Continue in CLI

Nushell command · read-only.

luci log dogip-dajul-mojor-goram 001

Local Luci data access required · no execution.

All configuration at this revision
ci.kdl @ 67a6
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 "pi-ext/${rev}"
  }
}