anthodev/lapin-futepublic Fork
⑂ develop
Commits
⬇ Clone ▾
git clone https://git.rickub.com/anthodev/lapin-fute.git
git clone ssh://git@rickub.com/anthodev/lapin-fute.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
success

Deploy configuration site to Bunny #19

push · v1.2.4 · 594f8e2bran in 1m15s · 2548 lines of output
queued <1s ran 1m15s total 1m15s
5 jobs
0 failed
1m15s duration
— tests
2 artifacts
Run quality checks
Build release PBW
Build and deploy configuration site
Publish Rickub release notes
Publish release to the RePebble store
successBuild release PBW 46s

Annotations

  • WARNING No file matched to [/workspace/lapin-fute/**/*requirements*.txt,/workspace/lapin-fute/**/*requirements*.in,/workspace/lapin-fute/**/*constraints*.txt,/workspace/lapin-fute/**/*constraints*.in,/workspace/lapin-fute/**/pyproject.toml,/workspace/lapin-fute/**/uv.lock,/workspace/lapin-fute/**/*.py.lock]. The cache will never get invalidated. Make sure you have checked out the target repository and configured the cache-dependency-glob input correctly.
successSet up job
cloning anthodev/lapin-fute @ 594f8e2be218c2a45f575ff3a3782de4be8e74f5action actions/setup-node@v4: node20 (_actions/actions/setup-node/v4)action oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6: node24 (_actions/oven-sh/setup-bun/0c5077e51419868618aeaa5fe8019c62421857d6)action astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e: node20 (_actions/astral-sh/setup-uv/d0cc045d04ccac9d8b7881df0226f9e82c39688e)action actions/upload-artifact@v4: node20 (_actions/actions/upload-artifact/v4)
successactions/checkout@v4 <1s
(checkout already performed by the runner — delivered as the read-only work disk)
successactions/setup-node@v4 5s
ciguest: network up (172.30.0.10/30 via 172.30.0.9)ciguest: starting dockerd (overlay2, data-root on scratch)ciguest: dockerd is readyciguest: loaded baked image postgres_16-alpine.tar.gz: Loaded image: postgres:16-alpineciguest: 1 baked image archive(s) loaded (no per-job registry pull needed)ciguest: logged into registry registry.rickub.com as rickubNode version file is not JSON fileResolved .node-version as 24.18.0isExplicit: 24.18.0explicit? truechecking cache: /tmp/hostedtoolcache/node/24.18.0/x64not foundAttempting to download 24.18.0...No manifest cachedGetting manifest from actions/node-versions@main(node:549) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)check 26.10.0 satisfies 24.18.0check 26.9.0 satisfies 24.18.0check 26.8.2 satisfies 24.18.0check 26.8.1 satisfies 24.18.0check 26.8.0 satisfies 24.18.0check 26.7.0 satisfies 24.18.0check 26.6.0 satisfies 24.18.0check 26.5.1 satisfies 24.18.0check 26.5.0 satisfies 24.18.0check 26.4.0 satisfies 24.18.0check 26.3.1 satisfies 24.18.0check 26.3.0 satisfies 24.18.0check 26.2.0 satisfies 24.18.0check 26.1.0 satisfies 24.18.0check 26.0.0 satisfies 24.18.0check 24.21.0 satisfies 24.18.0check 24.20.0 satisfies 24.18.0check 24.19.0 satisfies 24.18.0check 24.18.1 satisfies 24.18.0check 24.18.0 satisfies 24.18.0arm64===x64 && darwin===linuxx64===x64 && darwin===linuxarm64===x64 && linux===linuxx64===x64 && linux===linuxmatched 24.18.0Acquiring 24.18.0 - x64 from https://github.com/actions/node-versions/releases/download/24.18.0-28070977815/node-24.18.0-linux-x64.tar.gzDownloading https://github.com/actions/node-versions/releases/download/24.18.0-28070977815/node-24.18.0-linux-x64.tar.gzDestination /tmp/729c4602-49da-469f-b7b5-f49c8448bd67download completeExtracting ...Checking tar --versiontar (GNU tar) 1.34Copyright (C) 2021 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Written by John Gilmore and Jay Fenlason.[command]/usr/bin/tar xz --strip 1 --warning=no-unknown-keyword --overwrite -C /tmp/255ee719-32d9-4281-b68e-d38d41b38bad -f /tmp/729c4602-49da-469f-b7b5-f49c8448bd67Adding to the cache ...Caching tool node 24.18.0 x64source dir: /tmp/255ee719-32d9-4281-b68e-d38d41b38baddestination /tmp/hostedtoolcache/node/24.18.0/x64finished caching tool
Environment details
node: v24.18.0npm: 11.16.0yarn:
[command]/tmp/hostedtoolcache/node/24.18.0/x64/bin/npm config get cache/tmp/home/.npmnpm's cache folder "/tmp/home/.npm" configured for the root directoryfollowSymbolicLinks 'true'followSymbolicLinks 'true'implicitDescendants 'true'matchDirectories 'true'omitBrokenSymbolicLinks 'true'excludeHiddenFiles 'false'Search path '/workspace/lapin-fute/package-lock.json'/workspace/lapin-fute/package-lock.jsonFound 1 files to hash.primary key is node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723Cache service version: v2Resolved Keys:["node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723"]Checking zstd --quiet --version1.5.4zstd version: 1.5.4[Request] GetCacheEntryDownloadURL http://172.30.255.1:8888/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL[Response] - 200Headers: { "content-length": "1003", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:12 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "c8cec942-f01c-4dad-86a8-a3b9f4073e23"}Body: { "matchedKey": "node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723", "matched_key": "node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723", "ok": true, "signedDownloadUrl": "http://172.30.255.1:8888/twirp/_blob/download/cache?sig=***", "signed_download_url": "http://172.30.255.1:8888/twirp/_blob/download/cache?sig=***"}Cache hit for: node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723Archive path: /tmp/020094ac-47a8-44aa-825e-824dde4cd43e/cache.tzstStarting download of archive to: /tmp/020094ac-47a8-44aa-825e-824dde4cd43e/cache.tzstUse Azure SDK: trueDownload concurrency: 8Request timeout (ms): 30000Cache segment download timeout mins env var: undefinedSegment download timeout (ms): 600000Lookup only: falseCache Size: ~0 MB (345085 B)[command]/usr/bin/tar -xf /tmp/020094ac-47a8-44aa-825e-824dde4cd43e/cache.tzst -P -C /workspace/lapin-fute --use-compress-program unzstdCache restored successfullyCache restored from key: node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723##[add-matcher]/workspace/_actions/actions/setup-node/v4/.github/tsc.json##[add-matcher]/workspace/_actions/actions/setup-node/v4/.github/eslint-stylish.json##[add-matcher]/workspace/_actions/actions/setup-node/v4/.github/eslint-compact.json
successoven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 3s
Cache service version: v2Resolved Keys:["bun-tw6RmwqZSA0Bnj0yIUzvSupv0Nk="]Checking zstd --quiet --version1.5.4zstd version: 1.5.4[Request] GetCacheEntryDownloadURL http://172.30.255.1:8888/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL[Response] - 200Headers: { "content-length": "889", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:13 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "abeea646-dd29-4111-8bfa-a430e41891db"}Body: { "matchedKey": "bun-tw6RmwqZSA0Bnj0yIUzvSupv0Nk=", "matched_key": "bun-tw6RmwqZSA0Bnj0yIUzvSupv0Nk=", "ok": true, "signedDownloadUrl": "http://172.30.255.1:8888/twirp/_blob/download/cache?sig=***", "signed_download_url": "http://172.30.255.1:8888/twirp/_blob/download/cache?sig=***"}Cache hit for: bun-tw6RmwqZSA0Bnj0yIUzvSupv0Nk=Archive path: /tmp/d035f96c-ab30-4316-90ea-09315c9aaed1/cache.tzstStarting download of archive to: /tmp/d035f96c-ab30-4316-90ea-09315c9aaed1/cache.tzstUse Azure SDK: trueDownload concurrency: 8Request timeout (ms): 30000Cache segment download timeout mins env var: undefinedSegment download timeout (ms): 600000Lookup only: falseCache Size: ~34 MB (35811463 B)[command]/usr/bin/tar -xf /tmp/d035f96c-ab30-4316-90ea-09315c9aaed1/cache.tzst -P -C /workspace/lapin-fute --use-compress-program unzstdCache restored successfully[command]/tmp/home/.bun/bin/bun --revision1.4.0+34cbb9a40Using a cached version of Bun: 1.4.0+34cbb9a40
successastral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e 1s
Resolving relative path **/*requirements*.txt to /workspace/lapin-fute/**/*requirements*.txtResolving relative path **/*requirements*.in to /workspace/lapin-fute/**/*requirements*.inResolving relative path **/*constraints*.txt to /workspace/lapin-fute/**/*constraints*.txtResolving relative path **/*constraints*.in to /workspace/lapin-fute/**/*constraints*.inResolving relative path **/pyproject.toml to /workspace/lapin-fute/**/pyproject.tomlResolving relative path **/uv.lock to /workspace/lapin-fute/**/uv.lockResolving relative path **/*.py.lock to /workspace/lapin-fute/**/*.py.lock(node:613) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)Trying to find version for uv in: /workspace/lapin-fute/uv.tomlCould not find file: /workspace/lapin-fute/uv.tomlTrying to find version for uv in: /workspace/lapin-fute/pyproject.tomlCould not find file: /workspace/lapin-fute/pyproject.tomlCould not determine uv version from uv.toml or pyproject.toml. Falling back to latest.Resolving version: latestGetting latest version from GitHub API...No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.Latest version: 0.12.23isExplicit: 0.12.23explicit? trueVersion 0.12.23 is an explicit version.Trying to get uv from tool cache for 0.12.23...Cached versions: evaluating 0 versionsmatch not foundisExplicit: 0.12.23explicit? truechecking cache: /tmp/hostedtoolcache/uv/0.12.23/x86_64not foundmanifest-file not provided, reading from local file.manifest-file does not contain version 0.12.23, arch x86_64, platform unknown-linux-gnu. Falling back to GitHub releases.Downloading uv from "https://github.com/astral-sh/uv/releases/download/0.12.23/uv-x86_64-unknown-linux-gnu.tar.gz" ...Downloading https://github.com/astral-sh/uv/releases/download/0.12.23/uv-x86_64-unknown-linux-gnu.tar.gzDestination /tmp/e219a3dd-0d91-445e-b1ea-264939cbb926set authdownload completeChecksum not provided. Checking known checksums.No known checksum found for x86_64-unknown-linux-gnu-0.12.23.Checking tar --versiontar (GNU tar) 1.34Copyright (C) 2021 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Written by John Gilmore and Jay Fenlason.[command]/usr/bin/tar xz --warning=no-unknown-keyword --overwrite -C /tmp/59a4faf7-b7f7-4266-846c-fec92fa97d52 -f /tmp/e219a3dd-0d91-445e-b1ea-264939cbb926Caching tool uv 0.12.23 x86_64source dir: /tmp/59a4faf7-b7f7-4266-846c-fec92fa97d52/uv-x86_64-unknown-linux-gnudestination /tmp/hostedtoolcache/uv/0.12.23/x86_64finished caching toolAdded /tmp/home/.local/bin to the pathAdded /tmp/hostedtoolcache/uv/0.12.23/x86_64 to the path##[add-matcher]/workspace/_actions/astral-sh/setup-uv/d0cc045d04ccac9d8b7881df0226f9e82c39688e/.github/python.jsonSet UV_CACHE_DIR to /tmp/setup-uv-cacheSuccessfully installed uv version 0.12.23Searching files using cache dependency glob: /workspace/lapin-fute/**/*requirements*.txt,/workspace/lapin-fute/**/*requirements*.in,/workspace/lapin-fute/**/*constraints*.txt,/workspace/lapin-fute/**/*constraints*.in,/workspace/lapin-fute/**/pyproject.toml,/workspace/lapin-fute/**/uv.lock,/workspace/lapin-fute/**/*.py.lockfollowSymbolicLinks 'true'implicitDescendants 'true'matchDirectories 'true'omitBrokenSymbolicLinks 'true'excludeHiddenFiles 'false'Search path '/workspace/lapin-fute'No matches found for globNo file matched to [/workspace/lapin-fute/**/*requirements*.txt,/workspace/lapin-fute/**/*requirements*.in,/workspace/lapin-fute/**/*constraints*.txt,/workspace/lapin-fute/**/*constraints*.in,/workspace/lapin-fute/**/pyproject.toml,/workspace/lapin-fute/**/uv.lock,/workspace/lapin-fute/**/*.py.lock]. The cache will never get invalidated. Make sure you have checked out the target repository and configured the cache-dependency-glob input correctly.Trying to restore uv cache from GitHub Actions cache with key: setup-uv-1-x86_64-unknown-linux-gnu-3.11.2-pruned-no-dependency-globCache service version: v2Resolved Keys:["setup-uv-1-x86_64-unknown-linux-gnu-3.11.2-pruned-no-dependency-glob"]Checking zstd --quiet --version1.5.4zstd version: 1.5.4[Request] GetCacheEntryDownloadURL http://172.30.255.1:8888/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL[Response] - 200Headers: { "content-length": "13", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:17 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "2f957810-1230-44b0-8666-7e5d911a0432"}Body: { "ok": false}Cache not found for version 6e889508a071e149524c7f1cee56d7c82e3b00f602cea4ebbb015bfa5f9f71bc of keys: setup-uv-1-x86_64-unknown-linux-gnu-3.11.2-pruned-no-dependency-globNo GitHub Actions cache found for key: setup-uv-1-x86_64-unknown-linux-gnu-3.11.2-pruned-no-dependency-glob
successnpm ci <1s
Run
npm ci
added 7 packages, and audited 12 packages in 385msfound 0 vulnerabilities
successInstall pinned Pebble toolchain 25s
Run
uv tool install --managed-python --python 3.11 pebble-tool==5.0.40
pebble sdk install 4.33.1
Downloading cpython-3.11.17-linux-x86_64-gnu (download) (29.4MiB) Downloaded cpython-3.11.17-linux-x86_64-gnu (download)Resolved 51 packages in 799ms Building pyqrcode==1.2.1Downloading cryptography (4.5MiB)Downloading pillow (6.6MiB)Downloading numpy (16.1MiB)Downloading stpyv8 (23.7MiB)Downloading gevent (2.1MiB)Downloading netaddr (2.2MiB)Downloading pypkjs (11.3MiB) Building cobs==1.2.2 Built pyqrcode==1.2.1 Downloaded gevent Downloaded netaddr Downloaded cryptography Downloaded pillow Downloaded pypkjs Downloaded numpy Built cobs==1.2.2 Downloaded stpyv8Prepared 51 packages in 1.05sInstalled 51 packages in 26ms + certifi==2026.7.22 + cffi==2.1.1 + charset-normalizer==3.5.2 + cobs==1.2.2 + colorama==0.4.6 + cryptography==50.0.2 + freetype-py==2.5.1 + gevent==26.9.0 + gevent-websocket==0.10.1 + google-auth==2.60.0 + google-auth-oauthlib==1.5.0 + greenlet==3.5.6 + httplib2==0.32.0 + idna==3.20 + jwcrypto==1.6.1 + libpebble2==0.0.31 + netaddr==1.3.0 + numpy==2.4.6 + oauth2client==4.1.3 + oauthlib==4.0.0 + packaging==26.3 + pebble-tool==5.0.40 + peewee==4.5.3 + pillow==12.3.0 + progressbar2==4.6.0 + pyasn1==0.6.4 + pyasn1-modules==0.4.2 + pycparser==3.0 + pygeoip==0.3.2 + pyparsing==3.3.3 + pypkjs==2.0.7 + pypng==0.20220715.0 + pyqrcode==1.2.1 + pyserial==3.5 + python-dateutil==2.9.0.post0 + python-utils==4.1.0 + redis==8.1.0 + requests==2.34.2 + requests-oauthlib==2.0.0 + rsa==4.9.1 + sh==2.4.0 + six==1.17.0 + sourcemap==0.2.1 + stpyv8==13.1.201.22 + typing-extensions==4.16.0 + urllib3==2.8.0 + websocket-client==1.9.2 + websockify==0.13.0 + wheel==0.48.0 + zope-event==6.2 + zope-interface==8.6Installed 1 executable: pebble 0%[ ] 0.0 B/s 0:00:00 0%[ ] 1.3 MiB/s 0:00:00 8%[==== ] 24.6 MiB/s 0:00:00 28%[=============== ] 51.1 MiB/s 0:00:00 39%[==================== ] 58.7 MiB/s 0:00:00 49%[========================== ] 56.9 MiB/s 0:00:00 66%[=================================== ] 63.9 MiB/s 0:00:00 99%[==================================================== ] 74.4 MiB/s 0:00:00100%[=====================================================] 73.7 MiB/s 0:00:00Collecting freetype-py>=2.5.1 (from -r /tmp/home/.local/share/pebble-sdk/SDKs/4.33.1/sdk-core/requirements.txt (line 1)) Downloading freetype_py-2.5.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (6.3 kB)Collecting sh>=2.2.1 (from -r /tmp/home/.local/share/pebble-sdk/SDKs/4.33.1/sdk-core/requirements.txt (line 2)) Downloading sh-2.4.0-py3-none-any.whl.metadata (3.8 kB)Collecting pypng>=0.20220715.0 (from -r /tmp/home/.local/share/pebble-sdk/SDKs/4.33.1/sdk-core/requirements.txt (line 3)) Downloading pypng-0.20220715.0-py3-none-any.whl.metadata (13 kB)Downloading freetype_py-2.5.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 33.1 MB/s eta 0:00:00Downloading sh-2.4.0-py3-none-any.whl (48 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.6/48.6 kB 29.2 MB/s eta 0:00:00Downloading pypng-0.20220715.0-py3-none-any.whl (58 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.1/58.1 kB 40.8 MB/s eta 0:00:00Installing collected packages: pypng, sh, freetype-pySuccessfully installed freetype-py-2.5.1 pypng-0.20220715.0 sh-2.4.0[notice] A new release of pip is available: 24.0 -> 26.2.1[notice] To update, run: /tmp/home/.local/share/pebble-sdk/SDKs/4.33.1/.venv/bin/python -m pip install --upgrade pip 0%[ ] 0.0 B/s 0:00:00 0%[ ] 3.0 KiB/s 0:00:00 2%[= ] 21.4 MiB/s 0:00:00 9%[==== ] 50.7 MiB/s 0:00:00 12%[====== ] 58.7 MiB/s 0:00:00 21%[=========== ] 73.7 MiB/s 0:00:00 24%[============= ] 76.4 MiB/s 0:00:00 33%[================= ] 83.2 MiB/s 0:00:00 36%[=================== ] 85.1 MiB/s 0:00:00 45%[======================== ] 89.4 MiB/s 0:00:00 48%[========================= ] 90.6 MiB/s 0:00:00 57%[============================== ] 93.5 MiB/s 0:00:01 66%[=================================== ] 95.7 MiB/s 0:00:01 76%[======================================== ] 97.4 MiB/s 0:00:01 85%[============================================= ] 98.8 MiB/s 0:00:01 88%[============================================== ] 99.2 MiB/s 0:00:01 91%[================================================ ] 99.6 MiB/s 0:00:01100%[=====================================================] 100.5 MiB/s 0:00:01Installing SDK...By using the Pebble SDK, you agree to the following:PEBBLE TERMS OF USEhttps://developer.repebble.com/legal/terms-of-use/index.htmlPEBBLE DEVELOPER LICENSEhttps://developer.repebble.com/legal/sdk-license/index.htmlDownloading...Extracting...Preparing venv... (this may take a while)Installing dependencies...Installing JS dependencies... (this may take a while)Downloading toolchain...Extracting toolchain...Done.Installed.
successValidate package version <1s
Run
PACKAGE_VERSION="$(node -p "require('./packages/watch/package.json').version")"
test "$RELEASE_TAG" = "v$PACKAGE_VERSION"
successBuild production PBW 6s
Run
npm run build
> lapin-fute@1.2.4 build> node scripts/build.mjs✔ fixture is attributed and contains neither credentials nor personal responses (0.668432ms)✔ opaque IDs use stable full SHA-256 identities and distinguish opposite directions (0.655448ms)✔ import covers five modes, gates perimeter and unsupported modes, preserves homonyms, and uses rail terminals (49.891001ms)✔ bus services use their actual terminal to distinguish partial trips with the same headsign (30.106565ms)✔ GTFS quay and monomodal stops join SIRI perimeter namespaces without rewriting routing references (28.676115ms)✔ rail queries retain exact same-line child provenance without querying the child quay (54.60883ms)✔ ambiguous final selectors exclude both GTFS directions without rebinding existing services (62.106347ms)✔ perimeter descriptions are optional without losing services or weakening exact routing (70.248341ms)✔ parent-only relations retain valid routes without inventing stop associations (119.145359ms)✔ import normalizes valid colors and rejects invalid or missing authoritative colors (12.949541ms)✔ activation publishes a usable catalog when candidate and directory stat devices differ (42.134008ms)✔ activation reports EXDEV and preserves the active catalog while cleaning candidate sidecars (63.622266ms)✔ activation preserves stable services, removes stale IDs, and failed replacement leaves the active file untouched (87.498058ms)✔ restricted source download streams bytes and puts its token only in Authorization (16.937873ms)✔ ordered journey groups preserve variants, restrictions, exact terminals and proven aliases without changing old services (55.313751ms)✔ drop_off_type admits absent and empty values but rejects non-GTFS restriction codes (46.062989ms)✔ streaming CSV admits optional fields while enforcing complete source row counts (161.717509ms)✔ search is accent tolerant, punctuation safe, and bounded by Unicode code points (15.398429ms)✔ search preserves homonyms and applies deterministic ranking before the 20-row bound (48.459549ms)✔ search deduplicates destinations by native line and keeps equal labels and homonymous modes (19.972298ms)✔ search rejects conflicting display metadata for one native line (10.967217ms)✔ service options return every valid direction without applying the place-search bound (80.844723ms)✔ reload preserves stable IDs, distinguishes directions, rejects invalid candidates, and removes stale services (31.574225ms)✔ candidate validation rejects incomplete FTS coverage (14.134992ms)✔ candidate validation rejects non-normalized presentation colors (10.122334ms)✔ reader rejects incomplete journey bindings and malformed linked pattern rows (60.915085ms)✔ validated catalog publication preserves all modes, stable service identity and exact legacy lookup (71.829423ms)✔ search publication keeps every native line in natural order and refreshes display metadata by revision (52.646063ms)✔ new publication removes a stale service only for new sessions and keeps open sessions on their revision (71.483916ms)✔ publisher splits search and busy-place pages by decoded bytes without dropping bus rows or long routing (846.361192ms)✔ failed oversized publication preserves the previous manifest and its immutable catalog (49.235713ms)✔ publication exposes only dataset attribution, never operator credentials or signed download URLs (34.321952ms)✔ search bucket addressing uses Unicode codepoints rather than UTF-16 units (0.063529ms)✔ journey publication writes every annex and bounded paginated groups load from published bytes (46.361699ms)✔ journey-only order and restriction changes move the revision while service payloads stay unchanged (69.103606ms)✔ invalid journey content fails validation and preserves the previous manifest and revision (232.436802ms)✔ journey requests pin revision and admit only the complete group without retaining it (2.36447ms)✔ invalid or mismatched annexes do not start a group lookup (0.443831ms)✔ missing intermediate pages, bad counts, revisions and duplicate rows fail closed without retries (0.677289ms)✔ raw document and cumulative group budgets include whitespace and the index (17.086502ms)✔ shared group flights survive one cancellation but abort when the last subscriber cancels (0.484708ms)✔ deadline keeps valid annex, explicit cancellation suppresses callback, and neither retries (0.156042ms)✔ the revision is part of the group flight identity (0.237204ms)✔ service lookup remains compatible and transport construction failure settles once (0.226464ms)✔ Core Android decoded close responses preserve favorites with line colors (2.23074ms)✔ an explicit choice matching the system persists without a sync and returning to Automatic follows fresh locales (3.266239ms)✔ language-only saves send rehashed appearance records through DIFF without changing favorites or fetching (1.28106ms)✔ cancelled, invalid and unpersisted language saves leave the prior configuration active (0.462026ms)✔ ready coalesces and an early APP_OPEN waits for the sent COMMIT's transport completion (3.492814ms)✔ SDK readiness bypasses D2 normalization and a queued echo survives a failed application send (0.339907ms)✔ production PRIM GETs are once per service, traffic is coalesced, and D2 carries no routing or credential (3.193292ms)✔ ordinary warm refresh preserves the old snapshot until the complete fresh aggregate is ready (0.996878ms)✔ every refresh trigger observes the strict sixty-second departure gate despite old UNKNOWN traffic (1.22256ms)✔ refresh-all skips fresh services, preserves failed snapshot age, and fills missing rows (2.125652ms)✔ overview and detail CACHE_ONLY finish misses and stale hits without PRIM or a refreshing echo (0.854401ms)✔ complete cached results are stale only before the fifteen-minute useful boundary (0.79543ms)✔ 429 is terminal for one event, preserves useful stale data, and increments only a safe counter (0.814165ms)✔ the failure table deterministically projects unconfigured, stale, or unavailable (4.094211ms)✔ an opening overview completes after cache-only detail entry and local Back (0.681928ms)✔ slow ACKs preserve every accepted token even when later data bytes are identical (0.61394ms)✔ bounded overflow retains latest demand per kind after four accepted slow requests (1.601431ms)✔ warm refresh keeps loading feedback for usable and missing rows until terminal outcomes (1.160935ms)✔ credential lifecycle cancellation prevents old network completion from reaching the watch (0.642684ms)✔ joined overview fetches only uncovered services and completes both original tokens (0.727142ms)✔ superseded settled selections get terminal data without launching obsolete service fetches (0.719698ms)✔ saved preferences and Automatic use separate traffic caches without refetching a fresh language (5.240268ms)✔ an English override keeps in-flight French fallback and both language caches bound through restart (2.395568ms)✔ order-only settings preserve active fetches and cache, with zero favorite bodies (0.953256ms)✔ explicit FULL is one-shot, sends complete inventory, and is not persisted (0.369873ms)✔ unresolved routing uses a pinned public revision once per service without metadata resynchronization (1.080164ms)✔ obsolete routing preserves valid favorite/key data, rehydrates exactly, and never renders an old cache format (0.995916ms)✔ routing recovery keeps invalid-key journal authority and rejects unrelated corruption (0.580227ms)✔ failed routing persistence retains durable bytes and refuses unpersisted departure bindings (0.461134ms)✔ oversized hydrated routing cannot create an unpersisted departure binding (1.604256ms)✔ unresolved service IDs remain editable and canceled catalog lookups cannot launch PRIM (0.626514ms)✔ a stalled catalog lookup terminates as INVALID_SERVICE without PRIM or polling (0.503203ms)✔ stopping a six-favorite refresh cancels all pending PRIM work (1.155525ms)✔ catalog revision mismatch cannot hydrate favorites or send credentials to the static host (0.872715ms)✔ authentication rejection invalidates credentials durably, cancels network, and completes accepted tokens (1.086145ms)✔ the invalid-key journal blocks restart even when the primary configuration write fails (1.090794ms)✔ marker-only invalidation cannot apply an unpersisted replacement's favorites or language (0.833892ms)✔ credential replacement ignores saved callbacks from the canceled lifecycle (0.494196ms)✔ credential removal erases the key, retains favorites, and blocks PRIM until replacement (0.520616ms)✔ interrupted same-key replacement never clears durable invalid-key authority (1.164832ms)✔ malformed traffic gets a final error token without cache writes or retries (0.355305ms)✔ traffic failure keeps useful departures with unobserved UNKNOWN summaries (0.571661ms)✔ failed traffic refresh keeps the old detail cache and original checked time (0.824124ms)✔ cache persistence failure keeps fresh data usable in this phone session (0.719497ms)✔ slow ACK FIFO keeps a started transfer atomic and completes subsequent cache-only tokens (0.850954ms)✔ favorite removal prunes departure and traffic cache across restart (0.805809ms)✔ foreign cache formats fail closed and credential echoes cannot replace durable cache bytes (0.108653ms)✔ generated bootstrap starts the real companion and answers SDK readiness without a timing gate (2.128928ms)✔ journey flights migrate a single null arrival through real annexes before PRIM and preserve labels (1.635334ms)✔ journey flights retain unresolved arrival when persistence fails and never call departures (1.434307ms)✔ journey flights distinguish unavailable groups from unreachable arrivals for every mode (4.254431ms)✔ journey flights keep distinct arrivals independent while exact duplicate journeys share work (0.648315ms)✔ journey flights reject fresh detail cache and late results after an arrival-only edit (0.546694ms)✔ journey flights ignore late annex callbacks after an arrival-only edit (0.302998ms)✔ journey flights cover joined demand by arrival and reuse only line traffic (0.767137ms)✔ journey flights skip static loading for fresh cache and reject mismatched detail cache (0.655228ms)✔ both supported phone records migrate once to Automatic without losing favorites or credentials (1.757352ms)✔ storage never treats malformed or missing v2 arrivals as a legacy omission (0.253835ms)✔ routing recovery does not erase an explicit arrival and rejects unrelated corruption (0.169638ms)✔ migration readback failure restores either old format and exposes no writable configuration (0.234329ms)✔ a durable invalid-key marker remains authoritative across legacy migration (0.515726ms)✔ v2 page envelopes preserve arrivals while a legacy empty close can never clear favorites (0.247183ms)✔ stored language preferences survive restoration while malformed values never become Automatic (0.638145ms)✔ legacy saves preserve an override, explicit Automatic removes it, and invalid preferences reject the entire update (0.317635ms)✔ Automatic retains French normalization and English fallback without consulting the watch for overrides (0.269946ms)✔ cache keeps distinct arrivals of one service and discards only the rebound overview (1.396526ms)✔ merging requires captured bindings and refuses old arrivals even when labels are unchanged (0.258754ms)✔ unresolved bindings admit errors and traffic but never departure snapshots (0.194214ms)✔ v3 cache requires own valid bindings and scans arrival identities for secrets (1.27604ms)✔ old result caches lose departures and traffic without changing configuration or credentials (0.331582ms)✔ departures issue only the fixed PRIM GET and deliver a binding-free snapshot asynchronously (2.464978ms)✔ client executes byte decoding and both parsers without modern runtime collections or codecs (6.098966ms)✔ synchronous XHR completion or construction failure still settles later and only once (0.458409ms)✔ abort is final before completion and between completion and deferred delivery (1.171805ms)✔ watchdog timeout and pypkjs event-only network failure produce one safe error (0.237244ms)✔ HTTP authentication and quota failures retain semantic codes and bounded Retry-After (0.816339ms)✔ missing routing and malformed keys never start transport and remain abortable (0.119844ms)✔ routing is copied at dispatch and credentials cannot be embedded in request URLs (0.450774ms)✔ missing or malformed departure contexts reject before HTTP; unavailable patterns retain uncertain times (0.447698ms)✔ malformed SIRI evidence maps to INVALID_RESPONSE instead of an arbitrary journey (0.240921ms)✔ malformed UTF-8, missing byte responses and oversized bodies never enter normalized output (0.629019ms)✔ a BOM and a byte-exact maximum response remain valid (8.19308ms)✔ only traffic accepts a valid two MiB body and rejects one byte beyond its own cap (70.402409ms)✔ traffic calls coalesce across lines but not languages or credentials (0.623047ms)✔ coalesced cancellation preserves the remaining subscriber and cancels the final one (0.332613ms)✔ traffic cache reevaluates periods, retains checkedAt, expires at exactly 60 seconds and rejects clock rollback (0.323496ms)✔ credential changes never reuse another key's traffic cache and callbacks cannot mutate cached text (0.312245ms)✔ English complete text needs one request and missing either field uses the same French incident pair (0.841146ms)✔ fallback shares a French flight across lines and direct French readers then reuses both fresh caches (0.389349ms)✔ cancellation moves with fallback, preserves other readers and suppresses late completions (0.450484ms)✔ French fallback cannot replace a missing, inactive or incomplete matching incident with another one (2.043869ms)✔ English failures never fetch French and fallback failures propagate without retries (0.398457ms)✔ fallback never serves an English envelope that expires while French is pending (0.512189ms)✔ fallback stays inside the shared eight-slot limiter and cancelled queued fallback never starts (0.413875ms)✔ fallback refreshes expired French data and never borrows another credential's French cache (0.847869ms)✔ transport errors and malformed traffic are unavailable, not successful UNKNOWN, and are not cached (0.368371ms)✔ eight shared transport slots bound departures and traffic without starting cancelled queued work (0.215484ms)✔ aborting a lifecycle batch never starts its queued bulk request (0.188613ms)✔ no request retries or polling occur after success or failure (0.316703ms)✔ all five recorded modes preserve source times, freshness and confirmed intervals in ES5 (5.293688ms)✔ delay, cancellation, expected then aimed, and mixed freshness remain independent of journey evidence (0.685664ms)✔ common arrivals combine full and partial chronologically; beyond partial excludes only proven partials (0.247243ms)✔ unknown short names and absent terminal hints prove only universally compatible journeys (0.245981ms)✔ reduced 255 south and north contradictions confirm only shared arrivals and honor proven Q aliases (0.346359ms)✔ express, loops, order and boarding restrictions cannot be confirmed by one favorable occurrence (0.312435ms)✔ SP opposite directions and a different Q quay never become equivalent by place (0.213439ms)✔ four total entries prioritize confirmation, preserve ties and never synthesize missing visits (0.41618ms)✔ every supported SIRI evidence field accepts strings, value objects and flat arrays without coercion (0.748272ms)✔ resolved arrival context is mandatory; unavailable patterns keep actual uncertain times and statuses (0.533089ms)✔ foreign line and monitoring visits do not contaminate source freshness (0.152195ms)✔ explicit offsets and strict source dates remain independent of local timezone (0.409066ms)✔ traffic distinguishes observed normal, useful disruption and source uncertainty (2.380339ms)✔ lines omitted from the disruption-only bulk feed have normal traffic (0.178524ms)✔ the latest active update wins even over a more severe incident (0.360956ms)✔ dated incidents outrank undated ones and equal dates use ID rather than input order (0.256741ms)✔ future works stay ignored while active works participate in the selection (0.193372ms)✔ active works interruption tracks the synthetic September window, inclusive at 08:00 and gone at noon (0.420217ms)✔ an active disruption without complete details remains UNKNOWN (0.119264ms)✔ Paris periods are inclusive at start and exclusive at end, including summer time (0.419406ms)✔ generated Paris time covers epoch bounds and exact DST gaps and overlaps without device Intl (1.010082ms)✔ generated Paris offsets agree with build-time ICU across the entire epoch range (11.503472ms)✔ portable traffic text strips markup and secrets and truncates only at Unicode codepoint boundaries (1.447842ms)✔ traffic redacts entity-decoded and URI-encoded credentials before returning readable text (0.868196ms)✔ malformed traffic joins, periods, duplicates and severities reject rather than become normal traffic (1.299144ms)✔ empty half-open traffic periods stay inactive without discarding other source information (1.159522ms)✔ a bulk body containing empty periods succeeds through the production client (1.021454ms)✔ 256 daily periods keep the blocking incident usable with only the current day active (1.061238ms)✔ 257 periods exceed the payload bound and reject the whole body (0.276578ms)✔ a bulk body with a 256-period notice still succeeds through the production client (1.89533ms)✔ reversed or invalid traffic periods still reject instead of becoming empty or invented ranges (0.161342ms)✔ strict watch decoder admits overview CACHE_ONLY but rejects retired and mismatched envelopes (0.89134ms)✔ lazy configuration waits for correlated NEED and COMMIT ACK before exposing the binding (1.516982ms)✔ FULL sends complete inventory and requires every body bit; reorder DIFF sends no bodies (1.385996ms)✔ HELLO correlation, epoch floor and profile changes guard configuration preparation (0.445565ms)✔ superseded sync ignores stale NEED and late transport failure without resetting c-sequence (0.522018ms)✔ phone enrichment updates only matching lifecycle bindings without changing watch metadata (0.773098ms)✔ Unicode appearance and traffic continuation strings cross D2 without clipping source data (0.918261ms)✔ queue is lazy, bounded, atomic and yields after each ACK including final completion (0.187892ms)✔ an unattempted SDK echo survives failed D2 work, but the echo itself is never retried (0.159068ms)✔ clear waits for the physical flight and stale callbacks cannot corrupt its replacement (3.315131ms)✔ cancellation retires old deferred work and synchronous transport throws fail once (0.281778ms)✔ static search scans every page, keeps the best twenty and preserves homonyms (11.792383ms)✔ search rows carry precomputed lines without extra requests and reject malformed metadata (2.591324ms)✔ equally relevant stops put rail modes before tram and bus (0.367669ms)✔ static search uses AND token prefixes, Unicode normalization and one-codepoint buckets (0.612047ms)✔ search ignores French join words absent from an official stop label (0.314018ms)✔ missing initial search bucket is empty but a missing continuation is unavailable (0.441216ms)✔ search refuses revision changes and noncontiguous continuations (0.402113ms)✔ service pages and exact service lookups keep unbounded authoritative routing on one revision (0.894646ms)✔ service lookup rejects unsafe paths, wrong identities and credential-shaped routing (0.399479ms)✔ service pages reject missing continuations and cross-place content (0.454942ms)✔ debouncing cancels superseded requests before they reach the static host (0.291696ms)✔ canceling an active search aborts its fetch and prevents later pages even if fetch ignores abort (4.647037ms)✔ decoded response bounds stop a stream instead of buffering the remainder (0.64077ms)✔ lookupJourney assembles a real multi-page group on one pinned revision (68.282317ms)✔ concurrent services of one group share one flight and one assembled group (52.070444ms)✔ lookups for different groups run separate flights (51.827949ms)✔ aborting one subscriber leaves the shared group load intact (48.099084ms)✔ aborting the last subscriber cancels the load and a later lookup starts fresh (48.595454ms)✔ group admission failures keep the service and never yield a partial group (50.297873ms)✔ group line and mode must match the service annex even when group identities match (49.383992ms)✔ annex failures return null without any group transfer (43.841026ms)✔ annex routing must exactly match every requested routing field (43.738885ms)✔ raw group budget includes whitespace in the index as well as pages (21.523735ms)✔ mirrored constants equal the canonical contract (0.633156ms)✔ french language tags select french copy and everything else falls back to english (0.412002ms)✔ authored and transport labels never appear in product copy (0.097423ms)✔ a complete v2 opening opens an editable session and validates favorites (0.515606ms)✔ legacy and unversioned openings are decoded read-only for display only (0.28824ms)✔ absent or malformed openings are non-editable empty sessions (0.44304ms)✔ minimal favorites round trip without inventing presentation properties and partial groups reject (0.369101ms)✔ the config page consumes the companion-produced opening fragment exactly (0.441567ms)✔ an advertised languagePreference enables a strict selector round trip (0.440094ms)✔ an unadvertised launch keeps the selector inert and the close payload free of the preference (0.376776ms)✔ an invalid present languagePreference rejects the whole opening without coercion (0.161252ms)✔ explicit choices stay distinct from automatic across a full save and reopen (0.688249ms)✔ a planted key field never enters page state or the payload (0.097813ms)✔ key lifecycle plans KEEP, REPLACE, and REMOVE through pure state (0.293099ms)✔ replace validation rejects oversized or control-bearing keys in both locales (0.158547ms)✔ read-only sessions never mutate, save, or hydrate regardless of the DOM (0.281688ms)✔ favorite edits replace the whole list atomically with renumbered order (0.761116ms)✔ malformed whole favorite lists stay read-only and cannot be normalized into a save (0.273863ms)✔ the seventh favorite is rejected by the add path while a valid six save whole (0.525495ms)✔ the close fragment carries the key value only for REPLACE and is one-shot (0.216977ms)✔ three backend services can be added, renamed, reordered, and removed atomically (0.305763ms)✔ catalog response guards reject identifiers and malformed or oversized collections (0.276178ms)✔ journey places validate the catalog place identity shape exactly (0.073457ms)✔ service routing validates exactly and only phone favorites may carry it (0.086652ms)✔ favorites created from catalog services carry a fresh routing copy and the chosen arrival (0.26129ms)✔ routing and arrivals survive the full page round trip and phone-side validation (0.496159ms)✔ force full synchronization is an explicit one-shot close flag (0.23506ms)✔ unresolved favorites hydrate in place or wait for explicit re-selection (0.269505ms)✔ encoded close and opening fragments enforce the 32768 bound at producers (0.866724ms)✔ favorite preview uses the credential-free recorded departure fixture (0.135534ms)✔ page keeps secrets out of durable and observable surfaces (0.527057ms)✔ bilingual About copy exposes the required legal, privacy, attribution, and safe-link facts (0.284573ms)✔ official rail badges cover every RER and Transilien line (0.181961ms)✔ favorites without presentation fields resolve no official image and use an accessible neutral fallback (0.136606ms)✔ search result labels use the available row width and wrap line badges (0.22427ms)✔ mirrored place search validation matches the canonical lines contract (0.327854ms)✔ the first-load gzip metric includes the eagerly imported badge resolver (0.115145ms)config page ready: /tmp/lapin-fute-config-site-aq06hx/output (existing hosted catalog left unchanged)config site ready: /tmp/lapin-fute-config-site-O2Fish/output (catalog revision in catalog/manifest.json)✔ page-only configuration build neither requires nor publishes a catalog (13.324163ms)✔ full configuration build still requires and copies a published catalog (1.464404ms)✔ catalog upload planning compares source revisions instead of volatile publication revisions (1.097416ms)✔ configuration-site verification checks every local and served file on the current catalog revision (5.162502ms)fatal: path 'CHANGELOG.md' does not exist in 'af9e17ca60621b3df272bc4fccf1ee706513985d'✔ release body keeps the whole section and excludes adjacent releases and the heading (1.055718ms)✔ adjacent releases stay isolated regardless of heading position (0.245961ms)✔ exact bracket match does not confuse similar versions (0.138941ms)✔ fenced code examples can neither duplicate nor truncate a section (0.117019ms)✔ a fenced heading before any real section is not a section (0.062176ms)✔ tilde fences and CRLF line endings are handled like backtick fences (0.054582ms)✔ missing, empty, and duplicate sections are rejected (0.312675ms)✔ a duplicate section is rejected even when separated by another release (0.077135ms)✔ release notes come from the tagged changelog, never the working copy (18.383782ms)✔ a changelog committed after the tag cannot leak into the tagged release (14.324517ms)✔ releases reject non-stable tags and repositories without a tagged changelog (8.123108ms)✔ CJS: full and short services prove the common arrival, not the full arrival (1.666372ms)✔ CJS: unknown or absent hints use every exact-boarding candidate (0.773329ms)✔ CJS: terminal aliases do not prove intermediate express stops or loop occurrences (0.463268ms)✔ CJS: pickup and drop-off restrictions remain conditional or impossible (0.572322ms)✔ CJS: proven equivalents and whole normalized labels preserve ambiguous evidence (0.2936ms)✔ CJS: group admission rejects missing pages, foreign links and ambiguous structure (0.670806ms)✔ CJS: exact budgets and IDs admit boundaries without truncation (10.122615ms)✔ CJS: overlapping terminal aliases remain ambiguous and unmapped arrivals stay selectable (0.161983ms)✔ CJS: arrival display truncates scalars and journey identity keeps arrivals distinct (0.21346ms)✔ browser ESM: full and short services prove the common arrival, not the full arrival (0.934561ms)✔ browser ESM: unknown or absent hints use every exact-boarding candidate (0.231684ms)✔ browser ESM: terminal aliases do not prove intermediate express stops or loop occurrences (0.897341ms)✔ browser ESM: pickup and drop-off restrictions remain conditional or impossible (0.505637ms)✔ browser ESM: proven equivalents and whole normalized labels preserve ambiguous evidence (0.110377ms)✔ browser ESM: group admission rejects missing pages, foreign links and ambiguous structure (0.569637ms)✔ browser ESM: exact budgets and IDs admit boundaries without truncation (9.408958ms)✔ browser ESM: overlapping terminal aliases remain ambiguous and unmapped arrivals stay selectable (0.102732ms)✔ browser ESM: arrival display truncates scalars and journey identity keeps arrivals distinct (0.239509ms)✔ browser and canonical helpers produce identical admitted groups and decisions (0.503293ms)▶ local checksum, identity and tag validation fails before authentication ✔ wrong checksum (4.515109ms) ✔ wrong UUID (3.589315ms) ✔ wrong archive version (2.264051ms) ✔ prerelease tag (0.481853ms)✔ local checksum, identity and tag validation fails before authentication (11.41699ms)▶ archive targets, duplicate metadata and oversized JSON fail before authentication ✔ missing target (2.16743ms) ✔ duplicate metadata (1.358405ms) ✔ oversized metadata (4.275611ms)✔ archive targets, duplicate metadata and oversized JSON fail before authentication (8.204291ms)✔ ambiguous checksum records fail before authentication (1.102736ms)✔ an authenticated account without the exact app mapping cannot upload (11.939569ms)✔ ownership lookup rejects conflicting UUID keys after normalization (2.851813ms)▶ either hardware's published version blocks equal or older candidates ✔ equal Emery (1.567116ms) ✔ newer Gabbro (2.090537ms)✔ either hardware's published version blocks equal or older candidates (3.915526ms)✔ publication uploads the exact checked bytes and notes once, even if the file changes after validation (2.457985ms)▶ remote failure, redirect and malformed data never expose remote content or retry ✔ revoked session (1.404411ms) ✔ invalid token (1.591502ms) ✔ malformed JSON (1.454154ms) ✔ oversized JSON (2.829842ms) ✔ redirect (2.301663ms) ✔ wrong public identity (1.195991ms) ✔ unknown published version (1.340111ms) ✔ upload HTTP error (1.291911ms) ✔ uncertain upload timeout (1.322598ms)✔ remote failure, redirect and malformed data never expose remote content or retry (15.465965ms)✔ domain contracts expose every frozen enum and accept every field (0.97692ms)✔ domain validators enforce exact fields, versions, bounds, and secret rules (0.62958ms)✔ phone routing stays exact and separate from the canonical favorite (0.460884ms)✔ six favorites are accepted uniformly without relaxing required domain fields (0.357881ms)✔ D2 appearance hashes canonical UTF-8 bytes in both directions and counts scalar fields (3.564889ms)✔ appearance clip endpoints preserve supplementary glyph boundaries and fit native widths (0.926747ms)✔ D2 retains explicit non-contiguous application IDs without SDK or domain aliases (0.099256ms)✔ dictionary sizing follows Pebble's measured-data formula (0.095469ms)✔ D2 separates watch epochs, data counters, configuration generations and correlation tokens (0.371756ms)✔ configuration dictionaries require the c-generation and exact six-slot inventory bounds (0.791163ms)✔ data request admission distinguishes user detail, overview and cache-only triggers (0.445465ms)✔ catalog contracts freeze transport modes, error codes, and limits (0.070653ms)✔ place lines require complete display metadata within the existing label and color bounds (0.436708ms)✔ catalog validators require phone routing and keep place search display-only (0.464921ms)✔ overview contracts preserve request order and isolate per-favorite failures (0.369662ms)✔ traffic detail contracts enforce discriminants, UTF-8 bounds, and plain text (0.46975ms)✔ packed result dictionaries enforce kind-specific counts and favorite binding (0.755646ms)✔ traffic fragment validation allows continuations but keeps error and UTF-8 bounds strict (0.197149ms)✔ phone traffic preparation preserves palette, scalar sections and LF wrapping without padding fragments (2.621662ms)✔ traffic wrapping converts allowed source tabs without emitting packed controls (0.152245ms)✔ traffic wrapping distinguishes an empty section from explicit trailing blank lines (0.081422ms)✔ prepared updating headers fit both fresh and stale native fonts (0.689031ms)✔ overview countdown terminal labels fit full and compact native slots without shortening detail copy (0.463418ms)✔ secondary departure status labels fit native detail columns while primary copy stays complete (0.359523ms)✔ uncertain journey legend and secondary labels fit their native slots (0.95009ms)✔ real PRIM normalization crosses D2 warm overview, detail and traffic boundaries (17.394619ms)✔ changed six-favorite metadata finishes overview5 and detail5 without PRIM (9.715251ms)✔ phone restart and reorder retain six metadata records without another APP_OPEN (9.404389ms)✔ cache-only miss stays terminal while an independent overview flight completes (2.049259ms)✔ production entry profile 0: writable handshake, consultation and sole Back owner (27.851249ms)✔ production entry profile 1: writable handshake, consultation and sole Back owner (16.71695ms)✔ production entry rejects an unknown profile before opening transport (0.724968ms)✔ appearance records round trip and validate (3.258074ms)✔ displayHash pins scalar semantics across profiles and languages (0.931956ms)✔ clipped honours scalar endpoints and the ellipsis mask (1.032324ms)✔ prepared appearances prefix metro and tram labels consistently (7.055759ms)✔ prepared appearances contract metro bis lines without clipping (3.801132ms)✔ departure records validate bounds and pairing (0.185217ms)✔ departure status and uncertainty survive packing independently without record growth (3.760124ms)✔ traffic documents validate section counts and bounds (16.070198ms)✔ packed primitives count scalars, not UTF-16 units (0.426178ms)✔ traffic outcome union keeps prior documents on scoped errors (17.849802ms)✔ credential errors survive data retention and outrank other loading (2.477141ms)✔ epoch guards publish only on complete validated commits (2.697133ms)✔ restored metadata rejects unsolicited old epochs and recovers via READY (5.870989ms)✔ FULL clears metadata only after a durable marker and cannot restore interrupted data (9.347803ms)✔ obsolete work is cancelled without becoming the new favorite's failure (1.074253ms)✔ rapid detail navigation settles once on the final favorite after 500 ms (3.409998ms)✔ fifty refresh and rapid-navigation cycles keep durable and timer state bounded (8.800948ms)✔ enqueue failures belong to the attempted request, never unrelated sync (2.280072ms)✔ fresh traffic renders fresh despite missing or older departures (5.071582ms)✔ deleting the active traffic favorite falls back to the first detail (2.134729ms)✔ malformed cancellation needs full id, generation, kind and epoch (1.915479ms)✔ changed DIFF releases result owners only at the complete inventory boundary (9.066916ms)✔ malformed guards, no-ops and reorders keep warm results (10.410103ms)✔ released DIFF aborts end the loader and keep manual recovery (11.701192ms)✔ explicit manual retry rekeys after an aborted released sync (7.08844ms)✔ changed-DIFF recovery respects the final request ids without automatic rekeys (9.466796ms)✔ unrelated failed overview enqueue keeps a relevant manual detail intent (3.186761ms)✔ inventory entries release exactly when last used (5.233786ms)✔ zero-need commits release inventory arrays and preserve identity (3.043843ms)✔ inventory body guards reject duplicate, late and unrequested bodies (33.139397ms)✔ wire validation rejects malformed frames before any state changes (0.143939ms)✔ epoch allocation is durable, monotonic and fails closed (9.482876ms)✔ DIFF persistence faults preserve the committed configuration (20.317254ms)✔ pending marker faults stay before the destructive seam (3.65584ms)✔ load rejects foreign, epochless and corrupt storage as unconfigured (0.617838ms)✔ foreign manifests cannot reset epochs or create epochless pending writes (2.472602ms)✔ epoch grammar and request ids (0.090009ms)✔ profile 0 en: changed DIFF loading ends on abort and final cache miss (6.064111ms)✔ profile 0 fr: changed DIFF loading ends on abort and final cache miss (0.825867ms)✔ profile 1 en: changed DIFF loading ends on abort and final cache miss (2.25233ms)✔ profile 1 fr: changed DIFF loading ends on abort and final cache miss (0.798907ms)✔ profile 0: traffic pages preserve sections and scoped errors (2.767575ms)✔ profile 1: traffic pages preserve sections and scoped errors (0.64577ms)✔ profile 0: detail emphasizes the destination and aligns the primary countdown (0.492112ms)✔ profile 1: detail emphasizes the destination and aligns the primary countdown (0.654336ms)✔ rectangular overview fills the first three rows (0.751388ms)✔ retained credential failures outrank traffic loading until matching success (1.078852ms)✔ profile 0 en: uncertain detail keeps times, statuses and overview fallback (0.737031ms)✔ profile 0 en: mixed groups label uncertainty once without sorting times (0.769561ms)✔ profile 0 fr: uncertain detail keeps times, statuses and overview fallback (0.545532ms)✔ profile 0 fr: mixed groups label uncertainty once without sorting times (0.616355ms)✔ profile 1 en: uncertain detail keeps times, statuses and overview fallback (0.450394ms)✔ profile 1 en: mixed groups label uncertainty once without sorting times (0.606016ms)✔ profile 1 fr: uncertain detail keeps times, statuses and overview fallback (0.657912ms)✔ profile 1 fr: mixed groups label uncertainty once without sorting times (0.402684ms)✔ Gabbro ignores an uncertain fourth departure outside the visible detail (0.357299ms)ℹ tests 393ℹ suites 0ℹ pass 393ℹ fail 0ℹ cancelled 0ℹ skipped 0ℹ todo 0ℹ duration_ms 4903.483702{ "scope": "Host D2 tuple sizing and modeled exchanges; not observed native delivery or lifecycle evidence", "domainSchemaVersion": 1, "displayWireVersion": 3, "favoriteLimit": 6, "appMessageKeys": { "SCHEMA_VERSION": 0, "MESSAGE_TYPE": 1, "REQUEST_ID": 2, "FAVORITE_ID": 3, "KEY_STATUS": 10, "ITEM_COUNT": 11, "ITEM_INDEX": 12, "REQUEST_TRIGGER": 24, "CONFIG_NEED_MASK": 35, "CONFIG_MODE": 36, "LANGUAGE": 37, "DISPLAY_RECORD": 38, "DISPLAY_PROFILE": 39, "DISPLAY_KIND": 40, "DISPLAY_GENERATION": 41, "CLOCK_12H": 42, "DISPLAY_HASH": 43, "WATCH_SESSION_ID": 44, "DISPLAY_EPOCH": 45 }, "capacities": { "inboxBytes": 768, "outboxBytes": 192, "queueCapacity": 4 }, "maximumPhoneDictionaryBytesBound": 736, "maximumWatchDictionaryBytesBound": 149, "maximumDictionaryBytesBoundByType": { "REQUEST": 149, "CONFIG_BEGIN": 120, "FAVORITE": 507, "CONFIG_COMMIT": 66, "OVERVIEW_REQUEST": 77, "TRAFFIC_REQUEST": 138, "CONFIG_ENTRY": 173, "CONFIG_NEED": 99, "DISPLAY_BEGIN": 160, "DISPLAY_RECORD": 736, "DISPLAY_COMMIT": 77, "DISPLAY_HELLO": 132, "DISPLAY_READY": 55 }, "preparedSources": [ { "profile": 0, "language": "en", "appearanceBytes": 422, "trafficFragmentBytes": [ 603 ] }, { "profile": 0, "language": "fr", "appearanceBytes": 422, "trafficFragmentBytes": [ 603 ] }, { "profile": 1, "language": "en", "appearanceBytes": 422, "trafficFragmentBytes": [ 603 ] }, { "profile": 1, "language": "fr", "appearanceBytes": 422, "trafficFragmentBytes": [ 603 ] } ], "exchanges": { "fullSix": { "dictionaries": 15, "serializedBytesBound": 4365, "largestDictionaryBytesBound": 507 }, "unchangedSix": { "dictionaries": 9, "serializedBytesBound": 1323, "largestDictionaryBytesBound": 173 }, "reorderSix": { "dictionaries": 9, "serializedBytesBound": 1323, "largestDictionaryBytesBound": 173 }, "oneChangedFavorite": { "dictionaries": 10, "serializedBytesBound": 1830, "largestDictionaryBytesBound": 507 }, "initialD2": { "dictionaries": 18, "serializedBytesBound": 4684, "largestDictionaryBytesBound": 507 }, "cacheOnlyOverview": { "dictionaries": 9, "serializedBytesBound": 1010, "largestDictionaryBytesBound": 128 }, "cacheOnlyDetail": { "dictionaries": 4, "serializedBytesBound": 541, "largestDictionaryBytesBound": 160 }, "trafficTwoFragments": { "dictionaries": 5, "serializedBytesBound": 1362, "largestDictionaryBytesBound": 736 }, "trafficError": { "dictionaries": 4, "serializedBytesBound": 474, "largestDictionaryBytesBound": 160 } }, "sdkTransport": { "reservedKey": 15025, "includedInD2": false, "conditionalHandshake": { "announcementDictionaries": 1, "echoDictionaries": 1, "combinedInitialDictionaryAttempts": 20 }, "condition": "Only for exactly one observed SDK announcement/echo exchange plus the modeled initial D2 lifecycle; duplicate READYs and rekeys are additional events", "serializedBytes": null, "ackFrames": null, "evidenceRequired": "Capture native SDK tuple widths/bytes, D2 attempted/delivered/NACK counts and transport ACKs separately" }, "eventContract": { "localPagesAndMinuteTicks": "No application dictionaries; verify with native idle/page captures, not this host sizing script" }, "pass": true}'distclean' finished successfully (0.000s)### -p pebble/emery# xsc main.xsb# xsl mc.xsa### -p pebble/gabbro# xsc main.xsb# xsl mc.xsaSetting top to : /workspace/lapin-fute/packages/watch Setting out to : /workspace/lapin-fute/packages/watch/build Checking for program 'webpack' : /tmp/home/.local/share/pebble-sdk/SDKs/current/node_modules/.bin/webpack Found Pebble SDK for gabbro in: : /tmp/home/.local/share/pebble-sdk/SDKs/current/sdk-core/pebble/gabbro Checking for program 'gcc, cc' : arm-none-eabi-gcc Checking for program 'ar' : arm-none-eabi-ar Found Pebble SDK for emery in: : /tmp/home/.local/share/pebble-sdk/SDKs/current/sdk-core/pebble/emery Checking for program 'gcc, cc' : arm-none-eabi-gcc Checking for program 'ar' : arm-none-eabi-ar 'configure' finished successfully (0.016s)Waf: Entering directory `/workspace/lapin-fute/packages/watch/build'Auto-injected MOD resource for gabbro from build/mods/gabbro/mc.xsaAuto-injected MOD resource for emery from build/mods/emery/mc.xsa[1/3] Creating message_key_json: -> build/js/message_keys.json[2/3] Creating message_key_definitions: -> build/src/message_keys.auto.c[3/3] Creating message_key_header: -> build/include/message_keys.auto.h[ 4/18] Compiling gabbro | reso: build/mods/gabbro/mc.xsa -> build/gabbro/mods/gabbro/mc.xsa.MOD.reso[ 5/18] Compiling gabbro | reso: resources/images/menu-icon.png -> build/gabbro/resources/images/menu-icon.png.IMAGE_MENU_ICON.reso[ 6/18] Creating gabbro | /workspace/lapin-fute/packages/watch/build/gabbro/appinfo.auto.c: -> build/gabbro/appinfo.auto.c[ 7/18] Processing gabbro | resource_ball: build/gabbro/resources/images/menu-icon.png.IMAGE_MENU_ICON.reso build/gabbro/mods/gabbro/mc.xsa.MOD.reso -> build/gabbro/system_resources.resball[ 8/18] Compiling gabbro | generate_resource_id_definitions: build/gabbro/system_resources.resball -> build/gabbro/src/resource_ids.auto.c[ 9/18] Compiling gabbro | subst: /tmp/home/.local/share/pebble-sdk/SDKs/current/sdk-core/pebble/common/pebble_app.ld.template -> build/gabbro/pebble_app.ld.auto[10/18] Compiling gabbro | c: build/src/message_keys.auto.c -> build/src/message_keys.auto.c.16.o[11/18] Compiling gabbro | c: build/gabbro/src/resource_ids.auto.c -> build/gabbro/src/resource_ids.auto.c.16.o[12/18] Compiling gabbro | generate_pbpack: build/gabbro/system_resources.resball -> build/gabbro/app_resources.pbpack[13/18] Creating gabbro | /workspace/lapin-fute/packages/watch/build/appinfo.json: -> build/appinfo.json[14/18] Compiling gabbro | generate_resource_id_header: build/gabbro/system_resources.resball -> build/gabbro/src/resource_ids.auto.h[15/18] Compiling gabbro | c: src/c/mdbl.c -> build/src/c/mdbl.c.16.o[16/18] Compiling gabbro | c: build/gabbro/appinfo.auto.c -> build/gabbro/appinfo.auto.c.16.o[17/18] Linking gabbro | cprogram: build/src/c/mdbl.c.16.o build/gabbro/appinfo.auto.c.16.o build/gabbro/src/resource_ids.auto.c.16.o build/src/message_keys.auto.c.16.o -> build/gabbro/pebble-app.elf/tmp/home/.local/share/pebble-sdk/SDKs/4.33.1/toolchain/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: warning: /workspace/lapin-fute/packages/watch/build/gabbro/pebble-app.elf has a LOAD segment with RWX permissions[18/18] Processing gabbro | memory_usage_report: build/gabbro/pebble-app.elf build/gabbro/app_resources.pbpack-------------------------------------------------------GABBRO APP MEMORY USAGETotal size of resources: 48374 bytes / 256.0KBTotal footprint in RAM: 308 bytes / 128.0KBFree RAM available (heap): 130764 bytes------------------------------------------------------- [19/33] Compiling emery | reso: build/mods/emery/mc.xsa -> build/emery/mods/emery/mc.xsa.MOD.reso[20/33] Compiling emery | reso: resources/images/menu-icon.png -> build/emery/resources/images/menu-icon.png.IMAGE_MENU_ICON.reso[22/33] Creating emery | /workspace/lapin-fute/packages/watch/build/emery/appinfo.auto.c: -> build/emery/appinfo.auto.c[23/33] Processing emery | resource_ball: build/emery/resources/images/menu-icon.png.IMAGE_MENU_ICON.reso build/emery/mods/emery/mc.xsa.MOD.reso -> build/emery/system_resources.resball[24/33] Compiling emery | subst: /tmp/home/.local/share/pebble-sdk/SDKs/current/sdk-core/pebble/common/pebble_app.ld.template -> build/emery/pebble_app.ld.auto[25/33] Compiling emery | generate_resource_id_definitions: build/emery/system_resources.resball -> build/emery/src/resource_ids.auto.c[26/33] Compiling emery | c: build/src/message_keys.auto.c -> build/src/message_keys.auto.c.17.o[27/33] Compiling emery | generate_pbpack: build/emery/system_resources.resball -> build/emery/app_resources.pbpack[28/33] Compiling emery | c: build/emery/src/resource_ids.auto.c -> build/emery/src/resource_ids.auto.c.17.o[29/33] Compiling emery | generate_resource_id_header: build/emery/system_resources.resball -> build/emery/src/resource_ids.auto.h[30/33] Compiling emery | c: src/c/mdbl.c -> build/src/c/mdbl.c.17.o[31/33] Compiling emery | c: build/emery/appinfo.auto.c -> build/emery/appinfo.auto.c.17.o[32/33] Linking emery | cprogram: build/src/c/mdbl.c.17.o build/emery/appinfo.auto.c.17.o build/emery/src/resource_ids.auto.c.17.o build/src/message_keys.auto.c.17.o -> build/emery/pebble-app.elf/tmp/home/.local/share/pebble-sdk/SDKs/4.33.1/toolchain/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: warning: /workspace/lapin-fute/packages/watch/build/emery/pebble-app.elf has a LOAD segment with RWX permissions[33/33] Processing emery | memory_usage_report: build/emery/pebble-app.elf build/emery/app_resources.pbpack-------------------------------------------------------EMERY APP MEMORY USAGETotal size of resources: 48374 bytes / 256.0KBTotal footprint in RAM: 308 bytes / 128.0KBFree RAM available (heap): 130764 bytes------------------------------------------------------- [34/39] Compiling gabbro | /workspace/lapin-fute/packages/watch/build/gabbro/pebble-app.raw.bin: build/gabbro/pebble-app.elf -> build/gabbro/pebble-app.raw.bin[35/39] Compiling emery | /workspace/lapin-fute/packages/watch/build/emery/pebble-app.raw.bin: build/emery/pebble-app.elf -> build/emery/pebble-app.raw.bin[36/39] Processing merge_js: src/pkjs/catalog-client.js src/pkjs/codec.js src/pkjs/compactparis-time.js src/pkjs/companion.js src/pkjs/configuration-sync.js src/pkjs/configuration.js src/pkjs/contracts.js src/pkjs/display-copy.json src/pkjs/display-font-metrics.json src/pkjs/display-fonts.js src/pkjs/display-layout.js src/pkjs/display.js src/pkjs/index.js src/pkjs/journey-patterns.js src/pkjs/message-queue.js src/pkjs/prim-client.js src/pkjs/prim-departures.js src/pkjs/prim-traffic.js -> build/pebble-js-app.js build/pebble-js-app.js.map[37/39] Processing emery | inject-metadata: build/emery/pebble-app.raw.bin build/emery/pebble-app.elf build/emery/app_resources.pbpack -> build/emery/pebble-app.bin[38/39] Processing gabbro | inject-metadata: build/gabbro/pebble-app.raw.bin build/gabbro/pebble-app.elf build/gabbro/app_resources.pbpack -> build/gabbro/pebble-app.bin[39/39] Creating app_bundle: -> build/watch.pbwWaf: Leaving directory `/workspace/lapin-fute/packages/watch/build''build' finished successfully (0.246s)Running Moddable prebuild (release build).Running mcrun -m ./src/embeddedjs/manifest.json -f x -p pebble/emery -t build -o ./build/mods/emery/mcrun -s tech.moddable.pebbleCopied Moddable mod for emeryRunning mcrun -m ./src/embeddedjs/manifest.json -f x -p pebble/gabbro -t build -o ./build/mods/gabbro/mcrun -s tech.moddable.pebbleCopied Moddable mod for gabbroModdable prebuild completed.{"aliases":19,"first":"SCHEMA_VERSION","last":"DISPLAY_EPOCH"}
successPrepare release artifacts <1s
Run
mkdir release-assets
cp packages/watch/build/watch.pbw "release-assets/lapin-fute-$RELEASE_TAG.pbw"
(
  cd release-assets
  sha256sum "lapin-fute-$RELEASE_TAG.pbw" > SHA256SUMS
)
successactions/upload-artifact@v4 2s
followSymbolicLinks 'true'implicitDescendants 'true'omitBrokenSymbolicLinks 'true'excludeHiddenFiles 'true'(node:1235) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)followSymbolicLinks 'true'implicitDescendants 'true'matchDirectories 'true'omitBrokenSymbolicLinks 'true'excludeHiddenFiles 'true'Search path '/workspace/lapin-fute/release-assets'Removing /workspace/lapin-fute/release-assets from rawSearchResults because it is a directoryFile:/workspace/lapin-fute/release-assets/SHA256SUMS was found using the provided searchPathFile:/workspace/lapin-fute/release-assets/lapin-fute-v1.2.4.pbw was found using the provided searchPathWith the provided path, there will be 2 files uploadedRoot artifact directory is /workspace/lapin-fute/release-assetsArtifact name is valid!Root directory input is valid!Workflow Run Backend ID: 8fe46f3c-7685-4fec-9240-20ea16159387Workflow Job Run Backend ID: 7ad25ac5-d10e-464d-93bf-3f7b8ea53e56[Request] CreateArtifact http://172.30.255.1:8888/twirp/github.actions.results.api.v1.ArtifactService/CreateArtifact[Response] - 200Headers: { "content-length": "389", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:49 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "669c0dfd-5599-496e-b8fb-3e2dd1b27ac1"}Body: { "ok": true, "signedUploadUrl": "http://172.30.255.1:8888/twirp/_blob/upload?sig=***"}Creating Artifact archive with compressionLevel: 6Zip write high watermark value 8388608Zip read high watermark value 8388608Uploading artifact zip to blob storage with maxConcurrency: 5, bufferSize: 8388608Beginning upload of artifact content to blob storageZip stream for upload has ended.Zip stream for upload has finished.(node:1235) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.Uploaded bytes 160790Finished uploading artifact content to blob storage!SHA256 digest of uploaded artifact zip is c8aa748e0da137b624256dada3b30de30c9a9c39f79e65aa74227e9491d959bdFinalizing artifact upload[Request] FinalizeArtifact http://172.30.255.1:8888/twirp/github.actions.results.api.v1.ArtifactService/FinalizeArtifact[Response] - 200Headers: { "content-length": "32", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:51 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "819f4e90-a72c-40fb-a512-99fb625dea4b"}Body: { "artifactId": "3205", "ok": true}Artifact lapin-fute-v1.2.4.zip successfully finalized. Artifact ID 3205Artifact lapin-fute-v1.2.4 has been successfully uploaded! Final size is 160790 bytes. Artifact ID is 3205Artifact download URL: https://rickub.com/anthodev/lapin-fute/actions/runs/19/artifacts/3205
Post astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e
Resolving relative path **/*requirements*.txt to /workspace/lapin-fute/**/*requirements*.txtResolving relative path **/*requirements*.in to /workspace/lapin-fute/**/*requirements*.inResolving relative path **/*constraints*.txt to /workspace/lapin-fute/**/*constraints*.txtResolving relative path **/*constraints*.in to /workspace/lapin-fute/**/*constraints*.inResolving relative path **/pyproject.toml to /workspace/lapin-fute/**/pyproject.tomlResolving relative path **/uv.lock to /workspace/lapin-fute/**/uv.lockResolving relative path **/*.py.lock to /workspace/lapin-fute/**/*.py.lockPruning cache...(node:1248) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)[command]/tmp/hostedtoolcache/uv/0.12.23/x86_64/uv cache prune --ciPruning cache at: /tmp/setup-uv-cacheRemoved 3812 files (4.9MiB)Saving cache path: /tmp/setup-uv-cacheCache service version: v2Checking zstd --quiet --version1.5.4zstd version: 1.5.4implicitDescendants 'false'followSymbolicLinks 'true'implicitDescendants 'false'omitBrokenSymbolicLinks 'true'Search path '/tmp/setup-uv-cache'Matched: ../../tmp/setup-uv-cacheCache Paths:["../../tmp/setup-uv-cache"]Archive Path: /tmp/6f5b959d-6648-4b15-8d3e-2b29a15fb3a9/cache.tzst[command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /workspace/lapin-fute --files-from manifest.txt --use-compress-program zstdmtFile Size: 3194328Reserving Cache[Request] CreateCacheEntry http://172.30.255.1:8888/twirp/github.actions.results.api.v1.CacheService/CreateCacheEntry[Response] - 200Headers: { "content-length": "772", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:51 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "8f38ddc7-ac68-45cc-bb3c-b078f404713f"}Body: { "ok": true, "signedUploadUrl": "http://172.30.255.1:8888/twirp/_blob/upload?sig=***", "signed_upload_url": "http://172.30.255.1:8888/twirp/_blob/upload?sig=***"}Attempting to upload cache located at: /tmp/6f5b959d-6648-4b15-8d3e-2b29a15fb3a9/cache.tzstUse Azure SDK: trueUpload concurrency: 8Upload chunk size: 67108864BlobClient: upload:twirp:_blob(node:1248) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.Sent 3194328 of 3194328 (100.0%), 3.0 MBs/sec[Request] FinalizeCacheEntryUpload http://172.30.255.1:8888/twirp/github.actions.results.api.v1.CacheService/FinalizeCacheEntryUpload[Response] - 200Headers: { "content-length": "47", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Wed, 07 Oct 2026 17:00:52 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "fcb50a05-e313-4694-b23c-05ffad92fb30"}Body: { "entryId": "4008", "entry_id": "4008", "ok": true}FinalizeCacheEntryUploadResponse: truecache saved with the key: setup-uv-1-x86_64-unknown-linux-gnu-3.11.2-pruned-no-dependency-glob
Post oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
Post actions/setup-node@v4
(node:1280) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)Cache hit occurred on the primary key node-cache-Linux-x64-npm-a248b8d11d416f5f7a7b7af693c6e633aa3d6ad94371b1dfb598abbaace16723, not saving cache.
Annotations
No file matched to [/workspace/lapin-fute/**/*requirements*.txt,/workspace/lapin-fute/**/*requirements*.in,/workspace/lapin-fute/**/*constraints*.txt,/workspace/lapin-fute/**/*constraints*.in,/workspace/lapin-fute/**/pyproject.toml,/workspace/lapin-fute/**/uv.lock,/workspace/lapin-fute/**/*.py.lock]. The cache will never get invalidated. Make sure you have checked out the target repository and configured the cache-dependency-glob input correctly.

No test reports for this run.

Tell a job where its test runner writes its report and this tab fills in: how many tests passed, failed and were skipped, a bar of the result at a glance, then every failure first — with the assertion that failed and the output around it — over a per-suite list of cases and their durations. No scrolling a log for the word FAIL.

It is one reports: key on the job — a job key, not a step, so the report is collected whatever the job concluded. JUnit XML and go test -json are both understood, and most runners already emit one of them. reports: is a rickub extension and works only in .rickub/workflows/; in .github/workflows/ it is a parse error on purpose, because those files are also meant to run on github.com.