LUCIRUNSDOCSPUBLIC CI
Run summary

Run failed.

1 failed.

pi-ext / push

fix(activity): repair Win32 terminal launch and cleanup

··
Affected execution

FAILED ci

Child failure detailexit status 1

Execution configuration

Image

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" {
build {
containerfile ".ci/Containerfile"context ".ci"	}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}"	}}
Actual evidence · child 001
[luci] build cache bytes=0 removed=0 graphroot-free=67227922432
[luci] build start containerfile=.ci/Containerfile context=.ci
STEP 1/4: FROM mcr.microsoft.com/playwright:v1.61.0-noble
Trying to pull mcr.microsoft.com/playwright:v1.61.0-noble...
Getting image source signatures
Copying blob sha256:cbe151a12b0374a937e583a60673dc24cf98cef69954860cae7d8d51d88173ce
Copying blob sha256:a9cc3c289b1b7df8079d33df5f1975cf65e6ec292dde5748af547213059d6be5
Copying blob sha256:0e5f8475f38bbc351dc1b0148d9ea94bc5c5f2b710f72e96988b799b681a0b35
Copying blob sha256:914b82411860874c8ef4ae9fe0a0fdfc11618201766e9995a0b6d4c9096cbf2b
Copying config sha256:753f831a898523662c36011748ba0729b59838745d577c61c91287fe1778bfe1
Writing manifest to image destination
STEP 2/4: RUN apt-get update     && apt-get install -y --no-install-recommends ffmpeg     && rm -rf /var/lib/apt/lists/*
Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Get:3 https://deb.nodesource.com/node_24.x nodistro InRelease [12.1 kB]
Get:4 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:5 http://archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:6 http://security.ubuntu.com/ubuntu noble-security/restricted amd64 Packages [2122 kB]
Get:7 https://deb.nodesource.com/node_24.x nodistro/main amd64 Packages [9470 B]
Get:8 http://security.ubuntu.com/ubuntu noble-security/multiverse amd64 Packages [55.6 kB]
Get:9 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
Get:10 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [1549 kB]
Get:11 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [1410 kB]
Get:12 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
Get:13 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
Get:14 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
Get:15 http://archive.ubuntu.com/ubuntu noble-updates/restricted amd64 Packages [2231 kB]
Get:16 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [1729 kB]
Get:17 http://archive.ubuntu.com/ubuntu noble-updates/multiverse amd64 Packages [61.7 kB]
Get:18 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [2168 kB]
Get:19 http://archive.ubuntu.com/ubuntu noble-backports/multiverse amd64 Packages [669 B]
Get:20 http://archive.ubuntu.com/ubuntu noble-backports/main amd64 Packages [49.0 kB]
Get:21 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [36.0 kB]
Fetched 33.6 MB in 3s (11.6 MB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  libavdevice60 libcdio-cdda2t64 libcdio-paranoia2t64 libcdio19t64
  libxcb-shape0 libxv1
Suggested packages:
  ffmpeg-doc
The following NEW packages will be installed:
  ffmpeg libavdevice60 libcdio-cdda2t64 libcdio-paranoia2t64 libcdio19t64
  libxcb-shape0 libxv1
0 upgraded, 7 newly installed, 0 to remove and 114 not upgraded.
Need to get 2073 kB of archives.
After this operation, 3171 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libcdio19t64 amd64 2.1.0-4.1ubuntu1.2 [62.4 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble/main amd64 libcdio-cdda2t64 amd64 10.2+2.0.1-1.1build2 [16.5 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble/main amd64 libcdio-paranoia2t64 amd64 10.2+2.0.1-1.1build2 [16.6 kB]
Get:4 http://archive.ubuntu.com/ubuntu noble/main amd64 libxcb-shape0 amd64 1.15-1ubuntu2 [6100 B]
Get:5 http://archive.ubuntu.com/ubuntu noble/main amd64 libxv1 amd64 2:1.0.11-1.1build1 [10.7 kB]
Get:6 http://archive.ubuntu.com/ubuntu noble/universe amd64 libavdevice60 amd64 7:6.1.1-3ubuntu5 [82.3 kB]
Get:7 http://archive.ubuntu.com/ubuntu noble/universe amd64 ffmpeg amd64 7:6.1.1-3ubuntu5 [1879 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 2073 kB in 1s (4100 kB/s)
Selecting previously unselected package libcdio19t64:amd64.
(Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 34798 files and directories currently installed.)
Preparing to unpack .../0-libcdio19t64_2.1.0-4.1ubuntu1.2_amd64.deb ...
Unpacking libcdio19t64:amd64 (2.1.0-4.1ubuntu1.2) ...
Selecting previously unselected package libcdio-cdda2t64:amd64.
Preparing to unpack .../1-libcdio-cdda2t64_10.2+2.0.1-1.1build2_amd64.deb ...
Unpacking libcdio-cdda2t64:amd64 (10.2+2.0.1-1.1build2) ...
Selecting previously unselected package libcdio-paranoia2t64:amd64.
Preparing to unpack .../2-libcdio-paranoia2t64_10.2+2.0.1-1.1build2_amd64.deb ...
Unpacking libcdio-paranoia2t64:amd64 (10.2+2.0.1-1.1build2) ...
Selecting previously unselected package libxcb-shape0:amd64.
Preparing to unpack .../3-libxcb-shape0_1.15-1ubuntu2_amd64.deb ...
Unpacking libxcb-shape0:amd64 (1.15-1ubuntu2) ...
Selecting previously unselected package libxv1:amd64.
Preparing to unpack .../4-libxv1_2%3a1.0.11-1.1build1_amd64.deb ...
Unpacking libxv1:amd64 (2:1.0.11-1.1build1) ...
Selecting previously unselected package libavdevice60:amd64.
Preparing to unpack .../5-libavdevice60_7%3a6.1.1-3ubuntu5_amd64.deb ...
Unpacking libavdevice60:amd64 (7:6.1.1-3ubuntu5) ...
Selecting previously unselected package ffmpeg.
Preparing to unpack .../6-ffmpeg_7%3a6.1.1-3ubuntu5_amd64.deb ...
Unpacking ffmpeg (7:6.1.1-3ubuntu5) ...
Setting up libxcb-shape0:amd64 (1.15-1ubuntu2) ...
Setting up libcdio19t64:amd64 (2.1.0-4.1ubuntu1.2) ...
Setting up libcdio-cdda2t64:amd64 (10.2+2.0.1-1.1build2) ...
Setting up libcdio-paranoia2t64:amd64 (10.2+2.0.1-1.1build2) ...
Setting up libxv1:amd64 (2:1.0.11-1.1build1) ...
Setting up libavdevice60:amd64 (7:6.1.1-3ubuntu5) ...
Setting up ffmpeg (7:6.1.1-3ubuntu5) ...
Processing triggers for libc-bin (2.39-0ubuntu8.7) ...
--> 2f64e7ab8a71
STEP 3/4: RUN test "$(dpkg --print-architecture)" = amd64     && curl -fsSL https://github.com/nushell/nushell/releases/download/0.116.1/nu-0.116.1-x86_64-unknown-linux-gnu.tar.gz -o /tmp/nu.tar.gz     && echo 'd6d8ace4be491ed8abba4026e73b60c0470b4671d7039307e7d772282ef863da  /tmp/nu.tar.gz' | sha256sum -c -     && tar -xzf /tmp/nu.tar.gz -C /tmp     && install /tmp/nu-0.116.1-x86_64-unknown-linux-gnu/nu /usr/local/bin/nu     && rm -rf /tmp/nu.tar.gz /tmp/nu-0.116.1-x86_64-unknown-linux-gnu
/tmp/nu.tar.gz: OK
--> 9f88cbe5d7d8
STEP 4/4: LABEL "io.luci.build"="cache-v1"
COMMIT luci-build-1792516343592293796-001
--> e64d8ba7e6dd
Successfully tagged localhost/luci-build-1792516343592293796-001:latest
e64d8ba7e6dd1adf5a360f22953060bc9047aee2c537d2d770cb11902628b33d
[luci] build done image=sha256:e64d8ba7e6dd1adf5a360f22953060bc9047aee2c537d2d770cb11902628b33d in 22s
[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 1s
[luci] step 5/6: mise install
mise by @jdx – installing 8 tools
mise ⇢ node@latest                                10ms · 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 ⇢ github:asciinema/agg@latest                0ms · already installed
mise ⇢ go:golang.org/x/perf/cmd/benchstat@latest  0ms · already installed
mise ████████████████ 8/8 · installed 0 tools · 8 already installed in 63ms
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 sliced@1.0.1: Unsupported
npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead

added 843 packages, and audited 890 packages in 36s

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

18 vulnerabilities (4 low, 8 moderate, 6 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
[//:check] $ npm run typecheck
[//:lint] $ npm run lint

> pi-ext@0.1.10 typecheck
> tsc -b


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

Checked 870 files in 10s. No fixes applied.

Success: No issues found in 168 files (176ms)
[//: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=97 excluded=46 files=["/work/.miserc.toml", "/work/.rumdl.toml", "/work/.taplo.toml", "/work/extensions/activity/mise.toml", "/work/extensions/afk/mise.toml", "/work/extensions/angel/mise.toml", "/work/extensions/ask/mise.toml", "/work/extensions/bak/mise.toml", "/work/extensions/canvas/mise.toml", "/work/extensions/chrome-cdp/mise.toml", "/work/extensions/clipboard/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/ephemlets/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/handoff/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.ts
[//:lint] $ node scripts/check_skills.ts
OK skills 0
[//:check] $ node scripts/check_skills.ts
OK skills 0
[//:check] $ node scripts/test_extensions_static_check.ts
OK static-check tests
[//:check] $ node scripts/extensions.ts check
OK static 46 extension package(s)
[//:check] $ node scripts/compatibility.ts
OK compatibility: minimum Pi 1.2.0 consistent
[//:check] $ node scripts/readme/banners.ts --check
OK banners 46
[//:check-readmes] $ node scripts/readme/check.ts
OK readmes 46
[//:test] $ npm run test --

> pi-ext@0.1.10 test
> vitest run


 RUN  v5.0.3 /work

 ❯  unit  extensions/ultra/__tests__/dynamic-selection-eval.test.ts (5 tests | 1 failed) 40ms
   ❯ dynamic selection evaluation (offline) (5)
     × real SDK with fake provider intercepts selection without running workflow 7ms
 ❯  contract  extensions/clipboard/__tests__/contract.test.ts (24 tests | 1 failed) 2811ms
   ❯ clipboard public contract (16)
     × writes only safe lifecycle diagnostics in the isolated test state directory 1037ms

⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯

 FAIL   unit  extensions/ultra/__tests__/dynamic-selection-eval.test.ts > dynamic selection evaluation (offline) > real SDK with fake provider intercepts selection without running workflow
Error: ENOENT: no such file or directory, lstat '/work/dist/ultra'
 ❯ inventory extensions/ultra/eval/harness.ts:80:8
     78|  directory: string,
     79| ): Promise<Record<string, string>> {
     80|  if (!(await lstat(directory)).isDirectory())
       |        ^
     81|   throw new Error("Package root must be a regular directory, not a sym…
     82|  const result: Record<string, string> = {};
 ❯ snapshot extensions/ultra/eval/harness.ts:110:2
 ❯ extensions/ultra/__tests__/dynamic-selection-eval.test.ts:210:4
 ❯ owned extensions/ultra/__tests__/dynamic-selection-eval.test.ts:43:10
 ❯ extensions/ultra/__tests__/dynamic-selection-eval.test.ts:207:3

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯

 FAIL   contract  extensions/clipboard/__tests__/contract.test.ts > clipboard public contract > writes only safe lifecycle diagnostics in the isolated test state directory
Error: ENOENT: no such file or directory, scandir '/tmp/pi-fixture-lTHWu6/.test-state/pi-ext/debug/clipboard'
 ❯ extensions/clipboard/__tests__/contract.test.ts:359:7
    357|     await Promise.all(
    358|      (
    359|       await readdir(directory)
       |       ^
    360|      ).map((name) => readFile(join(directory, name), "utf8")),
    361|     )

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯


 Test Files  2 failed | 255 passed | 6 skipped (263)
      Tests  2 failed | 3010 passed | 1 expected fail | 24 skipped (3037)
   Start at  17:14:47
   Duration  421.95s (tests 71%, import 26%, transform 3%)

[//:test] ERROR task failed
[luci] step 6/6 failed after 516s
exit status 1

Complete raw log

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/bin
2/6export PATH="/cache/toolchains/bin:$HOME/.local/bin:$PATH"
3/6command -v mise >/dev/null 2>&1 || { curl -fsSL https://mise.run | sh && cp "$HOME/.local/bin/mise" /cache/toolchains/bin/mise; }
4/6mise trust
5/6mise install
6/6CI=true MOZ_DISABLE_CONTENT_SANDBOX=1 xvfb-run -a mise run //:ci
Continue in CLI

Nushell command · read-only · local Luci data access required.

luci log dogob-hubiv-bolok-nikoh 001

Full run ID + stable child selector. Copying never executes it.

All configuration at this revision
ci.kdl @ a76c
job "ci" {
  build {
    containerfile ".ci/Containerfile"
    context ".ci"
  }
  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}"
  }
}
release.kdl @ a76c
job "release-matrix" {
  image "mcr.microsoft.com/playwright:v1.61.0-noble"
  trigger {
    push {
      tag "v*"
    }
  }
  // Compatibility matrix over supported Pi versions. Luci runs Linux containers
  // only, so Windows and macOS have no runners; they are recorded here as known
  // gaps rather than silently passing. Node tracks the mise-locked version
  // (same as dev and normal CI). Broaden the `pi` axis as newer Pi
  // releases are verified; the compatibility check keeps it in sync with the
  // declared minimum (`pi-ext.minimumPi`).
  matrix {
    pi "1.2.0"
  }
  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 PI_EXT_MATRIX_PI=${pi} mise run //:verify-packages"
}