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
failure

Deploy configuration site to Bunny #16

push · v1.2.4 · 594f8e2bran in 9m53s · 1177 lines of output
queued 9m11s ran 42s total 9m53s
5 jobs
1 failed
9m53s duration
— tests
1 artifacts
failureBuild release PBW → astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e View log
Step failed A step exited non-zero. Open the log for the failing command's output.
API rate limit exceeded for 46.105.119.221. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) - https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting API rate limit exceeded for 46.105.119.221. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) - https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting
Run quality checks
Build release PBW
Build and deploy configuration site
Publish Rickub release notes
queued
Publish release to the RePebble store
queued
successRun quality checks 20s
successSet up job
cloning anthodev/lapin-fute @ 594f8e2be218c2a45f575ff3a3782de4be8e74f5action actions/setup-node@v4: node20 (_actions/actions/setup-node/v4)
successactions/checkout@v4 1s
(checkout already performed by the runner — delivered as the read-only work disk)
successactions/setup-node@v4 6s
ciguest: network up (172.30.0.2/30 via 172.30.0.1)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:552) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)API rate limit exceeded for 46.105.119.221. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)HttpClientError: API rate limit exceeded for 46.105.119.221. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.) at HttpClient.<anonymous> (/workspace/_actions/actions/setup-node/v4/dist/setup/index.js:9848:33) at Generator.next (<anonymous>) at fulfilled (/workspace/_actions/actions/setup-node/v4/dist/setup/index.js:9238:58) at process.processTicksAndRejections (node:internal/process/task_queues:104:5)Falling back to download directly from Nodeevaluating 751 versionsmatched: v24.18.0Acquiring 24.18.0 - x64 from https://nodejs.org/dist/v24.18.0/node-v24.18.0-linux-x64.tar.gzDownloading https://nodejs.org/dist/v24.18.0/node-v24.18.0-linux-x64.tar.gzDestination /tmp/b1f9f6af-a134-43f5-b5af-52137a2dbccddownload 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/af43e4fd-ae57-4fd7-9d06-8d11d3126c92 -f /tmp/b1f9f6af-a134-43f5-b5af-52137a2dbccdAdding to the cache ...Caching tool node 24.18.0 x64source dir: /tmp/af43e4fd-ae57-4fd7-9d06-8d11d3126c92destination /tmp/hostedtoolcache/node/24.18.0/x64finished caching toolDone
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 11:41:58 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": "3de07850-23a9-4c3f-8f72-b9f982902aa2"}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/a2d2726f-a78f-4169-af5a-fd6e169e0fc8/cache.tzstStarting download of archive to: /tmp/a2d2726f-a78f-4169-af5a-fd6e169e0fc8/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/a2d2726f-a78f-4169-af5a-fd6e169e0fc8/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
successnpm ci 1s
Run
npm ci
added 7 packages, and audited 12 packages in 542msfound 0 vulnerabilities
successValidate release tag <1s
Run
production='^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$'
preview='^pre-v(0|[1-9][0-9]*)-(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$'
[[ "$RELEASE_TAG" =~ $production || "$RELEASE_TAG" =~ $preview ]]
successValidate release changelog section <1s
Run
node scripts/generate-release-notes.mjs
successnpm test 11s
Run
npm test
> lapin-fute@1.2.4 test> node scripts/test.mjs✔ fixture is attributed and contains neither credentials nor personal responses (1.185672ms)✔ opaque IDs use stable full SHA-256 identities and distinguish opposite directions (1.197072ms)✔ import covers five modes, gates perimeter and unsupported modes, preserves homonyms, and uses rail terminals (102.810075ms)✔ bus services use their actual terminal to distinguish partial trips with the same headsign (83.952726ms)✔ GTFS quay and monomodal stops join SIRI perimeter namespaces without rewriting routing references (107.169162ms)✔ rail queries retain exact same-line child provenance without querying the child quay (231.716371ms)✔ ambiguous final selectors exclude both GTFS directions without rebinding existing services (158.864082ms)✔ perimeter descriptions are optional without losing services or weakening exact routing (245.31059ms)✔ parent-only relations retain valid routes without inventing stop associations (391.091572ms)✔ import normalizes valid colors and rejects invalid or missing authoritative colors (44.024399ms)✔ activation publishes a usable catalog when candidate and directory stat devices differ (77.440766ms)✔ activation reports EXDEV and preserves the active catalog while cleaning candidate sidecars (169.877987ms)✔ activation preserves stable services, removes stale IDs, and failed replacement leaves the active file untouched (283.734729ms)✔ restricted source download streams bytes and puts its token only in Authorization (55.971533ms)✔ ordered journey groups preserve variants, restrictions, exact terminals and proven aliases without changing old services (179.742789ms)✔ drop_off_type admits absent and empty values but rejects non-GTFS restriction codes (213.518949ms)✔ streaming CSV admits optional fields while enforcing complete source row counts (576.291696ms)✔ search is accent tolerant, punctuation safe, and bounded by Unicode code points (43.675937ms)✔ search preserves homonyms and applies deterministic ranking before the 20-row bound (236.970605ms)✔ search deduplicates destinations by native line and keeps equal labels and homonymous modes (68.320369ms)✔ search rejects conflicting display metadata for one native line (29.852459ms)✔ service options return every valid direction without applying the place-search bound (434.331432ms)✔ reload preserves stable IDs, distinguishes directions, rejects invalid candidates, and removes stale services (145.514673ms)✔ candidate validation rejects incomplete FTS coverage (24.096625ms)✔ candidate validation rejects non-normalized presentation colors (25.17207ms)✔ reader rejects incomplete journey bindings and malformed linked pattern rows (259.864357ms)✔ validated catalog publication preserves all modes, stable service identity and exact legacy lookup (201.462281ms)✔ search publication keeps every native line in natural order and refreshes display metadata by revision (162.186648ms)✔ new publication removes a stale service only for new sessions and keeps open sessions on their revision (217.358202ms)✔ publisher splits search and busy-place pages by decoded bytes without dropping bus rows or long routing (1551.817478ms)✔ failed oversized publication preserves the previous manifest and its immutable catalog (90.5843ms)✔ publication exposes only dataset attribution, never operator credentials or signed download URLs (64.357825ms)✔ search bucket addressing uses Unicode codepoints rather than UTF-16 units (0.156704ms)✔ journey publication writes every annex and bounded paginated groups load from published bytes (87.229816ms)✔ journey-only order and restriction changes move the revision while service payloads stay unchanged (139.223907ms)✔ invalid journey content fails validation and preserves the previous manifest and revision (407.132014ms)✔ journey requests pin revision and admit only the complete group without retaining it (4.631648ms)✔ invalid or mismatched annexes do not start a group lookup (1.09431ms)✔ missing intermediate pages, bad counts, revisions and duplicate rows fail closed without retries (1.66553ms)✔ raw document and cumulative group budgets include whitespace and the index (33.062132ms)✔ shared group flights survive one cancellation but abort when the last subscriber cancels (1.543392ms)✔ deadline keeps valid annex, explicit cancellation suppresses callback, and neither retries (0.629098ms)✔ the revision is part of the group flight identity (0.591268ms)✔ service lookup remains compatible and transport construction failure settles once (0.860813ms)✔ Core Android decoded close responses preserve favorites with line colors (5.27904ms)✔ an explicit choice matching the system persists without a sync and returning to Automatic follows fresh locales (6.096943ms)✔ language-only saves send rehashed appearance records through DIFF without changing favorites or fetching (1.71344ms)✔ cancelled, invalid and unpersisted language saves leave the prior configuration active (0.921386ms)✔ ready coalesces and an early APP_OPEN waits for the sent COMMIT's transport completion (6.048963ms)✔ SDK readiness bypasses D2 normalization and a queued echo survives a failed application send (0.525024ms)✔ production PRIM GETs are once per service, traffic is coalesced, and D2 carries no routing or credential (8.059219ms)✔ ordinary warm refresh preserves the old snapshot until the complete fresh aggregate is ready (2.494874ms)✔ every refresh trigger observes the strict sixty-second departure gate despite old UNKNOWN traffic (2.388926ms)✔ refresh-all skips fresh services, preserves failed snapshot age, and fills missing rows (3.590768ms)✔ overview and detail CACHE_ONLY finish misses and stale hits without PRIM or a refreshing echo (2.414514ms)✔ complete cached results are stale only before the fifteen-minute useful boundary (1.758334ms)✔ 429 is terminal for one event, preserves useful stale data, and increments only a safe counter (1.503336ms)✔ the failure table deterministically projects unconfigured, stale, or unavailable (8.081501ms)✔ an opening overview completes after cache-only detail entry and local Back (1.372201ms)✔ slow ACKs preserve every accepted token even when later data bytes are identical (1.177296ms)✔ bounded overflow retains latest demand per kind after four accepted slow requests (3.275226ms)✔ warm refresh keeps loading feedback for usable and missing rows until terminal outcomes (2.107859ms)✔ credential lifecycle cancellation prevents old network completion from reaching the watch (0.783969ms)✔ joined overview fetches only uncovered services and completes both original tokens (1.287272ms)✔ superseded settled selections get terminal data without launching obsolete service fetches (1.2921ms)✔ saved preferences and Automatic use separate traffic caches without refetching a fresh language (2.908599ms)✔ an English override keeps in-flight French fallback and both language caches bound through restart (5.56181ms)✔ order-only settings preserve active fetches and cache, with zero favorite bodies (1.764376ms)✔ explicit FULL is one-shot, sends complete inventory, and is not persisted (0.652142ms)✔ unresolved routing uses a pinned public revision once per service without metadata resynchronization (1.861929ms)✔ obsolete routing preserves valid favorite/key data, rehydrates exactly, and never renders an old cache format (1.293202ms)✔ routing recovery keeps invalid-key journal authority and rejects unrelated corruption (0.525705ms)✔ failed routing persistence retains durable bytes and refuses unpersisted departure bindings (0.713828ms)✔ oversized hydrated routing cannot create an unpersisted departure binding (1.456489ms)✔ unresolved service IDs remain editable and canceled catalog lookups cannot launch PRIM (0.75285ms)✔ a stalled catalog lookup terminates as INVALID_SERVICE without PRIM or polling (0.575178ms)✔ stopping a six-favorite refresh cancels all pending PRIM work (1.07769ms)✔ catalog revision mismatch cannot hydrate favorites or send credentials to the static host (0.664324ms)✔ authentication rejection invalidates credentials durably, cancels network, and completes accepted tokens (1.511071ms)✔ the invalid-key journal blocks restart even when the primary configuration write fails (2.607495ms)✔ marker-only invalidation cannot apply an unpersisted replacement's favorites or language (1.208895ms)✔ credential replacement ignores saved callbacks from the canceled lifecycle (0.66763ms)✔ credential removal erases the key, retains favorites, and blocks PRIM until replacement (0.632705ms)✔ interrupted same-key replacement never clears durable invalid-key authority (1.385496ms)✔ malformed traffic gets a final error token without cache writes or retries (0.470842ms)✔ traffic failure keeps useful departures with unobserved UNKNOWN summaries (1.021083ms)✔ failed traffic refresh keeps the old detail cache and original checked time (3.319859ms)✔ cache persistence failure keeps fresh data usable in this phone session (1.552819ms)✔ slow ACK FIFO keeps a started transfer atomic and completes subsequent cache-only tokens (0.967383ms)✔ favorite removal prunes departure and traffic cache across restart (1.903085ms)✔ foreign cache formats fail closed and credential echoes cannot replace durable cache bytes (0.371706ms)✔ generated bootstrap starts the real companion and answers SDK readiness without a timing gate (4.467169ms)✔ journey flights migrate a single null arrival through real annexes before PRIM and preserve labels (2.792582ms)✔ journey flights retain unresolved arrival when persistence fails and never call departures (1.167718ms)✔ journey flights distinguish unavailable groups from unreachable arrivals for every mode (8.215212ms)✔ journey flights keep distinct arrivals independent while exact duplicate journeys share work (1.285769ms)✔ journey flights reject fresh detail cache and late results after an arrival-only edit (1.055267ms)✔ journey flights ignore late annex callbacks after an arrival-only edit (0.644037ms)✔ journey flights cover joined demand by arrival and reuse only line traffic (1.068362ms)✔ journey flights skip static loading for fresh cache and reject mismatched detail cache (0.873607ms)✔ both supported phone records migrate once to Automatic without losing favorites or credentials (3.522229ms)✔ storage never treats malformed or missing v2 arrivals as a legacy omission (0.529692ms)✔ routing recovery does not erase an explicit arrival and rejects unrelated corruption (0.300443ms)✔ migration readback failure restores either old format and exposes no writable configuration (0.4164ms)✔ a durable invalid-key marker remains authoritative across legacy migration (0.943327ms)✔ v2 page envelopes preserve arrivals while a legacy empty close can never clear favorites (0.391474ms)✔ stored language preferences survive restoration while malformed values never become Automatic (1.205599ms)✔ legacy saves preserve an override, explicit Automatic removes it, and invalid preferences reject the entire update (0.594534ms)✔ Automatic retains French normalization and English fallback without consulting the watch for overrides (0.47484ms)✔ cache keeps distinct arrivals of one service and discards only the rebound overview (5.790499ms)✔ merging requires captured bindings and refuses old arrivals even when labels are unchanged (0.723285ms)✔ unresolved bindings admit errors and traffic but never departure snapshots (0.488104ms)✔ v3 cache requires own valid bindings and scans arrival identities for secrets (0.634339ms)✔ old result caches lose departures and traffic without changing configuration or credentials (1.582515ms)✔ departures issue only the fixed PRIM GET and deliver a binding-free snapshot asynchronously (4.566826ms)✔ client executes byte decoding and both parsers without modern runtime collections or codecs (9.368402ms)✔ synchronous XHR completion or construction failure still settles later and only once (1.042603ms)✔ abort is final before completion and between completion and deferred delivery (2.397432ms)✔ watchdog timeout and pypkjs event-only network failure produce one safe error (0.437509ms)✔ HTTP authentication and quota failures retain semantic codes and bounded Retry-After (1.659188ms)✔ missing routing and malformed keys never start transport and remain abortable (0.225212ms)✔ routing is copied at dispatch and credentials cannot be embedded in request URLs (0.651952ms)✔ missing or malformed departure contexts reject before HTTP; unavailable patterns retain uncertain times (1.34491ms)✔ malformed SIRI evidence maps to INVALID_RESPONSE instead of an arbitrary journey (0.459821ms)✔ malformed UTF-8, missing byte responses and oversized bodies never enter normalized output (1.43055ms)✔ a BOM and a byte-exact maximum response remain valid (15.210297ms)✔ only traffic accepts a valid two MiB body and rejects one byte beyond its own cap (113.088862ms)✔ traffic calls coalesce across lines but not languages or credentials (2.536422ms)✔ coalesced cancellation preserves the remaining subscriber and cancels the final one (0.741469ms)✔ traffic cache reevaluates periods, retains checkedAt, expires at exactly 60 seconds and rejects clock rollback (0.64083ms)✔ credential changes never reuse another key's traffic cache and callbacks cannot mutate cached text (0.561842ms)✔ English complete text needs one request and missing either field uses the same French incident pair (1.641926ms)✔ fallback shares a French flight across lines and direct French readers then reuses both fresh caches (0.978012ms)✔ cancellation moves with fallback, preserves other readers and suppresses late completions (0.664685ms)✔ French fallback cannot replace a missing, inactive or incomplete matching incident with another one (2.685852ms)✔ English failures never fetch French and fallback failures propagate without retries (0.629339ms)✔ fallback never serves an English envelope that expires while French is pending (0.579015ms)✔ fallback stays inside the shared eight-slot limiter and cancelled queued fallback never starts (0.565179ms)✔ fallback refreshes expired French data and never borrows another credential's French cache (0.996046ms)✔ transport errors and malformed traffic are unavailable, not successful UNKNOWN, and are not cached (0.452457ms)✔ eight shared transport slots bound departures and traffic without starting cancelled queued work (0.24049ms)✔ aborting a lifecycle batch never starts its queued bulk request (0.235482ms)✔ no request retries or polling occur after success or failure (0.589375ms)✔ all five recorded modes preserve source times, freshness and confirmed intervals in ES5 (7.901854ms)✔ delay, cancellation, expected then aimed, and mixed freshness remain independent of journey evidence (2.037647ms)✔ common arrivals combine full and partial chronologically; beyond partial excludes only proven partials (0.622276ms)✔ unknown short names and absent terminal hints prove only universally compatible journeys (0.435476ms)✔ reduced 255 south and north contradictions confirm only shared arrivals and honor proven Q aliases (0.527719ms)✔ express, loops, order and boarding restrictions cannot be confirmed by one favorable occurrence (0.36297ms)✔ SP opposite directions and a different Q quay never become equivalent by place (0.221505ms)✔ four total entries prioritize confirmation, preserve ties and never synthesize missing visits (0.623307ms)✔ every supported SIRI evidence field accepts strings, value objects and flat arrays without coercion (1.130849ms)✔ resolved arrival context is mandatory; unavailable patterns keep actual uncertain times and statuses (0.390542ms)✔ foreign line and monitoring visits do not contaminate source freshness (0.205996ms)✔ explicit offsets and strict source dates remain independent of local timezone (1.239763ms)✔ traffic distinguishes observed normal, useful disruption and source uncertainty (3.712486ms)✔ lines omitted from the disruption-only bulk feed have normal traffic (0.271379ms)✔ the latest active update wins even over a more severe incident (0.252984ms)✔ dated incidents outrank undated ones and equal dates use ID rather than input order (0.392104ms)✔ future works stay ignored while active works participate in the selection (0.355536ms)✔ active works interruption tracks the synthetic September window, inclusive at 08:00 and gone at noon (0.844683ms)✔ an active disruption without complete details remains UNKNOWN (0.208471ms)✔ Paris periods are inclusive at start and exclusive at end, including summer time (0.41619ms)✔ generated Paris time covers epoch bounds and exact DST gaps and overlaps without device Intl (2.060891ms)✔ generated Paris offsets agree with build-time ICU across the entire epoch range (16.911444ms)✔ portable traffic text strips markup and secrets and truncates only at Unicode codepoint boundaries (2.431335ms)✔ traffic redacts entity-decoded and URI-encoded credentials before returning readable text (1.276051ms)✔ malformed traffic joins, periods, duplicates and severities reject rather than become normal traffic (1.386477ms)✔ empty half-open traffic periods stay inactive without discarding other source information (2.656637ms)✔ a bulk body containing empty periods succeeds through the production client (2.572369ms)✔ 256 daily periods keep the blocking incident usable with only the current day active (2.677075ms)✔ 257 periods exceed the payload bound and reject the whole body (0.610133ms)✔ a bulk body with a 256-period notice still succeeds through the production client (2.356495ms)✔ reversed or invalid traffic periods still reject instead of becoming empty or invented ranges (0.353342ms)✔ strict watch decoder admits overview CACHE_ONLY but rejects retired and mismatched envelopes (2.701781ms)✔ lazy configuration waits for correlated NEED and COMMIT ACK before exposing the binding (3.162054ms)✔ FULL sends complete inventory and requires every body bit; reorder DIFF sends no bodies (2.405827ms)✔ HELLO correlation, epoch floor and profile changes guard configuration preparation (0.700272ms)✔ superseded sync ignores stale NEED and late transport failure without resetting c-sequence (0.816539ms)✔ phone enrichment updates only matching lifecycle bindings without changing watch metadata (1.102946ms)✔ Unicode appearance and traffic continuation strings cross D2 without clipping source data (1.785375ms)✔ queue is lazy, bounded, atomic and yields after each ACK including final completion (0.322174ms)✔ an unattempted SDK echo survives failed D2 work, but the echo itself is never retried (0.415699ms)✔ clear waits for the physical flight and stale callbacks cannot corrupt its replacement (0.380673ms)✔ cancellation retires old deferred work and synchronous transport throws fail once (0.254707ms)✔ static search scans every page, keeps the best twenty and preserves homonyms (29.613431ms)✔ search rows carry precomputed lines without extra requests and reject malformed metadata (5.881699ms)✔ equally relevant stops put rail modes before tram and bus (0.72101ms)✔ static search uses AND token prefixes, Unicode normalization and one-codepoint buckets (1.337206ms)✔ search ignores French join words absent from an official stop label (0.548478ms)✔ missing initial search bucket is empty but a missing continuation is unavailable (0.861444ms)✔ search refuses revision changes and noncontiguous continuations (0.80064ms)✔ service pages and exact service lookups keep unbounded authoritative routing on one revision (1.694965ms)✔ service lookup rejects unsafe paths, wrong identities and credential-shaped routing (0.907961ms)✔ service pages reject missing continuations and cross-place content (0.868377ms)✔ debouncing cancels superseded requests before they reach the static host (0.564758ms)✔ canceling an active search aborts its fetch and prevents later pages even if fetch ignores abort (6.566152ms)✔ decoded response bounds stop a stream instead of buffering the remainder (1.336924ms)✔ lookupJourney assembles a real multi-page group on one pinned revision (106.904926ms)✔ concurrent services of one group share one flight and one assembled group (129.79398ms)✔ lookups for different groups run separate flights (101.455437ms)✔ aborting one subscriber leaves the shared group load intact (126.556213ms)✔ aborting the last subscriber cancels the load and a later lookup starts fresh (71.634528ms)✔ group admission failures keep the service and never yield a partial group (79.510583ms)✔ group line and mode must match the service annex even when group identities match (104.674087ms)✔ annex failures return null without any group transfer (88.824763ms)✔ annex routing must exactly match every requested routing field (123.68256ms)✔ raw group budget includes whitespace in the index as well as pages (41.985741ms)✔ mirrored constants equal the canonical contract (1.313491ms)✔ french language tags select french copy and everything else falls back to english (0.884677ms)✔ authored and transport labels never appear in product copy (0.210073ms)✔ a complete v2 opening opens an editable session and validates favorites (0.950441ms)✔ legacy and unversioned openings are decoded read-only for display only (0.634228ms)✔ absent or malformed openings are non-editable empty sessions (0.822692ms)✔ minimal favorites round trip without inventing presentation properties and partial groups reject (0.575257ms)✔ the config page consumes the companion-produced opening fragment exactly (0.818223ms)✔ an advertised languagePreference enables a strict selector round trip (0.882684ms)✔ an unadvertised launch keeps the selector inert and the close payload free of the preference (0.665086ms)✔ an invalid present languagePreference rejects the whole opening without coercion (0.31467ms)✔ explicit choices stay distinct from automatic across a full save and reopen (1.365368ms)✔ a planted key field never enters page state or the payload (0.140093ms)✔ key lifecycle plans KEEP, REPLACE, and REMOVE through pure state (0.424756ms)✔ replace validation rejects oversized or control-bearing keys in both locales (0.251131ms)✔ read-only sessions never mutate, save, or hydrate regardless of the DOM (0.543518ms)✔ favorite edits replace the whole list atomically with renumbered order (0.316513ms)✔ malformed whole favorite lists stay read-only and cannot be normalized into a save (1.589027ms)✔ the seventh favorite is rejected by the add path while a valid six save whole (1.091364ms)✔ the close fragment carries the key value only for REPLACE and is one-shot (0.407784ms)✔ three backend services can be added, renamed, reordered, and removed atomically (0.626494ms)✔ catalog response guards reject identifiers and malformed or oversized collections (0.606737ms)✔ journey places validate the catalog place identity shape exactly (0.132989ms)✔ service routing validates exactly and only phone favorites may carry it (0.168626ms)✔ favorites created from catalog services carry a fresh routing copy and the chosen arrival (0.428443ms)✔ routing and arrivals survive the full page round trip and phone-side validation (1.049817ms)✔ force full synchronization is an explicit one-shot close flag (0.393206ms)✔ unresolved favorites hydrate in place or wait for explicit re-selection (0.450373ms)✔ encoded close and opening fragments enforce the 32768 bound at producers (1.796355ms)✔ favorite preview uses the credential-free recorded departure fixture (0.275046ms)✔ page keeps secrets out of durable and observable surfaces (1.015863ms)✔ bilingual About copy exposes the required legal, privacy, attribution, and safe-link facts (0.557394ms)✔ official rail badges cover every RER and Transilien line (0.34712ms)✔ favorites without presentation fields resolve no official image and use an accessible neutral fallback (0.23987ms)✔ search result labels use the available row width and wrap line badges (0.432841ms)✔ mirrored place search validation matches the canonical lines contract (0.711814ms)✔ the first-load gzip metric includes the eagerly imported badge resolver (0.207238ms)config page ready: /tmp/lapin-fute-config-site-sQS6w8/output (existing hosted catalog left unchanged)config site ready: /tmp/lapin-fute-config-site-J5IziB/output (catalog revision in catalog/manifest.json)✔ page-only configuration build neither requires nor publishes a catalog (21.940566ms)✔ full configuration build still requires and copies a published catalog (2.577569ms)✔ catalog upload planning compares source revisions instead of volatile publication revisions (1.802627ms)✔ configuration-site verification checks every local and served file on the current catalog revision (7.717189ms)fatal: path 'CHANGELOG.md' does not exist in '943a5d07421935ae767eb86482e99db76c2dd2b8'✔ release body keeps the whole section and excludes adjacent releases and the heading (2.130952ms)✔ adjacent releases stay isolated regardless of heading position (0.498223ms)✔ exact bracket match does not confuse similar versions (0.26692ms)✔ fenced code examples can neither duplicate nor truncate a section (0.231524ms)✔ a fenced heading before any real section is not a section (0.12247ms)✔ tilde fences and CRLF line endings are handled like backtick fences (0.098835ms)✔ missing, empty, and duplicate sections are rejected (0.503002ms)✔ a duplicate section is rejected even when separated by another release (0.117521ms)✔ release notes come from the tagged changelog, never the working copy (29.462819ms)✔ a changelog committed after the tag cannot leak into the tagged release (32.742724ms)✔ releases reject non-stable tags and repositories without a tagged changelog (20.513512ms)✔ CJS: full and short services prove the common arrival, not the full arrival (4.792268ms)✔ CJS: unknown or absent hints use every exact-boarding candidate (1.509838ms)✔ CJS: terminal aliases do not prove intermediate express stops or loop occurrences (0.706414ms)✔ CJS: pickup and drop-off restrictions remain conditional or impossible (1.139765ms)✔ CJS: proven equivalents and whole normalized labels preserve ambiguous evidence (0.48551ms)✔ CJS: group admission rejects missing pages, foreign links and ambiguous structure (1.454425ms)✔ CJS: exact budgets and IDs admit boundaries without truncation (19.540269ms)✔ CJS: overlapping terminal aliases remain ambiguous and unmapped arrivals stay selectable (0.75808ms)✔ CJS: arrival display truncates scalars and journey identity keeps arrivals distinct (0.62415ms)✔ browser ESM: full and short services prove the common arrival, not the full arrival (6.427792ms)✔ browser ESM: unknown or absent hints use every exact-boarding candidate (0.815408ms)✔ browser ESM: terminal aliases do not prove intermediate express stops or loop occurrences (2.17791ms)✔ browser ESM: pickup and drop-off restrictions remain conditional or impossible (0.766276ms)✔ browser ESM: proven equivalents and whole normalized labels preserve ambiguous evidence (0.255288ms)✔ browser ESM: group admission rejects missing pages, foreign links and ambiguous structure (0.824645ms)✔ browser ESM: exact budgets and IDs admit boundaries without truncation (18.900781ms)✔ browser ESM: overlapping terminal aliases remain ambiguous and unmapped arrivals stay selectable (0.294252ms)✔ browser ESM: arrival display truncates scalars and journey identity keeps arrivals distinct (1.129607ms)✔ browser and canonical helpers produce identical admitted groups and decisions (1.252747ms)▶ local checksum, identity and tag validation fails before authentication ✔ wrong checksum (8.011931ms) ✔ wrong UUID (8.736378ms) ✔ wrong archive version (5.867353ms) ✔ prerelease tag (1.026854ms)✔ local checksum, identity and tag validation fails before authentication (24.971073ms)▶ archive targets, duplicate metadata and oversized JSON fail before authentication ✔ missing target (4.453915ms) ✔ duplicate metadata (2.982468ms) ✔ oversized metadata (6.767268ms)✔ archive targets, duplicate metadata and oversized JSON fail before authentication (14.996867ms)✔ ambiguous checksum records fail before authentication (2.342669ms)✔ an authenticated account without the exact app mapping cannot upload (25.742298ms)✔ ownership lookup rejects conflicting UUID keys after normalization (4.821483ms)▶ either hardware's published version blocks equal or older candidates ✔ equal Emery (2.541913ms) ✔ newer Gabbro (2.881058ms)✔ either hardware's published version blocks equal or older candidates (5.841785ms)✔ publication uploads the exact checked bytes and notes once, even if the file changes after validation (3.713547ms)▶ remote failure, redirect and malformed data never expose remote content or retry ✔ revoked session (3.366768ms) ✔ invalid token (4.359137ms) ✔ malformed JSON (2.521554ms) ✔ oversized JSON (4.294155ms) ✔ redirect (4.870134ms) ✔ wrong public identity (2.612164ms) ✔ unknown published version (2.823159ms) ✔ upload HTTP error (2.315808ms) ✔ uncertain upload timeout (2.318434ms)✔ remote failure, redirect and malformed data never expose remote content or retry (30.987595ms)✔ domain contracts expose every frozen enum and accept every field (1.664188ms)✔ domain validators enforce exact fields, versions, bounds, and secret rules (1.143022ms)✔ phone routing stays exact and separate from the canonical favorite (0.582111ms)✔ six favorites are accepted uniformly without relaxing required domain fields (0.653675ms)✔ D2 appearance hashes canonical UTF-8 bytes in both directions and counts scalar fields (5.865298ms)✔ appearance clip endpoints preserve supplementary glyph boundaries and fit native widths (0.831828ms)✔ D2 retains explicit non-contiguous application IDs without SDK or domain aliases (0.194254ms)✔ dictionary sizing follows Pebble's measured-data formula (0.196558ms)✔ D2 separates watch epochs, data counters, configuration generations and correlation tokens (0.487975ms)✔ configuration dictionaries require the c-generation and exact six-slot inventory bounds (0.535002ms)✔ data request admission distinguishes user detail, overview and cache-only triggers (0.312536ms)✔ catalog contracts freeze transport modes, error codes, and limits (0.100628ms)✔ place lines require complete display metadata within the existing label and color bounds (0.694872ms)✔ catalog validators require phone routing and keep place search display-only (0.842198ms)✔ overview contracts preserve request order and isolate per-favorite failures (0.717234ms)✔ traffic detail contracts enforce discriminants, UTF-8 bounds, and plain text (0.562905ms)✔ packed result dictionaries enforce kind-specific counts and favorite binding (1.018077ms)✔ traffic fragment validation allows continuations but keeps error and UTF-8 bounds strict (0.32014ms)✔ phone traffic preparation preserves palette, scalar sections and LF wrapping without padding fragments (2.207065ms)✔ traffic wrapping converts allowed source tabs without emitting packed controls (0.240761ms)✔ traffic wrapping distinguishes an empty section from explicit trailing blank lines (0.124133ms)✔ prepared updating headers fit both fresh and stale native fonts (1.306508ms)✔ overview countdown terminal labels fit full and compact native slots without shortening detail copy (0.919292ms)✔ secondary departure status labels fit native detail columns while primary copy stays complete (0.593441ms)✔ uncertain journey legend and secondary labels fit their native slots (1.762432ms)✔ real PRIM normalization crosses D2 warm overview, detail and traffic boundaries (19.68512ms)✔ changed six-favorite metadata finishes overview5 and detail5 without PRIM (18.119367ms)✔ phone restart and reorder retain six metadata records without another APP_OPEN (20.279754ms)✔ cache-only miss stays terminal while an independent overview flight completes (3.728395ms)✔ production entry profile 0: writable handshake, consultation and sole Back owner (43.25587ms)✔ production entry profile 1: writable handshake, consultation and sole Back owner (25.453668ms)✔ production entry rejects an unknown profile before opening transport (2.228064ms)✔ appearance records round trip and validate (5.800397ms)✔ displayHash pins scalar semantics across profiles and languages (2.09763ms)✔ clipped honours scalar endpoints and the ellipsis mask (1.381198ms)✔ prepared appearances prefix metro and tram labels consistently (8.121606ms)✔ prepared appearances contract metro bis lines without clipping (4.597203ms)✔ departure records validate bounds and pairing (0.513573ms)✔ departure status and uncertainty survive packing independently without record growth (2.989711ms)✔ traffic documents validate section counts and bounds (23.702106ms)✔ packed primitives count scalars, not UTF-16 units (1.191573ms)✔ traffic outcome union keeps prior documents on scoped errors (29.466296ms)✔ credential errors survive data retention and outrank other loading (3.964407ms)✔ epoch guards publish only on complete validated commits (5.367587ms)✔ restored metadata rejects unsolicited old epochs and recovers via READY (5.331679ms)✔ FULL clears metadata only after a durable marker and cannot restore interrupted data (14.606715ms)✔ obsolete work is cancelled without becoming the new favorite's failure (2.322461ms)✔ rapid detail navigation settles once on the final favorite after 500 ms (5.240568ms)✔ fifty refresh and rapid-navigation cycles keep durable and timer state bounded (10.774086ms)✔ enqueue failures belong to the attempted request, never unrelated sync (2.563924ms)✔ fresh traffic renders fresh despite missing or older departures (4.557879ms)✔ deleting the active traffic favorite falls back to the first detail (2.036625ms)✔ malformed cancellation needs full id, generation, kind and epoch (1.801746ms)✔ changed DIFF releases result owners only at the complete inventory boundary (7.852953ms)✔ malformed guards, no-ops and reorders keep warm results (11.204ms)✔ released DIFF aborts end the loader and keep manual recovery (18.406775ms)✔ explicit manual retry rekeys after an aborted released sync (10.778854ms)✔ changed-DIFF recovery respects the final request ids without automatic rekeys (17.488805ms)✔ unrelated failed overview enqueue keeps a relevant manual detail intent (5.653652ms)✔ inventory entries release exactly when last used (8.245959ms)✔ zero-need commits release inventory arrays and preserve identity (5.716309ms)✔ inventory body guards reject duplicate, late and unrequested bodies (54.093475ms)✔ wire validation rejects malformed frames before any state changes (0.385422ms)✔ epoch allocation is durable, monotonic and fails closed (13.900052ms)✔ DIFF persistence faults preserve the committed configuration (26.359034ms)✔ pending marker faults stay before the destructive seam (6.636253ms)✔ load rejects foreign, epochless and corrupt storage as unconfigured (1.472249ms)✔ foreign manifests cannot reset epochs or create epochless pending writes (4.536769ms)✔ epoch grammar and request ids (0.518902ms)✔ profile 0 en: changed DIFF loading ends on abort and final cache miss (10.549525ms)✔ profile 0 fr: changed DIFF loading ends on abort and final cache miss (1.525859ms)✔ profile 1 en: changed DIFF loading ends on abort and final cache miss (1.61191ms)✔ profile 1 fr: changed DIFF loading ends on abort and final cache miss (2.163744ms)✔ profile 0: traffic pages preserve sections and scoped errors (3.895187ms)✔ profile 1: traffic pages preserve sections and scoped errors (1.202032ms)✔ profile 0: detail emphasizes the destination and aligns the primary countdown (1.101053ms)✔ profile 1: detail emphasizes the destination and aligns the primary countdown (2.020385ms)✔ rectangular overview fills the first three rows (1.351231ms)✔ retained credential failures outrank traffic loading until matching success (4.898868ms)✔ profile 0 en: uncertain detail keeps times, statuses and overview fallback (1.117314ms)✔ profile 0 en: mixed groups label uncertainty once without sorting times (1.123635ms)✔ profile 0 fr: uncertain detail keeps times, statuses and overview fallback (0.681577ms)✔ profile 0 fr: mixed groups label uncertainty once without sorting times (0.992169ms)✔ profile 1 en: uncertain detail keeps times, statuses and overview fallback (0.656139ms)✔ profile 1 en: mixed groups label uncertainty once without sorting times (0.679874ms)✔ profile 1 fr: uncertain detail keeps times, statuses and overview fallback (1.410192ms)✔ profile 1 fr: mixed groups label uncertainty once without sorting times (0.48055ms)✔ Gabbro ignores an uncertain fourth departure outside the visible detail (0.753842ms)ℹ tests 393ℹ suites 0ℹ pass 393ℹ fail 0ℹ cancelled 0ℹ skipped 0ℹ todo 0ℹ duration_ms 11288.592096
Post actions/setup-node@v4
(node:872) [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.

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.