2026-10-14T23:41:38.5188195Z Current runner version: '0.3.4'
2026-10-14T23:41:38.5188245Z Runner name: 'g1t'
2026-10-14T23:41:38.5188256Z ##[group]Operating System
2026-10-14T23:41:38.5188269Z Debian GNU/Linux
2026-10-14T23:41:38.5188278Z 12 (bookworm)
2026-10-14T23:41:38.5188294Z ##[endgroup]
2026-10-14T23:41:38.5188300Z ##[group]Runner Image
2026-10-14T23:41:38.5188339Z Included Software: Node 24, Python 3, Go, Rust
2026-10-14T23:41:38.5188352Z ##[endgroup]
2026-10-14T23:41:38.5188366Z ##[group]Machine
2026-10-14T23:41:38.5188378Z Hosted by g1t
2026-10-14T23:41:38.5188389Z Architecture: X64
2026-10-14T23:41:38.5188399Z CPUs: 2
2026-10-14T23:41:38.5188406Z Memory: 8 GB
2026-10-14T23:41:38.5188415Z ##[endgroup]
2026-10-14T23:41:38.5188426Z ##[group]G1T_TOKEN Permissions
2026-10-14T23:41:38.5188433Z Contents: read
2026-10-14T23:41:38.5188441Z Metadata: read
2026-10-14T23:41:38.5188449Z ##[endgroup]
2026-10-14T23:41:38.5188464Z Secret source: Actions
2026-10-14T23:41:38.5188474Z Prepare workflow directory
2026-10-14T23:41:38.5442796Z Prepare all required actions
2026-10-14T23:41:38.5442844Z Getting action download info
2026-10-14T23:41:38.5447077Z Getting action download info for 'actions/checkout@v5'
2026-10-14T23:41:39.3394462Z Download action repository 'actions/checkout@v5' (SHA:fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09) from g1t
2026-10-14T23:41:39.8296915Z Getting action download info for 'actions/cache@v4'
2026-10-14T23:41:40.5826062Z Download action repository 'actions/cache@v4' (SHA:0057852bfaa89a56745cba8c7296529d2fc39830) from g1t
2026-10-14T23:41:41.1334027Z Complete job name: TypeScript
2026-10-14T23:41:41.5102913Z ##[group]Run actions/checkout@v5
2026-10-14T23:41:41.5102956Z with:
2026-10-14T23:41:41.5102966Z   allow-unsafe-pr-checkout: false
2026-10-14T23:41:41.5102979Z   clean: true
2026-10-14T23:41:41.5102988Z   fetch-depth: 1
2026-10-14T23:41:41.5102998Z   fetch-tags: false
2026-10-14T23:41:41.5103008Z   filter: 
2026-10-14T23:41:41.5103017Z   github-server-url: 
2026-10-14T23:41:41.5103025Z   lfs: false
2026-10-14T23:41:41.5103034Z   path: 
2026-10-14T23:41:41.5103046Z   persist-credentials: true
2026-10-14T23:41:41.5103054Z   ref: 
2026-10-14T23:41:41.5103063Z   repository: flagon-io/g1t
2026-10-14T23:41:41.5103071Z   set-safe-directory: true
2026-10-14T23:41:41.5103079Z   show-progress: true
2026-10-14T23:41:41.5103087Z   sparse-checkout: 
2026-10-14T23:41:41.5103096Z   sparse-checkout-cone-mode: true
2026-10-14T23:41:41.5103105Z   ssh-key: 
2026-10-14T23:41:41.5103112Z   ssh-known-hosts: 
2026-10-14T23:41:41.5103144Z   ssh-strict: true
2026-10-14T23:41:41.5103153Z   ssh-user: git
2026-10-14T23:41:41.5103162Z   submodules: false
2026-10-14T23:41:41.5103210Z   token: ***
2026-10-14T23:41:41.5103219Z env:
2026-10-14T23:41:41.5103227Z   CARGO_TERM_COLOR: never
2026-10-14T23:41:41.5103236Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:41:41.5103244Z ##[endgroup]
2026-10-14T23:41:42.4099144Z Syncing repository: flagon-io/g1t
2026-10-14T23:41:42.6784559Z ##[group]Getting Git version info
2026-10-14T23:41:42.6784729Z Working directory is '/home/runner/work/repo'
2026-10-14T23:41:42.6784779Z [command]/usr/bin/git version
2026-10-14T23:41:42.6784805Z git version 2.39.5
2026-10-14T23:41:42.6784865Z ##[endgroup]
2026-10-14T23:41:42.6785217Z Temporarily overriding HOME='/home/runner/_temp/510df637-25fc-4739-841b-99fd2415e610' before making global git config changes
2026-10-14T23:41:42.6785316Z Adding repository directory to the temporary git global config as a safe directory
2026-10-14T23:41:42.6785396Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/repo
2026-10-14T23:41:42.6785446Z Deleting the contents of '/home/runner/work/repo'
2026-10-14T23:41:42.6785472Z ##[group]Initializing the repository
2026-10-14T23:41:42.6785501Z [command]/usr/bin/git init /home/runner/work/repo
2026-10-14T23:41:42.6785581Z hint: Using 'master' as the name for the initial branch. This default branch name
2026-10-14T23:41:42.6785658Z hint: is subject to change. To configure the initial branch name to use in all
2026-10-14T23:41:42.6785739Z hint: of your new repositories, which will suppress this warning, call:
2026-10-14T23:41:42.6785756Z hint: 
2026-10-14T23:41:42.6785787Z hint: 	git config --global init.defaultBranch <name>
2026-10-14T23:41:42.6785801Z hint: 
2026-10-14T23:41:42.6785871Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2026-10-14T23:41:42.6785942Z hint: 'development'. The just-created branch can be renamed via this command:
2026-10-14T23:41:42.6785959Z hint: 
2026-10-14T23:41:42.6785973Z hint: 	git branch -m <name>
2026-10-14T23:41:42.6786038Z Initialized empty Git repository in /home/runner/work/repo/.git/
2026-10-14T23:41:42.6786128Z [command]/usr/bin/git remote add origin https://g1t.sh/flagon-io/g1t
2026-10-14T23:41:42.6786246Z ##[endgroup]
2026-10-14T23:41:42.6786277Z ##[group]Disabling automatic garbage collection
2026-10-14T23:41:42.6786305Z [command]/usr/bin/git config --local gc.auto 0
2026-10-14T23:41:42.6786333Z ##[endgroup]
2026-10-14T23:41:42.6786355Z ##[group]Setting up auth
2026-10-14T23:41:42.6786424Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-14T23:41:42.6786550Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-10-14T23:41:42.6786637Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/g1t\.sh\/\.extraheader
2026-10-14T23:41:42.6786764Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/g1t\.sh\/\.extraheader' && git config --local --unset-all 'http.https://g1t.sh/.extraheader' || :"
2026-10-14T23:41:42.6786850Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-10-14T23:41:42.6786953Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-10-14T23:41:42.6787040Z [command]/usr/bin/git config --local http.https://g1t.sh/.extraheader AUTHORIZATION: basic ***
2026-10-14T23:41:42.6787072Z ##[endgroup]
2026-10-14T23:41:42.6787095Z ##[group]Fetching the repository
2026-10-14T23:41:42.6787199Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +34184f30604f74fa9b15d80ae48b16e88f9df524:refs/remotes/pull/46/merge
2026-10-14T23:41:47.3102119Z From https://g1t.sh/flagon-io/g1t
2026-10-14T23:41:47.5476502Z  * [new ref]         34184f30604f74fa9b15d80ae48b16e88f9df524 -> pull/46/merge
2026-10-14T23:41:47.5476621Z ##[endgroup]
2026-10-14T23:41:47.5476669Z ##[group]Determining the checkout info
2026-10-14T23:41:47.5476689Z ##[endgroup]
2026-10-14T23:41:47.5476730Z [command]/usr/bin/git sparse-checkout disable
2026-10-14T23:41:47.5476839Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2026-10-14T23:41:47.5476888Z ##[group]Checking out the ref
2026-10-14T23:41:47.5476970Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/46/merge
2026-10-14T23:41:47.6270043Z Note: switching to 'refs/remotes/pull/46/merge'.
2026-10-14T23:41:47.6270130Z 
2026-10-14T23:41:47.6270246Z You are in 'detached HEAD' state. You can look around, make experimental
2026-10-14T23:41:47.6270341Z changes and commit them, and you can discard any commits you make in this
2026-10-14T23:41:47.6270438Z state without impacting any branches by switching back to a branch.
2026-10-14T23:41:47.6270455Z 
2026-10-14T23:41:47.6270524Z If you want to create a new branch to retain commits you create, you may
2026-10-14T23:41:47.6270590Z do so (now or later) by using -c with the switch command. Example:
2026-10-14T23:41:47.6270605Z 
2026-10-14T23:41:47.6270628Z   git switch -c <new-branch-name>
2026-10-14T23:41:47.6270640Z 
2026-10-14T23:41:47.6270656Z Or undo this operation with:
2026-10-14T23:41:47.6270672Z 
2026-10-14T23:41:47.6270686Z   git switch -
2026-10-14T23:41:47.6270700Z 
2026-10-14T23:41:47.6270765Z Turn off this advice by setting config variable advice.detachedHead to false
2026-10-14T23:41:47.6270780Z 
2026-10-14T23:41:47.6270889Z HEAD is now at 34184f3 Merge da6fe517cfb204b9920fde502c61c06a4f80ffc0 into 9c1792be842190b78f21f30e5a57f9cc67c02554
2026-10-14T23:41:47.6270973Z ##[endgroup]
2026-10-14T23:41:47.6318318Z [command]/usr/bin/git log -1 --format=%H
2026-10-14T23:41:47.6346056Z 34184f30604f74fa9b15d80ae48b16e88f9df524
2026-10-14T23:41:48.4309754Z ##[group]Run actions/cache@v4
2026-10-14T23:41:48.4309791Z with:
2026-10-14T23:41:48.4309800Z   enableCrossOsArchive: false
2026-10-14T23:41:48.4309810Z   fail-on-cache-miss: false
2026-10-14T23:41:48.4309894Z   key: npm-full-Linux-56353fded01065bb5545a93e5599ab84e40b1cd26d8464642dcc554e8c3b7e87
2026-10-14T23:41:48.4309904Z   lookup-only: false
2026-10-14T23:41:48.4309911Z   path: ~/.npm
2026-10-14T23:41:48.4309918Z   restore-keys: npm-full-Linux-
2026-10-14T23:41:48.4309927Z   save-always: false
2026-10-14T23:41:48.4309933Z   upload-chunk-size: 
2026-10-14T23:41:48.4309939Z env:
2026-10-14T23:41:48.4309945Z   CARGO_TERM_COLOR: never
2026-10-14T23:41:48.4309952Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:41:48.4309958Z ##[endgroup]
2026-10-14T23:41:48.5690306Z (node:1221) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-10-14T23:41:48.5690584Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-10-14T23:42:04.5211992Z Cache Size: ~453 MB (475509177 B)
2026-10-14T23:42:04.7686376Z [command]/usr/bin/tar -xf /home/runner/_temp/3a552916-32fb-4153-80c2-43fc3075da47/cache.tzst -P -C /home/runner/work/repo --use-compress-program unzstd
2026-10-14T23:42:06.6068498Z Cache restored successfully
2026-10-14T23:42:10.8227350Z Cache restored from key: npm-full-Linux-56353fded01065bb5545a93e5599ab84e40b1cd26d8464642dcc554e8c3b7e87
2026-10-14T23:42:11.3449136Z ##[group]Run node scripts/deploy/npm-ci.mjs --prefer-offline --no-audit --no-fund
2026-10-14T23:42:11.3449270Z [36;1mnode scripts/deploy/npm-ci.mjs --prefer-offline --no-audit --no-fund[0m
2026-10-14T23:42:11.3449294Z shell: /usr/bin/bash -e {0}
2026-10-14T23:42:11.3449314Z env:
2026-10-14T23:42:11.3449327Z   CARGO_TERM_COLOR: never
2026-10-14T23:42:11.3449343Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:42:11.3449355Z ##[endgroup]
2026-10-14T23:42:34.0194133Z npm warn deprecated uuid@11.1.1: uuid@10 and below is no longer supported.  For ESM codebases, update to uuid@latest.  For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).
2026-10-14T23:42:55.7002456Z 
2026-10-14T23:42:56.0712756Z added 1323 packages in 44s
2026-10-14T23:42:56.0713011Z npm warn install-scripts 2 packages have install scripts not yet covered by allowScripts:
2026-10-14T23:42:56.0713115Z npm warn install-scripts   esbuild@0.28.1 (postinstall: node install.js)
2026-10-14T23:42:56.0713208Z npm warn install-scripts   workerd@1.20261001.1 (postinstall: node install.js)
2026-10-14T23:42:56.0713224Z npm warn install-scripts
2026-10-14T23:42:56.0713337Z npm warn install-scripts Run `npm install-scripts ls` to review, or `npm install-scripts approve <pkg>` to allow.
2026-10-14T23:42:56.6331242Z ##[group]Run npm run typecheck
2026-10-14T23:42:56.6331292Z [36;1mnpm run typecheck[0m
2026-10-14T23:42:56.6331309Z shell: /usr/bin/bash -e {0}
2026-10-14T23:42:56.6331319Z env:
2026-10-14T23:42:56.6331329Z   CARGO_TERM_COLOR: never
2026-10-14T23:42:56.6331348Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:42:56.6331361Z ##[endgroup]
2026-10-14T23:42:56.7662604Z 
2026-10-14T23:42:56.7662797Z > typecheck
2026-10-14T23:42:56.7662836Z > npm run typecheck --workspaces --if-present
2026-10-14T23:42:56.7662895Z 
2026-10-14T23:42:56.9462508Z 
2026-10-14T23:42:56.9462656Z > @g1t/mobile@0.1.0 typecheck
2026-10-14T23:42:56.9462683Z > tsc --noEmit
2026-10-14T23:42:56.9462699Z 
2026-10-14T23:43:02.6870053Z 
2026-10-14T23:43:03.3791709Z > @g1t/status@0.1.0 typecheck
2026-10-14T23:43:03.3791857Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:43:03.3791877Z 
2026-10-14T23:43:03.7502036Z 
2026-10-14T23:43:04.0785768Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:43:04.0785954Z ───────────────────────────────────────────────
2026-10-14T23:43:04.0785982Z Generating runtime types...
2026-10-14T23:43:04.0785998Z 
2026-10-14T23:43:05.3675027Z Runtime types generated.
2026-10-14T23:43:05.3675144Z 
2026-10-14T23:43:05.3675166Z 
2026-10-14T23:43:05.3714910Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:43:05.3714996Z 
2026-10-14T23:43:05.3727213Z 📖 Read about runtime types
2026-10-14T23:43:05.3727370Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:43:05.3729385Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:43:05.3729571Z 
2026-10-14T23:43:08.4981094Z 
2026-10-14T23:43:08.7725111Z > typecheck
2026-10-14T23:43:08.7725268Z > wrangler types --include-env=false && react-router typegen && tsc -b --force
2026-10-14T23:43:08.7725294Z 
2026-10-14T23:43:09.8048876Z 
2026-10-14T23:43:09.8048960Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:43:09.8049097Z ───────────────────────────────────────────────
2026-10-14T23:43:09.8049122Z Generating runtime types...
2026-10-14T23:43:09.8049134Z 
2026-10-14T23:43:09.8049146Z Runtime types generated.
2026-10-14T23:43:09.8049155Z 
2026-10-14T23:43:09.8049168Z 
2026-10-14T23:43:09.8049194Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:43:09.8049204Z 
2026-10-14T23:43:09.8049215Z 📖 Read about runtime types
2026-10-14T23:43:09.8049290Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:43:09.8049360Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:43:09.8049371Z 
2026-10-14T23:43:21.9174789Z 
2026-10-14T23:43:22.1682743Z > typecheck
2026-10-14T23:43:22.1682923Z > wrangler types --include-env=false && react-router typegen && tsc -b --force
2026-10-14T23:43:22.1682949Z 
2026-10-14T23:43:23.1816244Z 
2026-10-14T23:43:23.1816342Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:43:23.1816489Z ───────────────────────────────────────────────
2026-10-14T23:43:23.1816529Z Generating runtime types...
2026-10-14T23:43:23.1816543Z 
2026-10-14T23:43:23.1816556Z Runtime types generated.
2026-10-14T23:43:23.1816567Z 
2026-10-14T23:43:23.1816582Z 
2026-10-14T23:43:23.1816606Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:43:23.1816618Z 
2026-10-14T23:43:23.1816629Z 📖 Read about runtime types
2026-10-14T23:43:23.1816714Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:43:23.1816792Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:43:23.1816813Z 
2026-10-14T23:44:15.3119535Z 
2026-10-14T23:44:15.5484562Z > @g1t/artifacts@0.1.0 typecheck
2026-10-14T23:44:15.5484704Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:15.5484725Z 
2026-10-14T23:44:16.3182200Z 
2026-10-14T23:44:16.6115000Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:16.6115198Z ───────────────────────────────────────────────
2026-10-14T23:44:16.6115224Z Generating runtime types...
2026-10-14T23:44:16.6115235Z 
2026-10-14T23:44:17.9204968Z Runtime types generated.
2026-10-14T23:44:17.9205064Z 
2026-10-14T23:44:17.9207653Z 
2026-10-14T23:44:17.9232298Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:17.9232339Z 
2026-10-14T23:44:17.9241079Z 📖 Read about runtime types
2026-10-14T23:44:17.9241427Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:17.9243424Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:17.9243644Z 
2026-10-14T23:44:22.4197211Z 
2026-10-14T23:44:22.6413075Z > @g1t/chat@0.1.0 typecheck
2026-10-14T23:44:22.6413225Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:22.6413249Z 
2026-10-14T23:44:23.4622044Z 
2026-10-14T23:44:23.6916874Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:23.6917055Z ───────────────────────────────────────────────
2026-10-14T23:44:23.6917081Z Generating runtime types...
2026-10-14T23:44:23.6917093Z 
2026-10-14T23:44:25.2005671Z Runtime types generated.
2026-10-14T23:44:25.2005772Z 
2026-10-14T23:44:25.2008906Z 
2026-10-14T23:44:25.2074776Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:25.2075072Z 
2026-10-14T23:44:25.2083399Z 📖 Read about runtime types
2026-10-14T23:44:25.2083759Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:25.2085011Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:25.2085191Z 
2026-10-14T23:44:28.6571246Z 
2026-10-14T23:44:29.0228876Z > @g1t/deployments@0.1.0 typecheck
2026-10-14T23:44:29.0229014Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:29.0229039Z 
2026-10-14T23:44:29.7462477Z 
2026-10-14T23:44:29.9727648Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:29.9727831Z ───────────────────────────────────────────────
2026-10-14T23:44:29.9727853Z Generating runtime types...
2026-10-14T23:44:29.9727863Z 
2026-10-14T23:44:31.3643078Z Runtime types generated.
2026-10-14T23:44:31.3643181Z 
2026-10-14T23:44:31.3646114Z 
2026-10-14T23:44:31.3670998Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:31.3671219Z 
2026-10-14T23:44:31.3680606Z 📖 Read about runtime types
2026-10-14T23:44:31.3681024Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:31.3682783Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:31.3682964Z 
2026-10-14T23:44:34.6574767Z 
2026-10-14T23:44:34.8830802Z > @g1t/notify@0.1.0 typecheck
2026-10-14T23:44:34.8830948Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:34.8830978Z 
2026-10-14T23:44:35.8262070Z 
2026-10-14T23:44:36.0806900Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:36.0807111Z ───────────────────────────────────────────────
2026-10-14T23:44:36.0807154Z Generating runtime types...
2026-10-14T23:44:36.0807170Z 
2026-10-14T23:44:37.4735868Z Runtime types generated.
2026-10-14T23:44:37.4735969Z 
2026-10-14T23:44:37.4735988Z 
2026-10-14T23:44:37.4762540Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:37.4762610Z 
2026-10-14T23:44:37.4773734Z 📖 Read about runtime types
2026-10-14T23:44:37.4773909Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:37.4775963Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:37.4776191Z 
2026-10-14T23:44:40.4669926Z 
2026-10-14T23:44:40.6912792Z > @g1t/og@0.1.0 typecheck
2026-10-14T23:44:40.6912904Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:40.6912925Z 
2026-10-14T23:44:41.5382021Z 
2026-10-14T23:44:41.7828847Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:41.7829003Z ───────────────────────────────────────────────
2026-10-14T23:44:41.7829026Z Generating runtime types...
2026-10-14T23:44:41.7829036Z 
2026-10-14T23:44:43.3985815Z Runtime types generated.
2026-10-14T23:44:43.3985868Z 
2026-10-14T23:44:43.3985885Z 
2026-10-14T23:44:43.3985930Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:43.3985944Z 
2026-10-14T23:44:43.3985959Z 📖 Read about runtime types
2026-10-14T23:44:43.3986060Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:43.3986151Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:43.3986166Z 
2026-10-14T23:44:46.1725154Z 
2026-10-14T23:44:46.4024895Z > @g1t/pages@0.1.0 typecheck
2026-10-14T23:44:46.4025063Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:46.4025085Z 
2026-10-14T23:44:47.2422341Z 
2026-10-14T23:44:47.4744583Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:47.4744778Z ───────────────────────────────────────────────
2026-10-14T23:44:47.4744802Z Generating runtime types...
2026-10-14T23:44:47.4744813Z 
2026-10-14T23:44:48.7988105Z Runtime types generated.
2026-10-14T23:44:48.7988155Z 
2026-10-14T23:44:48.7988173Z 
2026-10-14T23:44:48.7988218Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:48.7988232Z 
2026-10-14T23:44:48.7988246Z 📖 Read about runtime types
2026-10-14T23:44:48.7988350Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:48.7988448Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:48.7988465Z 
2026-10-14T23:44:49.9423279Z 
2026-10-14T23:44:49.9423370Z > @g1t/projects@0.1.0 typecheck
2026-10-14T23:44:49.9423455Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:49.9423472Z 
2026-10-14T23:44:50.9745876Z 
2026-10-14T23:44:50.9746525Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:50.9746666Z ───────────────────────────────────────────────
2026-10-14T23:44:51.0333187Z Generating runtime types...
2026-10-14T23:44:51.0333279Z 
2026-10-14T23:44:52.4989570Z Runtime types generated.
2026-10-14T23:44:52.4989667Z 
2026-10-14T23:44:52.4991926Z 
2026-10-14T23:44:52.5018369Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:52.5018402Z 
2026-10-14T23:44:52.5028855Z 📖 Read about runtime types
2026-10-14T23:44:52.5029007Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:52.5030837Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:52.5030871Z 
2026-10-14T23:44:55.5298275Z 
2026-10-14T23:44:55.7871406Z > @g1t/runner@0.1.0 typecheck
2026-10-14T23:44:55.7871556Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:44:55.7871579Z 
2026-10-14T23:44:56.7648186Z 
2026-10-14T23:44:56.7648279Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:44:56.7648440Z ───────────────────────────────────────────────
2026-10-14T23:44:56.7648473Z Generating runtime types...
2026-10-14T23:44:56.7648487Z 
2026-10-14T23:44:58.2695367Z Runtime types generated.
2026-10-14T23:44:58.2695478Z 
2026-10-14T23:44:58.2698313Z 
2026-10-14T23:44:58.2724355Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:44:58.2724417Z 
2026-10-14T23:44:58.2737336Z 📖 Read about runtime types
2026-10-14T23:44:58.2737711Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:44:58.2740389Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:44:58.2740631Z 
2026-10-14T23:45:01.6661166Z 
2026-10-14T23:45:01.9685239Z > @g1t/telemetry@0.1.0 typecheck
2026-10-14T23:45:01.9685397Z > wrangler types --include-env=false && tsc -p tsconfig.json
2026-10-14T23:45:01.9685419Z 
2026-10-14T23:45:03.1870445Z 
2026-10-14T23:45:03.1870552Z  ⛅️ wrangler 4.146.0 (update available 4.151.0)
2026-10-14T23:45:03.1870693Z ───────────────────────────────────────────────
2026-10-14T23:45:03.1870741Z Generating runtime types...
2026-10-14T23:45:03.1870759Z 
2026-10-14T23:45:04.4202645Z Runtime types generated.
2026-10-14T23:45:04.4202758Z 
2026-10-14T23:45:04.4205623Z 
2026-10-14T23:45:04.4236297Z ✨ Types written to worker-configuration.d.ts
2026-10-14T23:45:04.4236528Z 
2026-10-14T23:45:04.4248827Z 📖 Read about runtime types
2026-10-14T23:45:04.4249177Z https://developers.cloudflare.com/workers/languages/typescript/#generate-types
2026-10-14T23:45:04.4251364Z 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file.
2026-10-14T23:45:04.4251589Z 
2026-10-14T23:45:07.4229788Z 
2026-10-14T23:45:07.9791099Z > @g1t/contracts@0.1.0 typecheck
2026-10-14T23:45:07.9791607Z > tsc -p tsconfig.json
2026-10-14T23:45:07.9791650Z 
2026-10-14T23:45:10.3424997Z ##[group]Run npm test --workspaces --if-present
2026-10-14T23:45:10.3425052Z [36;1mnpm test --workspaces --if-present[0m
2026-10-14T23:45:10.3425070Z shell: /usr/bin/bash -e {0}
2026-10-14T23:45:10.3425082Z env:
2026-10-14T23:45:10.3425097Z   CARGO_TERM_COLOR: never
2026-10-14T23:45:10.3425112Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:45:10.3425125Z ##[endgroup]
2026-10-14T23:45:10.5232825Z 
2026-10-14T23:45:10.5232940Z > @g1t/docs@0.1.0 test
2026-10-14T23:45:10.5232959Z > node --test "src/diagrams/*.test.ts"
2026-10-14T23:45:10.5232969Z 
2026-10-14T23:45:10.7219692Z ✔ every diagram draws, and reads as text (7.321821ms)
2026-10-14T23:45:10.7229361Z ✔ every box is inside its diagram, and no two boxes overlap (1.978009ms)
2026-10-14T23:45:10.7232080Z ✔ every box's text fits inside it (0.49335ms)
2026-10-14T23:45:10.7235431Z ✔ an arrow to a box that does not exist is an error, not a missing line (0.551749ms)
2026-10-14T23:45:10.7369636Z ℹ tests 4
2026-10-14T23:45:10.7369916Z ℹ suites 0
2026-10-14T23:45:10.7370107Z ℹ pass 4
2026-10-14T23:45:10.7370555Z ℹ fail 0
2026-10-14T23:45:10.7371134Z ℹ cancelled 0
2026-10-14T23:45:10.7371764Z ℹ skipped 0
2026-10-14T23:45:10.7374312Z ℹ todo 0
2026-10-14T23:45:10.7374481Z ℹ duration_ms 170.911129
2026-10-14T23:45:10.7458435Z 
2026-10-14T23:45:10.7458660Z > @g1t/mobile@0.1.0 test
2026-10-14T23:45:10.7458817Z > node --test "src/lib/*.test.ts"
2026-10-14T23:45:10.7458962Z 
2026-10-14T23:45:10.9055202Z (node:1858) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/repo/apps/mobile/src/lib/links.test.ts is not specified and it doesn't parse as CommonJS.
2026-10-14T23:45:10.9055362Z Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
2026-10-14T23:45:10.9055670Z To eliminate this warning, add "type": "module" to /home/runner/work/repo/apps/mobile/package.json.
2026-10-14T23:45:10.9055752Z (Use `node --trace-warnings ...` to show where the warning was created)
2026-10-14T23:45:10.9188567Z ✔ a g1t:// link names a site path, as on the desktop (1.060893ms)
2026-10-14T23:45:10.9193351Z ✔ Chat's pages open the app's Chat (0.35308ms)
2026-10-14T23:45:10.9195401Z ✔ Code's pages open the app's Code (0.308213ms)
2026-10-14T23:45:10.9196652Z ✔ old links to Agents, Customize and the Marketplace open Home (0.250666ms)
2026-10-14T23:45:10.9222443Z ✔ the integrations directory stays on the site (0.1735ms)
2026-10-14T23:45:10.9222551Z ✔ the app's sign-in comes back to its own screen, and the site's own pages stay on the site (0.17342ms)
2026-10-14T23:45:10.9222589Z ✔ a connect link points the app at a g1t (0.209354ms)
2026-10-14T23:45:11.0297584Z (node:1865) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/repo/apps/mobile/src/lib/server.test.ts is not specified and it doesn't parse as CommonJS.
2026-10-14T23:45:11.0298154Z Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
2026-10-14T23:45:11.0298794Z To eliminate this warning, add "type": "module" to /home/runner/work/repo/apps/mobile/package.json.
2026-10-14T23:45:11.0299039Z (Use `node --trace-warnings ...` to show where the warning was created)
2026-10-14T23:45:11.0449384Z ✔ an origin is all that is kept (1.455936ms)
2026-10-14T23:45:11.0454166Z ✔ hosted g1t's API is api.g1t.sh, and a self-hosted one's is api. on its host (0.921974ms)
2026-10-14T23:45:11.0477850Z ✔ an API given by hand wins (0.209414ms)
2026-10-14T23:45:11.0487145Z ✔ sockets follow the site's scheme (0.272229ms)
2026-10-14T23:45:11.0614976Z ℹ tests 11
2026-10-14T23:45:11.0615268Z ℹ suites 0
2026-10-14T23:45:11.0615453Z ℹ pass 11
2026-10-14T23:45:11.0615634Z ℹ fail 0
2026-10-14T23:45:11.0615792Z ℹ cancelled 0
2026-10-14T23:45:11.0615942Z ℹ skipped 0
2026-10-14T23:45:11.0616112Z ℹ todo 0
2026-10-14T23:45:11.0616276Z ℹ duration_ms 272.761215
2026-10-14T23:45:11.0698822Z 
2026-10-14T23:45:11.0699057Z > @g1t/status@0.1.0 test
2026-10-14T23:45:11.0699291Z > node --experimental-transform-types --no-warnings=ExperimentalWarning --test src/*.test.ts
2026-10-14T23:45:11.0699441Z 
2026-10-14T23:45:11.3026351Z ✔ a draft at 4 bad of the last 5 checks, once (2.714835ms)
2026-10-14T23:45:11.6099347Z ✔ N of M: a good check between does not hide trouble that keeps coming (0.355134ms)
2026-10-14T23:45:11.6099491Z ✔ a blip is not an incident: three bad of five is under the line, and three good checks end the run (0.338307ms)
2026-10-14T23:45:11.6099565Z ✔ slow then failing is one run, at its worst (0.250907ms)
2026-10-14T23:45:11.6099600Z ✔ parts failing together share one draft (0.388473ms)
2026-10-14T23:45:11.6099693Z ✔ with an incident already open on the part: a line on it, no draft; recovery is noted once the run ends (0.395593ms)
2026-10-14T23:45:11.6099773Z ✔ a run that never crossed the line is not noted as a recovery (0.244387ms)
2026-10-14T23:45:11.6099842Z ✔ parts under maintenance and unmonitored parts are left alone (0.309565ms)
2026-10-14T23:45:11.6099859Z ✔ the draft says what failed (0.384177ms)
2026-10-14T23:45:11.6099932Z ✔ a run that recovered is over: the next one starts fresh, with its own start (0.439941ms)
2026-10-14T23:45:11.6100014Z ✔ a run slow for hours, raised long ago, still ends when the checks go healthy (0.567472ms)
2026-10-14T23:45:11.6100103Z ✔ during a deploy, trouble is counted but not drafted; it is drafted once it outlasts the window (0.318728ms)
2026-10-14T23:45:11.6100161Z ✔ during a deploy, an incident already open still hears about its parts (0.19311ms)
2026-10-14T23:45:11.6100208Z ✔ the deploy window: running, finished plus grace, and a start that never finished (0.52676ms)
2026-10-14T23:45:11.6100255Z ✔ deploys that overlap are one window, finished when the last one is (0.318358ms)
2026-10-14T23:45:11.6100317Z ✔ a detected draft that recovers and stays healthy is dismissed; trouble in between starts the wait again (0.549645ms)
2026-10-14T23:45:11.6100363Z ✔ a draft nobody acknowledges is raised again after 45 minutes, once, then every 6 hours (0.365168ms)
2026-10-14T23:45:11.6100600Z ✔ slow and down are said apart, with the run's own start (0.569925ms)
2026-10-14T23:45:11.6100659Z ✔ the 6 Oct draft: a slow run at 03:13 that recovered does not leak into the one at 07:25 (10.200052ms)
2026-10-14T23:45:11.6100704Z ✔ a run kept before N of M (no checks, no recent) is read as all bad, and still ends (3.19113ms)
2026-10-14T23:45:11.6100749Z ✔ a run is kept while it lasts, and only the parts still failing keep one (2.609017ms)
2026-10-14T23:45:11.6100787Z ✔ the deploy window is kept between rounds (3.797621ms)
2026-10-14T23:45:11.6100851Z ✔ every check is kept for 7 days, with where it ran from, and an incident's page reads its parts' checks (12.448678ms)
2026-10-14T23:45:11.6100911Z ✔ a draft left waiting is raised again, with a line on its timeline, and forgotten once it is not waiting (4.880346ms)
2026-10-14T23:45:11.6100973Z ✔ a detected draft that recovered is dismissed after ten healthy minutes; one staff picked up is left alone (5.783222ms)
2026-10-14T23:45:11.8586127Z ✔ declaring: cleaned and checked; operational parts are left out (2.892793ms)
2026-10-14T23:45:11.8591792Z ✔ declaring is refused without what it needs (0.875263ms)
2026-10-14T23:45:11.8618264Z ✔ severities: SEV1 and SEV2 email subscribers by default (0.252309ms)
2026-10-14T23:45:11.8618641Z ✔ an update needs words when it is public; a note can be just a change (0.410165ms)
2026-10-14T23:45:11.8619494Z ✔ lifecycle: identified, then monitoring marks it mitigated, then resolved (0.822755ms)
2026-10-14T23:45:11.8636391Z ✔ lifecycle: resolving straight away marks it mitigated too; reopening clears resolved (0.402634ms)
2026-10-14T23:45:11.8636512Z ✔ lifecycle: a published incident's status changes only with public words (0.334071ms)
2026-10-14T23:45:11.8662952Z ✔ lifecycle: severity and impact changes are written on the timeline (0.350996ms)
2026-10-14T23:45:11.8664497Z ✔ lifecycle: drafts take notes but nothing public; dismissed takes nothing; the first touch acknowledges (0.408864ms)
2026-10-14T23:45:11.8664738Z ✔ roles: each change is a line, and nobody is said plainly (1.194192ms)
2026-10-14T23:45:11.8664912Z ✔ durations read plainly (0.606991ms)
2026-10-14T23:45:11.8666223Z ✔ maintenance: a window in the future, under 72 hours, on known parts (0.463536ms)
2026-10-14T23:45:11.8666726Z ✔ postmortems: published only with a summary and a cause; the draft is filled from the incident (0.59259ms)
2026-10-14T23:45:11.8667159Z ✔ short ids are ten unambiguous characters (4.551303ms)
2026-10-14T23:45:12.0824970Z ✔ classify: fast is up, slow is degraded, failed is down, none is unmonitored (1.813653ms)
2026-10-14T23:45:12.0825100Z ✔ uptime rounds down, so one failure never reads as 100% (0.25954ms)
2026-10-14T23:45:12.0838708Z ✔ a day's colour: a blip stays green, a bad hour is degraded, worse is down (0.176786ms)
2026-10-14T23:45:12.0838914Z ✔ lastDays ends today, oldest first (0.618729ms)
2026-10-14T23:45:12.0838942Z ✔ an incident is on every day it was open (0.325459ms)
2026-10-14T23:45:12.0848633Z ✔ bars and 90-day uptime come from the daily tally (0.502594ms)
2026-10-14T23:45:12.0857981Z ✔ a bar marks the days an incident on its part was open (0.368693ms)
2026-10-14T23:45:12.0871518Z ✔ summarize: core down is a major outage, others partial, slow is degraded performance (0.515404ms)
2026-10-14T23:45:12.0871621Z ✔ recent incidents: open ones and those resolved in 90 days, newest first (0.481312ms)
2026-10-14T23:45:12.0871692Z ✔ buildPage: parts with no check are unmonitored and have no uptime; staleness is noticed (2.832943ms)
2026-10-14T23:45:12.0872909Z ✔ components: an installation without a host leaves that part off (0.713241ms)
2026-10-14T23:45:12.0873039Z ✔ a part's state: the worse of its check and open incidents; maintenance unless an incident says worse (0.147552ms)
2026-10-14T23:45:12.0877792Z ✔ maintenance moves with its window, and cancelled or completed stays put (0.259079ms)
2026-10-14T23:45:12.0880703Z ✔ buildPage: incident impacts and maintenance reach the parts and the banner (10.741915ms)
2026-10-14T23:45:12.0886601Z ✔ git storage is listed only with the repos service, and degraded says why (0.365418ms)
2026-10-14T23:45:12.3072526Z ✔ page loads say they are a browser, so the site streams them; the name stays on the end (32.716644ms)
2026-10-14T23:45:12.6033405Z ✔ the data centre that answered is read from cf-ray (1.151639ms)
2026-10-14T23:45:12.6033547Z ✔ a slow answer is asked again at once: one slow answer is not slow, two are (1.60571ms)
2026-10-14T23:45:12.6033638Z ✔ a step works on 2xx, or on exactly the status it expects (1.207132ms)
2026-10-14T23:45:12.6033740Z ✔ a step that cannot connect, or takes too long, fails with why (20.771763ms)
2026-10-14T23:45:12.6033822Z ✔ a check's steps: all must work, and it takes as long as the slowest (0.357176ms)
2026-10-14T23:45:12.6033905Z ✔ runCheck: billing without a binding, and a part with no check, are null (0.624077ms)
2026-10-14T23:45:12.6033979Z ✔ git storage is judged by how its calls went, and quiet is up (1.073301ms)
2026-10-14T23:45:12.6034005Z ✔ escape covers HTML's specials (1.286441ms)
2026-10-14T23:45:12.6034076Z ✔ the page: banner, every part with its bar, and no incidents (22.24277ms)
2026-10-14T23:45:12.6034171Z ✔ an outage and an open incident are said at the top, escaped (4.241868ms)
2026-10-14T23:45:12.6034272Z ✔ every page follows the system's light or dark setting, with a switch kept in this browser (4.353595ms)
2026-10-14T23:45:12.6034344Z ✔ the theme script picks the stored choice, else auto (0.776946ms)
2026-10-14T23:45:12.6034376Z ✔ a stale page says the checks stopped (1.001093ms)
2026-10-14T23:45:12.6034402Z ✔ a day's detail names what happened (0.350136ms)
2026-10-14T23:45:12.6034433Z ✔ the badge is an SVG coloured by state (0.320932ms)
2026-10-14T23:45:12.6034510Z ✔ maintenance: upcoming, then in progress with its parts under maintenance (3.434786ms)
2026-10-14T23:45:12.6034587Z ✔ an incident's page: every update, its parts' impact, and the postmortem once published (2.397879ms)
2026-10-14T23:45:12.6034626Z ✔ prose: paragraphs and lists, escaped (0.217506ms)
2026-10-14T23:45:12.6034869Z ✔ history: months newest first, empty ones said so (3.01762ms)
2026-10-14T23:45:12.6034946Z ✔ subscribe pages: the form, its parts, and a confirm button rather than a link that acts (0.999481ms)
2026-10-14T23:45:12.7954134Z ✔ addresses are trimmed, lowercased and checked (1.426782ms)
2026-10-14T23:45:12.7995795Z ✔ confirmation tokens: random, and only their hash is kept (21.454447ms)
2026-10-14T23:45:12.8161001Z ✔ unsubscribe links are signed, not stored, and refuse tampering (5.926256ms)
2026-10-14T23:45:12.8190825Z ✔ per-part subscriptions (1.256446ms)
2026-10-14T23:45:12.8190979Z ✔ letters: escaped HTML, plain text, and an unsubscribe link in every update (0.657837ms)
2026-10-14T23:45:12.8191078Z ✔ senders: the binding when there is one, none otherwise (0.434142ms)
2026-10-14T23:45:12.8193151Z ✔ feeds: every public update and maintenance notice, newest first, in Atom and JSON Feed (9.855916ms)
2026-10-14T23:45:13.0484454Z ✔ the reader's zone: their cookie, else Cloudflare's guess, else UTC (15.797365ms)
2026-10-14T23:45:13.0508151Z ✔ times carry their zone's abbreviation (3.39736ms)
2026-10-14T23:45:13.0509131Z ✔ the status page says times in the reader's zone, with UTC in datetime and on hover (3.101516ms)
2026-10-14T23:45:13.0648830Z ℹ tests 85
2026-10-14T23:45:13.0649088Z ℹ suites 0
2026-10-14T23:45:13.0649227Z ℹ pass 85
2026-10-14T23:45:13.0649360Z ℹ fail 0
2026-10-14T23:45:13.0649911Z ℹ cancelled 0
2026-10-14T23:45:13.0650057Z ℹ skipped 0
2026-10-14T23:45:13.0650193Z ℹ todo 0
2026-10-14T23:45:13.0650342Z ℹ duration_ms 1953.113308
2026-10-14T23:45:13.0729685Z 
2026-10-14T23:45:13.0729964Z > test
2026-10-14T23:45:13.0730111Z > node --test app/**/*.test.ts
2026-10-14T23:45:13.0730530Z 
2026-10-14T23:45:13.6225463Z ✔ a valid token from staff is let in, by its email (42.536515ms)
2026-10-14T23:45:13.6225625Z ✔ an audience given as a string is accepted too (3.677841ms)
2026-10-14T23:45:13.6225716Z ✔ a token for another Access application is refused (1.695104ms)
2026-10-14T23:45:13.6225761Z ✔ a token from another team is refused (1.916728ms)
2026-10-14T23:45:13.6225787Z ✔ an expired token is refused (3.465222ms)
2026-10-14T23:45:13.6225855Z ✔ a token without an expiry is refused (1.849807ms)
2026-10-14T23:45:13.6225905Z ✔ a token not valid yet is refused (1.611739ms)
2026-10-14T23:45:13.6225980Z ✔ a token signed by another key under a known key id is refused (1.719351ms)
2026-10-14T23:45:13.6226058Z ✔ a token whose claims were changed after signing is refused (2.563989ms)
2026-10-14T23:45:13.6226129Z ✔ a token signed by a key the team does not publish is refused (1.639811ms)
2026-10-14T23:45:13.6226211Z ✔ alg none and HS256 are refused before any key is fetched (1.715895ms)
2026-10-14T23:45:13.6226281Z ✔ a valid token whose email is not staff is refused (1.393212ms)
2026-10-14T23:45:13.6226355Z ✔ a token with neither an email nor a client id is refused (1.681404ms)
2026-10-14T23:45:13.6226448Z ✔ a listed service token is let in as its name at service.g1t.sh (2.553323ms)
2026-10-14T23:45:13.6226484Z ✔ a service token not listed is refused (3.948507ms)
2026-10-14T23:45:13.6226557Z ✔ a listed service token still needs a valid signature and audience (2.946273ms)
2026-10-14T23:45:13.6226630Z ✔ an email wins over a client id on the same token (1.534113ms)
2026-10-14T23:45:13.6226705Z ✔ service tokens are read as client id to name, dropping malformed entries (0.98564ms)
2026-10-14T23:45:13.6226766Z ✔ staff emails match without regard to case (2.656227ms)
2026-10-14T23:45:13.6227078Z ✔ a request without a token is refused (0.46618ms)
2026-10-14T23:45:13.6227091Z ✔ garbage is refused (0.249445ms)
2026-10-14T23:45:13.6227155Z ✔ the team's keys are fetched once and kept for a few minutes (4.774737ms)
2026-10-14T23:45:13.6227225Z ✔ when the keys cannot be fetched, nothing is let in (1.334844ms)
2026-10-14T23:45:13.6227286Z ✔ sudo is closed until every setting is given (0.844948ms)
2026-10-14T23:45:13.6227354Z ✔ changes are only taken from sudo's own pages (0.655665ms)
2026-10-14T23:45:13.6227419Z ✔ everyone at a staff domain is staff, and nobody at a lookalike (0.209224ms)
2026-10-14T23:45:13.6227482Z ✔ an alias, its workspace and why are read as identity takes them (2.047354ms)
2026-10-14T23:45:13.6227845Z ✔ a malformed alias or workspace, or no reason, is refused before identity is asked (0.332629ms)
2026-10-14T23:45:13.6227877Z ✔ removing an alias needs a reason (0.242174ms)
2026-10-14T23:45:13.6774779Z ✔ niceCeiling rounds up to 1, 2, 2.5 or 5 times a power of ten (1.543858ms)
2026-10-14T23:45:13.6783815Z ✔ ticks run from zero to the top (0.941002ms)
2026-10-14T23:45:13.6785615Z ✔ months are named (0.318788ms)
2026-10-14T23:45:13.6786201Z ✔ margin and change (0.300732ms)
2026-10-14T23:45:13.6791785Z ✔ monthBars scales both series to one axis from zero (0.727021ms)
2026-10-14T23:45:13.6791877Z ✔ a tiny month still shows, and an empty chart has an axis (0.376385ms)
2026-10-14T23:45:13.6794357Z ✔ negative figures draw nothing below the baseline (2.101735ms)
2026-10-14T23:45:13.6797491Z ✔ barPath rounds the top and keeps the foot square (0.308493ms)
2026-10-14T23:45:13.6804447Z ✔ axis labels are short (0.565369ms)
2026-10-14T23:45:13.6804494Z ✔ shares are against the largest (0.415874ms)
2026-10-14T23:45:13.8565780Z ✔ every day of the range is there, even an empty one (3.917561ms)
2026-10-14T23:45:13.8570949Z ✔ all of g1t is money in against every cost; a product is its value against its cost (0.480912ms)
2026-10-14T23:45:13.8576811Z ✔ margins read against the floor (0.290085ms)
2026-10-14T23:45:13.8578316Z ✔ unit costs keep the places they need (0.360591ms)
2026-10-14T23:45:13.8579448Z ✔ the range and product come from the address, within bounds (0.180742ms)
2026-10-14T23:45:13.8580561Z ✔ the guardrails form is checked (26.935856ms)
2026-10-14T23:45:13.8588361Z ✔ a mapping names Cloudflare's product and meter and one of g1t's products (0.620221ms)
2026-10-14T23:45:13.8589165Z ✔ the spend bar shows only when a cap stops work (0.958509ms)
2026-10-14T23:45:13.8597740Z ✔ what g1t paid this month adds every bucket, the free tier and subscriptions (0.45324ms)
2026-10-14T23:45:13.8601126Z ✔ charged without real money is what it cost g1t, never its price (0.624498ms)
2026-10-14T23:45:13.8602146Z ✔ margins are a share of the price: cost plus 20% is 16.7% (0.237988ms)
2026-10-14T23:45:13.8602737Z ✔ who g1t paid is the statement's all-in cost, subscriptions included (0.276135ms)
2026-10-14T23:45:13.8603306Z ✔ a rate g1t sets shows no cost, and a weight is no money (0.271218ms)
2026-10-14T23:45:13.8603707Z ✔ a rise replaced before its date says so, rather than missing its date (0.196896ms)
2026-10-14T23:45:13.8607783Z ✔ the pause banner names every paused level, and who paused it when it was not a person (0.629725ms)
2026-10-14T23:45:13.8620967Z ✔ subscriptions over the range are billing's, day by day by the billing cycle (0.732259ms)
2026-10-14T23:45:13.8621649Z ✔ test-mode charges are given away, never money in (0.217947ms)
2026-10-14T23:45:13.8623269Z ✔ the billing cycle reads as Cloudflare's Billable usage page does (0.288704ms)
2026-10-14T23:45:13.8623670Z ✔ the last read of the bill says when it may be incomplete (0.318819ms)
2026-10-14T23:45:14.0395012Z ✔ the presets are $10, $20, $25, $50 and $100, each one step (2.003338ms)
2026-10-14T23:45:14.0404217Z ✔ an expiry is never, 30, 90 or 365 days, or the end of a chosen day (0.689635ms)
2026-10-14T23:45:14.0412774Z ✔ a small credit is one step; over $100 the slug is typed out (25.268123ms)
2026-10-14T23:45:14.0422774Z ✔ a credit needs a kind and a note (0.214902ms)
2026-10-14T23:45:14.0430489Z ✔ a refund says what it is for, never expires, and refunds a day that was (0.457636ms)
2026-10-14T23:45:14.0440801Z ✔ a grant reads in a line, as the Billing page says it (5.304563ms)
2026-10-14T23:45:14.0440841Z ✔ a month filter is a month (0.251798ms)
2026-10-14T23:45:14.1577925Z ✔ what went reads as one line (1.157307ms)
2026-10-14T23:45:14.1578358Z ✔ only a protected account is refused outright (0.244447ms)
2026-10-14T23:45:14.1609290Z ✔ workspaces it owns alone go with it, said up front (0.344217ms)
2026-10-14T23:45:14.1610317Z ✔ a protected workspace or billing that cannot settle stops it, naming which (0.206089ms)
2026-10-14T23:45:14.1610933Z ✔ staff confirm with the username (0.225368ms)
2026-10-14T23:45:14.1611765Z ✔ the form needs a reason, the username, and the box ticked when workspaces go too (0.275113ms)
2026-10-14T23:45:14.1612994Z ✔ workspaces deleted with the account are matched to their deletions (0.933641ms)
2026-10-14T23:45:14.2811011Z ✔ what went reads as one line (0.993211ms)
2026-10-14T23:45:14.2819975Z ✔ days left round up, and none once it is due (0.264167ms)
2026-10-14T23:45:14.2823931Z ✔ a purge is confirmed by the slug alone (0.231467ms)
2026-10-14T23:45:14.4782897Z ✔ a 100% discount keeps its budget and an end date, and names who set it (33.145728ms)
2026-10-14T23:45:14.7385496Z ✔ a discount is a preset or a custom whole percent (0.624889ms)
2026-10-14T23:45:14.7385623Z ✔ no discount and no limit is standard, which clears the end date (0.355514ms)
2026-10-14T23:45:14.7385707Z ✔ terms are refused without a note, with a bad discount, or ending in the past (0.55915ms)
2026-10-14T23:45:14.7385780Z ✔ workspace lists take commas, spaces and lines, once each (0.688113ms)
2026-10-14T23:45:14.7385808Z ✔ invoice emails are one address (0.353131ms)
2026-10-14T23:45:14.7385837Z ✔ credits are positive and capped (0.304687ms)
2026-10-14T23:45:14.7385910Z ✔ a sales record: a stage, an owner's email or nobody, a next step and its day (0.605669ms)
2026-10-14T23:45:14.7385970Z ✔ a sales note is required, and not endless (0.298678ms)
2026-10-14T23:45:14.7386038Z ✔ allowances: the plan without its price, pool shares, and staff's overrides (0.638098ms)
2026-10-14T23:45:14.7386116Z ✔ a bank transfer: an amount, its reference, a note, and the slug typed out (0.434062ms)
2026-10-14T23:45:14.7386173Z ✔ a decision: approve as asked or at another amount; decline needs a note (0.708663ms)
2026-10-14T23:45:14.7386242Z ✔ goodwill: no amount is the one-click credit; a reason when one is needed; a day not in the future (0.492189ms)
2026-10-14T23:45:14.7386286Z ✔ filters come from the address; unknown values are dropped (1.930478ms)
2026-10-14T23:45:14.7386330Z ✔ tabs: open, drafts, and resolved (dismissed drafts included) (0.409384ms)
2026-10-14T23:45:14.7386376Z ✔ maintenance: live first by start, then finished newest first (8.683646ms)
2026-10-14T23:45:14.7386415Z ✔ phase chips: draft, dismissed, postmortem, else the status (0.489655ms)
2026-10-14T23:45:14.7386430Z ✔ durations, medians and UTC times (9.02006ms)
2026-10-14T23:45:14.7386601Z ✔ forms: impacts per part, notify by severity, next status, staff suggestions (27.65762ms)
2026-10-14T23:45:14.7386646Z ✔ the status page's audit lines join the Audit log and link to their pages (0.621804ms)
2026-10-14T23:45:14.7386686Z ✔ the postmortem preview reads text as the status page does (0.440792ms)
2026-10-14T23:45:14.7986247Z ✔ the page has one address, with its search and tab (1.087994ms)
2026-10-14T23:45:14.7990530Z ✔ revoking and granting say so, and nothing else is flashed (0.222945ms)
2026-10-14T23:45:14.8000413Z ✔ an account made with a shared link says where it came from (0.211798ms)
2026-10-14T23:45:14.8023520Z ✔ a grant names a person, a whole number of invites and why (1.058669ms)
2026-10-14T23:45:14.9272599Z ✔ the chart: answered checks as a line, broken by failures and gaps; slow ones dotted; the slow line drawn (2.61783ms)
2026-10-14T23:45:14.9272731Z ✔ the chart's scale leaves room over the slow line when every check was fast (0.288553ms)
2026-10-14T23:45:14.9292916Z ✔ the summary over the chart (2.234464ms)
2026-10-14T23:45:15.0741083Z ✔ invoice filters are checked (1.095014ms)
2026-10-14T23:45:15.0757910Z ✔ totals: void counts for nothing; open, overdue and failed are outstanding (1.110036ms)
2026-10-14T23:45:15.0764997Z ✔ links keep only the filters that are set (0.344588ms)
2026-10-14T23:45:15.0766703Z ✔ only https links are followed (0.165678ms)
2026-10-14T23:45:15.0767729Z ✔ account ids link to their pages; anything else does not (0.448954ms)
2026-10-14T23:45:15.0769800Z ✔ accounts are named by slug, or the enterprise's name when known (0.153511ms)
2026-10-14T23:45:15.0773449Z ✔ actions read plainly, known or not (0.162865ms)
2026-10-14T23:45:15.0774675Z ✔ an older page only when this one was full (0.314302ms)
2026-10-14T23:45:15.0781618Z ✔ audit filters are checked (2.16519ms)
2026-10-14T23:45:15.2096244Z ✔ dollars read to the cent, and small amounts keep their fractions (1.576797ms)
2026-10-14T23:45:15.2096595Z ✔ typed amounts become micros exactly (0.424658ms)
2026-10-14T23:45:15.3251675Z ✔ the sidebar: two top-level links, then sections that fold (1.626072ms)
2026-10-14T23:45:15.3258486Z ✔ no section holds a single page, and every section has an icon (0.260561ms)
2026-10-14T23:45:15.3278722Z ✔ the section holding the current page is the one drawn open (0.636796ms)
2026-10-14T23:45:15.3278840Z ✔ every item has its own path, a label and a line about it (1.708234ms)
2026-10-14T23:45:15.3278874Z ✔ the built pages are not marked soon (0.296204ms)
2026-10-14T23:45:15.3278950Z ✔ every soon page says what it will do, why, and what it will have (0.220782ms)
2026-10-14T23:45:15.3279014Z ✔ view as customer promises an audit and a time limit (0.194311ms)
2026-10-14T23:45:15.3279084Z ✔ soonFor finds a placeholder by its path, and nothing else (0.123105ms)
2026-10-14T23:45:15.3279162Z ✔ isCurrent: an item stays lit on the pages beneath it; / only on itself (0.250206ms)
2026-10-14T23:45:15.3279232Z ✔ open incidents show beside Incidents, and nothing waits beside Invites (0.387582ms)
2026-10-14T23:45:15.4586933Z ✔ the request filter is open unless another status is named (1.311749ms)
2026-10-14T23:45:15.4601114Z ✔ an answer is due one business day after the request (0.580491ms)
2026-10-14T23:45:15.4609584Z ✔ how long a request has waited, and whether it is overdue (1.101904ms)
2026-10-14T23:45:15.4609672Z ✔ a workspace's age in its largest whole unit (0.268263ms)
2026-10-14T23:45:15.4612412Z ✔ goodwill: g1t absorbs only what is past its margin (0.230957ms)
2026-10-14T23:45:15.4620817Z ✔ goodwill needs a reason past the one-click credit, or a second time in 12 months (0.4729ms)
2026-10-14T23:45:15.4636598Z ✔ velocity: five times the usual hour is fast (0.228453ms)
2026-10-14T23:45:15.4637251Z ✔ margin counts the plan's price and never what g1t gave (1.586662ms)
2026-10-14T23:45:15.4637781Z ✔ given: labelled by source, totalled at price and at cost (0.444297ms)
2026-10-14T23:45:15.4662757Z ✔ margin on what was sold leaves out the cost of what g1t gave (0.388934ms)
2026-10-14T23:45:15.6046131Z ✔ most urgent first: by kind, then the larger figure, else as billing sent them (2.246102ms)
2026-10-14T23:45:15.8432718Z ✔ sorting leaves the input alone (0.305429ms)
2026-10-14T23:45:15.8432805Z ✔ filter by kind, and by whose they are (0.460902ms)
2026-10-14T23:45:15.8432829Z ✔ counts by kind (0.284597ms)
2026-10-14T23:45:15.8432842Z ✔ query values are checked (0.289966ms)
2026-10-14T23:45:15.8432924Z ✔ links into the queue leave out the defaults (0.405298ms)
2026-10-14T23:45:15.8433018Z ✔ names for kinds and stages, and for ones sudo does not know (0.327421ms)
2026-10-14T23:45:15.8433106Z ✔ follow-ups due: today or earlier, open deals only, one per workspace, oldest first (8.655053ms)
2026-10-14T23:45:15.8433181Z ✔ a suspension's hold is known as one, so lifting it lifts the hold (1.069916ms)
2026-10-14T23:45:15.8433212Z ✔ a reason is required, and kept short (1.104558ms)
2026-10-14T23:45:15.8433276Z ✔ terms read as a discount; comped from before discounts is 100% (0.984497ms)
2026-10-14T23:45:15.9764212Z ✔ the exclusion list reads commas, spaces and case alike, once each (1.500292ms)
2026-10-14T23:45:15.9764498Z ✔ a detach says each change it makes, and nothing when there is none (0.998659ms)
2026-10-14T23:45:15.9764593Z ✔ a detach says what metered usage, included usage and test disputes it let go (0.227372ms)
2026-10-14T23:45:16.1458755Z ✔ the zone: the staff member's choice, else Cloudflare's guess, else UTC (21.370661ms)
2026-10-14T23:45:16.1488290Z ✔ a time on a page: in the zone, with its abbreviation; UTC on hover (2.719133ms)
2026-10-14T23:45:16.1488401Z ✔ form times are read and shown in the zone (6.323793ms)
2026-10-14T23:45:16.2642076Z ✔ every workspace is listed, with or without billing (2.000624ms)
2026-10-14T23:45:16.2684106Z ✔ a workspace on an enterprise shows the enterprise and only its own share (0.398508ms)
2026-10-14T23:45:16.2695049Z ✔ a page lists only its own workspaces, not the rest of an enterprise (0.232669ms)
2026-10-14T23:45:16.2695527Z ✔ pages stay within the list (0.32625ms)
2026-10-14T23:45:16.2743719Z ✔ old account links go to the workspace or the enterprise (0.390536ms)
2026-10-14T23:45:16.2844580Z ℹ tests 156
2026-10-14T23:45:16.2844874Z ℹ suites 0
2026-10-14T23:45:16.2845048Z ℹ pass 156
2026-10-14T23:45:16.2845226Z ℹ fail 0
2026-10-14T23:45:16.2845389Z ℹ cancelled 0
2026-10-14T23:45:16.2845612Z ℹ skipped 0
2026-10-14T23:45:16.2845784Z ℹ todo 0
2026-10-14T23:45:16.2845976Z ℹ duration_ms 3173.1028
2026-10-14T23:45:16.2956193Z 
2026-10-14T23:45:16.2956452Z > test
2026-10-14T23:45:16.2956626Z > node --test app/**/*.test.ts
2026-10-14T23:45:16.2956798Z 
2026-10-14T23:45:16.4906489Z ✔ a license is named by its SPDX id, or not at all (0.994133ms)
2026-10-14T23:45:16.4906607Z ✔ counts read as words (0.298278ms)
2026-10-14T23:45:16.4950474Z ✔ every language down to a tenth of a percent is listed, at most eight; the rest are Other (1.262856ms)
2026-10-14T23:45:16.4950550Z ✔ weeks line up with the repository's (0.374732ms)
2026-10-14T23:45:16.4950643Z ✔ pushes, tags, merges and renames are activity (0.583096ms)
2026-10-14T23:45:16.4950719Z ✔ a deleted branch is activity with the commit that restores it; a deleted tag is not (0.240301ms)
2026-10-14T23:45:16.4950809Z ✔ activity is about a branch when it pushed, deleted, renamed or merged into it (0.27302ms)
2026-10-14T23:45:16.6503657Z ✔ a token made for one workspace reads its reach, repositories and permissions (2.366022ms)
2026-10-14T23:45:16.9185849Z ✔ a token reaches every workspace, or none, and may never expire (0.457797ms)
2026-10-14T23:45:16.9186000Z ✔ a workspace's own token holds nothing about a person, and reaches all or selected repositories (0.327411ms)
2026-10-14T23:45:16.9186077Z ✔ editing reads neither the expiry nor needs a name (0.144838ms)
2026-10-14T23:45:16.9186096Z ✔ mistakes are named (0.345859ms)
2026-10-14T23:45:16.9186152Z ✔ permissions are scopes read per resource (0.725209ms)
2026-10-14T23:45:16.9186216Z ✔ lifetimes follow the rules of every workspace a token reaches (0.579881ms)
2026-10-14T23:45:16.9186238Z ✔ lists read a token in a line (0.580011ms)
2026-10-14T23:45:16.9186299Z ✔ old addresses of the token settings go to the current pages (0.272018ms)
2026-10-14T23:45:16.9186324Z ✔ saving a token sends only what changed (1.180362ms)
2026-10-14T23:45:16.9186385Z ✔ using the website is off unless checked, and never on a workspace's token (0.291377ms)
2026-10-14T23:45:16.9186445Z ✔ the dialog lists only what the account has (1.468524ms)
2026-10-14T23:45:16.9186501Z ✔ owning a workspace alone stands in the way, and names it (0.358829ms)
2026-10-14T23:45:16.9186521Z ✔ a protected account says so first (0.149244ms)
2026-10-14T23:45:16.9186540Z ✔ only the username itself confirms (0.249064ms)
2026-10-14T23:45:16.9186595Z ✔ every anchor of the old settings page lands on its own page (0.833992ms)
2026-10-14T23:45:16.9186617Z ✔ a settings path names its page (0.324457ms)
2026-10-14T23:45:17.0719409Z ✔ with no settings, the addresses are g1t.sh's (1.876587ms)
2026-10-14T23:45:17.0721485Z ✔ settings replace the addresses, without trailing slashes (0.402964ms)
2026-10-14T23:45:17.0722435Z ✔ files people supply are served from an origin of their own (0.25997ms)
2026-10-14T23:45:17.0734457Z ✔ pages without root data use g1t.sh's addresses (0.215574ms)
2026-10-14T23:45:17.0734762Z ✔ the defaults kept in meta and agent setup are g1t.sh's (0.157947ms)
2026-10-14T23:45:17.0734946Z ✔ a clone address is under the site (0.212549ms)
2026-10-14T23:45:17.2152260Z ✔ an advisory form is checked and cleaned (26.627182ms)
2026-10-14T23:45:17.2165721Z ✔ a report needs a title and a description, and an email when signed out (0.475144ms)
2026-10-14T23:45:17.2174803Z ✔ states and severities parse only to what is known (0.309354ms)
2026-10-14T23:45:17.3422695Z ✔ a choice is remembered and read back (1.170738ms)
2026-10-14T23:45:17.3422826Z ✔ no choice, an unknown one, or storage that throws falls back to the default (0.383015ms)
2026-10-14T23:45:17.3422893Z ✔ every toggle on the page follows the last choice (0.322394ms)
2026-10-14T23:45:17.3423027Z ✔ parseAgent accepts only known agents (0.183275ms)
2026-10-14T23:45:17.3424485Z ✔ every snippet points at the MCP server (1.127793ms)
2026-10-14T23:45:17.3424825Z ✔ the snippets can point at another MCP server (0.213711ms)
2026-10-14T23:45:17.4673324Z ✔ every AI provider is shown, once, in a group (2.683769ms)
2026-10-14T23:45:17.4687528Z ✔ AI providers are the workspace's AI settings, not integrations (0.287341ms)
2026-10-14T23:45:17.4687881Z ✔ older links to the AI providers' page open the AI page (0.263696ms)
2026-10-14T23:45:17.5732405Z ✔ visitors from the EU, EEA, UK and Switzerland are asked first (1.114974ms)
2026-10-14T23:45:17.5753344Z ✔ others are not, nor is a visitor whose country is unknown (0.255314ms)
2026-10-14T23:45:17.5755410Z ✔ on the server nothing is chosen or required (0.185298ms)
2026-10-14T23:45:17.6964866Z ✔ the front door is sent as it is (1.088514ms)
2026-10-14T23:45:18.2781206Z ✔ names in other addresses are replaced, and g1t's own words kept (0.276395ms)
2026-10-14T23:45:18.2781335Z ✔ a URL on the site keeps only campaign parameters; another site's is left alone (0.377818ms)
2026-10-14T23:45:18.2781427Z ✔ a click inside the app goes without its text, link, attributes or title (1.460132ms)
2026-10-14T23:45:18.2781492Z ✔ on the front door a click keeps its text (0.265369ms)
2026-10-14T23:45:18.2781550Z ✔ recordings and error reports are never sent, and heatmaps only from the front door (0.342694ms)
2026-10-14T23:45:18.2781652Z ✔ pages after signing in keep their address but not their text, which can show an email address (0.34696ms)
2026-10-14T23:45:18.2781674Z ✔ plain text is one unstyled span (1.797318ms)
2026-10-14T23:45:18.2781971Z ✔ SGR codes style the text after them until a reset (0.97926ms)
2026-10-14T23:45:18.2782042Z ✔ 256 colours and 24-bit colours, in both of their forms (0.575534ms)
2026-10-14T23:45:18.2782121Z ✔ every other escape is dropped, and a link keeps its text (0.374072ms)
2026-10-14T23:45:18.2782185Z ✔ the 16 colours are theme classes; the rest are inline colours (0.448874ms)
2026-10-14T23:45:18.2782248Z ✔ a search marks its matches across spans, colours kept (0.626741ms)
2026-10-14T23:45:18.2782334Z ✔ only integrations are pinned; built-in apps, their pages, old plugins and connectors are not (1.629316ms)
2026-10-14T23:45:18.2782364Z ✔ an integration's app opens its page (0.481503ms)
2026-10-14T23:45:18.2782418Z ✔ installed apps are what the workspace connected, opening where each is managed (1.246641ms)
2026-10-14T23:45:18.2782462Z ✔ pins are kept per workspace, in the order they were pinned (2.075515ms)
2026-10-14T23:45:18.2782503Z ✔ a cookie someone wrote by hand reads as far as it makes sense (0.600702ms)
2026-10-14T23:45:18.2782679Z ✔ pins of built-in pages from before are dropped (0.209835ms)
2026-10-14T23:45:18.2782742Z ✔ the account's pins win over the cookie, which is the fallback (0.249574ms)
2026-10-14T23:45:18.2782765Z ✔ a pin form pins or unpins one app (26.829577ms)
2026-10-14T23:45:18.2782824Z ✔ the cookies last a year and are secure when the site is (0.475494ms)
2026-10-14T23:45:18.2782875Z ✔ iso projects the floor axes and lifts by z (1.67166ms)
2026-10-14T23:45:18.2782928Z ✔ pts and isoPath round to one decimal place (0.30684ms)
2026-10-14T23:45:18.2782994Z ✔ stagger spreads starts evenly inside the loop (0.271228ms)
2026-10-14T23:45:18.2783041Z ✔ timing names the custom properties the stylesheet reads (0.275484ms)
2026-10-14T23:45:18.2783087Z ✔ Auto is the picker's first option and its default (1.628254ms)
2026-10-14T23:45:18.2783096Z ✔ an explicit pick stays picked (0.2ms)
2026-10-14T23:45:18.2783144Z ✔ an AI provider that lists no models, or an Azure deployment, has no Auto (0.233139ms)
2026-10-14T23:45:18.2783187Z ✔ the chosen model reads as Auto, or by its name (0.189584ms)
2026-10-14T23:45:18.3278423Z ✔ the page says which repository, issue or pull request the person is on (1.963778ms)
2026-10-14T23:45:18.3282484Z ✔ the composer says where the question is asked from (0.341443ms)
2026-10-14T23:45:18.3314866Z ✔ an answer's kept lines fold into its steps, each as it last was, and its sources (0.513801ms)
2026-10-14T23:45:18.3339908Z ✔ a proposed session is kept once and says what it will do (0.459059ms)
2026-10-14T23:45:18.4620211Z ✔ overlaps for the same issue are alternatives; the rest are collisions (1.94532ms)
2026-10-14T23:45:18.4641666Z ✔ the other attempts are the issue's other pull requests, newest first, a few at most (0.304377ms)
2026-10-14T23:45:18.4650566Z ✔ shared paths are the files both change (0.201602ms)
2026-10-14T23:45:18.4665087Z ✔ a review stands at each reviewer's latest verdict, changes asked for first (0.631348ms)
2026-10-14T23:45:18.4665211Z ✔ an attempt's outcome says which was merged instead (0.216004ms)
2026-10-14T23:45:18.4665294Z ✔ an agent's review is advisory: it neither approves nor asks for changes (0.262123ms)
2026-10-14T23:45:18.5906180Z ✔ owners see everything, members their projects, others nothing (2.033192ms)
2026-10-14T23:45:18.5924067Z ✔ filters are read from the address, and nonsense is dropped (0.955244ms)
2026-10-14T23:45:18.5932750Z ✔ links keep the other filters (0.403275ms)
2026-10-14T23:45:18.5940559Z ✔ an old agent's entry is shown with whom it acted for (0.48556ms)
2026-10-14T23:45:18.5947430Z ✔ the CSV quotes what it must and keeps formulas as text (0.595674ms)
2026-10-14T23:45:18.5952455Z ✔ the log reads back only as far as the plan keeps it (0.310056ms)
2026-10-14T23:45:18.8037051Z ✔ an image is known by its bytes (0.894994ms)
2026-10-14T23:45:19.0528209Z ✔ SVG and anything else is refused, whatever it is called (25.190555ms)
2026-10-14T23:45:19.0528285Z ✔ more than a megabyte is refused (80.190221ms)
2026-10-14T23:45:19.0528311Z ✔ an image is sent as base64 (0.603256ms)
2026-10-14T23:45:19.0528334Z ✔ a missing file is asked for (0.217767ms)
2026-10-14T23:45:19.0528399Z ✔ a badge says how the newest finished run went (1.06611ms)
2026-10-14T23:45:19.0528451Z ✔ the badge is an SVG with its label and state, escaped (2.080463ms)
2026-10-14T23:45:19.0528512Z ✔ its address and Markdown name the workflow file, and a branch or event when chosen (0.387813ms)
2026-10-14T23:45:19.0528523Z ✔ a plan that is on says so (1.023457ms)
2026-10-14T23:45:19.0528578Z ✔ a plan whose payment has not cleared says it is pending, never that it is on (0.358227ms)
2026-10-14T23:45:19.0528625Z ✔ a failed payment points at Update payment method (0.247853ms)
2026-10-14T23:45:19.0528704Z ✔ a prepayment is settled when the balance rose or it was just entered (0.310296ms)
2026-10-14T23:45:19.0528764Z ✔ a bank transfer still on its way is pending (0.189815ms)
2026-10-14T23:45:19.1928998Z ✔ a credit from g1t reads in a line, with what is left and when it expires (18.51823ms)
2026-10-14T23:45:19.1929094Z ✔ dollars are read from what people type (0.337977ms)
2026-10-14T23:45:19.1929169Z ✔ a prepayment is $25 or more, by card up to $10,000, by bank transfer from $1,000 (4.713786ms)
2026-10-14T23:45:19.1930934Z ✔ a limit request needs an amount, a reason and a monthly spend; an overage only a reason (0.358889ms)
2026-10-14T23:45:19.1931676Z ✔ a spend limit is automatic, fixed, the full amount available, or the one-time raise (0.256676ms)
2026-10-14T23:45:19.1932267Z ✔ the spend limit's range: up to the highest ceiling plus prepaid, then once to twice it, then ask (0.218297ms)
2026-10-14T23:45:19.1940293Z ✔ the plan card says where the workspace stands (0.320201ms)
2026-10-14T23:45:19.1940384Z ✔ the overview's Usage card reads the month by what pays (0.54578ms)
2026-10-14T23:45:19.1942313Z ✔ a meter's share stays between 0 and 1 (0.226159ms)
2026-10-14T23:45:19.1945469Z ✔ after a card check the owner reads whether the trial started (0.451487ms)
2026-10-14T23:45:19.1946773Z ✔ alerts read as sentences (0.294823ms)
2026-10-14T23:45:19.1949090Z ✔ a workspace needs attention when paused, on a spike, or at 90% (0.210436ms)
2026-10-14T23:45:19.1958457Z ✔ a request says where it stands (0.199349ms)
2026-10-14T23:45:19.1958540Z ✔ the plan shows every meter, with no quota beside any of them (0.283996ms)
2026-10-14T23:45:19.1958610Z ✔ a free workspace sees only what it can use, and anything it used anyway (0.15324ms)
2026-10-14T23:45:19.1958631Z ✔ storage reads in powers of ten (0.134031ms)
2026-10-14T23:45:19.1959980Z ✔ kinds of work without words of their own are one Other, listed once and last (0.231898ms)
2026-10-14T23:45:19.1964156Z ✔ budget alerts keep the levels ticked, highest first (0.442013ms)
2026-10-14T23:45:19.3387573Z ✔ branches with an open pull request are read first, the default branch never (1.809697ms)
2026-10-14T23:45:19.3405730Z ✔ no default branch head, nothing to measure against (0.522895ms)
2026-10-14T23:45:19.3406267Z ✔ each branch gets its measured commit and drift, newest first, by head hash (0.684968ms)
2026-10-14T23:45:19.3406509Z ✔ when repos could not answer, the branches still show, without commits or counts (0.48684ms)
2026-10-14T23:45:19.3406733Z ✔ repos' answer, as its JSON reads, keeps every count (flagon-io/hello's farewell) (0.318578ms)
2026-10-14T23:45:19.3407617Z ✔ a branch's pull request is the open one, else the newest merged or closed (0.320812ms)
2026-10-14T23:45:19.3407801Z ✔ a tab comes from the address, the overview otherwise (0.188153ms)
2026-10-14T23:45:19.3443785Z ✔ stale is no commits in 90 days; yours is the viewer's latest commit (0.311708ms)
2026-10-14T23:45:19.3444092Z ✔ a branch with nothing the default branch lacks, or a merged pull request, is merged (0.474763ms)
2026-10-14T23:45:19.3448708Z ✔ the overview shows a few of yours, the active and the stale ones; each tab lists its own (0.804357ms)
2026-10-14T23:45:19.3455447Z ✔ the bars are drawn against the longest count shown (0.202494ms)
2026-10-14T23:45:19.4952291Z ✔ a pressed button is busy until the status changes (0.895715ms)
2026-10-14T23:45:19.4984816Z ✔ a pressed button is given back when nothing changes for a while (0.169785ms)
2026-10-14T23:45:19.4986834Z ✔ a button nobody pressed is not busy (0.144116ms)
2026-10-14T23:45:19.6089160Z ✔ a card shows only its links: nothing answers the rest any more (1.523757ms)
2026-10-14T23:45:19.6092889Z ✔ a draft issue's chip says where it is (0.323015ms)
2026-10-14T23:45:19.6098549Z ✔ a long body starts folded (0.330225ms)
2026-10-14T23:45:19.7223649Z ✔ the conversation cache keeps the most recently used, and no more (1.582796ms)
2026-10-14T23:45:19.8665170Z ✔ formatting is written as Markdown (2.361806ms)
2026-10-14T23:45:20.1767780Z ✔ links: with their text, or bare when the text is the address (0.420611ms)
2026-10-14T23:45:20.1767913Z ✔ each paragraph is a line; an empty one is a blank line (1.837759ms)
2026-10-14T23:45:20.1768081Z ✔ text that only looks like Markdown is escaped, and mentions stay mentions (0.294522ms)
2026-10-14T23:45:20.1768108Z ✔ lists, quotes and code blocks (0.503646ms)
2026-10-14T23:45:20.1768183Z ✔ Markdown comes back into the composer as it was written (3.79023ms)
2026-10-14T23:45:20.1768257Z ✔ Markdown the composer cannot write still comes in (1.028324ms)
2026-10-14T23:45:20.1768330Z ✔ a message in the conversation on screen, in a window in front, is silent (1.782476ms)
2026-10-14T23:45:20.1768416Z ✔ the same message plays `message` once the window is not in front, or the tab is hidden (0.724718ms)
2026-10-14T23:45:20.1768480Z ✔ a message in another conversation you have open plays `message` (0.37322ms)
2026-10-14T23:45:20.1768558Z ✔ a direct message not from you plays `direct`; one from you plays nothing (1.760022ms)
2026-10-14T23:45:20.1768627Z ✔ a mention of you plays `mention`, over `direct` and `message` (0.284888ms)
2026-10-14T23:45:20.1768657Z ✔ @you is a whole handle, outside code (0.173891ms)
2026-10-14T23:45:20.1768723Z ✔ your own messages never sound, whichever way they arrive (0.233991ms)
2026-10-14T23:45:20.1768779Z ✔ a muted conversation is silent, even for a mention or a DM (0.247511ms)
2026-10-14T23:45:20.1768803Z ✔ Do not disturb silences everything (0.278398ms)
2026-10-14T23:45:20.1768861Z ✔ sounds off, or one cue off, is silent for that (0.325609ms)
2026-10-14T23:45:20.1768921Z ✔ an old agent's message counts like a person's (0.421323ms)
2026-10-14T23:45:20.1768981Z ✔ a deleted message, and an inbox notification, make no sound (0.253681ms)
2026-10-14T23:45:20.1769251Z ✔ sounds come at most one every 1.5 s, and one message sounds once however it arrives (0.283125ms)
2026-10-14T23:45:20.1769317Z ✔ an arrival's key is its message id, the same over the socket and the feed (0.142684ms)
2026-10-14T23:45:20.1769411Z ✔ a desktop notification shows only when wanted, allowed, out of front, and not already pushed (0.371558ms)
2026-10-14T23:45:20.1769474Z ✔ g1t's answer is silent while it thinks and streams, and pings once it is written (0.298718ms)
2026-10-14T23:45:20.1850699Z ✔ messages from one author close together share a header; days get a rule (19.051449ms)
2026-10-14T23:45:20.1850820Z ✔ merging keeps one copy of each message, and drops the pending one once saved (0.414893ms)
2026-10-14T23:45:20.1850855Z ✔ an @ being typed suggests people (0.549765ms)
2026-10-14T23:45:20.1850910Z ✔ message text: mentions, references, links and code, never HTML (1.778129ms)
2026-10-14T23:45:20.1855299Z ✔ message blocks: fenced code, lists, quotes and paragraphs (1.315805ms)
2026-10-14T23:45:20.1891678Z ✔ the sidebar: sections, filters and the rail's count (1.429286ms)
2026-10-14T23:45:20.1891808Z ✔ an old conversation with an agent alone opens read-only, under the name the agent had (0.376185ms)
2026-10-14T23:45:20.1891878Z ✔ addresses, names, money and reconnecting (0.624958ms)
2026-10-14T23:45:20.1891951Z ✔ a member shows by display name, else by their username as they wrote it (0.223616ms)
2026-10-14T23:45:20.1892029Z ✔ mentions read as the names people know, found by the lowercased handle (0.647072ms)
2026-10-14T23:45:20.1892058Z ✔ the typing line: who is typing (0.297106ms)
2026-10-14T23:45:20.3133937Z ✔ signing in, signing up and choosing a workspace stand alone, for everyone (1.298078ms)
2026-10-14T23:45:20.3150937Z ✔ answering an invitation stands alone until you belong to a workspace (0.179109ms)
2026-10-14T23:45:20.3174102Z ✔ someone signed in gets the app everywhere else, public pages included (0.229695ms)
2026-10-14T23:45:20.3174231Z ✔ a visitor gets the public frame everywhere else (0.392259ms)
2026-10-14T23:45:20.3174305Z ✔ a project's menu hides member-only pages from everyone else (1.056566ms)
2026-10-14T23:45:20.3174377Z ✔ the phone's project strip lights the page a path is under (0.532659ms)
2026-10-14T23:45:20.4249595Z ✔ its author edits and deletes their own comment (1.596467ms)
2026-10-14T23:45:20.4259000Z ✔ a maintainer edits and deletes anyone's (0.202884ms)
2026-10-14T23:45:20.4268798Z ✔ a review is edited but never deleted, and a note is never changed (0.232449ms)
2026-10-14T23:45:20.4294493Z ✔ an agent's comment is answered for by whoever it acted for; its review is never deleted (0.26625ms)
2026-10-14T23:45:20.5473666Z ✔ the headline says the worst of a commit's checks (1.106942ms)
2026-10-14T23:45:20.5476543Z ✔ the tally counts each kind, worst first (0.316044ms)
2026-10-14T23:45:20.5497427Z ✔ a check run says how it went and how long it took (0.418788ms)
2026-10-14T23:45:20.5505900Z ✔ details go to g1t's own page first, and elsewhere apart (1.055534ms)
2026-10-14T23:45:20.6670600Z ✔ co-authors leave the body and keep only their names (1.987113ms)
2026-10-14T23:45:20.6670921Z ✔ a message that is only trailers has no body (0.383105ms)
2026-10-14T23:45:20.6681228Z ✔ a trailer shows its name, never an address (0.345358ms)
2026-10-14T23:45:20.6699371Z ✔ prose that happens to contain a colon stays prose (0.161302ms)
2026-10-14T23:45:20.7950706Z ✔ a confirmed address is the account, whatever name the commit carries (1.97787ms)
2026-10-14T23:45:20.7955247Z ✔ an unconfirmed address matches nobody: the name on the commit, no link (0.327202ms)
2026-10-14T23:45:20.7966947Z ✔ the noreply address is the account (0.225768ms)
2026-10-14T23:45:20.7967527Z ✔ a deleted account's commits are ghost's, with no profile (0.182033ms)
2026-10-14T23:45:20.7967773Z ✔ g1t's commits, now and as its agents and queue made them before, are g1t (0.327922ms)
2026-10-14T23:45:20.7967975Z ✔ a commit sent to the page carries no address at all (0.730276ms)
2026-10-14T23:45:20.7968195Z ✔ one question per page: every distinct address, g1t's left out (0.29351ms)
2026-10-14T23:45:20.7968393Z ✔ co-authors are read from the trailers only (0.17995ms)
2026-10-14T23:45:20.7975670Z ✔ contributors and commits show one person the same way (0.372048ms)
2026-10-14T23:45:20.7979832Z ✔ a coding agent is shown as itself by the address on its commit, never by its name (0.522033ms)
2026-10-14T23:45:20.9136947Z ✔ the page a refusal names becomes a link, without its full stop (2.154895ms)
2026-10-14T23:45:21.1546112Z ✔ text without a page, or with other slashes, stays text (0.285268ms)
2026-10-14T23:45:21.1546237Z ✔ a pending account is sent to confirm its address from every app page (1.278029ms)
2026-10-14T23:45:21.1546320Z ✔ client navigations are gated as the page they load (0.363625ms)
2026-10-14T23:45:21.1546399Z ✔ the pages confirming needs, and the public pages about g1t, stay open (0.312049ms)
2026-10-14T23:45:21.1546475Z ✔ confirmed accounts, visitors and non-people are never gated (0.281002ms)
2026-10-14T23:45:21.1546554Z ✔ what the page says once confirmed, and where it goes (0.296244ms)
2026-10-14T23:45:21.1546624Z ✔ confirming an account whose invite names a workspace goes on to accept or decline it (0.160301ms)
2026-10-14T23:45:21.1546698Z ✔ the code field is a one-time code typed with a number pad (2.09143ms)
2026-10-14T23:45:21.1770769Z ✔ the two contexts list different connectors (1.276896ms)
2026-10-14T23:45:21.1781478Z ✔ a category shows only its own connectors, sorted into connected, available and soon (1.527342ms)
2026-10-14T23:45:21.1819938Z ✔ all shows everything once (0.306249ms)
2026-10-14T23:45:21.1820079Z ✔ search finds by name, description, tag and keyword, across every category (2.188375ms)
2026-10-14T23:45:21.1820172Z ✔ the navigation counts each category and leaves out empty ones (0.624908ms)
2026-10-14T23:45:21.1820203Z ✔ an unknown category is all of them (0.215974ms)
2026-10-14T23:45:21.1820294Z ✔ a tile has the connector's letters and a steady colour (0.397657ms)
2026-10-14T23:45:21.1820366Z ✔ asking for a connector names it and who it is for (0.358729ms)
2026-10-14T23:45:21.3151808Z ✔ a content key is a hash of every part, in order, and never of a join that could collide (12.607776ms)
2026-10-14T23:45:21.3164727Z ✔ the isolate's memory keeps the most recently used within its weight (0.610978ms)
2026-10-14T23:45:21.3186595Z ✔ lines weigh their characters (0.188523ms)
2026-10-14T23:45:21.3533155Z ✔ an answer is computed once, then read from the isolate, then from the data centre (38.437651ms)
2026-10-14T23:45:21.3560711Z ✔ a new version never reads what an old one kept (2.559472ms)
2026-10-14T23:45:21.3585021Z ✔ nothing to keep is not kept, and a broken shared entry counts as missing (2.748396ms)
2026-10-14T23:45:21.3599611Z ✔ without a data centre's cache the isolate still keeps answers (1.463928ms)
2026-10-14T23:45:21.5086638Z ✔ publisher documents a browser would open are downloads (1.35214ms)
2026-10-14T23:45:21.5086932Z ✔ data types stay inline (0.257787ms)
2026-10-14T23:45:21.5092613Z ✔ every registry answer runs nothing and is never sniffed (29.569109ms)
2026-10-14T23:45:21.5109964Z ✔ download names keep quotes and control characters out of the header (0.607713ms)
2026-10-14T23:45:21.6632364Z ✔ the calendar is 53 weeks of seven days, ending with today's week (2.705541ms)
2026-10-14T23:45:21.6632508Z ✔ each day is shaded in quarters of the busiest (2.647184ms)
2026-10-14T23:45:21.6632579Z ✔ months are named over the week they start in (0.744407ms)
2026-10-14T23:45:21.6632642Z ✔ a month that starts too close to the first column takes its place (0.864177ms)
2026-10-14T23:45:21.6632696Z ✔ a year that starts early in a month keeps its first label (0.524427ms)
2026-10-14T23:45:21.6632713Z ✔ a bad date draws nothing (0.175384ms)
2026-10-14T23:45:21.6632767Z ✔ hints and the heading read as sentences (19.807855ms)
2026-10-14T23:45:21.8136364Z ✔ harnesses are named as people know them (1.522726ms)
2026-10-14T23:45:21.8144908Z ✔ a claim says when it lapses; one that ended says nothing (1.824459ms)
2026-10-14T23:45:21.8154884Z ✔ live work is grouped by issue, most recent first, with sessions on no issue apart (1.290978ms)
2026-10-14T23:45:21.8181603Z ✔ sessions on no issue are grouped by pull request, then by a branch of their own, then the rest together (0.432709ms)
2026-10-14T23:45:21.8181905Z ✔ a session is never title-less: its title, its first prompt's intent, its branch, or untitled (2.08498ms)
2026-10-14T23:45:21.8181980Z ✔ a prompt's intent is its first line or sentence, plain, clipped on a word (0.568483ms)
2026-10-14T23:45:21.8182016Z ✔ evidence is read as far as it goes (0.563796ms)
2026-10-14T23:45:21.8182119Z ✔ a failure stands until the pull request passes in the queue or merges, and a fix after it answers it (0.458798ms)
2026-10-14T23:45:21.8182202Z ✔ coordination events read as lines of the feed (2.364219ms)
2026-10-14T23:45:21.8184826Z ✔ sessions become trees by their parents; one whose parent is missing is a root (0.891438ms)
2026-10-14T23:45:21.8192203Z ✔ how a session was tied to its work, what it touched, and how long it ran (0.449234ms)
2026-10-14T23:45:21.8199097Z ✔ numbers in a sentence are found for linking (0.329355ms)
2026-10-14T23:45:21.8206051Z ✔ blocked_by is typed as numbers (0.367461ms)
2026-10-14T23:45:21.8213687Z ✔ a session's pending updates read as the feed does, leaving out what it does not show (0.325248ms)
2026-10-14T23:45:22.0094810Z ✔ an answer in time is passed through (1.685991ms)
2026-10-14T23:45:22.2416565Z ✔ a call that never answers fails at its deadline, and its signal aborts (21.590952ms)
2026-10-14T23:45:22.2416698Z ✔ a call that ignores its signal is still let go (10.290248ms)
2026-10-14T23:45:22.2416773Z ✔ a failure in time is the call's own, not a deadline (0.54603ms)
2026-10-14T23:45:22.2416816Z ✔ the caller's own signal aborts the call (0.709906ms)
2026-10-14T23:45:22.2416849Z ✔ each call gets the time its work needs (0.292129ms)
2026-10-14T23:45:22.2417052Z ✔ a long method of one service is not long in another (0.197857ms)
2026-10-14T23:45:22.2417121Z ✔ no read outlasts the browser's patience with a navigation (0.264347ms)
2026-10-14T23:45:22.2417154Z ✔ a next run is said as a time ahead (1.453342ms)
2026-10-14T23:45:22.2417173Z ✔ an entry's status (1.247793ms)
2026-10-14T23:45:22.2417185Z ✔ rules read as one line (0.675534ms)
2026-10-14T23:45:22.2417215Z ✔ only live update pull requests are listed (0.3396ms)
2026-10-14T23:45:22.2926426Z ✔ what a build found is said with what it was built with (0.870537ms)
2026-10-14T23:45:22.2930795Z ✔ a container size reads plainly (0.281613ms)
2026-10-14T23:45:22.4546693Z ✔ a commit that is gone is said plainly, naming the pull request (1.457057ms)
2026-10-14T23:45:22.4546848Z ✔ a run of the same failure of one app is one row, counted, linking to the newest (1.339801ms)
2026-10-14T23:45:22.4547188Z ✔ other apps' builds in between do not break a run; a different error does (0.578869ms)
2026-10-14T23:45:22.4547927Z ✔ builds that did not fail are never folded (0.242694ms)
2026-10-14T23:45:22.4548200Z ✔ environments list production first, then lasting ones, then previews, newest first in each (0.311278ms)
2026-10-14T23:45:22.4548309Z ✔ production is the production environment that has had a deployment, named production first (2.031049ms)
2026-10-14T23:45:22.4548813Z ✔ an environment is served at its own address, else its current deployment's (0.231908ms)
2026-10-14T23:45:22.4549123Z ✔ the list's filter is read from the address, ignoring what it cannot be (0.4202ms)
2026-10-14T23:45:22.4549446Z ✔ changing a filter keeps the others and starts again from the first page (0.635364ms)
2026-10-14T23:45:22.4549694Z ✔ a filter's choices are each value once, sorted, keeping the chosen one (8.920361ms)
2026-10-14T23:45:22.4549966Z ✔ words for states, sources, environments and pages (0.375854ms)
2026-10-14T23:45:22.4550319Z ✔ only a deployment's newest status can still be under way (0.209695ms)
2026-10-14T23:45:22.6247704Z ✔ a report carries the app's words, without its buttons or log (1.700793ms)
2026-10-14T23:45:22.6258593Z ✔ a report goes when what the page shows changes, and as a heartbeat (0.443086ms)
2026-10-14T23:45:22.6258867Z ✔ a sandboxed desktop reports each kind of job, without its buttons (0.803226ms)
2026-10-14T23:45:22.6259992Z ✔ each kind of job reports its state, whether the person stopped it, and its job, without what only works here (0.653201ms)
2026-10-14T23:45:22.6260093Z ✔ a kind of job's work links to its run when the runner says which (0.308863ms)
2026-10-14T23:45:22.6260175Z ✔ only a diagnosis and a backend the app makes are kept (0.242845ms)
2026-10-14T23:45:22.6260549Z ✔ a report says how the runner's updates stand, without the app's own words and button (0.687421ms)
2026-10-14T23:45:22.7701389Z ✔ a change is saved over the settings as the app has them, and nothing else (2.232511ms)
2026-10-14T23:45:22.7710029Z ✔ the app opens the section it names, or the first (0.198378ms)
2026-10-14T23:45:22.7729314Z ✔ updates say where this copy stands (16.166459ms)
2026-10-14T23:45:22.7729390Z ✔ a failed check says why in a line (0.568544ms)
2026-10-14T23:45:22.9225564Z ✔ the desktop app is known by its cookie (29.763521ms)
2026-10-14T23:45:22.9233473Z ✔ the launcher opens the site with ?app=desktop (0.247381ms)
2026-10-14T23:45:23.0923374Z ✔ developer mode is on only for the cookie's own value (0.907092ms)
2026-10-14T23:45:23.3315340Z ✔ the cookie keeps the choice for a year, and turning it off forgets it (0.247161ms)
2026-10-14T23:45:23.3315472Z ✔ the server's own errors go only to someone signed in who turned it on (31.333117ms)
2026-10-14T23:45:23.3315505Z ✔ whatever was thrown is described (1.524158ms)
2026-10-14T23:45:23.3315600Z ✔ one report says what failed, where, when and on which build (0.811028ms)
2026-10-14T23:45:23.3315677Z ✔ files asked for together are fetched in one request, and once (63.525073ms)
2026-10-14T23:45:23.3315715Z ✔ many files at once go 20 to a request (33.280661ms)
2026-10-14T23:45:23.3727969Z ✔ the files after one come with it, and are not asked for again (62.46359ms)
2026-10-14T23:45:23.4353394Z ✔ a failed fetch is an error, and is tried again when asked again (62.824601ms)
2026-10-14T23:45:23.8168468Z ✔ a highlighted file's HTML, kept apart and given back, is the same highlighted file (192.126547ms)
2026-10-14T23:45:23.8183943Z ✔ lines without HTML stay without it (0.309414ms)
2026-10-14T23:45:23.8184084Z ✔ what a file's colours depend on: each line's side and text, not its numbers or path (0.414783ms)
2026-10-14T23:45:23.8184282Z ✔ a small change is sent whole (0.476335ms)
2026-10-14T23:45:23.8184951Z ✔ past the first screens' lines, files are sent with their counts but not their lines (1.086751ms)
2026-10-14T23:45:23.8185152Z ✔ a very large file waits to be asked for, and does not hold back the files after it (2.839493ms)
2026-10-14T23:45:23.8185236Z ✔ files with comments keep their lines wherever they are, however large (0.639791ms)
2026-10-14T23:45:23.8185500Z ✔ files the comparison left out wait with no counts; binary files are as they were (0.193069ms)
2026-10-14T23:45:23.8185728Z ✔ a link to a file names it by path, encoded or not, and only a file of the change (0.398588ms)
2026-10-14T23:45:23.9591694Z ✔ a User-Agent names the visitor's platform, phones first (2.722266ms)
2026-10-14T23:45:23.9603400Z ✔ client hints name the processor (0.297066ms)
2026-10-14T23:45:23.9613820Z ✔ the file offered first is the platform's preferred kind, on the visitor's processor (0.584037ms)
2026-10-14T23:45:24.1133853Z ✔ the primary cannot be removed, and only a confirmed address can become it (1.70585ms)
2026-10-14T23:45:24.3980398Z ✔ the last confirmed address stays, even when it is not the primary (0.23266ms)
2026-10-14T23:45:24.3980534Z ✔ the backup is a confirmed address other than the primary (0.259059ms)
2026-10-14T23:45:24.3980629Z ✔ a change waiting on the password keeps its fields but never the password (26.243126ms)
2026-10-14T23:45:24.3980675Z ✔ the emoji data is complete and small (2.415526ms)
2026-10-14T23:45:24.3980750Z ✔ search finds by shortcode first, then name, then keyword (32.484736ms)
2026-10-14T23:45:24.3980839Z ✔ the workspace's own emoji are found by name, ahead of standard ones as good (11.92374ms)
2026-10-14T23:45:24.3980905Z ✔ skin tones apply where an emoji has them (0.367061ms)
2026-10-14T23:45:24.3981003Z ✔ a new emoji's name: its shape, standard ones and taken ones (1.890328ms)
2026-10-14T23:45:24.3981082Z ✔ a :name being typed is offered for completion, but not in links or times (0.499379ms)
2026-10-14T23:45:24.3981167Z ✔ :name: becomes the workspace's emoji in text; anything else stays (0.999831ms)
2026-10-14T23:45:24.3981243Z ✔ reacting shows at once, and taking it back undoes it (0.467993ms)
2026-10-14T23:45:24.3981323Z ✔ the room's reaction events count others once, and the viewer's own never twice (0.567572ms)
2026-10-14T23:45:24.3981394Z ✔ a message from the room keeps the viewer's own reactions marked (0.358559ms)
2026-10-14T23:45:24.3981418Z ✔ who reacted reads as a sentence (0.27303ms)
2026-10-14T23:45:24.3981490Z ✔ recent emoji: newest first, each once, a few (0.207331ms)
2026-10-14T23:45:24.5281419Z ✔ an environment's name is lowercased, and anything else is refused (1.311018ms)
2026-10-14T23:45:24.5281647Z ✔ a form's rules: reviewers in order without blanks or repeats, patterns only for selected branches (31.607589ms)
2026-10-14T23:45:24.5290479Z ✔ a form past the limits says what is wrong (15.822383ms)
2026-10-14T23:45:24.5290807Z ✔ an environment's rules in a few words (0.581122ms)
2026-10-14T23:45:24.6854856Z ✔ the tree orders each level and lifts folios whose parent isn't there (1.92498ms)
2026-10-14T23:45:24.6855023Z ✔ the home list groups by the viewer's day: Today, Yesterday, then dates (19.127934ms)
2026-10-14T23:45:24.6855096Z ✔ chat messages name the artifacts they link to, in this workspace only (0.606931ms)
2026-10-14T23:45:24.6855120Z ✔ snippets mark their matches (0.422224ms)
2026-10-14T23:45:24.6855151Z ✔ covers, colours, roles, reading time (1.589887ms)
2026-10-14T23:45:24.6855217Z ✔ a citation links to its code, a glob to the folder it starts from (0.435594ms)
2026-10-14T23:45:24.6855284Z ✔ a project's docs become folders, and spaces and files have addresses under Artifacts (2.042146ms)
2026-10-14T23:45:24.8633406Z ✔ a limit lets requests through until it is reached (1.403557ms)
2026-10-14T23:45:24.8636557Z ✔ a missing or failing binding fails open (32.508081ms)
2026-10-14T23:45:24.8718130Z ✔ secrets are keyed by a short hash, never as they are (12.022047ms)
2026-10-14T23:45:24.8722153Z ✔ git without credentials is limited by address, with a message git shows (4.893946ms)
2026-10-14T23:45:24.8760666Z ✔ git with credentials counts by a hash of them, apart from the address (2.055356ms)
2026-10-14T23:45:24.8778407Z ✔ signed-out pages count by address, and costly ones against a tighter limit too (2.163097ms)
2026-10-14T23:45:24.8796367Z ✔ signed-in requests count by session, and every request by address (3.243168ms)
2026-10-14T23:45:24.8887465Z ✔ requests with an access token count by a hash of the token, at the API's limit (4.202039ms)
2026-10-14T23:45:24.8890256Z ✔ files the Worker serves itself are never limited (0.880802ms)
2026-10-14T23:45:24.8896265Z ✔ costly pages are recognised (0.530416ms)
2026-10-14T23:45:24.8897735Z ✔ the session cookie is read from among others (0.189805ms)
2026-10-14T23:45:24.8899087Z ✔ every wrangler.jsonc declares the rate limits RATE_LIMITS lists, and only those (2.459022ms)
2026-10-14T23:45:24.8900207Z ✔ repository files on the usercontent origin count per address; avatars do not (0.773221ms)
2026-10-14T23:45:24.8901902Z ✔ a signed archive link is known by its token, and only on an archive (0.197236ms)
2026-10-14T23:45:25.0408387Z ✔ an answer streams into its message, then the stored one takes over (1.622275ms)
2026-10-14T23:45:25.0412629Z ✔ other conversations, thread replies and deletions (1.029676ms)
2026-10-14T23:45:25.0424330Z ✔ a cleared conversation empties, and only that one (0.394382ms)
2026-10-14T23:45:25.0425647Z ✔ /clear, typed to g1t, is the command and nothing else is (0.237437ms)
2026-10-14T23:45:25.0426550Z ✔ who g1t is, and answers cut off at their limit (0.289905ms)
2026-10-14T23:45:25.0427794Z ✔ suggestions fit the page (0.397657ms)
2026-10-14T23:45:25.0431167Z ✔ links into the site show as what they lead to (1.257288ms)
2026-10-14T23:45:25.0433250Z ✔ a question asked on a page says which, and one written in Chat says nothing (0.408984ms)
2026-10-14T23:45:25.1947617Z ✔ the state must come back exactly as it was given (7.919989ms)
2026-10-14T23:45:25.4288201Z ✔ cookies are read by name, and odd values are ignored (0.451477ms)
2026-10-14T23:45:25.4288355Z ✔ an installation returns to the workspace it was started for (0.309385ms)
2026-10-14T23:45:25.4288452Z ✔ an installation made on GitHub directly is offered to the workspaces that lack it (0.901944ms)
2026-10-14T23:45:25.4288533Z ✔ the setup page offers only workspaces the person owns, saying which have it (0.431178ms)
2026-10-14T23:45:25.4288617Z ✔ once an installation is recorded, Integrations says GitHub is connected (0.318628ms)
2026-10-14T23:45:25.4288688Z ✔ Connect GitHub links first, adds what is there, and installs only when nothing is (0.374822ms)
2026-10-14T23:45:25.4288752Z ✔ go get finds a repository's code from its address and any package in it (1.813543ms)
2026-10-14T23:45:25.4288818Z ✔ only go-get requests for a repository's address are answered (0.404387ms)
2026-10-14T23:45:25.4999993Z ✔ an untouched form inherits everything (32.311586ms)
2026-10-14T23:45:25.5000188Z ✔ time caps of a level's own are kept, and nothing else is sent (0.489905ms)
2026-10-14T23:45:25.5015655Z ✔ nonsense is passed on for the service to refuse (0.277957ms)
2026-10-14T23:45:25.7696307Z ✔ Code's needs become rows with what is at stake (2.001504ms)
2026-10-14T23:45:25.7696505Z ✔ Start here: the most pressing tier first, then what has waited longest (1.694764ms)
2026-10-14T23:45:25.7697846Z ✔ the same order whatever order the rows came in (9.913592ms)
2026-10-14T23:45:25.7698889Z ✔ notifications: warnings and failures in this workspace; none about repositories without Code (0.795243ms)
2026-10-14T23:45:25.7699583Z ✔ a notification about something already listed is left out (0.597887ms)
2026-10-14T23:45:25.7709426Z ✔ without Code access no Code row is asked for or shown, and a silent source is named (0.505539ms)
2026-10-14T23:45:25.7709823Z ✔ chat: mentions anywhere and unread direct messages, never muted (0.424747ms)
2026-10-14T23:45:25.7709841Z ✔ a day is the reader's day (9.433912ms)
2026-10-14T23:45:25.7709902Z ✔ since your last visit, in words, in the reader's time zone (8.839701ms)
2026-10-14T23:45:25.7709913Z ✔ how long a span is (1.648415ms)
2026-10-14T23:45:25.7709969Z ✔ the span: since your last visit, capped, or a fixed window (0.928534ms)
2026-10-14T23:45:25.7710031Z ✔ an actor is not a person when it is g1t or an agent of older rows; everyone else is (0.263626ms)
2026-10-14T23:45:25.7710086Z ✔ the digest: what people did, in lines with counts, and who (2.422847ms)
2026-10-14T23:45:25.7711312Z ✔ the digest says which part didn't answer, and counts what could be read (1.963217ms)
2026-10-14T23:45:25.7713133Z ✔ the sentence: people first, then what landed; honest when quiet or unread (1.166611ms)
2026-10-14T23:45:25.7715137Z ✔ what landed: every merge in the span, newest first, g1t's older ones as @g1t (0.506861ms)
2026-10-14T23:45:25.7721202Z ✔ what landed, besides merges: direct pushes, releases, packages and production builds, newest first (0.997468ms)
2026-10-14T23:45:25.7732273Z ✔ builds that finished in the span: live or failed, never skipped (1.808435ms)
2026-10-14T23:45:25.7744594Z ✔ running now: workflow runs and builds going (0.95908ms)
2026-10-14T23:45:25.7749031Z ✔ the span's months: one, or the ones it crosses (0.329945ms)
2026-10-14T23:45:25.7758403Z ✔ spend in the span: the UTC days it covers across months, at price, without money in (0.781874ms)
2026-10-14T23:45:25.7758708Z ✔ each merge and push says whether it is live, from what deployments recorded (0.896045ms)
2026-10-14T23:45:25.7760161Z ✔ a change made in a harness session carries the agent mark, linked to the session (1.018589ms)
2026-10-14T23:45:25.7761447Z ✔ each person's push to a default branch is a row: its commit, who pushed, and its session (0.786191ms)
2026-10-14T23:45:25.7763668Z ✔ what landed over the week reads day by day, newest first (0.973911ms)
2026-10-14T23:45:25.7773505Z ✔ while you were away: what settled by itself, what shipped, and what still needs you (0.818269ms)
2026-10-14T23:45:25.9524885Z ✔ the card is the public profile, signed out too (2.69088ms)
2026-10-14T23:45:25.9531385Z ✔ a private workspace is hidden from someone outside it (1.535045ms)
2026-10-14T23:45:25.9542726Z ✔ commits to a repository show only to those who may read it (1.088734ms)
2026-10-14T23:45:25.9543149Z ✔ the card carries the time zone a profile gives, and none when it gives none (0.442224ms)
2026-10-14T23:45:25.9554081Z ✔ a failing service leaves its part out, not the card (0.564136ms)
2026-10-14T23:45:25.9560044Z ✔ g1t has its own card; ghost and strangers have none (2.126903ms)
2026-10-14T23:45:25.9565011Z ✔ workspaces past three are counted (0.37342ms)
2026-10-14T23:45:25.9570887Z ✔ how recently, in the words the card uses (0.282694ms)
2026-10-14T23:45:25.9584169Z ✔ the card's address and its repository (0.509094ms)
2026-10-14T23:45:26.2033072Z ✔ tabs read from the address, and each shows one severity (1.570898ms)
2026-10-14T23:45:26.4605863Z ✔ counts are what is unread under each tab (0.236034ms)
2026-10-14T23:45:26.4605937Z ✔ the bell shows a number up to 99 (0.194462ms)
2026-10-14T23:45:26.4605976Z ✔ times are said in a few characters (19.550339ms)
2026-10-14T23:45:26.4606100Z ✔ a snooze is for later, by one of a few choices (0.711198ms)
2026-10-14T23:45:26.4606188Z ✔ forms ask for one mark on one item, or read for every item (34.816586ms)
2026-10-14T23:45:26.4606280Z ✔ what needs you puts what waits on you before a failure, and leaves out the rest (1.17248ms)
2026-10-14T23:45:26.4606322Z ✔ every tab says something when it is empty (0.2398ms)
2026-10-14T23:45:26.4606401Z ✔ every reason has words, a filter and an email choice (0.341462ms)
2026-10-14T23:45:26.4606484Z ✔ a thread says how much happened on it once more than one thing has (0.322404ms)
2026-10-14T23:45:26.4606559Z ✔ a done item that settled by itself says why, and who did it (0.382855ms)
2026-10-14T23:45:26.4606723Z ✔ watching is read from the menu, and a custom watch of nothing is the default (0.783186ms)
2026-10-14T23:45:26.4606794Z ✔ the subscribe button says whether, and why (2.59127ms)
2026-10-14T23:45:26.4606868Z ✔ email reasons are read from the settings form in rank order (0.26001ms)
2026-10-14T23:45:26.4606948Z ✔ security alerts that are not urgent reach people as they choose, daily until they do (0.342434ms)
2026-10-14T23:45:26.4607017Z ✔ bold, italic, code and links read as marks (2.293243ms)
2026-10-14T23:45:26.4607045Z ✔ what is not a mark stays as written (0.330536ms)
2026-10-14T23:45:26.4607069Z ✔ the plain words, for a tooltip (0.291468ms)
2026-10-14T23:45:26.5582318Z ✔ the Invitations page sorts every state under one filter, and counts them (2.655627ms)
2026-10-14T23:45:26.5584184Z ✔ the Members page filters by role, two-factor, team and words (3.364801ms)
2026-10-14T23:45:26.5585781Z ✔ everyone is offered a plain sign-up (0.317226ms)
2026-10-14T23:45:26.5597974Z ✔ an invite link is on g1t.sh unless told otherwise (0.2867ms)
2026-10-14T23:45:26.5598133Z ✔ an invite email's proof is kept only when it looks like one, and goes along to the invite's page (0.535083ms)
2026-10-14T23:45:26.5598235Z ✔ signing up from the invite email says the address is confirmed already; otherwise the code step applies (0.615284ms)
2026-10-14T23:45:26.5599097Z ✔ a pasted link or code is tidied to the code (1.068414ms)
2026-10-14T23:45:26.5682951Z ✔ each invite says where it stands and whom it is for (0.526921ms)
2026-10-14T23:45:26.5700026Z ✔ bots that fill the hidden field or answer instantly are turned away (0.336905ms)
2026-10-14T23:45:26.5700188Z ✔ a username is suggested from the invited address (0.444106ms)
2026-10-14T23:45:26.5700291Z ✔ an invite lands in its workspace, else its repository (0.206881ms)
2026-10-14T23:45:26.5700326Z ✔ the welcome is for one place, and ends (0.63263ms)
2026-10-14T23:45:26.5700349Z ✔ the two invites say which they are (0.284267ms)
2026-10-14T23:45:26.5700379Z ✔ an invite's page names the invite it is (0.432248ms)
2026-10-14T23:45:26.5700436Z ✔ Invite a friend never reads as a gate on signing up (0.327801ms)
2026-10-14T23:45:26.5700507Z ✔ a friend can also be invited only to a paid workspace the person owns (0.337747ms)
2026-10-14T23:45:26.5700589Z ✔ the form sends a workspace only when its box is ticked and it was offered (0.320501ms)
2026-10-14T23:45:26.5700642Z ✔ how many invites are left reads plainly, and the menu shows the count (0.183186ms)
2026-10-14T23:45:26.5700719Z ✔ only a pending invite is sent again or copied; one waiting on its friend can still be revoked (0.231488ms)
2026-10-14T23:45:26.7135742Z ✔ colors are six hex digits however they were written (1.289566ms)
2026-10-14T23:45:26.7144553Z ✔ a chip is tinted with its label's color, and neutral without one (1.097118ms)
2026-10-14T23:45:26.7152599Z ✔ labels are found by name or description (0.545198ms)
2026-10-14T23:45:26.7162608Z ✔ a milestone's progress and due date read as words (0.421012ms)
2026-10-14T23:45:26.7162692Z ✔ filters come from the address, and q wins (0.564507ms)
2026-10-14T23:45:26.7163694Z ✔ changing one filter keeps the others (0.296285ms)
2026-10-14T23:45:26.9470219Z ✔ the copyright year is computed, in UTC (1.334784ms)
2026-10-14T23:45:26.9470400Z ✔ the legal line names the company and the year (0.224677ms)
2026-10-14T23:45:26.9476861Z ✔ products are listed the way a sentence lists them (0.265348ms)
2026-10-14T23:45:26.9481432Z ✔ policy dates read as words (0.303845ms)
2026-10-14T23:45:26.9600845Z ✔ every policy has its own address (0.505999ms)
2026-10-14T23:45:26.9601030Z ✔ security.txt has the fields RFC 9116 asks for, and expires within a year (0.816045ms)
2026-10-14T23:45:27.1153910Z ✔ one line and a run of lines are read from the fragment (2.448987ms)
2026-10-14T23:45:27.1177821Z ✔ a run written backwards is put in order (0.277726ms)
2026-10-14T23:45:27.1180476Z ✔ anything else names no lines (0.324517ms)
2026-10-14T23:45:27.1197674Z ✔ a run is held to the file's length (0.28616ms)
2026-10-14T23:45:27.1197744Z ✔ a run is written back the way it is read (0.30607ms)
2026-10-14T23:45:27.1197849Z ✔ a pick is one line; a shift-pick runs from the line already picked (0.524858ms)
2026-10-14T23:45:27.1197936Z ✔ a line is in the run when it is between its ends (0.229064ms)
2026-10-14T23:45:27.2798075Z ✔ the end above the window's bottom edge is in view (1.596286ms)
2026-10-14T23:45:27.5598285Z ✔ an end one row below the edge is not reached: following stops there (0.313641ms)
2026-10-14T23:45:27.5598409Z ✔ what covers the bottom of the window hides the end: a phone's tab bar (0.234472ms)
2026-10-14T23:45:27.5598437Z ✔ a folded step has no end to follow (0.204437ms)
2026-10-14T23:45:27.6507243Z ✔ a log read chunk by chunk is the log read at once, wherever the chunks fall (25.89916ms)
2026-10-14T23:45:27.6507396Z ✔ a group a chunk leaves open holds the next chunk's lines (0.414642ms)
2026-10-14T23:45:27.6507493Z ✔ a line still being written shows, and is read once it ends (0.469314ms)
2026-10-14T23:45:27.6507566Z ✔ reading a long log chunk by chunk reads each line once (157.42222ms)
2026-10-14T23:45:27.6507645Z ✔ a log's rows are its lines and groups' titles, open groups' lines under them (0.624557ms)
2026-10-14T23:45:27.6507719Z ✔ a log reads as lines and folded groups, numbered past the group markers (0.290887ms)
2026-10-14T23:45:27.6509454Z ✔ search finds lines in any case, inside folded groups too (0.352399ms)
2026-10-14T23:45:27.6511081Z ✔ matches are marked where they fall (0.307742ms)
2026-10-14T23:45:27.6511679Z ✔ a run's archive has each job whole and a file per step, named as the API names them (1.154764ms)
2026-10-14T23:45:27.6512807Z ✔ each line's time comes off the front, as GitHub's logs stamp it, and colours stay beside the plain text (1.282435ms)
2026-10-14T23:45:27.8171165Z ✔ a live job is asked every second while a step runs, less often while none does (1.744179ms)
2026-10-14T23:45:27.8177631Z ✔ a failed answer is tried again, waiting longer each time, never stopping a live log (0.377297ms)
2026-10-14T23:45:27.8214196Z ✔ a 429 waits as long as Retry-After says; a 404 stops; a finished job's last fetch gives up (0.390656ms)
2026-10-14T23:45:27.8214447Z ✔ a quiet step says for how long it has printed nothing (0.282604ms)
2026-10-14T23:45:27.8214498Z ✔ Retry-After reads as seconds or as a date (0.279579ms)
2026-10-14T23:45:27.9468621Z ✔ rows start where the rows above them end, measured or not (2.132552ms)
2026-10-14T23:45:27.9483529Z ✔ only the rows on screen and a little around them are drawn (3.280805ms)
2026-10-14T23:45:28.0760289Z ✔ @name links to the person or workspace (2.824801ms)
2026-10-14T23:45:28.0766895Z ✔ @g1t is g1t's agent, never the workspace alias at /g1t (0.428784ms)
2026-10-14T23:45:28.0773928Z ✔ @workspace/team links to the team (0.486801ms)
2026-10-14T23:45:28.0808115Z ✔ issues and pull requests still link (0.252619ms)
2026-10-14T23:45:29.1307020Z ✔ README.md: the kept tree renders exactly what react-markdown renders (247.718412ms)
2026-10-14T23:45:29.1347365Z ✔ apps/docs/src/content/docs/guides/deploy-to-cloudflare.md: the kept tree renders exactly what react-markdown renders (245.130647ms)
2026-10-14T23:45:29.1348298Z ✔ CONTRIBUTING.md: the kept tree renders exactly what react-markdown renders (177.141592ms)
2026-10-14T23:45:29.1348841Z ✔ edge cases: the kept tree renders exactly what react-markdown renders (32.251276ms)
2026-10-14T23:45:29.1349360Z ✔ empty: the kept tree renders exactly what react-markdown renders (5.627238ms)
2026-10-14T23:45:29.2797048Z ✔ with no handles nothing is offered (1.40541ms)
2026-10-14T23:45:29.2797255Z ✔ teams complete from the workspace or from their own name (1.330767ms)
2026-10-14T23:45:29.2798127Z ✔ at most five, and nothing once one is typed in full (0.289644ms)
2026-10-14T23:45:29.4485408Z ✔ a merge commit names where it came from by default (2.067033ms)
2026-10-14T23:45:29.7191866Z ✔ a squash lists its commits when it has more than one (0.508063ms)
2026-10-14T23:45:29.7192305Z ✔ a template is filled in once (1.114964ms)
2026-10-14T23:45:29.7192377Z ✔ a message splits into title and body (0.243025ms)
2026-10-14T23:45:29.7192469Z ✔ the sample pull request previews as the server writes it (0.333381ms)
2026-10-14T23:45:29.7192544Z ✔ choices from settings leave the message to the service (0.33951ms)
2026-10-14T23:45:29.7192627Z ✔ the allowed methods follow the settings, fast-forward included (0.305198ms)
2026-10-14T23:45:29.7192699Z ✔ a page gets its title, description, Open Graph and Twitter tags (1.850708ms)
2026-10-14T23:45:29.7192783Z ✔ pages under a project describe the project, and their card follows its details (0.700812ms)
2026-10-14T23:45:29.7192862Z ✔ a page's address and card come from the root loader's addresses (0.258238ms)
2026-10-14T23:45:29.7195306Z ✔ without a card service, a page has no image tags (0.257978ms)
2026-10-14T23:45:29.7195426Z ✔ with nothing particular to say, a page says what g1t is (0.271247ms)
2026-10-14T23:45:29.7195492Z ✔ a card's version changes with what it shows (0.296105ms)
2026-10-14T23:45:29.7195570Z ✔ every card address carries the render version, so a new design is a new address (0.299509ms)
2026-10-14T23:45:29.7195642Z ✔ an excerpt is plain text from the start of the Markdown (1.847314ms)
2026-10-14T23:45:29.7844451Z ✔ each kind of need gets its reason chip (1.655966ms)
2026-10-14T23:45:29.7846665Z ✔ why a need needs a person is said for every reason (0.430907ms)
2026-10-14T23:45:29.7848035Z ✔ what is known lists only what is known (18.519121ms)
2026-10-14T23:45:29.7854445Z ✔ the required checks are read from the pull request's check status (0.204237ms)
2026-10-14T23:45:29.7857279Z ✔ test files are recognised by the names test runners use (0.32592ms)
2026-10-14T23:45:29.7858730Z ✔ a push to the default branch counts a person's own commits, not merges or g1t's (0.41951ms)
2026-10-14T23:45:29.7860093Z ✔ who pushed is the account that signed in, not the name on the commits (0.48675ms)
2026-10-14T23:45:29.7862037Z ✔ a short read of the branch is enough when it reaches the oldest push (0.374742ms)
2026-10-14T23:45:29.7865263Z ✔ each push to the default branch places the commits it brought, at its time, from one read of the history (0.39286ms)
2026-10-14T23:45:29.7866188Z ✔ a change merged automatically when g1t merged it (0.46652ms)
2026-10-14T23:45:29.7868977Z ✔ the week is seven days of landed changes, with the week before (8.180481ms)
2026-10-14T23:45:29.7870365Z ✔ days follow the viewer's time zone (3.258552ms)
2026-10-14T23:45:29.7898023Z ✔ the change from last week, and how it reads (0.201863ms)
2026-10-14T23:45:29.7898702Z ✔ a repository's merged list reaches back when it is not full or its oldest is old enough (0.306811ms)
2026-10-14T23:45:29.7899377Z ✔ landed today is the viewer's calendar day, newest first (1.046391ms)
2026-10-14T23:45:29.7899948Z ✔ tabs and sorting come from the address (0.322965ms)
2026-10-14T23:45:29.7900496Z ✔ the summary says the week plainly (0.59256ms)
2026-10-14T23:45:29.7901119Z ✔ a job waiting for a self-hosted runner says so (0.221413ms)
2026-10-14T23:45:29.9623020Z ✔ a first visit has nothing to count from and starts the clock (2.528776ms)
2026-10-14T23:45:29.9623181Z ✔ views within a visit keep counting from the visit before (1.594874ms)
2026-10-14T23:45:29.9635748Z ✔ a long gap starts a new visit, counting from the last view (0.241002ms)
2026-10-14T23:45:29.9636311Z ✔ a cookie from the future is ignored (0.178378ms)
2026-10-14T23:45:29.9636335Z ✔ cookies are read by name (0.272249ms)
2026-10-14T23:45:29.9636525Z ✔ greetings follow the hour, in the viewer's zone (16.800801ms)
2026-10-14T23:45:29.9636596Z ✔ one person's burst in one project reads as one line (0.971478ms)
2026-10-14T23:45:29.9636671Z ✔ a burst breaks across projects and long gaps (0.275063ms)
2026-10-14T23:45:29.9639454Z ✔ needs are ranked by urgency, then by how long they waited (0.482234ms)
2026-10-14T23:45:29.9641331Z ✔ a running run quiet for ten minutes is stuck (0.524998ms)
2026-10-14T23:45:29.9644369Z ✔ daily buckets put each point on its day, oldest first (0.251267ms)
2026-10-14T23:45:29.9647094Z ✔ median, pass rates and spans (0.736396ms)
2026-10-14T23:45:29.9656112Z ✔ issue to merge pairs a merge with the issue it resolved (0.201803ms)
2026-10-14T23:45:29.9658176Z ✔ sparkline points span the box, zero on the floor (0.244366ms)
2026-10-14T23:45:29.9660357Z ✔ open issues by age (0.357136ms)
2026-10-14T23:45:29.9664999Z ✔ the feed names people, not account ids (0.327111ms)
2026-10-14T23:45:29.9667229Z ✔ a workspace acting as itself is g1t, never a person named after the workspace (0.361503ms)
2026-10-14T23:45:29.9669458Z ✔ waits read in the largest whole unit (0.183295ms)
2026-10-14T23:45:29.9671736Z ✔ a production deploy that finished is a line, linked to it on the current path (0.435494ms)
2026-10-14T23:45:30.1305716Z ✔ money rounds half up at the cent on whole micros, never on a float (1.656938ms)
2026-10-14T23:45:30.1331677Z ✔ a fraction of a cent reads <$0.01, and exactly nothing reads $0.00 (0.265549ms)
2026-10-14T23:45:30.1331756Z ✔ negatives lead with a minus sign (0.2601ms)
2026-10-14T23:45:30.1331854Z ✔ precise shows up to four places, trimmed down to two (0.357957ms)
2026-10-14T23:45:30.1331877Z ✔ compact is an axis label (0.27949ms)
2026-10-14T23:45:30.1331960Z ✔ whole dollars drop the cents only when there are none (0.221062ms)
2026-10-14T23:45:30.1332033Z ✔ form fields read plain dollars, rounded the same way (0.182655ms)
2026-10-14T23:45:30.1332121Z ✔ dollars from a service that counts in dollars become whole micros (0.143295ms)
2026-10-14T23:45:30.2998558Z ✔ a path on g1t is kept, with its query and fragment (1.315575ms)
2026-10-14T23:45:30.2999588Z ✔ anything that could leave g1t goes home instead (0.317787ms)
2026-10-14T23:45:30.3006690Z ✔ sign in and sign up links carry where to come back to (0.260491ms)
2026-10-14T23:45:30.4945808Z ✔ finds a title on an element, not on a component's own prop or inside an expression (2.336878ms)
2026-10-14T23:45:30.7620901Z ✔ no native title hints in apps/web (51.583887ms)
2026-10-14T23:45:30.7621074Z ✔ the kind a loader names wins over the address (1.007202ms)
2026-10-14T23:45:30.7621180Z ✔ without one, the shape of the address decides (0.317326ms)
2026-10-14T23:45:30.7621307Z ✔ signed out: nothing here, which may be private, and sign in if it is yours (0.2531ms)
2026-10-14T23:45:30.7621393Z ✔ signed in: it does not exist or you cannot see it, and who you are (0.240131ms)
2026-10-14T23:45:30.7621473Z ✔ a missing person is simply no one, signed in or not (0.248583ms)
2026-10-14T23:45:30.7621544Z ✔ the page depends only on the kind and the viewer (1.025369ms)
2026-10-14T23:45:30.7738058Z ✔ toasts: newest last, at most three, never twice (2.23118ms)
2026-10-14T23:45:30.7739787Z ✔ a newer message in the same conversation replaces its toast (0.342114ms)
2026-10-14T23:45:30.7743714Z ✔ no toast for the conversation on screen, by page or by channel; inbox items always (0.438799ms)
2026-10-14T23:45:30.7745204Z ✔ quick replies post to the conversation, in its thread when there is one (0.384988ms)
2026-10-14T23:45:30.7748184Z ✔ badges: chat only once the feed's counts are complete; the inbox whenever known (0.524958ms)
2026-10-14T23:45:30.7755271Z ✔ reading a conversation here zeroes it at once (0.25338ms)
2026-10-14T23:45:30.7757575Z ✔ the sidebar takes the feed's counts once they are complete, and spots conversations it does not list (0.490226ms)
2026-10-14T23:45:30.7759962Z ✔ the tab title counts what needs you, once (0.371868ms)
2026-10-14T23:45:30.7762665Z ✔ browser notifications are offered once, after a DM or mention, never after a no (0.317517ms)
2026-10-14T23:45:30.7765588Z ✔ reconnecting waits a jittered, growing time, never past half a minute (0.435593ms)
2026-10-14T23:45:30.7768408Z ✔ a stack taller than the screen folds its oldest toasts into a pill, never the newest (0.297056ms)
2026-10-14T23:45:30.7771200Z ✔ a card's notification offers its links alone: nothing answers its other buttons (0.189695ms)
2026-10-14T23:45:30.7774170Z ✔ recent notifications are kept newest first, once each (0.645058ms)
2026-10-14T23:45:30.7776918Z ✔ the panel waits on the newest notification per card, for a day, until it is acted on (0.518889ms)
2026-10-14T23:45:30.7780989Z ✔ the backoff starts over only after a connection held for a while (0.165849ms)
2026-10-14T23:45:30.9290627Z ✔ a view reads from the address and writes back to it (2.02498ms)
2026-10-14T23:45:30.9299920Z ✔ numbers read as people read them (15.232247ms)
2026-10-14T23:45:30.9306686Z ✔ a live line is shown only when the page's search would have found it (0.681142ms)
2026-10-14T23:45:30.9308216Z ✔ spans nest under their parents, and orphans are still shown (0.600461ms)
2026-10-14T23:45:30.9317952Z ✔ an error's issue says what, how often and where to look (0.788634ms)
2026-10-14T23:45:31.0622768Z ✔ a new workspace has every step to do, in the guide's order (2.074234ms)
2026-10-14T23:45:31.0632369Z ✔ a step is done from the workspace's state, not from clicks (0.336716ms)
2026-10-14T23:45:31.0640507Z ✔ a provider whose check failed is not a working one (0.279079ms)
2026-10-14T23:45:31.0649362Z ✔ code is brought by a project or a connected GitHub; people by a member or an invitation (0.311537ms)
2026-10-14T23:45:31.0656565Z ✔ either the CLI or the plugin signed in connects the harness (0.258337ms)
2026-10-14T23:45:31.0662927Z ✔ skipped steps count as settled, but the AI provider cannot be skipped and a done step is not skipped (0.394412ms)
2026-10-14T23:45:31.0676926Z ✔ skipping keeps the guide's order and takes a skip back (0.340021ms)
2026-10-14T23:45:31.0677162Z ✔ it opens by itself until dismissed, and whenever it is asked for (0.323466ms)
2026-10-14T23:45:31.1863942Z ✔ the first tab to claim an arrival pings, and every other tab stays quiet (1.110818ms)
2026-10-14T23:45:31.1866087Z ✔ old marks are cleared as tabs claim, and other keys are left alone (0.904598ms)
2026-10-14T23:45:31.3439687Z ✔ a pull request g1t made shows g1t, requested by whoever asked (1.730347ms)
2026-10-14T23:45:31.3450821Z ✔ anything else shows its author (0.234472ms)
2026-10-14T23:45:31.3457614Z ✔ work g1t started itself names nobody as asking (0.196796ms)
2026-10-14T23:45:31.4757418Z ✔ one-time-code fields are findable by password managers and carry no ignore attributes (1.37909ms)
2026-10-14T23:45:31.4763085Z ✔ an authenticator code field takes six digits, with or without the space (0.378858ms)
2026-10-14T23:45:31.4773585Z ✔ a field that takes recovery codes neither cuts nor refuses one (0.218338ms)
2026-10-14T23:45:31.6390239Z ✔ sizes read as registries show them (1.416347ms)
2026-10-14T23:45:31.8986679Z ✔ digests shorten for lists (0.247191ms)
2026-10-14T23:45:31.8986867Z ✔ an npm package is installed after .npmrc names its scope's registry, and a token for private ones (1.059631ms)
2026-10-14T23:45:31.8986997Z ✔ a Composer package is required after its workspace's repository is added, with credentials for private ones (0.202844ms)
2026-10-14T23:45:31.8987112Z ✔ a crate is added after .cargo/config.toml names its workspace's registry, with cargo login for private ones (0.199339ms)
2026-10-14T23:45:31.8987219Z ✔ a Maven artifact is fetched from its workspace's repository, with a settings.xml server for private ones (0.317897ms)
2026-10-14T23:45:31.8987320Z ✔ a NuGet package is added from its workspace's feed, named as a source with credentials for private ones (0.225518ms)
2026-10-14T23:45:31.8987424Z ✔ a gem is added with Bundler from its workspace's registry, with credentials for private ones (0.208032ms)
2026-10-14T23:45:31.8987520Z ✔ a container image is pulled by its address and tag (0.337076ms)
2026-10-14T23:45:31.8987642Z ✔ packages are listed by the visibility and order asked for (8.892279ms)
2026-10-14T23:45:31.8987672Z ✔ download counts read short (0.249454ms)
2026-10-14T23:45:31.8987753Z ✔ a page runs only its own scripts and is never framed (7.456664ms)
2026-10-14T23:45:31.8987836Z ✔ every answer gains nosniff and a referrer policy; pages are not framed (26.880142ms)
2026-10-14T23:45:31.9716823Z ✔ nothing is pending while the page is idle (30.005814ms)
2026-10-14T23:45:31.9719720Z ✔ a post is pending while it is sent and while the page reloads after it (0.330356ms)
2026-10-14T23:45:31.9729042Z ✔ following a link, or a GET form, is not a pending write (0.250957ms)
2026-10-14T23:45:31.9729207Z ✔ only the submission that matches is pending, so one row's button does not speak for another's (0.265979ms)
2026-10-14T23:45:32.0978493Z ✔ people are searched by username or name, and an email address is never looked up (1.251539ms)
2026-10-14T23:45:32.0979604Z ✔ the invite form names an address or a username (1.089626ms)
2026-10-14T23:45:32.0983653Z ✔ an invitation says the role it joins with and how long it works (0.530456ms)
2026-10-14T23:45:32.2153994Z ✔ a team's lead is a person; an old agent lead is nobody's (1.049536ms)
2026-10-14T23:45:32.2172015Z ✔ the directory lists people, in one search (1.534213ms)
2026-10-14T23:45:32.2180231Z ✔ forms read plainly (0.269033ms)
2026-10-14T23:45:32.2194046Z ✔ access to Code says where it comes from (0.242324ms)
2026-10-14T23:45:32.3565720Z ✔ bookmarks survive the cookie (2.358741ms)
2026-10-14T23:45:32.3565938Z ✔ a malformed or foreign cookie entry is dropped (0.368593ms)
2026-10-14T23:45:32.3566033Z ✔ the cookie is HttpOnly, short-lived and Secure over HTTPS (0.465349ms)
2026-10-14T23:45:32.3566049Z ✔ what each call asks for (0.295694ms)
2026-10-14T23:45:32.3566083Z ✔ only known reads are taken not to write (0.399741ms)
2026-10-14T23:45:32.3566159Z ✔ a signed-out GET never sets the bookmark cookie, so public pages stay cacheable (0.262154ms)
2026-10-14T23:45:32.3566311Z ✔ timings (1.081924ms)
2026-10-14T23:45:32.4716890Z ✔ a phone is told by its client hint, else its user agent (1.183096ms)
2026-10-14T23:45:32.6281747Z ✔ the project being looked at leads recent, once (1.922657ms)
2026-10-14T23:45:32.6290659Z ✔ pinned projects are never also recent (0.227201ms)
2026-10-14T23:45:32.6294882Z ✔ another workspace's project is not this one's recent (0.171417ms)
2026-10-14T23:45:32.6302950Z ✔ recent holds a few (0.311708ms)
2026-10-14T23:45:32.6333361Z ✔ a pin form says what to change (28.799964ms)
2026-10-14T23:45:32.6333421Z ✔ a pin moves up or down within the list (0.317116ms)
2026-10-14T23:45:32.7972075Z ✔ clear after: minutes and hours from now, the end of today, the end of the week, or never (1.368544ms)
2026-10-14T23:45:33.2481868Z ✔ a custom time is the viewer's own, and only one still ahead counts (0.26656ms)
2026-10-14T23:45:33.2482017Z ✔ pausing notifications: half an hour, an hour, or until nine tomorrow morning (0.312899ms)
2026-10-14T23:45:33.2482121Z ✔ every preset says something and clears sensibly (0.234422ms)
2026-10-14T23:45:33.2482203Z ✔ how someone shows: offline, away, active, and Do Not Disturb over either (0.282033ms)
2026-10-14T23:45:33.2482270Z ✔ a status past its time is gone, even before the feed says so (0.186159ms)
2026-10-14T23:45:33.2482310Z ✔ when something ends, in a few words (16.994873ms)
2026-10-14T23:45:33.2482382Z ✔ a tab is idle after ten minutes without input (0.225298ms)
2026-10-14T23:45:33.2482448Z ✔ custom emoji are named; ordinary emoji are not (0.476345ms)
2026-10-14T23:45:33.2482507Z ✔ people merge by id, and a later word wins (0.431297ms)
2026-10-14T23:45:33.2482583Z ✔ an uploaded image is served from the usercontent origin by its hash (1.179871ms)
2026-10-14T23:45:33.2482648Z ✔ an upload is a PNG, JPEG or WebP of at most 5 MB, read by its bytes (37.475197ms)
2026-10-14T23:45:33.2482716Z ✔ production elsewhere is taken at its address, versioned by the day (0.614853ms)
2026-10-14T23:45:33.2482784Z ✔ a reported production deployment gives the address and the commit (0.297386ms)
2026-10-14T23:45:33.2482845Z ✔ no screenshot when it is not elsewhere, has no address, or shows an upload (0.217156ms)
2026-10-14T23:45:33.2482907Z ✔ a version changes with the deploy or the day (0.17321ms)
2026-10-14T23:45:33.2482977Z ✔ the card tries the screenshot, then the upload; a preferred upload alone (0.33995ms)
2026-10-14T23:45:33.2483042Z ✔ a package reads as its registry, its name and its latest version (1.464239ms)
2026-10-14T23:45:33.2484398Z ✔ what a library publishes comes before an image, released ones first (1.07291ms)
2026-10-14T23:45:33.2484477Z ✔ each ecosystem links to how it publishes (0.329965ms)
2026-10-14T23:45:33.2484540Z ✔ each choice sets a kind and where it runs, and reads back (0.269484ms)
2026-10-14T23:45:33.2484601Z ✔ a project's badge says what it is and where it runs (0.407212ms)
2026-10-14T23:45:33.2484662Z ✔ links show homepage, docs, then the rest, never twice (0.731619ms)
2026-10-14T23:45:33.2484726Z ✔ an overview form changes only what it carries (31.601249ms)
2026-10-14T23:45:33.2484790Z ✔ the latest release is the newest tag by its commit (8.516384ms)
2026-10-14T23:45:33.2484852Z ✔ cards show production, else the homepage or docs (0.664989ms)
2026-10-14T23:45:33.2484916Z ✔ custom links are read from a form's rows, blank rows left out (0.535063ms)
2026-10-14T23:45:33.2484972Z ✔ only what g1t deploys leads with production (0.291608ms)
2026-10-14T23:45:33.3045704Z ✔ an empty address is the default list (2.13135ms)
2026-10-14T23:45:33.3046909Z ✔ what the address says is read, and nonsense is the default (0.455013ms)
2026-10-14T23:45:33.3047524Z ✔ the address round-trips, and a change goes back to page one (0.383475ms)
2026-10-14T23:45:33.3053486Z ✔ archived projects are left out unless asked for (9.028674ms)
2026-10-14T23:45:33.3054426Z ✔ filters narrow by visibility, kind, language and deployments (0.400001ms)
2026-10-14T23:45:33.3054939Z ✔ search matches every word, in the name, slug or description, names that start with it first (0.437307ms)
2026-10-14T23:45:33.3063329Z ✔ each sort orders as it says, ties by name (0.590446ms)
2026-10-14T23:45:33.3063436Z ✔ pages hold PAGE_SIZE, and a page past the end is the last (0.476476ms)
2026-10-14T23:45:33.3063859Z ✔ facets count the whole workspace (2.543568ms)
2026-10-14T23:45:33.3063932Z ✔ the keyboard moves through rows and stops at the ends (0.416575ms)
2026-10-14T23:45:33.4276876Z ✔ code is not docs: a project never gets a Docs tab (1.799451ms)
2026-10-14T23:45:33.5584068Z ✔ a project page names its repository (1.461765ms)
2026-10-14T23:45:33.5589070Z ✔ pages that are not a repository's name none (0.258748ms)
2026-10-14T23:45:33.5594479Z ✔ only a repository that is there and public is served from the cache (0.34627ms)
2026-10-14T23:45:33.7692287Z ✔ a pull request's own snake_case fields are read into camelCase (1.83168ms)
2026-10-14T23:45:33.7692376Z ✔ camelCase is taken as it is (0.718368ms)
2026-10-14T23:45:33.7703697Z ✔ getPull reads the work service's answer at the edge (35.79145ms)
2026-10-14T23:45:33.7712179Z ✔ getPull passes a refusal through (1.122656ms)
2026-10-14T23:45:33.9364471Z ✔ every page asks billing for the same month (2.148184ms)
2026-10-14T23:45:34.1934267Z ✔ Home and Usage show one figure for the month (0.87892ms)
2026-10-14T23:45:34.1934404Z ✔ the container registry's paths go to the packages service (1.491238ms)
2026-10-14T23:45:34.1934482Z ✔ the npm registry's paths go to the packages service (0.5261ms)
2026-10-14T23:45:34.1934564Z ✔ the Composer registries go to the packages service (0.262324ms)
2026-10-14T23:45:34.1934629Z ✔ the Cargo registries go to the packages service (0.20691ms)
2026-10-14T23:45:34.1934696Z ✔ the Maven repositories go to the packages service (0.261122ms)
2026-10-14T23:45:34.1934778Z ✔ the NuGet feeds go to the packages service (0.225188ms)
2026-10-14T23:45:34.1934843Z ✔ the RubyGems registries go to the packages service (0.243735ms)
2026-10-14T23:45:34.1934902Z ✔ git goes to repos, and everything else is the site's (0.147591ms)
2026-10-14T23:45:34.1934973Z ✔ a registry request names its workspace, and can be moved to another (0.594904ms)
2026-10-14T23:45:34.3069812Z ✔ the typed name confirms only the full name, in any case (2.521415ms)
2026-10-14T23:45:34.3069938Z ✔ filters by visibility and archived (1.440072ms)
2026-10-14T23:45:34.3070022Z ✔ search matches every word in name, description or topics (0.364998ms)
2026-10-14T23:45:34.3070045Z ✔ counts each filter (0.258728ms)
2026-10-14T23:45:34.3070062Z ✔ an unknown filter is all (0.250886ms)
2026-10-14T23:45:34.3070136Z ✔ a bulk action is summed up, with each failure and why (0.343496ms)
2026-10-14T23:45:34.3070212Z ✔ a renamed branch keeps the rest of the address (0.210146ms)
2026-10-14T23:45:34.3070248Z ✔ days until a date, never negative (0.262755ms)
2026-10-14T23:45:34.3070276Z ✔ dates read the same everywhere (23.479527ms)
2026-10-14T23:45:34.3070303Z ✔ names are tidied, not judged (1.058579ms)
2026-10-14T23:45:34.4653925Z ✔ refs name their branch or tag (1.29229ms)
2026-10-14T23:45:34.4660976Z ✔ a project's overview follows what it runs, who is working on it and what may need someone, not every push (0.432018ms)
2026-10-14T23:45:34.4661603Z ✔ the overview hears its own commit's checks, and every pull request's finished ones (0.215553ms)
2026-10-14T23:45:34.4662493Z ✔ the files page follows refs, checks, releases and deployments (0.400511ms)
2026-10-14T23:45:34.4663561Z ✔ a page of files hears its own branch and its commit's checks, not every branch's (0.350536ms)
2026-10-14T23:45:34.4664243Z ✔ the commits page hears pushes to its own branch only (0.289865ms)
2026-10-14T23:45:34.4669027Z ✔ branches, tags, and the lists of pull requests and issues (0.337156ms)
2026-10-14T23:45:34.4669331Z ✔ a pull request hears its own changes, its head branch and its head's checks (0.29315ms)
2026-10-14T23:45:34.4669571Z ✔ an issue hears its own changes and its linked pull requests (0.25345ms)
2026-10-14T23:45:34.4670742Z ✔ the Work page hears claims, sessions starting and ending, what the queue finds, and merges (0.398509ms)
2026-10-14T23:45:34.4678552Z ✔ a session going on reaches the issue and pull request it is on, and no other (0.226349ms)
2026-10-14T23:45:34.4678784Z ✔ a session's page hears every session, claim and overlap in the repository (0.222694ms)
2026-10-14T23:45:34.4678934Z ✔ runs, one run, and security (0.241883ms)
2026-10-14T23:45:34.4679118Z ✔ new commits are counted, and uncounted when a push was not (0.251948ms)
2026-10-14T23:45:34.4681665Z ✔ a change waits a second for more, five at most, then refreshes (1.017478ms)
2026-10-14T23:45:34.4683574Z ✔ never under someone typing, a dialog, or a navigation: it waits for them (0.250767ms)
2026-10-14T23:45:34.4685707Z ✔ a burst of changes refreshes at most every two seconds (0.82595ms)
2026-10-14T23:45:34.4687717Z ✔ a tab out of view never refreshes; back in view, it catches up at once (0.256535ms)
2026-10-14T23:45:34.4721501Z ✔ without the socket: back in view every 30 s at most, a poll every minute in view, never with it (0.186439ms)
2026-10-14T23:45:34.4721620Z ✔ typing is in text boxes, text areas and editors (0.161553ms)
2026-10-14T23:45:34.4721657Z ✔ the bottom of the page, with some slack (0.107631ms)
2026-10-14T23:45:34.5838603Z ✔ everything may be crawled but a file's blame (1.308805ms)
2026-10-14T23:45:34.5845425Z ✔ g1t.sh names its docs' map too (0.303175ms)
2026-10-14T23:45:34.7094971Z ✔ a new ruleset protects the default branch, and a workspace's holds everywhere (1.709477ms)
2026-10-14T23:45:34.7104969Z ✔ every rule type has a label, a group and its defaults (0.532119ms)
2026-10-14T23:45:34.7105204Z ✔ an export imports back as it was (0.960813ms)
2026-10-14T23:45:34.7120578Z ✔ an import fills in what it leaves out and refuses what is not a ruleset (0.898579ms)
2026-10-14T23:45:34.7120684Z ✔ who may bypass, and whose changes a rule holds for, read plainly (0.321302ms)
2026-10-14T23:45:34.7120714Z ✔ what a ruleset targets, in a few words (0.302024ms)
2026-10-14T23:45:34.8262656Z ✔ sizes read as KB, MB or GB (0.814282ms)
2026-10-14T23:45:34.8265639Z ✔ expiry reads from now (0.228242ms)
2026-10-14T23:45:34.8278324Z ✔ KV is asked for an old, finished run's artifacts only until they have expired (0.250566ms)
2026-10-14T23:45:34.9682430Z ✔ a re-run of failed jobs whose job waits for a self-hosted runner can be cancelled, not re-run (2.057228ms)
2026-10-14T23:45:35.2129410Z ✔ an earlier attempt's page offers Cancel run while the latest attempt runs (0.325458ms)
2026-10-14T23:45:35.2129547Z ✔ a job not finished keeps the latest attempt going, whatever the run's own status says (0.232569ms)
2026-10-14T23:45:35.2129628Z ✔ every status a run waits or runs in can be cancelled (0.27303ms)
2026-10-14T23:45:35.2129681Z ✔ a finished run is re-run from its latest attempt only (0.211217ms)
2026-10-14T23:45:35.2129704Z ✔ a run being cancelled shows Force cancel (0.20665ms)
2026-10-14T23:45:35.2129758Z ✔ neither without Write, nor for a run whose workflow file could not be used (0.226891ms)
2026-10-14T23:45:35.2129781Z ✔ columns go by the longest path of needs (2.443879ms)
2026-10-14T23:45:35.2129818Z ✔ a need of a job not in the run is left out (0.302223ms)
2026-10-14T23:45:35.2129833Z ✔ a cycle cannot loop the layout (1.336356ms)
2026-10-14T23:45:35.2129875Z ✔ ordering a column by its needs takes out a crossing (0.704488ms)
2026-10-14T23:45:35.2129925Z ✔ ordering keeps the order as listed when nothing crosses (1.696878ms)
2026-10-14T23:45:35.2129964Z ✔ a matrix's jobs are one node, named without their combination (0.338728ms)
2026-10-14T23:45:35.2130011Z ✔ an expanded matrix is taller, and its connectors still meet its first line (0.438018ms)
2026-10-14T23:45:35.2130057Z ✔ a matrix's calls share the caller's box, each call's jobs named by its combination (0.541753ms)
2026-10-14T23:45:35.2130103Z ✔ a called workflow's jobs sit in a box under the job calling it (0.595103ms)
2026-10-14T23:45:35.2130149Z ✔ a connector's colour follows the run: red from a failure, moving into a running job (0.574863ms)
2026-10-14T23:45:35.2130192Z ✔ a deployment's address makes its node taller (0.222664ms)
2026-10-14T23:45:35.2130239Z ✔ several jobs stand together as running, then as the worst ending (0.152169ms)
2026-10-14T23:45:35.2130430Z ✔ connectors run straight on one row, and turn with rounded corners between rows (0.313771ms)
2026-10-14T23:45:35.2130447Z ✔ an empty run lays out as nothing (0.179129ms)
2026-10-14T23:45:35.2130489Z ✔ a matrix whose jobs deploy to one address shows it once (0.255754ms)
2026-10-14T23:45:35.2526754Z ✔ g1t cloud is the running sandbox runs not handed to the workspace's runners, and the jobs in g1t's sandboxes (9.86542ms)
2026-10-14T23:45:35.2549747Z ✔ a service that does not answer leaves only its part out (0.4197ms)
2026-10-14T23:45:35.2549818Z ✔ a full list says there may be more (0.257266ms)
2026-10-14T23:45:35.2549932Z ✔ this month's time adds agent sandbox and sandbox time for g1t cloud, and self-hosted time for the workspace's own (0.550436ms)
2026-10-14T23:45:35.2550015Z ✔ prices are each machine's rate a minute, from the catalogue (0.448463ms)
2026-10-14T23:45:35.2550087Z ✔ machine time and prices read as people say them (0.328293ms)
2026-10-14T23:45:35.3669797Z ✔ quoted runs stay whole (1.647073ms)
2026-10-14T23:45:35.3693504Z ✔ a qualifier is read, quotes and all (0.282414ms)
2026-10-14T23:45:35.3710899Z ✔ a filter replaces its qualifier and keeps the rest (0.45996ms)
2026-10-14T23:45:35.3711199Z ✔ is: values of one family replace each other (0.352188ms)
2026-10-14T23:45:35.3711926Z ✔ addresses carry the query, the tab and the page (0.32642ms)
2026-10-14T23:45:35.3712118Z ✔ counts stop at the cap (0.171248ms)
2026-10-14T23:45:35.5050355Z ✔ the state parameter falls back to open (1.03944ms)
2026-10-14T23:45:35.5054691Z ✔ ids say which tab and which role an alert takes (0.223326ms)
2026-10-14T23:45:35.5057505Z ✔ alerts are counted by state (0.838799ms)
2026-10-14T23:45:35.5059295Z ✔ likely test values are listed apart from real secrets (0.227271ms)
2026-10-14T23:45:35.5061628Z ✔ packages group their alerts and take the worst severity (0.547832ms)
2026-10-14T23:45:35.5066104Z ✔ versions compare number by number (0.275633ms)
2026-10-14T23:45:35.5068482Z ✔ the newest security update wins (1.61892ms)
2026-10-14T23:45:35.5076256Z ✔ a secret's activity starts with when it was found (7.988593ms)
2026-10-14T23:45:35.5077599Z ✔ an older decision without a row is shown from the alert itself (0.474221ms)
2026-10-14T23:45:35.5082026Z ✔ a dependency's activity links its pull request and issue (0.398348ms)
2026-10-14T23:45:35.6315315Z ✔ every feature is one row with a status word and one thing to do (2.23837ms)
2026-10-14T23:45:35.6334241Z ✔ what is on reads as enabled, with a link to it (0.272789ms)
2026-10-14T23:45:35.6350718Z ✔ someone who cannot change settings sees the rows without the switches (0.376065ms)
2026-10-14T23:45:35.6352346Z ✔ the policy template says how to report and names the private form when it is on (0.343376ms)
2026-10-14T23:45:35.7623764Z ✔ secret filters are read from the address and narrow the list (1.922156ms)
2026-10-14T23:45:35.7625752Z ✔ secret types are listed once each, custom patterns by name (8.693631ms)
2026-10-14T23:45:35.7633628Z ✔ code filters and counts (0.496735ms)
2026-10-14T23:45:35.7645332Z ✔ old Security links go to the sections that replaced their tabs (0.224306ms)
2026-10-14T23:45:35.7645442Z ✔ the starter workflow scans each language it finds, then uploads SARIF for the right ref (0.772239ms)
2026-10-14T23:45:35.7645483Z ✔ a trend is scaled to its tallest day (0.221663ms)
2026-10-14T23:45:35.8865516Z ✔ a session card's state reads as what is happening (1.500123ms)
2026-10-14T23:45:35.8870682Z ✔ every state has a chip, whatever its case; an unknown one is quiet (0.300421ms)
2026-10-14T23:45:35.9859538Z ✔ a Mac shows the Command key, everything else Ctrl (1.041794ms)
2026-10-14T23:45:36.2169757Z ✔ only the site's live sockets take a ticket, in the form the routes match (2.190749ms)
2026-10-14T23:45:36.2169879Z ✔ a ticket opens the socket it was made for, as the token's owner (40.204475ms)
2026-10-14T23:45:36.2169921Z ✔ a ticket past its minute opens nothing (2.01784ms)
2026-10-14T23:45:36.2169996Z ✔ a ticket opens no other socket: another kind, or another workspace's (3.359263ms)
2026-10-14T23:45:36.2170060Z ✔ a ticket changed in any way, or sealed with another key, opens nothing (7.617465ms)
2026-10-14T23:45:36.2170146Z ✔ the token is checked again when the socket opens: deleted, revoked or without the website permission, it opens nothing (2.629848ms)
2026-10-14T23:45:36.2170205Z ✔ a ticket is never taken by anything but a socket's upgrade (4.082669ms)
2026-10-14T23:45:36.2170295Z ✔ a session's page opens its sockets at once and adds no ticket; a token's page asks for one first (12.607697ms)
2026-10-14T23:45:36.2170374Z ✔ a ticket for a chat-scoped token opens Chat's socket and the feed, checked again as it opens (2.953063ms)
2026-10-14T23:45:36.3397059Z ✔ every cue in both sets is short, starts and ends in silence, and never clips (38.394478ms)
2026-10-14T23:45:36.3403081Z ✔ the cues are told apart: different figures, and Bright is higher and shorter than Soft (0.42011ms)
2026-10-14T23:45:36.3410546Z ✔ the envelope rises from nothing, falls, and lands on exactly nothing (0.200071ms)
2026-10-14T23:45:36.3414920Z ✔ volume is a curve: half way reads as half as loud, not a third (0.195313ms)
2026-10-14T23:45:36.4624317Z ✔ a client navigation that hits an older build reloads the page (1.340172ms)
2026-10-14T23:45:36.4629637Z ✔ an address only the new build knows reloads, once it fell to the catch-all (0.241933ms)
2026-10-14T23:45:36.4669316Z ✔ a document load, or any other error, shows the error page (0.270957ms)
2026-10-14T23:45:36.4669639Z ✔ the location a tab's document loaded at is no client navigation, whatever its key (0.220952ms)
2026-10-14T23:45:36.4669743Z ✔ an address loaded again once is not loaded again (0.353601ms)
2026-10-14T23:45:36.5937678Z ✔ each stack is found by what is at the root (1.808004ms)
2026-10-14T23:45:36.5937823Z ✔ a Node project's workflow runs the scripts it has (1.097968ms)
2026-10-14T23:45:36.5944173Z ✔ an unreadable package.json runs the usual scripts only if present (0.329555ms)
2026-10-14T23:45:36.5950939Z ✔ Rust, Go and an unknown project each get a workflow (0.509144ms)
2026-10-14T23:45:36.5979761Z ✔ the workflow is well-formed: one job per stack, steps under each (0.671468ms)
2026-10-14T23:45:36.5979822Z ✔ a branch name is found that is free (0.244518ms)
2026-10-14T23:45:36.7106113Z ✔ the status page lives on its own host (0.832841ms)
2026-10-14T23:45:36.7109262Z ✔ the short line is the report's title, else words for its state (0.209904ms)
2026-10-14T23:45:36.7111214Z ✔ each state has its own dot (0.209525ms)
2026-10-14T23:45:36.8804616Z ✔ an idle page has nothing to retry (0.922755ms)
2026-10-14T23:45:36.8815773Z ✔ a navigation still loading is retried at its full address (0.185719ms)
2026-10-14T23:45:36.8819581Z ✔ a form still being sent is never sent again (0.15343ms)
2026-10-14T23:45:37.0716854Z ✔ a pax record's length counts itself (1.251439ms)
2026-10-14T23:45:37.3233146Z ✔ a long path splits into ustar's prefix and name when it can (1.380803ms)
2026-10-14T23:45:37.3233289Z ✔ headers are ustar, with the commit in a pax global header (3.711853ms)
2026-10-14T23:45:37.3233393Z ✔ tar reads the archive back: files, folders, modes, a symlink and long paths (84.213851ms)
2026-10-14T23:45:37.3233466Z ✔ team pages live under the workspace's teams (1.162796ms)
2026-10-14T23:45:37.3233530Z ✔ teams are found by every word of the search (0.970166ms)
2026-10-14T23:45:37.3233550Z ✔ your teams come first (0.314162ms)
2026-10-14T23:45:37.3233625Z ✔ a team can go under any visible team but itself and those below it (0.362845ms)
2026-10-14T23:45:37.3233643Z ✔ a new team reads its form (25.974663ms)
2026-10-14T23:45:37.3233704Z ✔ settings change only what their form has (0.516035ms)
2026-10-14T23:45:37.3233732Z ✔ review assignment is read within bounds (0.590937ms)
2026-10-14T23:45:37.3233764Z ✔ counts leave out what is none (0.301092ms)
2026-10-14T23:45:37.3233827Z ✔ who may create teams follows the workspace's setting (6.246728ms)
2026-10-14T23:45:37.4144949Z ✔ the cookie keeps auto, light or dark, and anything else is the default (1.013822ms)
2026-10-14T23:45:37.4163842Z ✔ the cookie is kept a year, on every path, and secure on https (0.23956ms)
2026-10-14T23:45:37.4163967Z ✔ Light and Dark are data-theme on <html>; Auto leaves it to the system (0.190837ms)
2026-10-14T23:45:37.4164104Z ✔ a chosen theme is itself; Auto with no browser to ask is dark (0.238688ms)
2026-10-14T23:45:37.5561315Z ✔ a moment within the last week is said in minutes, hours or days (1.49899ms)
2026-10-14T23:45:37.5565081Z ✔ a moment weeks ago is said in weeks, and older ones by their date (16.392889ms)
2026-10-14T23:45:37.5580064Z ✔ a moment that can't be read says nothing (0.296535ms)
2026-10-14T23:45:37.5600719Z ✔ the hint gives the moment in full (0.494943ms)
2026-10-14T23:45:37.7032687Z ✔ a profile's local time is the time of day in its zone (17.073951ms)
2026-10-14T23:45:37.7032865Z ✔ no zone, or one the runtime does not know, shows no time (0.504547ms)
2026-10-14T23:45:37.7090057Z ✔ the zones to pick from are sorted, with UTC and a saved one always there (3.988518ms)
2026-10-14T23:45:37.7090151Z ✔ zones read as places, with their offset (0.966261ms)
2026-10-14T23:45:37.8641834Z ✔ every scope is on the checklist exactly once, admin ones under Dangerous (1.961525ms)
2026-10-14T23:45:37.8642004Z ✔ ticked boxes store the highest level of each resource (2.325201ms)
2026-10-14T23:45:37.8642089Z ✔ full access is null, and nothing ticked is refused (0.464778ms)
2026-10-14T23:45:37.8645629Z ✔ a higher level ticks the lower ones of its resource only (0.310616ms)
2026-10-14T23:45:37.8649031Z ✔ full access ticks the top level of everything (0.861754ms)
2026-10-14T23:45:37.8652958Z ✔ presets are recognised however their scopes are written (0.942305ms)
2026-10-14T23:45:37.8656569Z ✔ a token's access reads plainly (0.823346ms)
2026-10-14T23:45:37.8659466Z ✔ an application asking for nothing usable gets the default set, never admin (0.310085ms)
2026-10-14T23:45:37.8665665Z ✔ consent keeps only what was asked for (0.386ms)
2026-10-14T23:45:37.8667669Z ✔ expiry words (0.538438ms)
2026-10-14T23:45:37.9970542Z ✔ the accent is the logo's lavender, and mint means success (1.346552ms)
2026-10-14T23:45:37.9970661Z ✔ merged reads apart from the accent (0.350567ms)
2026-10-14T23:45:37.9970737Z ✔ text colours meet WCAG AA on every surface (1.190848ms)
2026-10-14T23:45:37.9971255Z ✔ the dark base reads on an accent or success button (0.247652ms)
2026-10-14T23:45:37.9971332Z ✔ focus borders in the dim accent stand out from the page (0.245849ms)
2026-10-14T23:45:37.9973829Z ✔ the light accent is a deeper lavender, and light success is green (0.253781ms)
2026-10-14T23:45:37.9974903Z ✔ every dark token has a light one (1.868705ms)
2026-10-14T23:45:37.9982003Z ✔ light text colours meet WCAG AA on every light surface (0.537187ms)
2026-10-14T23:45:37.9988601Z ✔ the light page reads on an accent or success button (0.267952ms)
2026-10-14T23:45:37.9989264Z ✔ light focus borders in the dim accent stand out from the page (0.28644ms)
2026-10-14T23:45:38.1200515Z ✔ the first frame is the pull request before its checks, the same on the server and the client (1.083256ms)
2026-10-14T23:45:38.4676785Z ✔ the scenes come in the story's order: the pull request first (2.563969ms)
2026-10-14T23:45:38.4676915Z ✔ checks pass before review, and the queue merges only after approval (0.192389ms)
2026-10-14T23:45:38.4676991Z ✔ the cursor leaves the code only once it has merged, for the Session tab (0.192829ms)
2026-10-14T23:45:38.4677074Z ✔ the session plays back in full before the tour moves on to chat (0.227933ms)
2026-10-14T23:45:38.4677092Z ✔ the loop wraps (0.195083ms)
2026-10-14T23:45:38.4677156Z ✔ pills start where their scene does, and progress runs 0 to 1 (0.39976ms)
2026-10-14T23:45:38.4677184Z ✔ each still shows its step's point (0.174522ms)
2026-10-14T23:45:38.4677245Z ✔ Dana tells support only after Priya says it shipped (0.198858ms)
2026-10-14T23:45:38.4677300Z ✔ Turnstile is on only with both its site key and its secret (1.523978ms)
2026-10-14T23:45:38.4677354Z ✔ only Cloudflare's success counts as a pass (0.204056ms)
2026-10-14T23:45:38.4677424Z ✔ the page's policy lets the widget's script and frame load, and nothing else framed (0.408573ms)
2026-10-14T23:45:38.4677490Z ✔ periods resolve to whole UTC days, both ends included (2.578631ms)
2026-10-14T23:45:38.4677559Z ✔ columns cover every day, stack products, and add up when cumulative (17.257366ms)
2026-10-14T23:45:38.4677619Z ✔ the money axis has clean ticks, never the same label twice (2.114334ms)
2026-10-14T23:45:38.4677640Z ✔ quantities read in their units (4.836661ms)
2026-10-14T23:45:38.4677707Z ✔ the receipt shows usage at price, then what paid, then what is charged (0.376055ms)
2026-10-14T23:45:38.4677771Z ✔ grouping by project adds a project's meters together (0.422955ms)
2026-10-14T23:45:38.4677830Z ✔ the CSV has a row per day and meter with anything on it (0.394482ms)
2026-10-14T23:45:38.4678141Z ✔ test-mode hints are for g1t's own people (0.157777ms)
2026-10-14T23:45:38.4678247Z ✔ the pending note says what the close will charge, with the fraction of a cent that explains a gap (0.331437ms)
2026-10-14T23:45:38.4678307Z ✔ products no longer offered still read in older usage (0.339199ms)
2026-10-14T23:45:38.5429796Z ✔ a raw file's path keeps a ref with slashes in one segment (1.963016ms)
2026-10-14T23:45:38.5442110Z ✔ paths that are not a file, or climb out of the repository, are refused (0.270015ms)
2026-10-14T23:45:38.5472932Z ✔ usercontent is its own host, or a path on the site (0.438358ms)
2026-10-14T23:45:38.5783625Z ✔ a token is good for its file alone, until it ends (17.787202ms)
2026-10-14T23:45:38.5794317Z ✔ files are served as data that cannot run (24.832598ms)
2026-10-14T23:45:38.5794464Z ✔ a README's relative pictures are the repository's files at the same commit (0.614643ms)
2026-10-14T23:45:38.5796068Z ✔ commits are full hashes (0.252869ms)
2026-10-14T23:45:38.7898460Z ✔ a token with the website permission signs the request in as its owner (33.859098ms)
2026-10-14T23:45:38.7901204Z ✔ a token without the website permission is no one: a page loads signed out, data and posts get a 401 (3.766154ms)
2026-10-14T23:45:38.7903680Z ✔ a revoked, expired or made-up token is refused, and nothing else is tried (0.495534ms)
2026-10-14T23:45:38.7911189Z ✔ tokens are read from the Authorization header only, never a query string or a cookie (0.668403ms)
2026-10-14T23:45:38.7911307Z ✔ what needs a real sign-in is refused with a token, whatever the method (2.493083ms)
2026-10-14T23:45:38.7911419Z ✔ deleting or giving away a workspace and payment methods are refused; other changes there are not (10.227844ms)
2026-10-14T23:45:38.7911887Z ✔ only a person's own token with the permission is a website user (0.252249ms)
2026-10-14T23:45:38.7911971Z ✔ cross-site form posts are refused for a session cookie and a token alike (0.49922ms)
2026-10-14T23:45:38.7912087Z ✔ a token with chat:read reads Chat's JSON without the website permission, and sends nothing (2.31122ms)
2026-10-14T23:45:38.7912164Z ✔ a token with chat:write sends to Chat's JSON, and reads it too (0.409485ms)
2026-10-14T23:45:38.7912236Z ✔ a token without a chat scope, or not a person's own, reaches none of Chat (0.930216ms)
2026-10-14T23:45:38.7912336Z ✔ a chat-scoped token opens nothing else on the site: pages are signed out, data and posts are a 401 (2.509617ms)
2026-10-14T23:45:38.7915550Z ✔ push registration and notification settings take the notifications scopes (0.588092ms)
2026-10-14T23:45:38.7916495Z ✔ full access, legacy or not, reaches Chat only with the website permission; the website permission keeps opening everything (0.712309ms)
2026-10-14T23:45:38.7919768Z ✔ a chat-scoped token opens Chat's socket and the feed, never an artifact's (0.208683ms)
2026-10-14T23:45:38.9290180Z ✔ the chosen workspace holds while you are a member, else the first (1.155775ms)
2026-10-14T23:45:38.9304468Z ✔ a project in one of your workspaces is about that workspace (0.268072ms)
2026-10-14T23:45:38.9304720Z ✔ a project somewhere you do not belong leaves the chosen workspace (0.383726ms)
2026-10-14T23:45:38.9305078Z ✔ a workspace's own pages are about that workspace (0.214983ms)
2026-10-14T23:45:38.9305374Z ✔ the cookie reads back what was remembered (0.569555ms)
2026-10-14T23:45:38.9306061Z ✔ a deleted workspace you had chosen gives way to another, or to none (0.277086ms)
2026-10-14T23:45:39.0555423Z ✔ what goes lists only what the workspace holds (1.800533ms)
2026-10-14T23:45:39.0562742Z ✔ only billing or protection stands in the way (0.260171ms)
2026-10-14T23:45:39.0564851Z ✔ the slug confirms in any case, and nothing else does (0.248263ms)
2026-10-14T23:45:39.1706122Z ✔ someone with no workspace is sent to make one or answer an invitation, never to Mission control (1.360352ms)
2026-10-14T23:45:39.4328493Z ✔ the pages someone without a workspace needs stay open (0.293741ms)
2026-10-14T23:45:39.4328682Z ✔ nobody else is gated: a member, an unconfirmed account, a repository collaborator, someone held by a policy, a visitor (0.185178ms)
2026-10-14T23:45:39.4328778Z ✔ workspace averages weight samples rather than averaging project averages (1.046631ms)
2026-10-14T23:45:39.4328882Z ✔ costs combine meters and products without conflating project keys (0.930406ms)
2026-10-14T23:45:39.4329000Z ✔ a project's usage is its repository's, not its slug's (0.196585ms)
2026-10-14T23:45:39.4329096Z ✔ missing duration is distinct from a fast change (0.169755ms)
2026-10-14T23:45:39.4329158Z ✔ daily series combines batches and retains quiet days across month boundaries (0.596435ms)
2026-10-14T23:45:39.4329211Z ✔ a path is one of the workspace's pages, or none (1.629257ms)
2026-10-14T23:45:39.4329267Z ✔ old addresses go to where their pages are now (0.663085ms)
2026-10-14T23:45:39.4329315Z ✔ ?tab= opens that page, keeping the rest of the query (0.337126ms)
2026-10-14T23:45:39.4329365Z ✔ a click's data request is for the same page as a full load (0.245008ms)
2026-10-14T23:45:39.4329417Z ✔ an alias or old name leads to the same page under the workspace (2.420704ms)
2026-10-14T23:45:39.4329465Z ✔ a click's data request for an alias leads to the page, not its data (0.383676ms)
2026-10-14T23:45:39.4329485Z ✔ the rail's mode follows the address (0.766571ms)
2026-10-14T23:45:39.4329555Z ✔ Workspace mode's sidebar knows which group and page an address is (1.627793ms)
2026-10-14T23:45:39.4329599Z ✔ a member without Code access is sent around Code's pages (0.538068ms)
2026-10-14T23:45:39.4329642Z ✔ g1t beyond your workspaces is browsed, and whose it is (0.991358ms)
2026-10-14T23:45:39.5479018Z ✔ a thread's link is its conversation with ?thread= (1.056015ms)
2026-10-14T23:45:39.7010076Z ✔ crc32 matches the standard check value (1.243757ms)
2026-10-14T23:45:39.7121429Z ✔ a zip holds each file, deflated or stored, and reads back (46.708027ms)
2026-10-14T23:45:39.7154410Z ✔ each file keeps its Unix mode: executables and symlinks (5.642059ms)
2026-10-14T23:45:39.7276346Z ℹ tests 947
2026-10-14T23:45:39.7276441Z ℹ suites 0
2026-10-14T23:45:39.7276463Z ℹ pass 947
2026-10-14T23:45:39.7281374Z ℹ fail 0
2026-10-14T23:45:39.7281880Z ℹ cancelled 0
2026-10-14T23:45:39.7281953Z ℹ skipped 0
2026-10-14T23:45:39.7281967Z ℹ todo 0
2026-10-14T23:45:39.7281988Z ℹ duration_ms 23387.214287
2026-10-14T23:45:39.7402399Z 
2026-10-14T23:45:39.7402474Z > @g1t/artifacts@0.1.0 test
2026-10-14T23:45:39.7402500Z > node --test "src/**/*.test.ts"
2026-10-14T23:45:39.7402513Z 
2026-10-14T23:45:39.9092399Z ✔ workspace spaces give every member their base role (0.983446ms)
2026-10-14T23:45:39.9092804Z ✔ team spaces give the team's members their base role, and nobody else anything (0.202614ms)
2026-10-14T23:45:39.9092878Z ✔ a listing raises a role but never lowers it (0.210246ms)
2026-10-14T23:45:39.9093615Z ✔ a team listed on a space reaches its members (0.178007ms)
2026-10-14T23:45:39.9094913Z ✔ owners manage workspace and team spaces, but a private space is its members' alone (0.17965ms)
2026-10-14T23:45:39.9096523Z ✔ a space is readable by the whole workspace only when it is open with a base role (0.151998ms)
2026-10-14T23:45:39.9097293Z ✔ roles order view < comment < edit < manage (0.299931ms)
2026-10-14T23:45:39.9097922Z ✔ a private space keeps someone who can manage it (0.216785ms)
2026-10-14T23:45:40.0636746Z ✔ passages follow headings, with the heading path (2.622016ms)
2026-10-14T23:45:40.0636909Z ✔ long sections split on paragraphs, never past the most (1.551329ms)
2026-10-14T23:45:40.0636945Z ✔ one huge paragraph is cut at sentences (0.452419ms)
2026-10-14T23:45:40.0637023Z ✔ tiny sections join the next, naming its heading (0.337236ms)
2026-10-14T23:45:40.0637058Z ✔ a tiny last section joins the one before (0.32609ms)
2026-10-14T23:45:40.0637127Z ✔ headings inside code fences are code, and fences stay whole (0.382043ms)
2026-10-14T23:45:40.0637197Z ✔ a file's front matter and leading title are not passages (0.282014ms)
2026-10-14T23:45:40.0637265Z ✔ empty documents have no passages; huge ones stop at the most (4.369189ms)
2026-10-14T23:45:40.0637337Z ✔ what is embedded leads with the title and heading (0.315484ms)
2026-10-14T23:45:40.0637369Z ✔ hashes and ids are stable and short (0.63966ms)
2026-10-14T23:45:40.1942106Z ✔ paths are kept tidy, and unsafe ones refused (1.479301ms)
2026-10-14T23:45:40.4664099Z ✔ a citation names a repository and a path; a label only for what it names (1.487423ms)
2026-10-14T23:45:40.4664230Z ✔ a change touches a cited file, anything under a cited folder, and what a glob matches (0.964718ms)
2026-10-14T23:45:40.4664310Z ✔ a citation links to the code at the commit it was cited at (0.516035ms)
2026-10-14T23:45:40.4664389Z ✔ links to code in a page are citations too, a chip's own link once (1.534494ms)
2026-10-14T23:45:40.4664457Z ✔ the header's Describes list is tidy and short (0.520682ms)
2026-10-14T23:45:40.4664528Z ✔ a line diff keeps what stayed and marks what changed (1.499701ms)
2026-10-14T23:45:40.4664557Z ✔ from nothing, everything is added (0.33954ms)
2026-10-14T23:45:40.5351290Z ✔ a section runs to the next heading of its level or higher, subsections included (23.019316ms)
2026-10-14T23:45:40.5376935Z ✔ replacing a section changes only that section (3.264601ms)
2026-10-14T23:45:40.5377279Z ✔ blocks targets use the ids agents read from the outline (1.701805ms)
2026-10-14T23:45:40.5377511Z ✔ append adds at the end; document replaces everything (1.4388ms)
2026-10-14T23:45:40.5377750Z ✔ an edit made on the server merges with a person typing at the same time (12.243109ms)
2026-10-14T23:45:40.5377965Z ✔ restoring a version brings back its blocks as a new change (9.658088ms)
2026-10-14T23:45:40.5378189Z ✔ a comment anchors to the text between two positions, across blocks (3.906774ms)
2026-10-14T23:45:40.5378423Z ✔ range ids list the blocks a suggestion covers (1.006ms)
2026-10-14T23:45:40.7640284Z embedding usage of workspaces not looked up yet waits 1
2026-10-14T23:45:40.7654826Z embedding usage of workspaces not looked up yet waits 1
2026-10-14T23:45:40.7657623Z embedding usage of workspaces not looked up yet waits 1
2026-10-14T23:45:40.8062108Z could not tell which workspaces are free; keeping what billing last said Error: billing answered 503
2026-10-14T23:45:40.8204643Z embedding budget of a free workspace used for the month w1
2026-10-14T23:45:40.8205399Z docs embedding cap reached w1 1 passages wait for the next hour
2026-10-14T23:45:40.8244660Z ✔ each workspace's month of tokens goes to billing as context, once per change, and only this month's (15.589373ms)
2026-10-14T23:45:40.8251279Z ✔ a month's last tokens go as that month's once it is over, then the new month's on their own (28.075967ms)
2026-10-14T23:45:40.8258775Z ✔ billing down: nothing is marked reported, and the plan it last said holds (11.291431ms)
2026-10-14T23:45:40.8263608Z ✔ a free workspace past its month's budget embeds nothing more; its passages are kept for words (13.741148ms)
2026-10-14T23:45:40.8277030Z ✔ cost and detail (0.407883ms)
2026-10-14T23:45:40.9992861Z ✔ puts, gets and deletes a file by its key, path style, signed (45.253214ms)
2026-10-14T23:45:41.0007145Z ✔ a missing file is null (2.289196ms)
2026-10-14T23:45:41.0037647Z ✔ virtual-hosted addresses put the bucket in the host (2.425501ms)
2026-10-14T23:45:41.0039344Z ✔ the store follows the settings, and says what is missing (0.620923ms)
2026-10-14T23:45:41.1474890Z ✔ private: only the owner, and not the workspace owner (1.936698ms)
2026-10-14T23:45:41.1475257Z ✔ an open space gives every member its base role; owners manage (0.478228ms)
2026-10-14T23:45:41.1475488Z ✔ a team space: its team gets the base role; others nothing; workspace owners manage (0.30649ms)
2026-10-14T23:45:41.1489033Z ✔ a members-only space: only its members, never the workspace owner (0.21998ms)
2026-10-14T23:45:41.1489099Z ✔ grants to a person, an agent and a team (1.383908ms)
2026-10-14T23:45:41.1526582Z ✔ a grant raises a space role but never lowers it (0.228773ms)
2026-10-14T23:45:41.1543062Z ✔ general access: workspace gives every member its role, never manage (0.232208ms)
2026-10-14T23:45:41.1544815Z ✔ general access: link gives its role only to people who opened it (0.212468ms)
2026-10-14T23:45:41.1546139Z ✔ nested docs inherit their parent's grants, space and general access (1.005359ms)
2026-10-14T23:45:41.1548188Z ✔ a parent's owner keeps full access to what others add under it (0.33988ms)
2026-10-14T23:45:41.1549058Z ✔ restricting stops the space, the parent's grants and general access (0.265539ms)
2026-10-14T23:45:41.1549638Z ✔ the access root and path of a new folio (0.187672ms)
2026-10-14T23:45:41.1550724Z ✔ materialize writes the owner, ancestor owners and grants up to the access root, highest role each (0.471097ms)
2026-10-14T23:45:41.1551681Z ✔ the index scope is the space's only when access is exactly the space's (0.281993ms)
2026-10-14T23:45:41.1552752Z ✔ readable by the whole workspace: open spaces and workspace general access only (0.205258ms)
2026-10-14T23:45:41.1554745Z ✔ who may share (0.173321ms)
2026-10-14T23:45:41.2917474Z ✔ a page carries the saved document as base64, and none when there is none or it is too large (17.171898ms)
2026-10-14T23:45:41.5595335Z ✔ titles, icons, covers and sources are cleaned (0.611639ms)
2026-10-14T23:45:41.5595447Z ✔ the cursor goes there and back, and nonsense is no cursor (0.348924ms)
2026-10-14T23:45:41.5595992Z ✔ a tree puts a row under its parent only when the parent is shown (0.591908ms)
2026-10-14T23:45:41.5596051Z ✔ shared tops leave out children of what is shown and anything shown elsewhere (0.213811ms)
2026-10-14T23:45:41.5596070Z ✔ depth and height come from paths (0.195644ms)
2026-10-14T23:45:41.5596120Z ✔ a person's first request for a folio goes (10.997179ms)
2026-10-14T23:45:41.5596166Z ✔ asking again within a day is refused, for that folio only (8.789805ms)
2026-10-14T23:45:41.5596212Z ✔ a day later they may ask again, and the day starts over (8.784757ms)
2026-10-14T23:45:41.5596253Z ✔ a refused press doesn't push the next allowed time back (9.060561ms)
2026-10-14T23:45:41.5769590Z ✔ every folio RPC method in the contract is answered, and nothing else (2.325231ms)
2026-10-14T23:45:41.5784980Z ✔ Docs' own methods fall through to the legacy switch (0.210827ms)
2026-10-14T23:45:41.8552509Z ✔ erasing folios takes their rows and search rows, deepest first, and leaves the rest (12.623781ms)
2026-10-14T23:45:41.8552672Z ✔ a child still alive under an erased folio goes to the top of where it was (9.723297ms)
2026-10-14T23:45:41.8552699Z ✔ erasing nothing does nothing (9.679341ms)
2026-10-14T23:45:41.8552796Z ✔ deleting a space trashes what is in it together, frees its address and keeps its row marked (11.086863ms)
2026-10-14T23:45:41.8552877Z ✔ a deleted General is still the workspace's default row, so it is never made again (12.773966ms)
2026-10-14T23:45:41.8552980Z ✔ a folio restored from a deleted space lands in General when it is live and the restorer may add to it (0.437396ms)
2026-10-14T23:45:42.1374989Z docs embedding cap reached w1 2 passages wait for the next hour
2026-10-14T23:45:42.1547144Z docs could not embed passages; the next save tries again pag_1 Error: model down
2026-10-14T23:45:42.1774625Z ✔ a page's passages are stored, embedded once, and only changed ones again (18.360722ms)
2026-10-14T23:45:42.1808825Z ✔ a passage that only moved keeps its vector; gone passages leave the index (12.328387ms)
2026-10-14T23:45:42.1808955Z ✔ moving a page to another space files its vectors there without embedding (11.853304ms)
2026-10-14T23:45:42.1809046Z ✔ embedding stops at the hourly cap and the rest waits, kept for words (19.56457ms)
2026-10-14T23:45:42.1809119Z ✔ an embedding failure leaves passages for the next save, never throws (10.463558ms)
2026-10-14T23:45:42.1809189Z ✔ without an embedder, passages are kept for words only (9.382706ms)
2026-10-14T23:45:42.1809245Z ✔ a project's docs file is indexed with its repository (9.265559ms)
2026-10-14T23:45:42.4020271Z ✔ the registry has the doc kind and nothing not built yet (1.913573ms)
2026-10-14T23:45:42.6343215Z ✔ a doc seeds from Markdown and renders it back, with its card (13.947899ms)
2026-10-14T23:45:42.6343359Z ✔ an agent's edit applies to its target, and a missing one doesn't (4.380185ms)
2026-10-14T23:45:42.6343451Z ✔ a doc restores from an old state and from old text (4.714557ms)
2026-10-14T23:45:42.6343499Z ✔ links to other folios and preview lines (0.301743ms)
2026-10-14T23:45:42.6399275Z ✔ Markdown survives a trip through the document (21.952855ms)
2026-10-14T23:45:42.6414179Z ✔ the document has BlockNote's shape: a group of containers with ids (1.325529ms)
2026-10-14T23:45:42.6421417Z ✔ marks are stored as y-prosemirror stores them (1.551309ms)
2026-10-14T23:45:42.6422224Z ✔ nested list items become children (0.495944ms)
2026-10-14T23:45:42.6423395Z ✔ snake_case and URLs are not italicized (0.358768ms)
2026-10-14T23:45:42.6424406Z ✔ the outline names each top-level block for agents (1.144638ms)
2026-10-14T23:45:42.6425253Z ✔ mentions are found by id; search text drops markup (2.642948ms)
2026-10-14T23:45:42.6427005Z ✔ a citation chip is a link to the code, and is found as a citation (2.321335ms)
2026-10-14T23:45:42.7834565Z ✔ the cap comes from its var, 1 GB unless set, and 0 is none (1.285109ms)
2026-10-14T23:45:42.7840153Z ✔ a free workspace's upload past the cap is refused, and says how to make room (0.448183ms)
2026-10-14T23:45:42.9371657Z ✔ the index is filtered by the allowed spaces, or by workspace and after when there are too many (2.169607ms)
2026-10-14T23:45:42.9400900Z ✔ hybrid search fuses ranks: found both ways first (0.401563ms)
2026-10-14T23:45:42.9401184Z ✔ query embeddings are kept a minute (0.557657ms)
2026-10-14T23:45:43.0786412Z ✔ a project's docs are Markdown under docs/ and the README at the root (10.683599ms)
2026-10-14T23:45:43.0798763Z ✔ a file's title is its front matter's, its first heading, or its name (0.797868ms)
2026-10-14T23:45:43.1977792Z ✔ queries are quoted word by word, the last a prefix (1.957388ms)
2026-10-14T23:45:43.1978186Z ✔ a search looks only in spaces the reader can read (1.035624ms)
2026-10-14T23:45:43.1978390Z ✔ a project filter matches the page's projects or its space's (0.363245ms)
2026-10-14T23:45:43.3414745Z ✔ signs AWS's get-vanilla test vector (20.61726ms)
2026-10-14T23:45:43.3486690Z ✔ signs the S3 GET Object example (6.997174ms)
2026-10-14T23:45:43.3520245Z ✔ hashes and encodes as SigV4 wants (3.058651ms)
2026-10-14T23:45:43.3561399Z ✔ puts the query in order (3.718763ms)
2026-10-14T23:45:43.5222144Z ✔ page slugs carry the id, so renames keep links working (2.015355ms)
2026-10-14T23:45:43.8067313Z ✔ slugify drops accents and punctuation (0.392279ms)
2026-10-14T23:45:43.8067458Z ✔ space slugs avoid taken and reserved names (0.50673ms)
2026-10-14T23:45:43.8067507Z ✔ links to pages are found by their ids (1.158889ms)
2026-10-14T23:45:43.8067600Z ✔ threads are kept in the shape the editor reads (8.4269ms)
2026-10-14T23:45:43.8113928Z ✔ viewers can't comment; only authors edit; editors delete others' comments and threads (4.539645ms)
2026-10-14T23:45:43.8116702Z ✔ replies, resolving and reactions (2.248064ms)
2026-10-14T23:45:43.8124158Z ✔ a comment's text and mentions come from its blocks (0.260841ms)
2026-10-14T23:45:44.0059646Z ✔ children come in position order (2.172071ms)
2026-10-14T23:45:44.0065975Z ✔ placing before a sibling takes the midpoint (0.477437ms)
2026-10-14T23:45:44.0079990Z ✔ moving a page among its own siblings ignores where it was (0.214442ms)
2026-10-14T23:45:44.0089977Z ✔ siblings too close together are renumbered (0.234322ms)
2026-10-14T23:45:44.0090114Z ✔ a page can't move under itself or its own descendants (0.349274ms)
2026-10-14T23:45:44.0090145Z ✔ descendants and ancestors (0.302084ms)
2026-10-14T23:45:44.0093758Z ✔ export paths follow the tree and stay unique (0.644467ms)
2026-10-14T23:45:44.0319765Z ℹ tests 126
2026-10-14T23:45:44.0320129Z ℹ suites 0
2026-10-14T23:45:44.0320312Z ℹ pass 126
2026-10-14T23:45:44.0320472Z ℹ fail 0
2026-10-14T23:45:44.0320655Z ℹ cancelled 0
2026-10-14T23:45:44.0320824Z ℹ skipped 0
2026-10-14T23:45:44.0320993Z ℹ todo 0
2026-10-14T23:45:44.0321165Z ℹ duration_ms 4255.481763
2026-10-14T23:45:44.0474590Z 
2026-10-14T23:45:44.0474908Z > @g1t/chat@0.1.0 test
2026-10-14T23:45:44.0475092Z > node --test src/*.test.ts
2026-10-14T23:45:44.0475267Z 
2026-10-14T23:45:44.2294239Z ✔ a channel is private, kept to the workspace, or public; a direct message is always private (1.052561ms)
2026-10-14T23:45:44.2331552Z ✔ who may read: anyone in it; members for a workspace channel; anyone for a public one (0.229425ms)
2026-10-14T23:45:44.2331705Z ✔ someone outside the workspace taken out of a public channel can't join it again on their own (0.224597ms)
2026-10-14T23:45:44.2331765Z ✔ owners always invite guests; members while the workspace lets them (0.324307ms)
2026-10-14T23:45:44.2331828Z ✔ only signed-in people with a confirmed address come in as guests (0.330576ms)
2026-10-14T23:45:44.2331903Z ✔ letting someone in: anyone in the channel for a member; those who invite guests for anyone else (0.144708ms)
2026-10-14T23:45:44.2333998Z ✔ a request's note is trimmed, cut to length, and null when empty (0.310957ms)
2026-10-14T23:45:44.3504922Z ✔ messages, conversations with any, and who said how much, most first (1.930057ms)
2026-10-14T23:45:44.3511726Z ✔ nothing said is zeros, not an error (0.387722ms)
2026-10-14T23:45:44.3523909Z ✔ a span is two times in order (0.305339ms)
2026-10-14T23:45:44.5561770Z g1t's answer broke off Error: binding down
2026-10-14T23:45:44.7934231Z     at file:///home/runner/work/repo/services/chat/src/answer.test.ts:84:11
2026-10-14T23:45:44.7934370Z     at Object.ask (file:///home/runner/work/repo/services/chat/src/answer.test.ts:31:14)
2026-10-14T23:45:44.7934435Z     at runAnswer (file:///home/runner/work/repo/services/chat/src/answer.ts:64:33)
2026-10-14T23:45:44.7934515Z     at async TestContext.<anonymous> (file:///home/runner/work/repo/services/chat/src/answer.test.ts:86:3)
2026-10-14T23:45:44.7934591Z     at async Test.run (node:internal/test_runner/test:1409:7)
2026-10-14T23:45:44.7934657Z     at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
2026-10-14T23:45:44.7934726Z ✔ an answer streams into the message and ends as a normal one (44.22502ms)
2026-10-14T23:45:44.7934781Z ✔ with no provider chosen, g1t says so once, without asking (0.533161ms)
2026-10-14T23:45:44.7934840Z ✔ a chosen provider that cannot answer is a short message, not silence (0.435094ms)
2026-10-14T23:45:44.7934910Z ✔ a refusal or an unreachable service ends as an error message (5.54915ms)
2026-10-14T23:45:44.7934941Z ✔ Stop keeps what came, marked stopped (21.603481ms)
2026-10-14T23:45:44.7935008Z ✔ an old card keeps its links and drops actions nobody answers any more (1.716637ms)
2026-10-14T23:45:44.7935074Z ✔ a card with nothing left to press has no actions (0.335333ms)
2026-10-14T23:45:44.8857406Z ✔ only the one person in a direct message with g1t may clear it, and only their own (5.536441ms)
2026-10-14T23:45:44.8859796Z ✔ clearing deletes everything in that conversation and nothing anywhere else (7.908943ms)
2026-10-14T23:45:44.8864389Z ✔ clearing again, or an empty conversation, deletes nothing and is no error (4.691012ms)
2026-10-14T23:45:44.8869816Z ✔ after a clear, what g1t reads holds none of the old conversation (4.998383ms)
2026-10-14T23:45:45.0428869Z ✔ a reaction is one emoji, however many code points it takes (1.760103ms)
2026-10-14T23:45:45.0433479Z ✔ a reaction is a Unicode emoji or a workspace's own by name (1.37891ms)
2026-10-14T23:45:45.0436471Z ✔ custom emoji names: lowercase letters, digits, - _ +, 2 to 32, not a standard one (0.50614ms)
2026-10-14T23:45:45.0438348Z ✔ an image is known by its bytes, with its size (0.747773ms)
2026-10-14T23:45:45.0440181Z ✔ a custom emoji file is a PNG, GIF or WebP up to 256 KB and 512 pixels a side (0.362504ms)
2026-10-14T23:45:45.0465967Z ✔ a file comes as base64, with or without a data: prefix (0.430336ms)
2026-10-14T23:45:45.0466581Z ✔ a message holds at most 50 kinds of reaction; more of one kind always fits (0.194061ms)
2026-10-14T23:45:45.0466849Z ✔ who may add and remove a workspace's emoji (0.149584ms)
2026-10-14T23:45:45.0467241Z ✔ reactions are counted per message and emoji, in the order first used (1.368986ms)
2026-10-14T23:45:45.0468005Z ✔ a message carries the first ten who reacted, and counts them all (0.405628ms)
2026-10-14T23:45:45.2247459Z ✔ g1t is one reserved member, system:g1t, and only that system key parses (1.895916ms)
2026-10-14T23:45:45.2247627Z ✔ a direct message with g1t is one person and g1t, keyed like any other (0.238608ms)
2026-10-14T23:45:45.2247709Z ✔ only a person's own top-level words in their direct message with g1t start an answer (0.299879ms)
2026-10-14T23:45:45.2247804Z ✔ the conversation maps the person to user and g1t's answers to assistant, alternating (0.57949ms)
2026-10-14T23:45:45.2254313Z ✔ an earlier answer is read back with what it read in g1t, so it is not taken for made up (0.490306ms)
2026-10-14T23:45:45.2254948Z ✔ the conversation leaves out failed answers, the set-up note, the answer being written, cards and deleted messages (0.233751ms)
2026-10-14T23:45:45.2255049Z ✔ a stopped answer still counts as what g1t said (0.427382ms)
2026-10-14T23:45:45.2257619Z ✔ a new conversation reads only what comes after the latest mark (0.202494ms)
2026-10-14T23:45:45.2278127Z ✔ the conversation ends with the person and keeps within Ask's limits, newest first (1.244838ms)
2026-10-14T23:45:45.2296549Z ✔ the page an answer is told is the newest question's, as sent from the top bar (0.98625ms)
2026-10-14T23:45:45.2317224Z ✔ with no provider chosen, g1t says where an owner chooses one (0.336786ms)
2026-10-14T23:45:45.2326636Z ✔ an answer is read as it streams, and unknown events are kept as steps, never text (1.288063ms)
2026-10-14T23:45:45.2344544Z ✔ an answer Auto chose a model for says so; a chosen model's does not (0.217016ms)
2026-10-14T23:45:45.2344668Z ✔ a tool step is kept once, as it last was, and sources are kept whole (0.444587ms)
2026-10-14T23:45:45.2344747Z ✔ an answer that breaks off or fails is never silence (0.295163ms)
2026-10-14T23:45:45.2344826Z ✔ one person's answers are limited to twenty a minute (0.322374ms)
2026-10-14T23:45:45.2378994Z ✔ an answer left mid-stream by a room that went away shows as stopped (0.248052ms)
2026-10-14T23:45:45.4185578Z ✔ posting as g1t is refused for anything that came in from the internet (43.849987ms)
2026-10-14T23:45:45.4186107Z ✔ a service binding's call posts and edits as g1t; anything else is not found (2.779853ms)
2026-10-14T23:45:45.4186618Z ✔ the site's chat client never reaches the internal methods (3.222818ms)
2026-10-14T23:45:45.5362199Z ✔ mentions are found once each, lowercased, in order (2.369066ms)
2026-10-14T23:45:45.5368766Z ✔ an email address or a stray @ is not a mention (0.229855ms)
2026-10-14T23:45:45.5370492Z ✔ a kept mention matches its whole handle only (0.315564ms)
2026-10-14T23:45:45.6773017Z ✔ a message needs something in it, and not too much (22.153006ms)
2026-10-14T23:45:45.9344844Z ✔ a page holds the default, or what was asked within limits (0.335584ms)
2026-10-14T23:45:45.9344977Z ✔ a page read one past its size says where to read on from (0.352149ms)
2026-10-14T23:45:45.9345007Z ✔ the meter counts by UTC day (0.217327ms)
2026-10-14T23:45:45.9345084Z ✔ a socket frame says typing in this channel, or is ignored (0.298608ms)
2026-10-14T23:45:45.9345165Z ✔ a channel name is kept lowercase, without #, spaces as dashes (2.061695ms)
2026-10-14T23:45:45.9345318Z ✔ a channel name uses letters, digits, dashes and underscores, and is not too long (0.239099ms)
2026-10-14T23:45:45.9345420Z ✔ the site's chat routes are not channel names (0.223456ms)
2026-10-14T23:45:45.9345493Z ✔ the same members always make the same direct-message key (0.27306ms)
2026-10-14T23:45:45.9345574Z ✔ a direct message with nobody else, or only yourself, is notes to yourself (0.308513ms)
2026-10-14T23:45:45.9744958Z ✔ a direct message notifies everyone else in it, muted or not, never the author (3.320214ms)
2026-10-14T23:45:45.9746417Z ✔ in a channel, a mention notifies the person named even when muted; the rest only count (0.31269ms)
2026-10-14T23:45:45.9756524Z ✔ a reply notifies the people in its thread unless they muted the conversation (0.202544ms)
2026-10-14T23:45:45.9772212Z ✔ deliveries: counts for everyone, a notification for those it is for, the author's count cleared (2.230599ms)
2026-10-14T23:45:45.9773373Z ✔ a person without a display name is named by their username as they wrote it (0.484377ms)
2026-10-14T23:45:45.9776735Z ✔ a reply links to its thread; a DM to the DM (0.144588ms)
2026-10-14T23:45:45.9777778Z ✔ previews are one short line without markup (0.966842ms)
2026-10-14T23:45:45.9778680Z ✔ counts after a read: what is left past the mark, mentions included, never your own (0.304828ms)
2026-10-14T23:45:46.1218693Z ✔ a workspace without settings lets every member make channels, and new people land in #general (1.892131ms)
2026-10-14T23:45:46.1253969Z ✔ default channels once chosen are kept as chosen, even none (0.360481ms)
2026-10-14T23:45:46.1256864Z ✔ who may make a channel follows its visibility's setting (0.205308ms)
2026-10-14T23:45:46.1257174Z ✔ renaming and archiving: workspace owners always, a channel's owners unless kept to workspace owners (0.295373ms)
2026-10-14T23:45:46.1262694Z ✔ what a role may do, for the page (0.309906ms)
2026-10-14T23:45:46.1264015Z ✔ a change is checked field by field; what is left out stays (0.467502ms)
2026-10-14T23:45:46.1265401Z ✔ settings are kept with their default channels as JSON (0.24621ms)
2026-10-14T23:45:46.2549506Z ✔ unread is what others wrote after your last read (1.042525ms)
2026-10-14T23:45:46.2580523Z ✔ counts per channel, replies included, with mentions of the viewer (1.008654ms)
2026-10-14T23:45:46.2585129Z ✔ the sidebar puts starred first, then the most recently active (8.183374ms)
2026-10-14T23:45:46.2604589Z ✔ a direct message is titled by the others, or by you for notes (0.265459ms)
2026-10-14T23:45:46.2722080Z ℹ tests 83
2026-10-14T23:45:46.2722384Z ℹ suites 0
2026-10-14T23:45:46.2722530Z ℹ pass 83
2026-10-14T23:45:46.2722679Z ℹ fail 0
2026-10-14T23:45:46.2722819Z ℹ cancelled 0
2026-10-14T23:45:46.2722955Z ℹ skipped 0
2026-10-14T23:45:46.2723107Z ℹ todo 0
2026-10-14T23:45:46.2723267Z ℹ duration_ms 2176.955707
2026-10-14T23:45:46.2818514Z 
2026-10-14T23:45:46.2818807Z > @g1t/deployments@0.1.0 test
2026-10-14T23:45:46.2819106Z > node --experimental-transform-types --no-warnings=ExperimentalWarning --test src/*.test.ts
2026-10-14T23:45:46.2819615Z 
2026-10-14T23:45:46.5239012Z ✔ a Read collaborator sees a project's deployments but cannot deploy or change them (1.721194ms)
2026-10-14T23:45:46.5239188Z ✔ an outside collaborator with Write can deploy, but settings and domains need Admin (0.401473ms)
2026-10-14T23:45:46.5239282Z ✔ members follow the workspace's base permission; owners manage everything (0.308843ms)
2026-10-14T23:45:46.5239370Z ✔ anyone can see a public project's deployments, and no more (0.173441ms)
2026-10-14T23:45:46.5239448Z ✔ a preview of a change made for someone is trusted as they are (16.15389ms)
2026-10-14T23:45:47.0399445Z build dpl_1 registry 
2026-10-14T23:45:47.0406850Z build dpl_1 registry 
2026-10-14T23:45:47.0413036Z ✔ while containers are off, the registry step says so in its own words (58.048882ms)
2026-10-14T23:45:47.0433836Z build dpl_1 registry 
2026-10-14T23:45:47.0507155Z build dpl_1 finish 
2026-10-14T23:45:47.0509522Z ✔ a build gets a push-only login for its app's repository, held to its size (10.020863ms)
2026-10-14T23:45:47.0566411Z build dpl_2 finish 
2026-10-14T23:45:47.0656888Z build dpl_1 finish 
2026-10-14T23:45:47.0664313Z ✔ an image outside the app's repository, or not in the registry, is never run (14.690744ms)
2026-10-14T23:45:47.0724261Z build dpl_2 finish 
2026-10-14T23:45:47.1122244Z build dpl_1 finish 
2026-10-14T23:45:47.1126418Z ✔ a container app runs behind g1t's Worker, is metered by its own token, and comes down whole (46.913797ms)
2026-10-14T23:45:47.1242522Z build dpl_1 finish 
2026-10-14T23:45:47.1246926Z ✔ a paused container app keeps its class and stops serving (11.968207ms)
2026-10-14T23:45:47.1349800Z build dpl_1 finish 
2026-10-14T23:45:47.1437771Z build dpl_1 finish 
2026-10-14T23:45:47.1441579Z ✔ the app's Container application is attached to the namespace its Worker's binding names (19.711741ms)
2026-10-14T23:45:47.1459547Z deleted images web-acme dpl_0
2026-10-14T23:45:47.1471292Z build dpl_2 finish 
2026-10-14T23:45:47.1491494Z deleted images web-acme dpl_0
2026-10-14T23:45:47.1512942Z deleted images web-acme dpl_1, dpl_2
2026-10-14T23:45:47.1521065Z ✔ an app keeps the image it runs, the one before it and those still being built, and none once it is down (13.637552ms)
2026-10-14T23:45:47.5968735Z ✔ a build gets a push-only login, for minutes, and pushes to its app's repository (1.940633ms)
2026-10-14T23:45:47.5981439Z ✔ only an image by digest in the app's own repository is run (0.421974ms)
2026-10-14T23:45:47.5981560Z ✔ the app's Worker is g1t's, with its settings and the project's entries as bindings (0.757117ms)
2026-10-14T23:45:47.5981623Z ✔ the container application runs one instance of the app's image at its size (0.265739ms)
2026-10-14T23:45:47.5981644Z ✔ an app's reports are read strictly (0.390957ms)
2026-10-14T23:45:47.5998302Z ✔ container time costs what Cloudflare charges at most, and the margin goes on top (14.311514ms)
2026-10-14T23:45:47.6004865Z ✔ the app's Worker starts its container with the project's entries, meters it and lets it sleep (44.382166ms)
2026-10-14T23:45:47.6004922Z g1t-container-ended {"exitCode":1,"message":"exited"}
2026-10-14T23:45:47.8480872Z ✔ an app that stops before it answers says how it ended (253.802855ms)
2026-10-14T23:45:48.0918297Z ✔ a paused app answers with a notice and its container stops (1.322405ms)
2026-10-14T23:45:48.0918437Z ✔ an environment is named as given, production when not (1.883228ms)
2026-10-14T23:45:48.0918521Z ✔ addresses are http(s), and a payload is an object (0.449184ms)
2026-10-14T23:45:48.0918559Z ✔ refs read as their branch or tag (0.191577ms)
2026-10-14T23:45:48.0918634Z ✔ each state says something on the commit, but inactive (0.202103ms)
2026-10-14T23:45:48.0918713Z ✔ a g1t.page build's status reads as a deployment state (0.223596ms)
2026-10-14T23:45:48.0918796Z ✔ a run's deployment moves on, and a failure sticks until the run ends (0.169234ms)
2026-10-14T23:45:48.0918873Z ✔ a run's outcome for an environment comes from the jobs that ran (0.175653ms)
2026-10-14T23:45:48.0918910Z ✔ production comes first, then the newest (8.195172ms)
2026-10-14T23:45:48.0918985Z ✔ a g1t.page build is a deployment in the same model (0.488483ms)
2026-10-14T23:45:48.0919056Z ✔ a build's statuses come from its own timestamps (0.459169ms)
2026-10-14T23:45:48.2039462Z ✔ hostnames are lowercased and cleaned of what people paste (1.501655ms)
2026-10-14T23:45:48.2063169Z ✔ international names become punycode (4.593035ms)
2026-10-14T23:45:48.2063296Z ✔ what is not a hostname g1t can serve is refused (0.581243ms)
2026-10-14T23:45:48.2063318Z ✔ g1t's own domains are refused (0.248243ms)
2026-10-14T23:45:48.2063333Z ✔ apex and www twins (0.437496ms)
2026-10-14T23:45:48.2063360Z ✔ Cloudflare's states become a domain's (0.287662ms)
2026-10-14T23:45:48.2069069Z ✔ the records Cloudflare asks for are listed (1.144769ms)
2026-10-14T23:45:48.3839758Z ✔ every request and CPU millisecond is metered from the first, with nothing included (18.663106ms)
2026-10-14T23:45:48.3859173Z ✔ a busy workspace on the plan is never capped, only charged (0.251408ms)
2026-10-14T23:45:48.3859310Z ✔ custom domains are charged from the first, by the month (0.255153ms)
2026-10-14T23:45:48.3864427Z ✔ apps are not metered: a month with only apps up and no traffic costs nothing (0.204217ms)
2026-10-14T23:45:48.3904648Z ✔ amounts read plainly (0.252429ms)
2026-10-14T23:45:48.3906249Z ✔ a count that does not move the meter is not written (0.302985ms)
2026-10-14T23:45:49.1319931Z ✔ a transfer rebuilds every app under the new workspace, paused ones too (77.214343ms)
2026-10-14T23:45:49.1320025Z ✔ a second delivery builds nothing more (14.310483ms)
2026-10-14T23:45:49.1320047Z could not rebuild moved apps [
2026-10-14T23:45:49.1320087Z   'flagon-io/lab-api (v2): The runner answered 503.',
2026-10-14T23:45:49.1320113Z   'flagon-io/lab-api: The runner answered 503.'
2026-10-14T23:45:49.1320129Z ]
2026-10-14T23:45:49.1320246Z deployments could not handle repo.transferred Error: could not rebuild after the move to flagon-io/lab-api: flagon-io/lab-api (v2): The runner answered 503.; flagon-io/lab-api: The runner answered 503.
2026-10-14T23:45:49.1320340Z     at Deployments.moved (/home/runner/work/repo/services/deployments/src/index.ts:2135:43)
2026-10-14T23:45:49.1320418Z     at async Deployments.onEvent (/home/runner/work/repo/services/deployments/src/index.ts:1880:9)
2026-10-14T23:45:49.1320493Z     at async Object.queue (/home/runner/work/repo/services/deployments/src/index.ts:2974:9)
2026-10-14T23:45:49.1320578Z     at async deliver (/home/runner/work/repo/services/deployments/src/moves.flow.test.ts:223:3)
2026-10-14T23:45:49.1320672Z     at async TestContext.<anonymous> (/home/runner/work/repo/services/deployments/src/moves.flow.test.ts:252:16)
2026-10-14T23:45:49.1320744Z     at async Test.run (node:internal/test_runner/test:1409:7)
2026-10-14T23:45:49.1320817Z     at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
2026-10-14T23:45:49.1320887Z ✔ a rebuild that could not be queued is not acked, and the next delivery queues it (33.839279ms)
2026-10-14T23:45:49.1320902Z could not rebuild moved apps [
2026-10-14T23:45:49.1320935Z   'flagon-io/lab-api (v2): The runner answered 503.',
2026-10-14T23:45:49.1320956Z   'flagon-io/lab-api: The runner answered 503.'
2026-10-14T23:45:49.1320971Z ]
2026-10-14T23:45:49.1321327Z deployments could not handle repo.transferred Error: could not rebuild after the move to flagon-io/lab-api: flagon-io/lab-api (v2): The runner answered 503.; flagon-io/lab-api: The runner answered 503.
2026-10-14T23:45:49.1321404Z     at Deployments.moved (/home/runner/work/repo/services/deployments/src/index.ts:2135:43)
2026-10-14T23:45:49.1321478Z     at async Deployments.onEvent (/home/runner/work/repo/services/deployments/src/index.ts:1880:9)
2026-10-14T23:45:49.1321549Z     at async Object.queue (/home/runner/work/repo/services/deployments/src/index.ts:2974:9)
2026-10-14T23:45:49.1321620Z     at async deliver (/home/runner/work/repo/services/deployments/src/moves.flow.test.ts:223:3)
2026-10-14T23:45:49.1321712Z     at async TestContext.<anonymous> (/home/runner/work/repo/services/deployments/src/moves.flow.test.ts:266:3)
2026-10-14T23:45:49.1321788Z     at async Test.run (node:internal/test_runner/test:1409:7)
2026-10-14T23:45:49.1321858Z     at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
2026-10-14T23:45:49.1321930Z ✔ the sweep picks up a move whose deliveries ran out, keyed on the new workspace (26.638919ms)
2026-10-14T23:45:49.1322004Z ✔ a move waits, without refused deployments, while the new workspace is over its limit (17.287842ms)
2026-10-14T23:45:49.1322023Z build dpl_01m4ycxm07eqmvmkfrtmsm5w20 finish 
2026-10-14T23:45:49.1322094Z ✔ once the new app is live, the old address redirects to it, paused or not (19.866974ms)
2026-10-14T23:45:49.1322111Z could not rebuild moved apps [
2026-10-14T23:45:49.1322142Z   'flagon-io/lab-api (v2): The runner answered 503.',
2026-10-14T23:45:49.1322166Z   'flagon-io/lab-api: The runner answered 503.'
2026-10-14T23:45:49.1322179Z ]
2026-10-14T23:45:49.1322252Z ✔ the sweep never pauses a moved app for its old workspace's limit (44.566212ms)
2026-10-14T23:45:49.1322701Z ✔ a branch's preview comes down once its branch is gone, and a pull request's stays (11.932783ms)
2026-10-14T23:45:49.3033906Z ✔ each stale app is one target, paused or not, with the names it replaces (2.199031ms)
2026-10-14T23:45:49.3042121Z ✔ an app under two old names (moved twice) is built once, replacing both (0.318128ms)
2026-10-14T23:45:49.3049593Z ✔ a build a move dropped is built again, at its newer commit (2.445481ms)
2026-10-14T23:45:49.3057147Z ✔ only a queued build counts as rebuilt; refusals and errors are tried again (0.229935ms)
2026-10-14T23:45:49.3084014Z ✔ a rebuild that could not start waits before it is tried again (0.32679ms)
2026-10-14T23:45:49.3084478Z ✔ an app is its project's current workspace's, not the one its row names (0.197607ms)
2026-10-14T23:45:49.7391572Z ✔ a workspace named like a domain loses that hyphen in hostnames (1.125189ms)
2026-10-14T23:45:49.7397236Z ✔ an app's name uses that spelling, so no label reads as another site (0.408864ms)
2026-10-14T23:45:49.9120960Z ✔ the location keeps the path and query, on the new host (1.006741ms)
2026-10-14T23:45:50.1555237Z ✔ the script answers every request with a 301 to the same place (29.32365ms)
2026-10-14T23:45:50.1555347Z ✔ the target is lowercased and must be a hostname (0.512139ms)
2026-10-14T23:45:50.1555415Z ✔ git's words for a commit that is gone are recognised, and only those (1.164919ms)
2026-10-14T23:45:50.1555475Z ✔ a commit that is gone says so plainly, naming the pull request (0.342304ms)
2026-10-14T23:45:50.1555547Z ✔ nothing built yet, or the last build went up long ago: build (3.220344ms)
2026-10-14T23:45:50.1555605Z ✔ a commit that is gone is never tried again, with or without backoff (0.251758ms)
2026-10-14T23:45:50.1555627Z ✔ each identical failure doubles the wait (0.297126ms)
2026-10-14T23:45:50.1555674Z ✔ three identical failures in a row stop it (0.235754ms)
2026-10-14T23:45:50.1555721Z ✔ a different error or commit starts the count again (0.25357ms)
2026-10-14T23:45:50.1555777Z ✔ a refused or skipped rebuild waits the base delay with backoff, not without (0.172779ms)
2026-10-14T23:45:50.2727860Z ✔ a deployment ships what no deployment shipped before, and stops at the last one's history (1.988345ms)
2026-10-14T23:45:50.2728047Z ✔ a change shipped is live from the deployment that first shipped it (0.592229ms)
2026-10-14T23:45:50.2728154Z ✔ a change not shipped is deploying, failed or waiting, by the production attempts after it (0.319159ms)
2026-10-14T23:45:50.2728245Z ✔ a change that landed before recording began goes live with the first success after it (0.475554ms)
2026-10-14T23:45:50.2728328Z ✔ only a production success is a shipment, linked to its page (0.368864ms)
2026-10-14T23:45:50.2728355Z ✔ addresses stay on the site (0.17343ms)
2026-10-14T23:45:50.4348380Z ✔ an app's OpenTelemetry variables point at the project, unless it set its own (4.086334ms)
2026-10-14T23:45:50.4367570Z ✔ tags and resource attributes name the project and deployment (0.295514ms)
2026-10-14T23:45:50.4373777Z ✔ Cloudflare's traces go to the destination, logs stay with the Tail Worker (0.282193ms)
2026-10-14T23:45:51.2243705Z ✔ a push to the production branch opens a production build the job runs, with no sandbox and nothing reserved (59.377697ms)
2026-10-14T23:45:51.2243772Z build dpl_01m4ycxnwde7n9bjqs6q2hck2f started 
2026-10-14T23:45:51.2243789Z build dpl_01m4ycxnwde7n9bjqs6q2hck2f finish 
2026-10-14T23:45:51.2243812Z build dpl_01m4ycxnwde7n9bjqs6q2hck2f started 
2026-10-14T23:45:51.2243827Z build dpl_sandbox finish 
2026-10-14T23:45:51.2243895Z ✔ the job reports with the build's token, and its seconds are not charged again (17.75292ms)
2026-10-14T23:45:51.2243913Z build dpl_01m4ycxnx4ex88fxsgspgqgb2m finish 
2026-10-14T23:45:51.2243967Z build dpl_01m4ycxnx9ebg82xmskrb3djj7 fail npm run build failed
2026-10-14T23:45:51.2243975Z build dpl_owed finish 
2026-10-14T23:45:51.2244028Z ✔ a sandbox's build is still charged by the second; a workflow job's never is (20.922879ms)
2026-10-14T23:45:51.2244045Z build not charged yet dpl_owed billing is down
2026-10-14T23:45:51.2244056Z build charge left for the sweep dpl_owed 30
2026-10-14T23:45:51.2244070Z build not charged yet dpl_owed billing is down
2026-10-14T23:45:51.2244114Z could not remove orphans TypeError: (intermediate value) is not iterable
2026-10-14T23:45:51.2244188Z     at Deployments.removeOrphans (/home/runner/work/repo/services/deployments/src/index.ts:2700:26)
2026-10-14T23:45:51.2244269Z     at async Deployments.sweep (/home/runner/work/repo/services/deployments/src/index.ts:2625:5)
2026-10-14T23:45:51.2244337Z     at async Object.scheduled (/home/runner/work/repo/services/deployments/src/index.ts:2984:5)
2026-10-14T23:45:51.2244440Z     at async TestContext.<anonymous> (/home/runner/work/repo/services/deployments/src/workflow-builds.flow.test.ts:280:3)
2026-10-14T23:45:51.2244513Z     at async Test.run (node:internal/test_runner/test:1409:7)
2026-10-14T23:45:51.2244580Z     at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
2026-10-14T23:45:51.2244595Z build charged late dpl_owed 30
2026-10-14T23:45:51.2244658Z could not remove orphans TypeError: (intermediate value) is not iterable
2026-10-14T23:45:51.2244727Z     at Deployments.removeOrphans (/home/runner/work/repo/services/deployments/src/index.ts:2700:26)
2026-10-14T23:45:51.2244875Z     at async Deployments.sweep (/home/runner/work/repo/services/deployments/src/index.ts:2625:5)
2026-10-14T23:45:51.2244946Z     at async Object.scheduled (/home/runner/work/repo/services/deployments/src/index.ts:2984:5)
2026-10-14T23:45:51.2245054Z     at async TestContext.<anonymous> (/home/runner/work/repo/services/deployments/src/workflow-builds.flow.test.ts:285:3)
2026-10-14T23:45:51.2245123Z     at async Test.run (node:internal/test_runner/test:1409:7)
2026-10-14T23:45:51.2245177Z     at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
2026-10-14T23:45:51.2245223Z could not remove orphans TypeError: (intermediate value) is not iterable
2026-10-14T23:45:51.2245270Z     at Deployments.removeOrphans (/home/runner/work/repo/services/deployments/src/index.ts:2700:26)
2026-10-14T23:45:51.2245316Z     at async Deployments.sweep (/home/runner/work/repo/services/deployments/src/index.ts:2625:5)
2026-10-14T23:45:51.2245362Z     at async Object.scheduled (/home/runner/work/repo/services/deployments/src/index.ts:2984:5)
2026-10-14T23:45:51.2245423Z     at async TestContext.<anonymous> (/home/runner/work/repo/services/deployments/src/workflow-builds.flow.test.ts:286:3)
2026-10-14T23:45:51.2245469Z     at async Test.run (node:internal/test_runner/test:1409:7)
2026-10-14T23:45:51.2245526Z     at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
2026-10-14T23:45:51.2245618Z ✔ a build billing cannot charge still goes live and is announced; the sweep charges it once, later (36.217269ms)
2026-10-14T23:45:51.2245688Z ✔ another branch builds its preview; a pull request's run builds the pull request's (16.501862ms)
2026-10-14T23:45:51.2245756Z ✔ a pull request from a fork, or one that had to be approved, gets no build secrets (15.844316ms)
2026-10-14T23:45:51.2245849Z ✔ it is refused without a job's write token, after the job, without the plan, or with previews off (15.499428ms)
2026-10-14T23:45:51.2245943Z ✔ a job that ends without finishing its build fails the build at once, and leaves a finished one be (10.993664ms)
2026-10-14T23:45:51.5255523Z ✔ only a workflow job's token for the repository, with deployments: write, opens a build (2.006182ms)
2026-10-14T23:45:51.5261578Z ✔ a run on the production branch builds production; another branch, its preview; a pull request, its own (0.390526ms)
2026-10-14T23:45:51.5275849Z ✔ a run from a fork, from someone who cannot push, or one that needed approval gets no secrets (0.235854ms)
2026-10-14T23:45:51.5275971Z ✔ the commit is the run's unless one is given (0.403716ms)
2026-10-14T23:45:51.5276060Z ✔ the project is the one named, or the only one with Deployments on (0.294982ms)
2026-10-14T23:45:51.5276572Z ✔ a read-only token opens only a preview, and only from the deploy workflow g1t manages (0.202354ms)
2026-10-14T23:45:51.5277747Z ✔ a build its job left open says how the job ended (0.278488ms)
2026-10-14T23:45:51.5436055Z ℹ tests 95
2026-10-14T23:45:51.5436407Z ℹ suites 0
2026-10-14T23:45:51.5436684Z ℹ pass 95
2026-10-14T23:45:51.5436855Z ℹ fail 0
2026-10-14T23:45:51.5437026Z ℹ cancelled 0
2026-10-14T23:45:51.5437219Z ℹ skipped 0
2026-10-14T23:45:51.5437432Z ℹ todo 0
2026-10-14T23:45:51.5437655Z ℹ duration_ms 5221.626136
2026-10-14T23:45:51.5544304Z 
2026-10-14T23:45:51.5544404Z > @g1t/notify@0.1.0 test
2026-10-14T23:45:51.5544428Z > node --test src/*.test.ts
2026-10-14T23:45:51.5544446Z 
2026-10-14T23:45:51.7926910Z ✔ a device is an Expo push token, a platform and maybe a name (2.440654ms)
2026-10-14T23:45:51.7927105Z ✔ a message says what a browser push says, with where it is in chat (0.49301ms)
2026-10-14T23:45:51.7943681Z ✔ what is not said to you goes at normal priority; one with no conversation threads by itself (0.233891ms)
2026-10-14T23:45:51.7945599Z ✔ a card's place travels with it (0.298578ms)
2026-10-14T23:45:51.7949556Z ✔ tickets: ok counts, DeviceNotRegistered is gone, anything else is an error (0.383005ms)
2026-10-14T23:45:51.7953532Z ✔ sending: 100 to a request, JSON with Expo's headers, the access token only when set (34.320501ms)
2026-10-14T23:45:51.7956376Z ✔ a failed request counts nothing and the others still count (1.793903ms)
2026-10-14T23:45:51.9179651Z ✔ a notification of a message from before the clear is dropped; one after is told (1.007783ms)
2026-10-14T23:45:51.9182040Z ✔ forgetting is kept per workspace and conversation, and takes only chat's ids (0.384967ms)
2026-10-14T23:45:52.0627267Z ✔ the default hears of what is said to you or waits on you, not everything (1.707553ms)
2026-10-14T23:45:52.3585813Z ✔ a workspace's own level wins over the general one (0.38007ms)
2026-10-14T23:45:52.3585984Z ✔ changes are checked: unknown levels ignored, null clears, the same as the general level is no override (0.389955ms)
2026-10-14T23:45:52.3586074Z ✔ a tab counts as in front of you only while focused and recently heard from (0.235674ms)
2026-10-14T23:45:52.3586149Z ✔ push only when no tab is focused, there is a browser to push to, and the level wants it (0.561182ms)
2026-10-14T23:45:52.3586228Z ✔ notifications are cleaned: kinds checked, links kept on the site, text trimmed (1.989847ms)
2026-10-14T23:45:52.3586300Z ✔ settled threads are strings, each once, and bounded (0.577237ms)
2026-10-14T23:45:52.3586372Z ✔ a push is small and collapses by conversation (0.233791ms)
2026-10-14T23:45:52.3586436Z ✔ counts add up, replace on set, never go below zero, and keep mute (0.396535ms)
2026-10-14T23:45:52.3586512Z ✔ totals leave muted unread out, as the rail does, but count their mentions (0.577506ms)
2026-10-14T23:45:52.3586574Z ✔ a notification's card is checked: its place, its actions, links kept on the site (0.441763ms)
2026-10-14T23:45:52.3586642Z ✔ a push shows only the card's actions that need nothing typed or confirmed, two at most (0.31988ms)
2026-10-14T23:45:52.3586721Z ✔ a person with only the phone app is pushed to: the feed counts browsers and phones together (0.824047ms)
2026-10-14T23:45:52.3586785Z ✔ presence comes from the tabs: none is offline, all idle is away, one in use is active (1.145019ms)
2026-10-14T23:45:52.3586849Z ✔ a status is an emoji and a few words, trimmed, and clears at a time in the future (0.694342ms)
2026-10-14T23:45:52.3586906Z ✔ a status and Do Not Disturb are gone once their time passes (0.448213ms)
2026-10-14T23:45:52.3587111Z ✔ Do Not Disturb resumes with null, and refuses a time in the past (0.193861ms)
2026-10-14T23:45:52.3587172Z ✔ a calendar never replaces a status set by hand, but replaces its own (0.309014ms)
2026-10-14T23:45:52.3587231Z ✔ Do Not Disturb silences toasts and pushes; a test still shows (0.933071ms)
2026-10-14T23:45:52.3587294Z ✔ entries say how a person shows, and compare without their time (0.331768ms)
2026-10-14T23:45:52.3587355Z ✔ what is kept reads back, and anything else reads as nothing (0.328383ms)
2026-10-14T23:45:52.3587420Z ✔ a workspace's presence narrows to the people asked about (0.302875ms)
2026-10-14T23:45:52.3587486Z ✔ workspaces are slugs, lowercased and distinct (0.392689ms)
2026-10-14T23:45:52.3587549Z ✔ a workspace slug is lowercased and checked (1.043617ms)
2026-10-14T23:45:52.3587613Z ✔ the first mark starts a visit with nothing before it (1.185049ms)
2026-10-14T23:45:52.3587679Z ✔ marks close together are one visit; a gap starts the next (0.23272ms)
2026-10-14T23:45:52.3587705Z ✔ a mark never moves the visit back (0.170747ms)
2026-10-14T23:45:52.3587774Z ✔ a mark is never in the future, nor more than a day behind (0.282324ms)
2026-10-14T23:45:52.3587841Z ✔ last here: the visit before during one, its last mark after (0.205939ms)
2026-10-14T23:45:52.4376710Z ✔ a change keeps only what a change carries (1.717368ms)
2026-10-14T23:45:52.4383817Z ✔ what is not a change is dropped (0.450577ms)
2026-10-14T23:45:52.4396797Z ✔ changes go to their repositories in the order they came (3.72371ms)
2026-10-14T23:45:52.4397197Z ✔ each watcher hears the repository by the name it asked for (0.249524ms)
2026-10-14T23:45:52.4397356Z ✔ repository ids and paths are checked (0.289625ms)
2026-10-14T23:45:52.4397866Z ✔ a watch lasts its time and no longer (0.181312ms)
2026-10-14T23:45:52.5716799Z ✔ encryption reproduces RFC 8291's example byte for byte (15.386889ms)
2026-10-14T23:45:52.5754406Z ✔ the example's body decrypts with the subscriber's key (3.32429ms)
2026-10-14T23:45:52.5826649Z ✔ a fresh key and salt each time, and it still round-trips (7.998657ms)
2026-10-14T23:45:52.5828558Z ✔ too long a message for one record is refused (0.524477ms)
2026-10-14T23:45:52.5875604Z ✔ the VAPID JWT: ES256, the push service's origin, a 12-hour expiry, a subject, and a signature that verifies (4.118112ms)
2026-10-14T23:45:52.6209130Z ✔ a push is posted encrypted with its headers; 404 and 410 mean gone (33.682073ms)
2026-10-14T23:45:52.6337119Z ℹ tests 50
2026-10-14T23:45:52.6346837Z ℹ suites 0
2026-10-14T23:45:52.6347004Z ℹ pass 50
2026-10-14T23:45:52.6347142Z ℹ fail 0
2026-10-14T23:45:52.6347287Z ℹ cancelled 0
2026-10-14T23:45:52.6347457Z ℹ skipped 0
2026-10-14T23:45:52.6347625Z ℹ todo 0
2026-10-14T23:45:52.6347787Z ℹ duration_ms 1038.249637
2026-10-14T23:45:52.6411249Z 
2026-10-14T23:45:52.6411485Z > @g1t/og@0.1.0 test
2026-10-14T23:45:52.6411625Z > node --test src/*.test.ts
2026-10-14T23:45:52.6411757Z 
2026-10-14T23:45:52.8164441Z platform pause unreadable, so nothing is paused Error: platform_pause failed with status 500
2026-10-14T23:45:52.8196420Z ✔ while renders are paused, a miss gets the cached brand card, kept a minute (28.279253ms)
2026-10-14T23:45:52.8199771Z ✔ with no brand card cached, a miss is sent to the static logo (0.242413ms)
2026-10-14T23:45:52.8212785Z ✔ the platform pause is read once per 30 seconds, and nothing is paused when billing cannot say (2.000663ms)
2026-10-14T23:45:52.9575789Z ✔ paths are split and decoded, and anything else is refused (2.522908ms)
2026-10-14T23:45:52.9579659Z ✔ the site's own pages get their own cards, or the brand card (0.563195ms)
2026-10-14T23:45:52.9592714Z ✔ a workspace shows its name and how many projects are public (0.395153ms)
2026-10-14T23:45:52.9593705Z ✔ a person shows their name, bio and public work, looked up as no one (0.359891ms)
2026-10-14T23:45:52.9594576Z ✔ a public project shows its name, description and open work (0.264237ms)
2026-10-14T23:45:52.9599096Z ✔ issues, pull requests and Soon pages get cards of their own (0.643797ms)
2026-10-14T23:45:52.9603655Z ✔ nothing private ever reaches a card (0.530336ms)
2026-10-14T23:45:52.9606087Z ✔ a private project on a public repository keeps its name to itself (0.320251ms)
2026-10-14T23:45:52.9607231Z ✔ every lookup is made with no viewer (0.610035ms)
2026-10-14T23:45:52.9608935Z ✔ a service that fails gives the brand card, marked so it is not kept (0.419139ms)
2026-10-14T23:45:52.9610712Z ✔ a docs card is bounded, and has a title even without one (0.367131ms)
2026-10-14T23:45:52.9612242Z ✔ the cache key keeps only what changes the card (1.100693ms)
2026-10-14T23:45:52.9613303Z ✔ a v the site never writes is left out of the key (0.298419ms)
2026-10-14T23:45:52.9614929Z ✔ a path is keyed by the page whose card it shows (0.35969ms)
2026-10-14T23:45:52.9617115Z ✔ a path resolves to the same card as the page it is keyed by (0.434632ms)
2026-10-14T23:45:53.0807836Z ✔ an external production is visited only at a public address (1.827263ms)
2026-10-14T23:45:53.3661069Z ✔ an external request names a public http(s) address and a commit or a day (1.302736ms)
2026-10-14T23:45:53.3661203Z ✔ external screenshots are kept apart, by host (0.443746ms)
2026-10-14T23:45:53.3661289Z ✔ an external screenshot stands for a day, and not from before the deploy (0.276575ms)
2026-10-14T23:45:53.3661368Z ✔ the daily refresh takes the missing and the stalest first, up to its limit (0.327442ms)
2026-10-14T23:45:53.3661430Z ✔ only apps on g1t.page, with a commit, are taken (0.37257ms)
2026-10-14T23:45:53.3661450Z ✔ keys are by hostname (0.163386ms)
2026-10-14T23:45:53.3661510Z ✔ a failed attempt at a commit waits before it is tried again (0.201663ms)
2026-10-14T23:45:53.3661578Z ✔ a screenshot is current when it shows the commit and was taken after the deploy (0.26679ms)
2026-10-14T23:45:53.3661617Z ✔ kept objects expire after KEEP_DAYS (1.620373ms)
2026-10-14T23:45:53.3661631Z ℹ tests 28
2026-10-14T23:45:53.3661651Z ℹ suites 0
2026-10-14T23:45:53.3661666Z ℹ pass 28
2026-10-14T23:45:53.3661679Z ℹ fail 0
2026-10-14T23:45:53.3661695Z ℹ cancelled 0
2026-10-14T23:45:53.3661982Z ℹ skipped 0
2026-10-14T23:45:53.3661995Z ℹ todo 0
2026-10-14T23:45:53.3662004Z ℹ duration_ms 420.83428
2026-10-14T23:45:53.3662015Z 
2026-10-14T23:45:53.3662026Z > @g1t/pages@0.1.0 test
2026-10-14T23:45:53.3662040Z > node --test src/*.test.ts
2026-10-14T23:45:53.3662052Z 
2026-10-14T23:45:53.3662064Z g1t-request {
2026-10-14T23:45:53.3662080Z   id: 'ebf6ab652e028db9',
2026-10-14T23:45:53.3662093Z   script: 'web-acme',
2026-10-14T23:45:53.3662120Z   trace_id: '7ca62a329ec630f4a7aa1f78684972a7',
2026-10-14T23:45:53.3662134Z   app: null
2026-10-14T23:45:53.3662145Z }
2026-10-14T23:45:53.3662156Z g1t-request {
2026-10-14T23:45:53.3662170Z   id: '27e4d4c1013a7da1',
2026-10-14T23:45:53.3662182Z   script: 'shop-acme',
2026-10-14T23:45:53.3662204Z   trace_id: 'ff9ef0ab28ab74ad36f363a76222760d',
2026-10-14T23:45:53.3662348Z   app: null
2026-10-14T23:45:53.3662363Z }
2026-10-14T23:45:53.3662375Z g1t-request {
2026-10-14T23:45:53.3662386Z   id: 'cb0748f03b46e603',
2026-10-14T23:45:53.3662398Z   script: 'web-acme',
2026-10-14T23:45:53.3662443Z   trace_id: '51dcee849584ec270da0b5e86bf09928',
2026-10-14T23:45:53.3662456Z   app: null
2026-10-14T23:45:53.3662469Z }
2026-10-14T23:45:53.3662484Z g1t-request {
2026-10-14T23:45:53.3662497Z   id: '47692febae75bbd8',
2026-10-14T23:45:53.3662512Z   script: 'web-git-x-acme',
2026-10-14T23:45:53.3662535Z   trace_id: 'e1344fec7903dbedec3708920b272b80',
2026-10-14T23:45:53.3662549Z   app: null
2026-10-14T23:45:53.3662560Z }
2026-10-14T23:45:53.3662574Z g1t-request {
2026-10-14T23:45:53.3662584Z   id: '9d4b4215e2f91802',
2026-10-14T23:45:53.3662598Z   script: 'gone-acme',
2026-10-14T23:45:53.3662620Z   trace_id: '4f08ca8e1f78d7fa53ced78d20f3d5af',
2026-10-14T23:45:53.3662632Z   app: null
2026-10-14T23:45:53.3662645Z }
2026-10-14T23:45:53.3662657Z g1t-request {
2026-10-14T23:45:53.3662669Z   id: '78b30bd8c42016b8',
2026-10-14T23:45:53.3662681Z   script: 'lab-api-flagon-io',
2026-10-14T23:45:53.3662704Z   trace_id: '16762b33df2da6997e3cf1b30322f2fc',
2026-10-14T23:45:53.3662716Z   app: null
2026-10-14T23:45:53.3662726Z }
2026-10-14T23:45:53.3662736Z g1t-request {
2026-10-14T23:45:53.3662747Z   id: '4b503dd666015f65',
2026-10-14T23:45:53.3662756Z   script: 'shop-acme',
2026-10-14T23:45:53.3662774Z   trace_id: 'c8fa197a5bf561bf81e7f7aa6aa62ed6',
2026-10-14T23:45:53.3662786Z   app: null
2026-10-14T23:45:53.3662796Z }
2026-10-14T23:45:53.3662808Z g1t-request {
2026-10-14T23:45:53.3662818Z   id: '770b3bb02c17fd54',
2026-10-14T23:45:53.3662830Z   script: 'web-acme',
2026-10-14T23:45:53.3662850Z   trace_id: '27334f60b85b3dd8c6a53fa53c91de1f',
2026-10-14T23:45:53.3662863Z   app: null
2026-10-14T23:45:53.3663038Z }
2026-10-14T23:45:53.3663109Z ✔ hosts on g1t.page are the home page, the fallback origin, or an app (1.788114ms)
2026-10-14T23:45:53.3663137Z ✔ any other host is a custom domain (0.515193ms)
2026-10-14T23:45:53.3663202Z ✔ entries are read only when they are well formed (0.278819ms)
2026-10-14T23:45:53.3663225Z ✔ redirects keep the path and query (0.187292ms)
2026-10-14T23:45:53.3663295Z ✔ a custom domain is served by its project's app, with the request's host kept (31.354729ms)
2026-10-14T23:45:53.3663359Z ✔ a paired domain redirects with a 308, path and query kept (1.217708ms)
2026-10-14T23:45:53.3663419Z ✔ an unknown custom domain gets the branded 404 (2.13794ms)
2026-10-14T23:45:53.3663474Z ✔ a custom domain whose app is not up says so (1.298069ms)
2026-10-14T23:45:53.3663534Z ✔ g1t.page addresses dispatch by label as before (3.264471ms)
2026-10-14T23:45:53.3663596Z ✔ an app's old address redirects to its new one, whatever the old script answers (1.277758ms)
2026-10-14T23:45:53.3663656Z ✔ an app address with no redirect, or a failing lookup, is served as it is (1.061293ms)
2026-10-14T23:45:53.3663718Z ✔ every app runs within the limits, and one that goes over them says so (1.045139ms)
2026-10-14T23:45:53.3663806Z ✔ each request gets an id and continues the caller's trace, or starts one (0.325769ms)
2026-10-14T23:45:53.3663927Z ✔ an app's own entry carries what its requests are filed under (0.1467ms)
2026-10-14T23:45:53.3663940Z ℹ tests 14
2026-10-14T23:45:53.3663951Z ℹ suites 0
2026-10-14T23:45:53.3665005Z ℹ pass 14
2026-10-14T23:45:53.3665022Z ℹ fail 0
2026-10-14T23:45:53.3665034Z ℹ cancelled 0
2026-10-14T23:45:53.3665046Z ℹ skipped 0
2026-10-14T23:45:53.3665057Z ℹ todo 0
2026-10-14T23:45:53.3665072Z ℹ duration_ms 177.898709
2026-10-14T23:45:53.3665083Z 
2026-10-14T23:45:53.3665095Z > @g1t/projects@0.1.0 test
2026-10-14T23:45:53.3665106Z > node --test src/*.test.ts
2026-10-14T23:45:53.3665119Z 
2026-10-14T23:45:53.4871250Z ✔ a private project is seen by those who can read its repository (1.224538ms)
2026-10-14T23:45:53.4875986Z ✔ changing a project takes Maintain (0.435744ms)
2026-10-14T23:45:53.6022550Z ✔ a first piece of activity scores one (1.932071ms)
2026-10-14T23:45:53.6054751Z ✔ activity counts half as much a week later (0.221322ms)
2026-10-14T23:45:53.6054879Z ✔ a busy project outranks one busy long ago (0.331768ms)
2026-10-14T23:45:53.6054962Z ✔ an event delivered late never moves the time back (0.165959ms)
2026-10-14T23:45:53.6054994Z ✔ nonsense counts as nothing (0.204366ms)
2026-10-14T23:45:53.6055070Z ✔ pushes, work and deployments count; housekeeping does not (0.150586ms)
2026-10-14T23:45:53.7068397Z ✔ a project without its own description shows its repository's, as it is now (1.422355ms)
2026-10-14T23:45:53.7080407Z ✔ its own description wins over the repository's (0.176856ms)
2026-10-14T23:45:53.7081014Z ✔ a change sets its own, clears back to the repository's, or leaves it (0.236826ms)
2026-10-14T23:45:53.8393101Z ✔ a Composer package is a library; a Composer project is an app (2.487123ms)
2026-10-14T23:45:53.8396839Z ✔ package.json: an entry point without a start or dev script is a library (0.667142ms)
2026-10-14T23:45:53.8396944Z ✔ Cargo: a library and no binary is a library (0.410246ms)
2026-10-14T23:45:53.8408797Z ✔ Go: a module with no package main at its root is a library (0.542624ms)
2026-10-14T23:45:53.8409064Z ✔ Python: a build backend and no app framework is a library (0.901663ms)
2026-10-14T23:45:53.8409435Z ✔ the language's manifest decides before package.json, and a Workers config is always an app (0.279019ms)
2026-10-14T23:45:53.8411278Z ✔ the setting wins over everything (0.272959ms)
2026-10-14T23:45:53.8413401Z ✔ where it runs: set, or on g1t while Deployments are on, or nobody has said (0.341442ms)
2026-10-14T23:45:53.8414508Z ✔ an app that deploys production itself deploys itself, until something says otherwise (0.435694ms)
2026-10-14T23:45:53.8416844Z ✔ a change to the setting keeps it coherent (0.465088ms)
2026-10-14T23:45:53.8423646Z ✔ on auto: Deployments on, then packages, then files, then an app (0.229375ms)
2026-10-14T23:45:53.8429688Z ✔ an unknown setting is left to detection (0.170205ms)
2026-10-14T23:45:53.8431984Z ✔ detection says tool, and docs, where the files do (0.917116ms)
2026-10-14T23:45:53.9668724Z ✔ an address is http or https, with https added when none is given (2.355626ms)
2026-10-14T23:45:53.9689687Z ✔ anything else is refused, naming what it is (0.411057ms)
2026-10-14T23:45:53.9699113Z ✔ links: blank rows dropped, labels from the host, at most ten (0.886141ms)
2026-10-14T23:45:53.9710323Z ✔ stored links that cannot be read are none (0.403476ms)
2026-10-14T23:45:53.9727711Z ✔ a repository's own project follows its website until it has a homepage of its own (0.288893ms)
2026-10-14T23:45:54.0907506Z ✔ a pin goes at the end, or where it is asked for (1.594203ms)
2026-10-14T23:45:54.3618858Z ✔ pinning one already pinned moves it, never twice (0.203736ms)
2026-10-14T23:45:54.3618979Z ✔ a workspace holds a limited number of pins (0.290086ms)
2026-10-14T23:45:54.3619061Z ✔ reordering names every pin once and nothing else (0.268944ms)
2026-10-14T23:45:54.3619137Z ✔ recent leaves out what is pinned and keeps the latest few (0.276926ms)
2026-10-14T23:45:54.8971580Z ✔ a production image is a PNG, JPEG or WebP, by its bytes (1.183687ms)
2026-10-14T23:45:54.8983116Z ✔ an upload is checked: present, at most 5 MB, and an image (677.920135ms)
2026-10-14T23:45:54.9014023Z ✔ an image is kept by its hash, apart from avatars (9.922235ms)
2026-10-14T23:45:54.9029603Z ✔ the stored image, and whether it is preferred (1.293482ms)
2026-10-14T23:45:54.9043282Z ✔ only production elsewhere, at an address and not shown as an upload, is visited (0.241312ms)
2026-10-14T23:45:54.9043370Z ✔ the day a screenshot is versioned by (0.610216ms)
2026-10-14T23:45:55.0713795Z ✔ each statement is bound with as many values as it asks for (1.21909ms)
2026-10-14T23:45:55.0725958Z ✔ only stale slugs move, to the current one (1.031689ms)
2026-10-14T23:45:55.2098518Z ✔ each statement is bound with as many values as it asks for (1.749236ms)
2026-10-14T23:45:55.4455299Z ✔ projects move from the workspace the repository left to the one it is in (1.010717ms)
2026-10-14T23:45:55.4455443Z ✔ a delivery after the rows moved moves nothing but the path (0.246981ms)
2026-10-14T23:45:55.4455494Z ✔ a transfer keeps every slug (0.331658ms)
2026-10-14T23:45:55.4455596Z ✔ renamed, the repository's own project takes the new name as its slug if it is free (0.50586ms)
2026-10-14T23:45:55.4455673Z ✔ a rename of letter case alone keeps the slug (0.276004ms)
2026-10-14T23:45:55.4455745Z ✔ names become slugs as projects spell them (0.185569ms)
2026-10-14T23:45:55.4455759Z ℹ tests 49
2026-10-14T23:45:55.4455776Z ℹ suites 0
2026-10-14T23:45:55.4455789Z ℹ pass 49
2026-10-14T23:45:55.4455806Z ℹ fail 0
2026-10-14T23:45:55.4455821Z ℹ cancelled 0
2026-10-14T23:45:55.4455838Z ℹ skipped 0
2026-10-14T23:45:55.4455852Z ℹ todo 0
2026-10-14T23:45:55.4455869Z ℹ duration_ms 1853.95975
2026-10-14T23:45:55.4455893Z 
2026-10-14T23:45:55.4455908Z > @g1t/runner@0.1.0 test
2026-10-14T23:45:55.4455923Z > node --test src/*.test.ts
2026-10-14T23:45:55.4455938Z 
2026-10-14T23:45:55.4456031Z ✔ the sandbox gets its job and token, and no git credential (1.878711ms)
2026-10-14T23:45:55.4456048Z ✔ one sandbox per job (0.280451ms)
2026-10-14T23:45:55.4456116Z ✔ the pace comes from the variables, and 0 turns backups off (0.302304ms)
2026-10-14T23:45:55.7089144Z ✔ a request carrying a stand-in for its host is filled in, sent, and its answer scrubbed (49.093228ms)
2026-10-14T23:45:55.7106669Z ✔ a body is relayed, and one past the limit is refused (87.662938ms)
2026-10-14T23:45:55.7118118Z ✔ it is no open proxy: no stand-in, another host, or plain HTTP is refused and noted (3.033454ms)
2026-10-14T23:45:55.7133537Z ✔ only the job's current token opens it, and it must come as a header (1.445139ms)
2026-10-14T23:45:55.7136832Z ✔ a request has a time limit (1.867313ms)
2026-10-14T23:45:55.7141522Z ✔ an answer past the limit is refused by its length, or cut off as it streams (2.732332ms)
2026-10-14T23:45:55.7146018Z ✔ a value split across chunks is still scrubbed, and other bytes pass as they are (1.723588ms)
2026-10-14T23:45:55.7147597Z ✔ text bodies are scrubbed whatever their size; binary ones stream as they are (0.32599ms)
2026-10-14T23:45:55.7168283Z ✔ the request reads only in its own shape, and answer headers keep each cookie (13.178563ms)
2026-10-14T23:45:55.9040147Z ✔ stand-ins are found in the URL, the headers and Basic credentials (33.476825ms)
2026-10-14T23:45:55.9040310Z ✔ a stand-in in a header is filled in for its host (1.167602ms)
2026-10-14T23:45:55.9040386Z ✔ custom headers and token schemes are filled in as well (0.649685ms)
2026-10-14T23:45:55.9040455Z ✔ Basic credentials are decoded, filled in and encoded again (0.551057ms)
2026-10-14T23:45:55.9040523Z ✔ a stand-in in the query string is filled in, encoded (0.427442ms)
2026-10-14T23:45:55.9040590Z ✔ a stand-in sent to another host is left as it is and reported (0.361543ms)
2026-10-14T23:45:55.9040656Z ✔ a value is filled in only over HTTPS, even for its own host (0.243586ms)
2026-10-14T23:45:55.9040738Z ✔ a stand-in the job was not given is left alone, and not reported (0.271178ms)
2026-10-14T23:45:55.9040808Z ✔ a value echoed back is swapped for its stand-in again (0.82647ms)
2026-10-14T23:45:55.9040885Z ✔ only small, plain, uncompressed answers have their bodies rewritten (2.553603ms)
2026-10-14T23:45:55.9054813Z ✔ a misdirected secret is noted once per host (0.355163ms)
2026-10-14T23:45:56.0548454Z ✔ a well-formed update can start (2.961907ms)
2026-10-14T23:45:56.0548578Z ✔ the branch must be a security update's (0.947873ms)
2026-10-14T23:45:56.0586041Z ✔ names, versions and lockfiles are checked before anything starts (0.388353ms)
2026-10-14T23:45:56.0586595Z ✔ g1t acts as itself, a member of the workspace (0.998699ms)
2026-10-14T23:45:56.0586654Z ✔ the sandbox is given what bump mode reads (0.529565ms)
2026-10-14T23:45:56.0586703Z ✔ a version update names any branch git takes (0.837658ms)
2026-10-14T23:45:56.0586758Z ✔ a version update's packages, strategy and registries are checked (2.243218ms)
2026-10-14T23:45:56.0586815Z ✔ a version update's sandbox is told what to raise, how and from where (0.492138ms)
2026-10-14T23:45:56.1875356Z ✔ tokens are hashed the way identity stores them (7.677074ms)
2026-10-14T23:45:56.2157502Z ✔ a sandbox's credentials are bound to its run and revoked once when it stops (28.536008ms)
2026-10-14T23:45:56.4727418Z ✔ a sandbox with no run record still has its credentials revoked (4.214056ms)
2026-10-14T23:45:56.4727559Z ✔ a brokered secret's hosts match exactly, or by wildcard (1.33937ms)
2026-10-14T23:45:56.4727651Z ✔ hosts are compared without case, port or trailing dot (0.249926ms)
2026-10-14T23:45:56.4727743Z ✔ a wildcard covers subdomains at any depth, not the domain itself (0.238518ms)
2026-10-14T23:45:56.4727828Z ✔ the harness is told the run's time cap and branch, and nothing about the network (1.024137ms)
2026-10-14T23:45:56.4727919Z ✔ each sandbox class reports to its own namespace (0.261082ms)
2026-10-14T23:45:57.0230462Z egress upstream failed registry.npmjs.org GET try 1 of 3 Error: Network connection lost.
2026-10-14T23:45:57.0233100Z egress upstream failed registry.npmjs.org GET try 2 of 3 Error: Network connection lost.
2026-10-14T23:45:57.0284291Z egress upstream failed registry.npmjs.org GET try 1 of 3 Error: Network connection lost.
2026-10-14T23:45:57.0286052Z egress upstream failed registry.npmjs.org GET try 2 of 3 Error: Network connection lost.
2026-10-14T23:45:57.0286361Z egress upstream failed registry.npmjs.org GET try 3 of 3 Error: Network connection lost.
2026-10-14T23:45:57.0304356Z egress upstream failed api.example.com POST try 1 of 1 Error: Network connection lost.
2026-10-14T23:45:57.0349676Z egress upstream failed registry.npmjs.org GET try 1 of 3 Error: aborted
2026-10-14T23:45:57.0363433Z egress upstream failed registry.npmjs.org GET try 1 of 3 Error: aborted
2026-10-14T23:45:57.0397905Z egress upstream failed registry.npmjs.org GET try 2 of 3 Error: aborted
2026-10-14T23:45:57.0398041Z egress upstream failed registry.npmjs.org GET try 3 of 3 Error: aborted
2026-10-14T23:45:57.0450773Z egress body broke off registry.npmjs.org 3000000 of 8392704 bytes resuming, try 1 of 2 Error: aborted
2026-10-14T23:45:57.0539632Z egress body broke off registry.npmjs.org 6000000 of 8392704 bytes resuming, try 2 of 2 Error: aborted
2026-10-14T23:45:57.0790394Z egress body broke off registry.npmjs.org 3000000 of 8392704 bytes resuming, try 1 of 2 Error: aborted
2026-10-14T23:45:57.0833155Z egress body not resumed registry.npmjs.org 3000000 of 8392704 bytes the rest could not be had (206 bytes 3000000-8392703/8392704)
2026-10-14T23:45:57.1116880Z egress body broke off registry.npmjs.org 1000000 of 8392704 bytes resuming, try 1 of 2 Error: the answer ended after 1000000 of 8392704 bytes
2026-10-14T23:45:57.1378322Z egress body broke off registry.npmjs.org 1000000 of 8392704 bytes resuming, try 1 of 2 Error: aborted
2026-10-14T23:45:57.1438420Z egress body broke off registry.npmjs.org 2000000 of 8392704 bytes resuming, try 2 of 2 Error: aborted
2026-10-14T23:45:57.1492631Z egress body not resumed registry.npmjs.org 3000000 of 8392704 bytes Error: aborted
2026-10-14T23:45:57.1535886Z egress body broke off registry.npmjs.org 2000000 of 8392704 bytes resuming, try 1 of 2 Error: aborted
2026-10-14T23:45:57.1536021Z egress body broke off registry.npmjs.org 2000000 of 8392704 bytes resuming, try 2 of 2 Error: Network connection lost.
2026-10-14T23:45:57.1852904Z egress body broke off registry.npmjs.org 1000000 of 8392704 bytes resuming, try 1 of 2 Error: aborted
2026-10-14T23:45:57.1853108Z egress body not resumed registry.npmjs.org 1000000 of 8392704 bytes the rest could not be had (200 without a range)
2026-10-14T23:45:57.1880311Z ✔ a GET that fails is tried again, and its answer comes back (35.409626ms)
2026-10-14T23:45:57.1887323Z ✔ one that keeps failing gets a 502 naming the host and why, never a throw (1.835455ms)
2026-10-14T23:45:57.1889331Z ✔ a POST is never sent twice (0.969065ms)
2026-10-14T23:45:57.1890580Z ✔ an answer, even an error, is passed on as it is (2.230128ms)
2026-10-14T23:45:57.1891667Z ✔ a body that breaks off midway is tried again, and the whole answer comes back (2.428105ms)
2026-10-14T23:45:57.1892783Z ✔ a body that keeps breaking off ends as a 502, not a truncated answer (3.233644ms)
2026-10-14T23:45:57.1896778Z ✔ large, compressed or unsized answers stream as they come (1.424048ms)
2026-10-14T23:45:57.1898522Z ✔ a large tarball that breaks off midway is resumed from where it stopped, and arrives whole (32.876253ms)
2026-10-14T23:45:57.1900571Z ✔ a rest that comes compressed is never joined on to a body that came as it is (9.899822ms)
2026-10-14T23:45:57.1904099Z ✔ a large tarball sent whole streams as it is, asked for once (24.671106ms)
2026-10-14T23:45:57.1906797Z ✔ a body that ends short of its length is resumed too (27.257519ms)
2026-10-14T23:45:57.1907758Z ✔ a body that keeps breaking off errors after its resumptions, never handing on a short answer as whole (13.530662ms)
2026-10-14T23:45:57.1909222Z ✔ a resumption that fails to connect is tried again (27.253222ms)
2026-10-14T23:45:57.1913232Z ✔ no rest is joined on when the host answers a range with the whole file (5.680297ms)
2026-10-14T23:45:57.1913490Z ✔ only a whole, plain answer to a GET, from a host that takes ranges, is resumable (1.114813ms)
2026-10-14T23:45:57.4055862Z ✔ a paid workspace's start is reserved and goes ahead (33.91295ms)
2026-10-14T23:45:57.6419300Z ✔ billing's refusal is shown in its own words (4.988168ms)
2026-10-14T23:45:57.6419457Z ✔ a refusal without words gets g1t's, with what to do and where (2.20522ms)
2026-10-14T23:45:57.6419559Z ✔ a paused workspace starts nothing, and billing is not asked to reserve (0.928263ms)
2026-10-14T23:45:57.6419677Z ✔ an answer that holds compute back is kept seconds, one that lets it through half a minute (0.214852ms)
2026-10-14T23:45:57.6419763Z ✔ internal and enterprise plans pass even when billing refuses (1.784589ms)
2026-10-14T23:45:57.6419843Z ✔ a pause from billing holds for every plan: g1t's own budget and its daily breaker (1.233401ms)
2026-10-14T23:45:57.6419919Z ✔ billing down: free workspaces fail closed, paying ones go on (1.621865ms)
2026-10-14T23:45:57.6419992Z ✔ an answer that is not a refusal counts as billing being down (0.49984ms)
2026-10-14T23:45:57.6420088Z ✔ entitlements read in either case, and not at all without a plan (0.477587ms)
2026-10-14T23:45:57.6420162Z ✔ before they try: what a free workspace can start, by kind and repository (0.298268ms)
2026-10-14T23:45:57.6420235Z ✔ an estimate is the sandbox for its whole time cap (0.184507ms)
2026-10-14T23:45:57.6420306Z ✔ what work cost: its seconds at the sandbox price (0.355784ms)
2026-10-14T23:45:57.6420375Z ✔ the gate reads the sandbox price from the price book (0.539109ms)
2026-10-14T23:45:57.6420444Z ✔ the time cap is the lower of the guardrails' and the plan's (0.217366ms)
2026-10-14T23:45:57.6420516Z ✔ only a job that may be given brokered secrets passes the Worker (0.195083ms)
2026-10-14T23:45:57.6420587Z ✔ workflow jobs get Docker unless the operator turns it off (0.135664ms)
2026-10-14T23:45:57.6420660Z ✔ a stop that is told the first time is told once and logs nothing (2.210678ms)
2026-10-14T23:45:57.6420887Z ✔ a stop that fails once is tried again, and gets through (7.155582ms)
2026-10-14T23:45:57.6420966Z ✔ a stop that cannot be told never throws, and is logged with what and why (1.744499ms)
2026-10-14T23:45:57.6421032Z ✔ whatever is thrown, even nothing, is logged as one line (1.038288ms)
2026-10-14T23:45:57.6421098Z ✔ a service that cannot answer is a failure; one that refuses is not (34.351929ms)
2026-10-14T23:45:57.6421163Z ✔ a run inside its time cap is not stopped for inactivity (0.290906ms)
2026-10-14T23:45:57.6421233Z ✔ a sandbox with no cap or no start is stopped for inactivity as before (0.168483ms)
2026-10-14T23:45:57.6421307Z ✔ an earlier attempt's time cap does not stop the attempt running now (0.179509ms)
2026-10-14T23:45:57.6421378Z ✔ a sandbox with no run or no cap is never stopped for time (0.176845ms)
2026-10-14T23:45:57.6421445Z ✔ a sandbox g1t stopped fails even when its exit code says 0 (0.323916ms)
2026-10-14T23:45:57.6421520Z ✔ sandbox time billing confirms is forgotten; the rest is kept and tried again later (0.674142ms)
2026-10-14T23:45:57.6421586Z ✔ nothing kept means no retry; time tried for a week is given up (0.310226ms)
2026-10-14T23:45:57.6421652Z ✔ tries back off from 30 seconds to an hour (0.137556ms)
2026-10-14T23:45:57.7215036Z ✔ each label in the machine catalogue runs in its own class, bound and sized as wrangler.jsonc says (1.999371ms)
2026-10-14T23:45:57.7217846Z ✔ runs-on labels are the catalogue's, and a job is charged its minutes rounded up (0.458659ms)
2026-10-14T23:45:57.8665149Z self-hosted route unknown; using a sandbox Acme Error: runner_route failed with status 500
2026-10-14T23:45:57.8698331Z self-hosted task not cancelled do_3 Error: cancel_task failed with status 500
2026-10-14T23:45:57.8782381Z ✔ work goes to self-hosted runners only when the workspace says so (33.208042ms)
2026-10-14T23:45:57.8782505Z ✔ a task carries the sandbox's environment, without what only a sandbox has (0.479119ms)
2026-10-14T23:45:57.8782533Z ✔ handing over and withdrawing a task (2.239271ms)
2026-10-14T23:45:57.8784693Z ✔ the run says where it went (0.234232ms)
2026-10-14T23:45:57.8794204Z ✔ a task's repository comes from what the sandbox was started with (0.328513ms)
2026-10-14T23:45:57.8897473Z ℹ tests 91
2026-10-14T23:45:57.8898148Z ℹ suites 0
2026-10-14T23:45:57.8899137Z ℹ pass 91
2026-10-14T23:45:57.8899434Z ℹ fail 0
2026-10-14T23:45:57.8899599Z ℹ cancelled 0
2026-10-14T23:45:57.8899759Z ℹ skipped 0
2026-10-14T23:45:57.8899931Z ℹ todo 0
2026-10-14T23:45:57.8900134Z ℹ duration_ms 2614.07174
2026-10-14T23:45:57.8986907Z 
2026-10-14T23:45:57.8987163Z > @g1t/telemetry@0.1.0 test
2026-10-14T23:45:57.8987336Z > node --test src/*.test.ts src/otlp/*.test.ts
2026-10-14T23:45:57.8987480Z 
2026-10-14T23:45:58.0737440Z telemetry: usage not reported acme 2026-10 Error: billing answered 503
2026-10-14T23:45:58.0753729Z telemetry: a month that is over was not reported in full acme 2026-09 800
2026-10-14T23:45:58.0834704Z ✔ a free workspace's projects share one day's share, and a new day starts over (2.762257ms)
2026-10-14T23:45:58.0834849Z ✔ the plan last said holds; never said, it is unknown (0.673831ms)
2026-10-14T23:45:58.0834985Z ✔ on the plan, the month's total is reported, again when billing did not take it, and once it has, not again (3.49781ms)
2026-10-14T23:45:58.0835075Z ✔ the last report of a month goes before it ends (0.21971ms)
2026-10-14T23:45:58.0839311Z ✔ a month's last bytes are reported under that month after it ends; older months are not (1.520453ms)
2026-10-14T23:45:58.2614618Z ✔ a server span is a request, filed under its service and environment (2.969658ms)
2026-10-14T23:45:58.2630590Z ✔ an app on g1t.page has its requests counted from its tail events, not its SDK's spans (0.381782ms)
2026-10-14T23:45:58.2643874Z ✔ log records keep their severity, body and trace (4.831292ms)
2026-10-14T23:45:58.2663331Z ✔ metrics of each kind become points (1.163817ms)
2026-10-14T23:45:58.2665647Z ✔ a token names its project (0.303756ms)
2026-10-14T23:45:58.4162096Z ✔ a trace export in protobuf reads as OTLP/JSON does (3.671532ms)
2026-10-14T23:45:58.7256252Z ✔ logs and metrics in protobuf (3.065943ms)
2026-10-14T23:45:58.7256403Z ✔ a message cut short is refused, not read as garbage (0.684427ms)
2026-10-14T23:45:58.7256493Z ✔ a free workspace sends a thirtieth of 1 GB a day (1.395655ms)
2026-10-14T23:45:58.7256564Z ✔ past the day's share is over, and no cap never is (0.398298ms)
2026-10-14T23:45:58.7256669Z ✔ a held workspace takes nothing, a free one its day's share, the plan no cap; unknown is free (0.214522ms)
2026-10-14T23:45:58.7256748Z ✔ what is sent past the free amount costs by the GB; up to it, nothing (0.627862ms)
2026-10-14T23:45:58.7256779Z ✔ a row counts as what is kept of it (0.283195ms)
2026-10-14T23:45:58.7256815Z ✔ routes lose their ids, keep their words (1.675645ms)
2026-10-14T23:45:58.7256831Z ✔ severities (0.27304ms)
2026-10-14T23:45:58.7256847Z ✔ ids and times (0.376335ms)
2026-10-14T23:45:58.7256926Z ✔ percentiles come from bucket counts, within a bucket of the truth (1.391029ms)
2026-10-14T23:45:58.7256988Z ✔ the same error thrown with different ids is one group (16.062673ms)
2026-10-14T23:45:58.9411059Z ✔ the dispatcher's half and the app's meet as one request, in either order (13.451744ms)
2026-10-14T23:45:58.9750894Z ✔ errors are grouped, counted, and open again when they come back (16.96037ms)
2026-10-14T23:45:58.9763093Z ✔ the overview counts requests, by minute and route, whether rolled up yet or not (19.841786ms)
2026-10-14T23:45:58.9831730Z ✔ a trace joins the request on g1t.page with the app's own spans and logs (12.220165ms)
2026-10-14T23:45:58.9910283Z ✔ logs are searched by words, levels and attributes, and paged (7.559408ms)
2026-10-14T23:45:59.0040081Z ✔ tokens: the deployments' one is kept and the same each time; others can be revoked (4.603791ms)
2026-10-14T23:45:59.0041614Z ✔ retention removes what is past it, and turning deployments off stops tail events (4.960226ms)
2026-10-14T23:45:59.0045788Z ✔ exports refuse addresses that loop or stay inside a network (3.033374ms)
2026-10-14T23:45:59.0048620Z ✔ search text, FTS queries and chart steps (0.3059ms)
2026-10-14T23:45:59.0094449Z ✔ a project of a workspace past its day's share is refused, and tail events keep only their requests (5.666497ms)
2026-10-14T23:45:59.0255467Z ℹ tests 33
2026-10-14T23:45:59.0255533Z ℹ suites 0
2026-10-14T23:45:59.0255553Z ℹ pass 33
2026-10-14T23:45:59.0255569Z ℹ fail 0
2026-10-14T23:45:59.0255585Z ℹ cancelled 0
2026-10-14T23:45:59.0255599Z ℹ skipped 0
2026-10-14T23:45:59.0255611Z ℹ todo 0
2026-10-14T23:45:59.0255628Z ℹ duration_ms 1085.562622
2026-10-14T23:45:59.0363210Z 
2026-10-14T23:45:59.0363293Z > @g1t/contracts@0.1.0 test
2026-10-14T23:45:59.0363314Z > node --test src/*.test.ts
2026-10-14T23:45:59.0363328Z 
2026-10-14T23:45:59.3140930Z ✔ formatting: bold, italic, strikethrough and code, as people and agents write them (3.205441ms)
2026-10-14T23:45:59.3141121Z ✔ words that only look like formatting stay words (0.203776ms)
2026-10-14T23:45:59.3141207Z ✔ mentions, channels and references; never inside code or a link's text (0.535955ms)
2026-10-14T23:45:59.3142518Z ✔ links go only to the web, mail or this site (2.875977ms)
2026-10-14T23:45:59.3143542Z ✔ XSS: script links, raw HTML and nested tricks are text (1.637308ms)
2026-10-14T23:45:59.3148115Z ✔ blocks: paragraphs keep their line breaks; code, lists, quotes, headings and rules (0.863345ms)
2026-10-14T23:45:59.3150053Z ✔ lists: numbered from where they start, nested by indenting, items with more than a line (0.474432ms)
2026-10-14T23:45:59.3150957Z ✔ deep nesting is bounded (3.844601ms)
2026-10-14T23:45:59.3151974Z ✔ plain text: the words without the marks, for previews (0.92642ms)
2026-10-14T23:45:59.3155835Z ✔ tables: a header, a --- row with its alignment, then rows (0.973221ms)
2026-10-14T23:45:59.4581338Z ✔ a member shows by their display name first (1.148294ms)
2026-10-14T23:45:59.7230082Z ✔ without a display name, a member shows by their username in its chosen case (0.280592ms)
2026-10-14T23:45:59.7230222Z ✔ a handle keeps its chosen case only when it is the same name (0.234262ms)
2026-10-14T23:45:59.7230305Z ✔ a coding agent is found by the address on its commits, not by its name (1.247633ms)
2026-10-14T23:45:59.7230438Z ✔ every agent has a unique id, lowercase addresses and logins, and a mark colour that is a hex or none (0.752069ms)
2026-10-14T23:45:59.7705542Z ✔ every connector has a unique id, a category and a scope (1.327423ms)
2026-10-14T23:45:59.7718130Z ✔ every category has connectors, and an available one in each scope it has is set up somewhere (0.904648ms)
2026-10-14T23:45:59.7741559Z ✔ every integration provider is an available connector, and no AI provider is one (0.538899ms)
2026-10-14T23:45:59.7758355Z ✔ only what g1t sets up end to end is available; the docs' Available today lists the same (1.07925ms)
2026-10-14T23:45:59.7759272Z ✔ a connector shows its personal side to you (0.28007ms)
2026-10-14T23:45:59.7759770Z ✔ a setup path names the workspace (0.233561ms)
2026-10-14T23:45:59.9481201Z ✔ timedD1 counts each statement's trip and each batch, and keeps bindings (2.83756ms)
2026-10-14T23:45:59.9481367Z ✔ openD1 reports the service time, the database time and the bookmark (40.705767ms)
2026-10-14T23:45:59.9485914Z ✔ openD1 without a session reads the primary and says so, with no db metric when nothing was read (1.378319ms)
2026-10-14T23:45:59.9509532Z ✔ sessionConstraint takes the two first-* words and a bookmark, and starts anything else on the primary (0.308723ms)
2026-10-14T23:46:00.1280772Z ✔ agrees with the Rust validator on every shared case (3.440175ms)
2026-10-14T23:46:00.1299751Z ✔ a parsed query keeps only what the catalog knows (0.264347ms)
2026-10-14T23:46:00.1300079Z ✔ every dataset has a time field and fields that are one thing each (0.315343ms)
2026-10-14T23:46:00.1300717Z ✔ a typed query is checked against the catalog (0.242244ms)
2026-10-14T23:46:00.1311082Z ✔ range ends are real dates or UTC times (0.287181ms)
2026-10-14T23:46:00.2612800Z ✔ a discovery document is read for its origins (2.501355ms)
2026-10-14T23:46:00.2613240Z ✔ anything else is not one (0.298558ms)
2026-10-14T23:46:00.2614750Z ✔ a connect link carries the site (0.230536ms)
2026-10-14T23:46:00.4952593Z ✔ agrees with the Rust validators on every shared case (2.229447ms)
2026-10-14T23:46:00.7682696Z ✔ addresses are flat, end in the id and survive renames (1.352981ms)
2026-10-14T23:46:00.7682762Z ✔ only a doc holds other folios (0.43281ms)
2026-10-14T23:46:00.7682784Z ✔ list queries are checked (0.251738ms)
2026-10-14T23:46:00.7682867Z ✔ the client calls exactly the artifacts service's folio methods (47.530192ms)
2026-10-14T23:46:00.7682893Z ✔ slides ops are checked by shape (0.635835ms)
2026-10-14T23:46:00.7682949Z ✔ design ops are checked by shape and size (21.758433ms)
2026-10-14T23:46:00.7683016Z ✔ dashboard ops check tiles, their queries and the grid (1.190958ms)
2026-10-14T23:46:00.7683080Z ✔ an id has its prefix and a 26-character suffix, and sorts by time (9.790037ms)
2026-10-14T23:46:00.7683144Z ✔ a floor bounds the ids of a span, as a range of any index that ends in the id (0.475173ms)
2026-10-14T23:46:00.8110612Z ✔ usernames take letters of either case, digits and single hyphens, up to 39 (1.559392ms)
2026-10-14T23:46:00.8126682Z ✔ reserved names are reserved in any case (0.285588ms)
2026-10-14T23:46:00.8162287Z ✔ a username is found lowercased and shown as written (0.338608ms)
2026-10-14T23:46:00.8162403Z ✔ the form's pattern says what the rule says (0.388283ms)
2026-10-14T23:46:00.8162474Z ✔ well-known GitHub action owners cannot be claimed, but stay valid names (0.371077ms)
2026-10-14T23:46:00.8299912Z ℹ tests 48
2026-10-14T23:46:00.8307228Z ℹ suites 0
2026-10-14T23:46:00.8307273Z ℹ pass 48
2026-10-14T23:46:00.8307290Z ℹ fail 0
2026-10-14T23:46:00.8307317Z ℹ cancelled 0
2026-10-14T23:46:00.8307331Z ℹ skipped 0
2026-10-14T23:46:00.8307345Z ℹ todo 0
2026-10-14T23:46:00.8307360Z ℹ duration_ms 1748.640236
2026-10-14T23:46:01.4130633Z ##[group]Run npm run test:deploy
2026-10-14T23:46:01.4130668Z [36;1mnpm run test:deploy[0m
2026-10-14T23:46:01.4130688Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:01.4130698Z env:
2026-10-14T23:46:01.4130705Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:01.4130717Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:01.4130724Z ##[endgroup]
2026-10-14T23:46:01.5256562Z 
2026-10-14T23:46:01.5256742Z > test:deploy
2026-10-14T23:46:01.5256780Z > node --test "scripts/deploy/*.test.mjs"
2026-10-14T23:46:01.5256821Z 
2026-10-14T23:46:01.6591958Z ✔ a release's version bump keeps the Rust caches' key, a new dependency changes it (3.684471ms)
2026-10-14T23:46:01.6598699Z ✔ the toolchain is read from rustc -V (0.283154ms)
2026-10-14T23:46:01.6601100Z ✔ the CLI's builder image is pinned, and keys its cache by its digest (0.264056ms)
2026-10-14T23:46:01.6603223Z ✔ a unit's hash is read from its files and folders (0.273431ms)
2026-10-14T23:46:01.6625291Z ✔ only the units the build did not use are pruned (3.463599ms)
2026-10-14T23:46:04.7318912Z error: no matching package named `base64` found
2026-10-14T23:46:04.9966888Z location searched: crates.io index
2026-10-14T23:46:04.9967049Z required by package `g1t-api v0.1.0 (/home/runner/work/repo/apps/api)`
2026-10-14T23:46:04.9967154Z note: offline mode (via `--offline`) can sometimes cause surprising resolution failures
2026-10-14T23:46:04.9967238Z help: if this error is too confusing you may wish to retry without `--offline`
2026-10-14T23:46:05.0718883Z ✔ the manifest matches every wrangler config in the repository (34.919972ms)
2026-10-14T23:46:05.0719035Z ✔ every wrangler.jsonc is found, and only checked-in ones (26.122965ms)
2026-10-14T23:46:05.0719128Z ✔ problems are found: an unlisted config, a later-stage binding, a wrong database, an unnamed KV (31.839377ms)
2026-10-14T23:46:05.0721223Z ✔ stages follow bindings: nothing binds to a unit that ships after it (0.570377ms)
2026-10-14T23:46:05.0728267Z ✔ inside a stage, a Worker that does not exist yet goes before those bound to it (0.989405ms)
2026-10-14T23:46:05.0739618Z ✔ Rust workers build with the shared script and the same wasm-opt level (0.688533ms)
2026-10-14T23:46:05.0740693Z ✔ shared crates and packages are read from workspace metadata (0.302254ms)
2026-10-14T23:46:05.0741655Z ✔ the runner's image is built from the runner crate and what it uses, on the base its lock names (0.36625ms)
2026-10-14T23:46:05.0743480Z ✔ services/runner/base.json records the base its folder builds (13.474308ms)
2026-10-14T23:46:05.0804720Z ✔ an image's hash ignores line endings, and its tags say what they are (129.699253ms)
2026-10-14T23:46:05.0804851Z ✔ only the lockfile entries the runner is built from name its image (0.467281ms)
2026-10-14T23:46:05.0804917Z ✔ the runner's deploy config names its image by reference, beside its wrangler.jsonc (24.107089ms)
2026-10-14T23:46:05.0805304Z ✔ the registry is asked for an image's manifest, without Docker (1.111618ms)
2026-10-14T23:46:05.0805362Z ✔ a push counts only when it ends with a digest, and is tried again (0.866731ms)
2026-10-14T23:46:05.0805412Z ✔ a static Linux binary is told from a dynamic one (1.003998ms)
2026-10-14T23:46:05.0805499Z ﹣ path dependencies agree with Cargo's own resolved graph (2200.237146ms) # cargo metadata could not resolve offline
2026-10-14T23:46:05.0805558Z ✔ every import that leaves a unit's folder is covered by its dependencies or inputs (78.074394ms)
2026-10-14T23:46:05.0805614Z ✔ a shared crate's change reaches every unit built from it, and no other (1.017508ms)
2026-10-14T23:46:05.0805663Z ✔ a shared package's change reaches what imports it (0.313731ms)
2026-10-14T23:46:05.0805710Z ✔ a crate's tests, benches and examples deploy nothing (0.507662ms)
2026-10-14T23:46:05.0805763Z ✔ a Rust file compiled only for tests is found from what declares it (1.462987ms)
2026-10-14T23:46:05.0805806Z ✔ this repository's test-only sources are read from git (239.469639ms)
2026-10-14T23:46:05.0805852Z ✔ decide: a change only to tests deploys nothing (1.374253ms)
2026-10-14T23:46:05.0805897Z ✔ own folders, declared inputs and root files (0.577517ms)
2026-10-14T23:46:05.0805942Z ✔ a Cargo.lock change reaches only crates that use what changed (0.603986ms)
2026-10-14T23:46:05.0805985Z ✔ a package-lock change reaches through workspace links (0.477367ms)
2026-10-14T23:46:05.0806029Z ✔ decide: changed units deploy, others wait, unknown ones deploy (0.334762ms)
2026-10-14T23:46:05.0806076Z ✔ decide: --force deploys unchanged units; a commit missing from history deploys (0.150776ms)
2026-10-14T23:46:05.0806123Z ✔ decide: Cargo.lock counts only where it reaches (0.749625ms)
2026-10-14T23:46:05.0806542Z ✔ decide: the runner's image rebuilds only when what it is built from changed (0.189464ms)
2026-10-14T23:46:05.0806612Z ✔ the plan as data: migrations, and each stage's units in jobs that share a build (1.033451ms)
2026-10-14T23:46:05.0809965Z ✔ units are picked by short name, folder or Worker name (0.367902ms)
2026-10-14T23:46:05.0810074Z ✔ a CI job installs only what its units need (0.873581ms)
2026-10-14T23:46:05.0810149Z ✔ a deploy is annotated with its commit, and read back (0.221742ms)
2026-10-14T23:46:05.0810222Z ✔ the live commit: the live version's, looking through secret changes (0.457286ms)
2026-10-14T23:46:05.0810288Z ✔ Wrangler's output: pending migrations and the version a deploy made (0.376035ms)
2026-10-14T23:46:05.0810347Z ✔ the API's answers: the live commit as Wrangler's would give it (1.066451ms)
2026-10-14T23:46:05.5700695Z ✔ the API's answers: a Worker never deployed, and a refusal, never throw (503.023613ms)
2026-10-14T23:46:05.5710802Z ✔ the API is used only with the token Wrangler would be given (0.630676ms)
2026-10-14T23:46:05.5711100Z ✔ pending migrations: the folder's files less the names in d1_migrations (2.05893ms)
2026-10-14T23:46:05.6439085Z ✔ the pool runs everything, no more than its limit at once (15.981662ms)
2026-10-14T23:46:05.6439283Z ✔ self-hosting builds every Rust service the manifest says it runs (0.791388ms)
2026-10-14T23:46:05.6439368Z ✔ the self-hosting architecture page names every unit (0.320021ms)
2026-10-14T23:46:05.6439487Z ✔ the architecture's services page names every unit, with the services it binds to (5.581138ms)
2026-10-14T23:46:05.6439571Z ✔ resolveStack works on a manifest with no workspace crates or packages (4.335378ms)
2026-10-14T23:46:05.6439672Z ✔ decide: a commit older than what runs is never deployed by accident, even forced; --rollback means it (0.259179ms)
2026-10-14T23:46:05.6439742Z ✔ a deploy by hand reports to the repository on g1t, and a workflow's does not (2.044289ms)
2026-10-14T23:46:05.6439823Z ✔ a failed wrangler command is reported by its error, not its trace (0.314171ms)
2026-10-14T23:46:05.6439894Z ✔ Cloudflare failing is tried again; a mistake in what is deployed is not (0.489535ms)
2026-10-14T23:46:05.6439981Z ✔ sandboxes roll over at once when their image or container settings changed, and not otherwise (0.304597ms)
2026-10-14T23:46:05.6440048Z ✔ the deploy tool itself parses: a test that never imports it would not notice (36.298271ms)
2026-10-14T23:46:06.1508600Z ✔ the statements are all there (1.334663ms)
2026-10-14T23:46:06.1508727Z ✔ twenty invites each: the twenty-first is refused in the statement that writes (50.768663ms)
2026-10-14T23:46:06.1508824Z ✔ revoking an unused invite gives it back; an expired one never counted (82.38827ms)
2026-10-14T23:46:06.1508904Z ✔ a used invite is spent: revoking it does nothing and it still counts (46.136019ms)
2026-10-14T23:46:06.1508957Z ✔ a pending invite for the same address is found; a revoked one is not (48.908881ms)
2026-10-14T23:46:06.1509008Z ✔ staff grants add to the twenty and can take some back (44.368195ms)
2026-10-14T23:46:06.1509055Z ✔ signing up from the link spends the invite once and records who invited whom (55.048608ms)
2026-10-14T23:46:06.1509106Z ✔ a body that broke off is worth another try, a lockfile out of step is not (1.687464ms)
2026-10-14T23:46:06.1509180Z ✔ an install that ends without saying why, or stalls, is tried again (0.255013ms)
2026-10-14T23:46:06.1509260Z ✔ a dropped connection is tried again until the install passes (1.222705ms)
2026-10-14T23:46:06.1509274Z ✔ a real error fails at once (0.236726ms)
2026-10-14T23:46:06.1509319Z ✔ it gives up after its tries, with npm's exit code (0.348222ms)
2026-10-14T23:46:06.1509355Z ✔ a stalled install is run again (0.283866ms)
2026-10-14T23:46:06.2907524Z ✔ webhooks: the hourly purge deletes old deliveries by time (1.932701ms)
2026-10-14T23:46:06.2907909Z ✔ billing: this month's users are read from an index, not the ledger (58.2604ms)
2026-10-14T23:46:06.2907996Z ✔ events: a repository's events of one type, newest first, page by page (4.980256ms)
2026-10-14T23:46:06.2908269Z ✔ actions: a self-hosted runner's poll finds queued jobs by namespace, whatever its case (18.560252ms)
2026-10-14T23:46:06.2911963Z ✔ chat: a channel's messages and a thread's replies, newest first, page by page (3.880485ms)
2026-10-14T23:46:06.2928130Z ✔ chat: the sidebar's unread messages are read from each channel's index, after the last read (3.216289ms)
2026-10-14T23:46:06.2928304Z ✔ chat: a page's reactions are read by message, and a workspace's emoji by name (3.262027ms)
2026-10-14T23:46:06.4144395Z ✔ the runner's layer is the binary alone, at its path and mode, owned by root (5.14304ms)
2026-10-14T23:46:06.4144581Z ✔ the layer and entrypoint are what services/runner/Dockerfile builds (0.526991ms)
2026-10-14T23:46:06.4153441Z ✔ the config is the base's, with the layer, the entrypoint and no inherited command (0.989736ms)
2026-10-14T23:46:06.4183995Z ✔ the manifest names the base's layers, then the binary's, in the base's format (0.355414ms)
2026-10-14T23:46:06.4184171Z ✔ image references and bearer challenges are read (0.711919ms)
2026-10-14T23:46:06.4184291Z ✔ the runner's image is made in the registry from the base's manifest and one new layer, pulling none of the base (29.767686ms)
2026-10-14T23:46:06.4184372Z ✔ a base that is not where it should be, or not what base.json says, stops it (1.446893ms)
2026-10-14T23:46:06.4184471Z ✔ a registry that asks for a bearer token is given the one its realm trades the credentials for (2.3518ms)
2026-10-14T23:46:06.4867213Z scheduler: g1t-webhooks (* * * * *) is still running from the last time; skipped
2026-10-14T23:46:06.5151804Z scheduler: g1t-webhooks (* * * * *): 200 {"outcome":"exception"}
2026-10-14T23:46:06.5198047Z ✔ fields read numbers, ranges, lists and steps (1.706973ms)
2026-10-14T23:46:06.5202780Z ✔ the services' crons match when hosted g1t's would fire (1.787403ms)
2026-10-14T23:46:06.5214211Z ✔ what is due is each matching cron of each service (0.428083ms)
2026-10-14T23:46:06.5217400Z ✔ a run asks Wrangler for the handler, and a slow one is not doubled (29.476159ms)
2026-10-14T23:46:06.6268507Z ✔ a deploy is announced to status.g1t.sh with the token, and without one nothing is sent (33.057906ms)
2026-10-14T23:46:06.6273898Z ✔ an announcement that fails is a warning, never a failed deploy (0.723636ms)
2026-10-14T23:46:06.6284551Z ✔ the stages run inside the window: started before, finished after, even when they throw; a dry run says nothing (0.919069ms)
2026-10-14T23:46:06.6289104Z ✔ deploy.mjs announces every deploy, and the workflow passes it the token (0.685739ms)
2026-10-14T23:46:06.6405293Z ℹ tests 92
2026-10-14T23:46:06.6405346Z ℹ suites 0
2026-10-14T23:46:06.6405362Z ℹ pass 91
2026-10-14T23:46:06.6405375Z ℹ fail 0
2026-10-14T23:46:06.6405387Z ℹ cancelled 0
2026-10-14T23:46:06.6419644Z ℹ skipped 1
2026-10-14T23:46:06.6419690Z ℹ todo 0
2026-10-14T23:46:06.6419707Z ℹ duration_ms 5062.443603
2026-10-14T23:46:07.2217609Z ##[group]Run npm run test:conformance
2026-10-14T23:46:07.2217654Z [36;1mnpm run test:conformance[0m
2026-10-14T23:46:07.2217669Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:07.2217683Z env:
2026-10-14T23:46:07.2217695Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:07.2217713Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:07.2217727Z ##[endgroup]
2026-10-14T23:46:07.3841259Z 
2026-10-14T23:46:07.3841399Z > test:conformance
2026-10-14T23:46:07.3841431Z > node --test "conformance/*.test.mjs"
2026-10-14T23:46:07.3841442Z 
2026-10-14T23:46:07.9496712Z ﹣ real Workers: CLI and MCP share durable updates, receipts and ownership rules (0.869705ms) # Build API/Work Workers and the g1t CLI first
2026-10-14T23:46:08.0805198Z ✔ identity purge work is atomic, idempotent and a prior restore prevents scheduling (43.133852ms)
2026-10-14T23:46:08.4104581Z ✔ chat purges the private AI conversation, preserves other tenants, retries failed rooms and rejects late writes (79.129228ms)
2026-10-14T23:46:08.4104739Z ✔ artifacts keep retry references when file deletion fails, then remove private state with FK enforcement (58.014871ms)
2026-10-14T23:46:08.4104822Z ✔ notification erasure retries presence cleanup, clears credentials and permanently blocks late delivery (74.509613ms)
2026-10-14T23:46:08.5650399Z ✔ destroyed document rooms reject late ensure calls and keep only a tombstone (283.328309ms)
2026-10-14T23:46:08.5924832Z ✔ erasing one member of a shared channel leaves everyone else's conversation alone (27.091699ms)
2026-10-14T23:46:08.6502442Z ✔ a shared channel's room shuts out only the erased member and tells nobody it was cleared (56.107728ms)
2026-10-14T23:46:08.7241922Z ✔ a workspace's large channel is deleted in chunks across calls, and nothing of it comes back (73.462942ms)
2026-10-14T23:46:08.7807917Z ✔ a purged workspace's slug can be made again: only what was said before the purge is dropped (58.256183ms)
2026-10-14T23:46:08.8384644Z ✔ vectors written while a document was being erased are taken back (57.768873ms)
2026-10-14T23:46:08.9195394Z ✔ a workspace's uploads are swept a page at a time, resuming after a failure (81.590042ms)
2026-10-14T23:46:08.9993190Z ✔ a value's shape is its key paths and types, not its values (1.704068ms)
2026-10-14T23:46:08.9993372Z ✔ variables are kept by kind, and only GitHub's (0.631168ms)
2026-10-14T23:46:08.9993449Z ✔ the layout says where the workspace is, as GitHub lays it out (4.388989ms)
2026-10-14T23:46:08.9993659Z ✔ the diff names what g1t lacks or has differently, and what it adds (1.773413ms)
2026-10-14T23:46:09.0092918Z ℹ tests 16
2026-10-14T23:46:09.0094189Z ℹ suites 0
2026-10-14T23:46:09.0094666Z ℹ pass 15
2026-10-14T23:46:09.0095041Z ℹ fail 0
2026-10-14T23:46:09.0095391Z ℹ cancelled 0
2026-10-14T23:46:09.0095731Z ℹ skipped 1
2026-10-14T23:46:09.0095996Z ℹ todo 0
2026-10-14T23:46:09.0096560Z ℹ duration_ms 1576.936166
2026-10-14T23:46:09.6382722Z ##[group]Run npm run test:ops
2026-10-14T23:46:09.6382767Z [36;1mnpm run test:ops[0m
2026-10-14T23:46:09.6382783Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:09.6382796Z env:
2026-10-14T23:46:09.6382807Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:09.6382826Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:09.6382839Z ##[endgroup]
2026-10-14T23:46:09.7740620Z 
2026-10-14T23:46:09.7740742Z > test:ops
2026-10-14T23:46:09.7740765Z > node --test "scripts/ops/*.test.mjs"
2026-10-14T23:46:09.7740812Z 
2026-10-14T23:46:10.4088408Z ✔ refs, HEAD and differences are read as git writes them (2.41128ms)
2026-10-14T23:46:10.4088606Z ✔ a chain restores every ref, and the drill fails once the live repository differs (467.919484ms)
2026-10-14T23:46:10.4626635Z ✔ restore keeps only the refs the last entry names (107.998746ms)
2026-10-14T23:46:10.5385818Z ✔ today's configuration is one namespace that takes nothing new by name (2.608505ms)
2026-10-14T23:46:10.8338992Z ✔ each namespace's binding, jurisdiction and part in placing are read from the configuration (0.340381ms)
2026-10-14T23:46:10.8339102Z ✔ standings add up holdings and health, and warn about what needs doing (1.284609ms)
2026-10-14T23:46:10.8339158Z ✔ what Cloudflare has is checked against what is bound (0.69276ms)
2026-10-14T23:46:10.8339243Z ✔ the windows are the UTC month so far and the last 24 hours (2.010338ms)
2026-10-14T23:46:10.8339304Z ✔ a query asks for the variant's sums and dimensions under one alias (0.409475ms)
2026-10-14T23:46:10.8339386Z ✔ Workers Logs are read from whichever dataset the schema has, or skipped (0.296405ms)
2026-10-14T23:46:10.8339458Z ✔ groups are summed per name, named from the listing, sorted largest first, with totals (1.046852ms)
2026-10-14T23:46:10.8339533Z ✔ a dataset that errors or is missing is a note, and the others still report (15.865818ms)
2026-10-14T23:46:10.8339598Z ✔ the JSON report is one snake_case object with every row (0.886742ms)
2026-10-14T23:46:10.8339662Z ✔ the command line reads --json, --top and the account (0.323916ms)
2026-10-14T23:46:10.8339738Z ✔ errors, fallbacks, failed watcher queries and an all-empty account fail the check (2.13794ms)
2026-10-14T23:46:10.8339808Z ✔ the watcher queries are billing's, field for field, over the last full hour (11.537119ms)
2026-10-14T23:46:11.0244356Z ✔ keys, plans and what a restore records (2.548135ms)
2026-10-14T23:46:11.7237830Z ✔ restored repositories are served read-only, and pushes taken later are reconciled (966.577704ms)
2026-10-14T23:46:12.1022221Z ✔ a git store over HTTP is restored into through its API (427.554399ms)
2026-10-14T23:46:12.1990236Z ✔ the command line has defaults and bounds (1.881875ms)
2026-10-14T23:46:12.1999341Z ✔ the window is the last N days (0.488213ms)
2026-10-14T23:46:12.2013167Z ✔ the query is for one script, with the variant's sums and dimensions (0.329044ms)
2026-10-14T23:46:12.2013775Z ✔ rows are named, summed per status and sorted by requests (0.880942ms)
2026-10-14T23:46:12.2013988Z ✔ Cloudflare's refusal becomes the error, so the next variant is tried (0.632329ms)
2026-10-14T23:46:12.2014314Z ✔ the telemetry questions filter on the script and on failures (0.574463ms)
2026-10-14T23:46:12.2014697Z ✔ a calculations answer becomes rows with counts, largest first (0.503216ms)
2026-10-14T23:46:12.2023732Z ✔ an events answer becomes plain records, the object id cut short (0.408924ms)
2026-10-14T23:46:12.2031124Z ✔ messages fall into buckets, expected or not (1.23861ms)
2026-10-14T23:46:12.2040196Z ✔ buckets sum the counts of their messages (0.484197ms)
2026-10-14T23:46:12.2047737Z ✔ the text report shows rates, statuses, buckets and what could not be read (18.842866ms)
2026-10-14T23:46:12.2737817Z ✔ a page's text leaves out scripts, styles and tags (1.554995ms)
2026-10-14T23:46:12.2737973Z ✔ a check passes on its status with every phrase on the page (0.322484ms)
2026-10-14T23:46:12.2738052Z ✔ a phrase only inside a script does not count (0.207661ms)
2026-10-14T23:46:12.2738134Z ✔ the sign-up check sends an address identity refuses before writing or counting (0.390036ms)
2026-10-14T23:46:12.2806131Z ℹ tests 34
2026-10-14T23:46:12.2806448Z ℹ suites 0
2026-10-14T23:46:12.2814084Z ℹ pass 34
2026-10-14T23:46:12.2814400Z ℹ fail 0
2026-10-14T23:46:12.2814864Z ℹ cancelled 0
2026-10-14T23:46:12.2815048Z ℹ skipped 0
2026-10-14T23:46:12.2815253Z ℹ todo 0
2026-10-14T23:46:12.2815423Z ℹ duration_ms 2461.880012
2026-10-14T23:46:13.7860536Z ##[group]Run node scripts/deploy.mjs manifest --check
2026-10-14T23:46:14.0489313Z [36;1mnode scripts/deploy.mjs manifest --check[0m
2026-10-14T23:46:14.0489381Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:14.0489402Z env:
2026-10-14T23:46:14.0489416Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:14.0489436Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:14.0489449Z ##[endgroup]
2026-10-14T23:46:14.1739123Z deploy/stack.jsonc is consistent with every wrangler.jsonc.
2026-10-14T23:46:14.7202264Z ##[group]Run node --test plugins/claude-code/test/hooks.test.mjs
2026-10-14T23:46:14.7202373Z [36;1mnode --test plugins/claude-code/test/hooks.test.mjs[0m
2026-10-14T23:46:14.7202389Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:14.7202404Z env:
2026-10-14T23:46:14.7202415Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:14.7202424Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:14.7202435Z ##[endgroup]
2026-10-14T23:46:17.3517369Z ▶ plan
2026-10-14T23:46:17.6007623Z   ✔ SessionStart starts the session (1.608604ms)
2026-10-14T23:46:17.6007776Z   ✔ UserPromptSubmit logs the prompt, cut to the limit (1.477037ms)
2026-10-14T23:46:17.6007879Z   ✔ a turn Claude Code starts itself for a background task is not a prompt (0.254582ms)
2026-10-14T23:46:17.6007970Z   ✔ a prompt's intent is its first line or sentence, plain, clipped on a word (0.464117ms)
2026-10-14T23:46:17.6008046Z   ✔ UserPromptSubmit titles the session with its intent, unless prompts are kept back (0.436375ms)
2026-10-14T23:46:17.6008127Z   ✔ G1T_RECORD_PROMPTS=0 keeps prompts back, and G1T_RECORD=0 everything (0.211728ms)
2026-10-14T23:46:17.6008198Z   ✔ PostToolUse sends the tool and its input's summary, never its response (1.235084ms)
2026-10-14T23:46:17.6008265Z   ✔ PostToolUse after a git push updates the head commit (0.537106ms)
2026-10-14T23:46:17.6008327Z   ✔ PostToolUse remembers the issue a command claims (0.407191ms)
2026-10-14T23:46:17.6008403Z   ✔ Stop sends a heartbeat and SessionEnd ends the session with its reason (0.51305ms)
2026-10-14T23:46:17.6008472Z   ✔ events without a session, and other events, do nothing (0.152729ms)
2026-10-14T23:46:17.6008485Z ✔ plan (8.867261ms)
2026-10-14T23:46:17.6008496Z ▶ subagents
2026-10-14T23:46:17.6008558Z   ✔ SubagentStart starts a session of its own for the subagent (0.35941ms)
2026-10-14T23:46:17.6008631Z   ✔ SubagentStop ends it with its final message, cut to the limit (0.649315ms)
2026-10-14T23:46:17.6008728Z   ✔ an Agent call gives its subagent the task, and once finished its final message, and nothing else of its answer (0.3463ms)
2026-10-14T23:46:17.6008800Z   ✔ what a subagent does is its own session's, and the files it writes are touched (0.257526ms)
2026-10-14T23:46:17.6009230Z   ✔ a skill is its name only (0.181643ms)
2026-10-14T23:46:17.6009301Z   ✔ branches made, commits, claims and g1t's MCP tools are touched (0.439289ms)
2026-10-14T23:46:17.6009359Z   ✔ a hand-off's issue comes with the session (0.130626ms)
2026-10-14T23:46:17.6009372Z ✔ subagents (2.7844ms)
2026-10-14T23:46:17.6009385Z ▶ summaries
2026-10-14T23:46:17.6009453Z   ✔ say what a tool was called with, in one short line (0.527342ms)
2026-10-14T23:46:17.6009477Z   ✔ hide what looks like a secret (0.128683ms)
2026-10-14T23:46:17.6009501Z   ✔ find the issue in a branch name (0.501473ms)
2026-10-14T23:46:17.6009514Z ✔ summaries (1.333151ms)
2026-10-14T23:46:17.6009528Z ▶ the plugin's files
2026-10-14T23:46:17.6009540Z   ✔ parse as JSON (0.6524ms)
2026-10-14T23:46:17.6009605Z   ✔ the AGENTS.md snippet is the one in the docs (0.39919ms)
2026-10-14T23:46:17.6009629Z ✔ the plugin's files (1.239771ms)
2026-10-14T23:46:17.6009644Z ▶ with a working copy
2026-10-14T23:46:17.6009709Z   ✔ SessionStart gives Claude the branch's issue's work context (65.771766ms)
2026-10-14T23:46:17.6009772Z   ✔ the background half starts the session once, then logs into it (287.731899ms)
2026-10-14T23:46:17.6009840Z   ✔ background retrieval reaches the next tool without auto-acknowledging (184.921562ms)
2026-10-14T23:46:17.6009904Z   ✔ hooks after SessionStart record; SessionEnd forgets the session (235.697686ms)
2026-10-14T23:46:17.6009971Z   ✔ a push that reached the remote updates the head commit (236.189545ms)
2026-10-14T23:46:17.6010060Z   ✔ each subagent is a session of its own under this one, whatever order its hooks arrive in (481.727042ms)
2026-10-14T23:46:17.6010124Z   ✔ a subagent whose stop arrives first is started, then ended (237.589446ms)
2026-10-14T23:46:17.6010548Z   ✔ an Agent call that finished ends its subagent with what it reported (285.4808ms)
2026-10-14T23:46:17.6010605Z   ✔ a hand-off names its issue at the start (195.263186ms)
2026-10-14T23:46:17.6010668Z   ✔ a missing CLI records nothing and says so once (28.453384ms)
2026-10-14T23:46:17.6010735Z   ✔ a signed-out CLI is said once, at the next prompt (134.56766ms)
2026-10-14T23:46:17.6010796Z   ✔ outside a g1t repository nothing happens (20.085772ms)
2026-10-14T23:46:19.6402516Z   ✔ the script answers SessionStart on stdin quickly, as JSON (458.038702ms)
2026-10-14T23:46:19.9048848Z   ✔ the script prints nothing for a prompt, and never fails on bad input (103.46484ms)
2026-10-14T23:46:19.9049011Z   ✔ a CLI older than the plugin needs records nothing and says so once, with how to update it (99.758687ms)
2026-10-14T23:46:19.9049075Z   ✔ a CLI that refuses a command (exit 2) is said once, as one to update (135.183486ms)
2026-10-14T23:46:19.9049124Z   ✔ the stand-in CLI refuses what the real one refuses (15.057364ms)
2026-10-14T23:46:19.9049177Z   ✔ PowerShell commands are read as Bash ones are, and a subagent's act as its session (269.125267ms)
2026-10-14T23:46:19.9049244Z   ✔ a skill typed as /plugin:name is recorded once in its turn, however Claude Code then runs it (382.335517ms)
2026-10-14T23:46:19.9049306Z   ✔ with no issue in sight, Claude is told the session is recorded and when to open or claim one (23.123563ms)
2026-10-14T23:46:19.9049368Z   ✔ the session's first prompt with an intent titles it, once, and never over a title it has (420.293619ms)
2026-10-14T23:46:19.9050223Z   ✔ a session titled already keeps its title (284.859668ms)
2026-10-14T23:46:19.9050294Z   ✔ Claude's own commands get the session's id once it has started (185.369323ms)
2026-10-14T23:46:19.9050361Z   ✔ on a Node older than 18 nothing is recorded, and that is said once (15.336353ms)
2026-10-14T23:46:19.9050376Z ✔ with a working copy (4789.468617ms)
2026-10-14T23:46:19.9050438Z ✔ pending updates survive delivery and stay isolated between parent and child (4.153505ms)
2026-10-14T23:46:19.9050527Z ✔ a CLI too old to acknowledge is told to update, once per set of updates (2.090929ms)
2026-10-14T23:46:19.9050615Z ✔ an acknowledgement refreshes the inbox at once, from the shell or MCP (0.477967ms)
2026-10-14T23:46:19.9050635Z ℹ tests 50
2026-10-14T23:46:19.9050661Z ℹ suites 5
2026-10-14T23:46:19.9050675Z ℹ pass 50
2026-10-14T23:46:19.9051208Z ℹ fail 0
2026-10-14T23:46:19.9051222Z ℹ cancelled 0
2026-10-14T23:46:19.9051234Z ℹ skipped 0
2026-10-14T23:46:19.9051246Z ℹ todo 0
2026-10-14T23:46:19.9051260Z ℹ duration_ms 4906.779141
2026-10-14T23:46:20.4312985Z ##[group]Run node scripts/plugins-release.mjs check
2026-10-14T23:46:20.4313043Z [36;1mnode scripts/plugins-release.mjs check[0m
2026-10-14T23:46:20.4313083Z [36;1mnode --test scripts/plugins-release.test.mjs[0m
2026-10-14T23:46:20.4313103Z shell: /usr/bin/bash -e {0}
2026-10-14T23:46:20.4313115Z env:
2026-10-14T23:46:20.4313125Z   CARGO_TERM_COLOR: never
2026-10-14T23:46:20.4313135Z   WRANGLER_SEND_METRICS: false
2026-10-14T23:46:20.4313154Z ##[endgroup]
2026-10-14T23:46:20.4831353Z g1t@g1t 0.2.3: the manifests agree and the published tree is only the plugin
2026-10-14T23:46:21.1775429Z ✔ this repository's manifests agree: g1t@g1t, one version (1.501554ms)
2026-10-14T23:46:21.1779958Z ✔ the build is the marketplace, the plugin without its tests, a README and the license (19.016227ms)
2026-10-14T23:46:21.1791599Z ✔ manifests that disagree stop the build (8.681402ms)
2026-10-14T23:46:21.1794780Z ✔ a file the script does not know about stops the build (3.783901ms)
2026-10-14T23:46:21.1801826Z ✔ anything that looks like a credential, or a credentials file, is never published (11.354635ms)
2026-10-14T23:46:21.1803699Z ✔ releases are tagged as claude plugin tag tags them (0.252769ms)
2026-10-14T23:46:21.1806389Z ✔ the token goes to git through its environment, never its arguments (0.328894ms)
2026-10-14T23:46:21.1807815Z ✔ publishing: the first commit and tag, nothing when unchanged, a new version for a changed plugin (500.577381ms)
2026-10-14T23:46:21.1950996Z ℹ tests 8
2026-10-14T23:46:21.1952076Z ℹ suites 0
2026-10-14T23:46:21.1952779Z ℹ pass 8
2026-10-14T23:46:21.1962861Z ℹ fail 0
2026-10-14T23:46:21.1963168Z ℹ cancelled 0
2026-10-14T23:46:21.1963435Z ℹ skipped 0
2026-10-14T23:46:21.1963682Z ℹ todo 0
2026-10-14T23:46:21.1963869Z ℹ duration_ms 666.75948
2026-10-14T23:46:22.0044299Z Cache hit occurred on the primary key npm-full-Linux-56353fded01065bb5545a93e5599ab84e40b1cd26d8464642dcc554e8c3b7e87, not saving cache.
2026-10-14T23:46:22.0045734Z (node:5705) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-10-14T23:46:22.0045797Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-10-14T23:46:22.7753387Z [command]/usr/bin/git version
2026-10-14T23:46:22.7799518Z git version 2.39.5
2026-10-14T23:46:22.7881724Z Temporarily overriding HOME='/home/runner/_temp/9458d7c0-bcda-4654-9078-08a1e160c877' before making global git config changes
2026-10-14T23:46:22.7883502Z Adding repository directory to the temporary git global config as a safe directory
2026-10-14T23:46:22.7887829Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/repo
2026-10-14T23:46:22.7941587Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-10-14T23:46:22.7993656Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-10-14T23:46:22.8368381Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/g1t\.sh\/\.extraheader
2026-10-14T23:46:22.8405420Z http.https://g1t.sh/.extraheader
2026-10-14T23:46:22.8418482Z [command]/usr/bin/git config --local --unset-all http.https://g1t.sh/.extraheader
2026-10-14T23:46:22.8470805Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/g1t\.sh\/\.extraheader' && git config --local --unset-all 'http.https://g1t.sh/.extraheader' || :"
2026-10-14T23:46:22.8807937Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-10-14T23:46:22.8855133Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-10-14T23:46:23.6037226Z Cleaning up orphan processes
