﻿2026-05-16T09:02:44.9837384Z Current runner version: '2.334.0'
2026-05-16T09:02:44.9858697Z ##[group]Runner Image Provisioner
2026-05-16T09:02:44.9859423Z Hosted Compute Agent
2026-05-16T09:02:44.9859972Z Version: 20260213.493
2026-05-16T09:02:44.9860515Z Commit: 5c115507f6dd24b8de37d8bbe0bb4509d0cc0fa3
2026-05-16T09:02:44.9861072Z Build Date: 2026-02-13T00:28:41Z
2026-05-16T09:02:44.9861670Z Worker ID: {093cb6d2-157c-43f3-9d7f-63ab68ab7324}
2026-05-16T09:02:44.9862460Z Azure Region: westcentralus
2026-05-16T09:02:44.9862980Z ##[endgroup]
2026-05-16T09:02:44.9864102Z ##[group]Operating System
2026-05-16T09:02:44.9864617Z Ubuntu
2026-05-16T09:02:44.9865039Z 24.04.4
2026-05-16T09:02:44.9865568Z LTS
2026-05-16T09:02:44.9866000Z ##[endgroup]
2026-05-16T09:02:44.9866492Z ##[group]Runner Image
2026-05-16T09:02:44.9867021Z Image: ubuntu-24.04
2026-05-16T09:02:44.9867501Z Version: 20260513.135.3
2026-05-16T09:02:44.9868615Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260513.135/images/ubuntu/Ubuntu2404-Readme.md
2026-05-16T09:02:44.9869789Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260513.135
2026-05-16T09:02:44.9870626Z ##[endgroup]
2026-05-16T09:02:44.9871536Z ##[group]GITHUB_TOKEN Permissions
2026-05-16T09:02:44.9873387Z Contents: read
2026-05-16T09:02:44.9873879Z Metadata: read
2026-05-16T09:02:44.9874391Z ##[endgroup]
2026-05-16T09:02:44.9876248Z Secret source: Actions
2026-05-16T09:02:44.9876856Z Prepare workflow directory
2026-05-16T09:02:45.0196561Z Prepare all required actions
2026-05-16T09:02:45.0238805Z Getting action download info
2026-05-16T09:02:45.4978572Z Download action repository 'actions/checkout@v4' (SHA:34e114876b0b11c390a56381ad16ebd13914f8d5)
2026-05-16T09:02:46.2722767Z Download action repository 'pnpm/action-setup@v4' (SHA:b906affcce14559ad1aafd4ab0e942779e9f58b1)
2026-05-16T09:02:47.3183234Z Download action repository 'actions/setup-node@v4' (SHA:49933ea5288caeca8642d1e84afbd3f7d6820020)
2026-05-16T09:02:47.8416564Z Download action repository 'superfly/flyctl-actions@fc53c09e1bc3be6f54706524e3b82c4f462f77be' (SHA:fc53c09e1bc3be6f54706524e3b82c4f462f77be)
2026-05-16T09:02:48.1704808Z Download action repository 'actions/upload-artifact@v4' (SHA:ea165f8d65b6e75b540449e92b4886f43607fa02)
2026-05-16T09:02:48.7139718Z Complete job name: build-and-deploy
2026-05-16T09:02:48.7675647Z ##[group]Run actions/checkout@v4
2026-05-16T09:02:48.7676084Z with:
2026-05-16T09:02:48.7676267Z   repository: SaberMage/rebno
2026-05-16T09:02:48.7676608Z   token: ***
2026-05-16T09:02:48.7676792Z   ssh-strict: true
2026-05-16T09:02:48.7676972Z   ssh-user: git
2026-05-16T09:02:48.7677145Z   persist-credentials: true
2026-05-16T09:02:48.7677361Z   clean: true
2026-05-16T09:02:48.7677576Z   sparse-checkout-cone-mode: true
2026-05-16T09:02:48.7677805Z   fetch-depth: 1
2026-05-16T09:02:48.7678005Z   fetch-tags: false
2026-05-16T09:02:48.7678192Z   show-progress: true
2026-05-16T09:02:48.7678375Z   lfs: false
2026-05-16T09:02:48.7678543Z   submodules: false
2026-05-16T09:02:48.7678727Z   set-safe-directory: true
2026-05-16T09:02:48.7679076Z ##[endgroup]
2026-05-16T09:02:48.8616075Z Syncing repository: SaberMage/rebno
2026-05-16T09:02:48.8617437Z ##[group]Getting Git version info
2026-05-16T09:02:48.8617918Z Working directory is '/home/runner/work/rebno/rebno'
2026-05-16T09:02:48.8713195Z [command]/usr/bin/git version
2026-05-16T09:02:48.8718065Z git version 2.54.0
2026-05-16T09:02:48.8720359Z ##[endgroup]
2026-05-16T09:02:48.8725801Z Temporarily overriding HOME='/home/runner/work/_temp/d3b59cb6-e9cb-4f29-80ac-e4e341206eb6' before making global git config changes
2026-05-16T09:02:48.8726931Z Adding repository directory to the temporary git global config as a safe directory
2026-05-16T09:02:48.8727912Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/rebno/rebno
2026-05-16T09:02:49.0352569Z Deleting the contents of '/home/runner/work/rebno/rebno'
2026-05-16T09:02:49.0361437Z ##[group]Initializing the repository
2026-05-16T09:02:49.0362651Z [command]/usr/bin/git init /home/runner/work/rebno/rebno
2026-05-16T09:02:49.2913866Z hint: Using 'master' as the name for the initial branch. This default branch name
2026-05-16T09:02:49.2915836Z hint: will change to "main" in Git 3.0. To configure the initial branch name
2026-05-16T09:02:49.2918684Z hint: to use in all of your new repositories, which will suppress this warning,
2026-05-16T09:02:49.2919393Z hint: call:
2026-05-16T09:02:49.2919982Z hint:
2026-05-16T09:02:49.2920623Z hint: 	git config --global init.defaultBranch <name>
2026-05-16T09:02:49.2921276Z hint:
2026-05-16T09:02:49.2922002Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2026-05-16T09:02:49.2922891Z hint: 'development'. The just-created branch can be renamed via this command:
2026-05-16T09:02:49.2923626Z hint:
2026-05-16T09:02:49.2924153Z hint: 	git branch -m <name>
2026-05-16T09:02:49.2924645Z hint:
2026-05-16T09:02:49.2925209Z hint: Disable this message with "git config set advice.defaultBranchName false"
2026-05-16T09:02:49.2926209Z Initialized empty Git repository in /home/runner/work/rebno/rebno/.git/
2026-05-16T09:02:49.2931342Z [command]/usr/bin/git remote add origin https://github.com/SaberMage/rebno
2026-05-16T09:02:49.3433678Z ##[endgroup]
2026-05-16T09:02:49.3434349Z ##[group]Disabling automatic garbage collection
2026-05-16T09:02:49.3438506Z [command]/usr/bin/git config --local gc.auto 0
2026-05-16T09:02:49.3813604Z ##[endgroup]
2026-05-16T09:02:49.3814371Z ##[group]Setting up auth
2026-05-16T09:02:49.3820501Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-05-16T09:02:49.3851403Z [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-05-16T09:02:49.4468520Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-05-16T09:02:49.4510183Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-05-16T09:02:49.4765280Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-05-16T09:02:49.4802623Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-05-16T09:02:49.5001816Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2026-05-16T09:02:49.5032053Z ##[endgroup]
2026-05-16T09:02:49.5032854Z ##[group]Fetching the repository
2026-05-16T09:02:49.5040183Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +aa1f54ea335ed9988cf60a6cdc0f17b686cbafd7:refs/remotes/origin/main
2026-05-16T09:02:51.5840699Z From https://github.com/SaberMage/rebno
2026-05-16T09:02:51.5842123Z  * [new ref]         aa1f54ea335ed9988cf60a6cdc0f17b686cbafd7 -> origin/main
2026-05-16T09:02:51.5863805Z ##[endgroup]
2026-05-16T09:02:51.5864436Z ##[group]Determining the checkout info
2026-05-16T09:02:51.5866984Z ##[endgroup]
2026-05-16T09:02:51.5871359Z [command]/usr/bin/git sparse-checkout disable
2026-05-16T09:02:51.5905706Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2026-05-16T09:02:51.5935746Z ##[group]Checking out the ref
2026-05-16T09:02:51.5939293Z [command]/usr/bin/git checkout --progress --force -B main refs/remotes/origin/main
2026-05-16T09:02:52.2802256Z Switched to a new branch 'main'
2026-05-16T09:02:52.2803783Z branch 'main' set up to track 'origin/main'.
2026-05-16T09:02:52.3478448Z ##[endgroup]
2026-05-16T09:02:52.3513186Z [command]/usr/bin/git log -1 --format=%H
2026-05-16T09:02:52.3533561Z aa1f54ea335ed9988cf60a6cdc0f17b686cbafd7
2026-05-16T09:02:52.3713640Z ##[group]Run pnpm/action-setup@v4
2026-05-16T09:02:52.3713894Z with:
2026-05-16T09:02:52.3714061Z   version: 10
2026-05-16T09:02:52.3714226Z   dest: ~/setup-pnpm
2026-05-16T09:02:52.3714585Z   run_install: null
2026-05-16T09:02:52.3714767Z   cache: false
2026-05-16T09:02:52.3714964Z   cache_dependency_path: pnpm-lock.yaml
2026-05-16T09:02:52.3715214Z   package_json_file: package.json
2026-05-16T09:02:52.3715430Z   standalone: false
2026-05-16T09:02:52.3715612Z ##[endgroup]
2026-05-16T09:02:52.4856717Z ##[group]Running self-installer...
2026-05-16T09:02:53.0889568Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:02:53.1082827Z Packages: +1
2026-05-16T09:02:53.1142576Z +
2026-05-16T09:02:53.5267176Z Progress: resolved 1, reused 0, downloaded 1, added 1, done
2026-05-16T09:02:53.8428504Z 
2026-05-16T09:02:53.8429324Z dependencies:
2026-05-16T09:02:53.8430033Z + pnpm 10.33.4 (11.1.2 is available)
2026-05-16T09:02:53.8430439Z 
2026-05-16T09:02:53.8493207Z Done in 1.2s
2026-05-16T09:02:53.8629146Z ##[endgroup]
2026-05-16T09:02:53.8650200Z Installation Completed!
2026-05-16T09:02:53.8781588Z ##[group]Run actions/setup-node@v4
2026-05-16T09:02:53.8782054Z with:
2026-05-16T09:02:53.8782244Z   node-version: 22
2026-05-16T09:02:53.8782419Z   cache: pnpm
2026-05-16T09:02:53.8782587Z   always-auth: false
2026-05-16T09:02:53.8782771Z   check-latest: false
2026-05-16T09:02:53.8783046Z   token: ***
2026-05-16T09:02:53.8783213Z env:
2026-05-16T09:02:53.8783428Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T09:02:53.8783689Z ##[endgroup]
2026-05-16T09:02:54.1033798Z Found in cache @ /opt/hostedtoolcache/node/22.22.2/x64
2026-05-16T09:02:54.1056318Z ##[group]Environment details
2026-05-16T09:02:54.9083313Z node: v22.22.2
2026-05-16T09:02:54.9083918Z npm: 10.9.7
2026-05-16T09:02:54.9084525Z yarn: 1.22.22
2026-05-16T09:02:54.9085475Z ##[endgroup]
2026-05-16T09:02:54.9106765Z [command]/home/runner/setup-pnpm/node_modules/.bin/pnpm store path --silent
2026-05-16T09:02:55.2101136Z /home/runner/setup-pnpm/node_modules/.bin/store/v10
2026-05-16T09:02:55.4840829Z pnpm cache is not found
2026-05-16T09:02:55.4945998Z ##[group]Run pnpm install --frozen-lockfile
2026-05-16T09:02:55.4946354Z [36;1mpnpm install --frozen-lockfile[0m
2026-05-16T09:02:55.4983854Z shell: /usr/bin/bash -e {0}
2026-05-16T09:02:55.4984076Z env:
2026-05-16T09:02:55.4984292Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T09:02:55.4984557Z ##[endgroup]
2026-05-16T09:02:55.7588464Z Scope: all 6 workspace projects
2026-05-16T09:02:55.8759936Z Lockfile is up to date, resolution step is skipped
2026-05-16T09:02:55.9262876Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:02:55.9867503Z Packages: +667
2026-05-16T09:02:55.9870520Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:02:56.9249508Z Progress: resolved 667, reused 0, downloaded 65, added 34
2026-05-16T09:02:57.9241352Z Progress: resolved 667, reused 0, downloaded 146, added 77
2026-05-16T09:02:58.9247269Z Progress: resolved 667, reused 0, downloaded 193, added 93
2026-05-16T09:02:59.9273472Z Progress: resolved 667, reused 0, downloaded 279, added 138
2026-05-16T09:03:00.9279945Z Progress: resolved 667, reused 0, downloaded 353, added 192
2026-05-16T09:03:01.9288224Z Progress: resolved 667, reused 0, downloaded 398, added 227
2026-05-16T09:03:02.9290680Z Progress: resolved 667, reused 0, downloaded 452, added 292
2026-05-16T09:03:03.9300150Z Progress: resolved 667, reused 0, downloaded 600, added 481
2026-05-16T09:03:04.9297813Z Progress: resolved 667, reused 0, downloaded 648, added 513
2026-05-16T09:03:05.9343769Z Progress: resolved 667, reused 0, downloaded 661, added 517
2026-05-16T09:03:06.5145471Z Packages are hard linked from the content-addressable store to the virtual store.
2026-05-16T09:03:06.5146591Z   Content-addressable store is at: /home/runner/setup-pnpm/node_modules/.bin/store/v10
2026-05-16T09:03:06.5147716Z   Virtual store is at:             node_modules/.pnpm
2026-05-16T09:03:06.9334801Z Progress: resolved 667, reused 0, downloaded 663, added 527
2026-05-16T09:03:07.9339116Z Progress: resolved 667, reused 0, downloaded 663, added 612
2026-05-16T09:03:08.0558717Z Progress: resolved 667, reused 0, downloaded 663, added 667, done
2026-05-16T09:03:08.3425782Z .../node_modules/better-sqlite3 install$ prebuild-install || node-gyp rebuild --release
2026-05-16T09:03:08.3433998Z .../esbuild@0.25.12/node_modules/esbuild postinstall$ node install.js
2026-05-16T09:03:08.3441664Z .../esbuild@0.27.7/node_modules/esbuild postinstall$ node install.js
2026-05-16T09:03:08.3448024Z .../esbuild@0.18.20/node_modules/esbuild postinstall$ node install.js
2026-05-16T09:03:08.4107161Z .../argon2@0.44.0/node_modules/argon2 install$ cross-env ZERO_AR_DATE=1 node-gyp-build
2026-05-16T09:03:08.5812868Z .../argon2@0.44.0/node_modules/argon2 install: Done
2026-05-16T09:03:08.9543236Z .../node_modules/better-sqlite3 install: Done
2026-05-16T09:03:09.8770758Z .../esbuild@0.25.12/node_modules/esbuild postinstall: Done
2026-05-16T09:03:10.0682193Z .../esbuild@0.27.7/node_modules/esbuild postinstall: Done
2026-05-16T09:03:10.3493187Z .../esbuild@0.18.20/node_modules/esbuild postinstall: Done
2026-05-16T09:03:11.2735886Z 
2026-05-16T09:03:11.2739589Z devDependencies:
2026-05-16T09:03:11.2741872Z + @better-auth/cli 1.4.21
2026-05-16T09:03:11.2742960Z + tsx 4.21.0
2026-05-16T09:03:11.2750477Z 
2026-05-16T09:03:11.3173073Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:11.3174417Z │                                                                              │
2026-05-16T09:03:11.3182231Z │   Ignored build scripts: @prisma/client@5.22.0, msgpackr-extract@3.0.3,      │
2026-05-16T09:03:11.3183239Z │   protobufjs@7.5.6, protobufjs@8.0.1.                                        │
2026-05-16T09:03:11.3185852Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:11.3186956Z │   to run scripts.                                                            │
2026-05-16T09:03:11.3188566Z │                                                                              │
2026-05-16T09:03:11.3189505Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:11.3407337Z Done in 15.8s using pnpm v10.33.4
2026-05-16T09:03:11.3887380Z ##[group]Run for d in tools/asset-catalog tools/asset-pipeline tools/extract-gmd tools/protocol-doc tools/room-converter tools/save-format-doc; do
2026-05-16T09:03:11.3888217Z [36;1mfor d in tools/asset-catalog tools/asset-pipeline tools/extract-gmd tools/protocol-doc tools/room-converter tools/save-format-doc; do[0m
2026-05-16T09:03:11.3888725Z [36;1m  if [ -f "$d/package.json" ]; then[0m
2026-05-16T09:03:11.3888990Z [36;1m    echo "::group::pnpm install in $d"[0m
2026-05-16T09:03:11.3889308Z [36;1m    pnpm -C "$d" install --ignore-workspace --no-frozen-lockfile[0m
2026-05-16T09:03:11.3889608Z [36;1m    echo "::endgroup::"[0m
2026-05-16T09:03:11.3889820Z [36;1m  fi[0m
2026-05-16T09:03:11.3889989Z [36;1mdone[0m
2026-05-16T09:03:11.3919890Z shell: /usr/bin/bash -e {0}
2026-05-16T09:03:11.3920108Z env:
2026-05-16T09:03:11.3920326Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T09:03:11.3920604Z ##[endgroup]
2026-05-16T09:03:11.4115780Z ##[group]pnpm install in tools/asset-catalog
2026-05-16T09:03:11.6629837Z Lockfile is up to date, resolution step is skipped
2026-05-16T09:03:11.6987986Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:03:11.7007056Z Packages: +52
2026-05-16T09:03:11.7017051Z ++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:03:12.2307254Z Progress: resolved 52, reused 46, downloaded 6, added 52, done
2026-05-16T09:03:12.6296783Z 
2026-05-16T09:03:12.6301185Z devDependencies:
2026-05-16T09:03:12.6301906Z + @types/node 25.6.0
2026-05-16T09:03:12.6303771Z + tsx 4.21.0
2026-05-16T09:03:12.6304072Z + typescript 5.6.3
2026-05-16T09:03:12.6304350Z + vitest 4.1.5
2026-05-16T09:03:12.6304502Z 
2026-05-16T09:03:12.6359658Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:12.6360884Z │                                                                              │
2026-05-16T09:03:12.6363279Z │   Ignored build scripts: esbuild@0.27.7.                                     │
2026-05-16T09:03:12.6364361Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:12.6365615Z │   to run scripts.                                                            │
2026-05-16T09:03:12.6367141Z │                                                                              │
2026-05-16T09:03:12.6368269Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:12.6402894Z Done in 1.2s using pnpm v10.33.4
2026-05-16T09:03:12.6520114Z ##[endgroup]
2026-05-16T09:03:12.6521033Z ##[group]pnpm install in tools/asset-pipeline
2026-05-16T09:03:12.9362816Z Lockfile is up to date, resolution step is skipped
2026-05-16T09:03:12.9643121Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:03:12.9807505Z Packages: +64
2026-05-16T09:03:12.9808481Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:03:13.6892921Z Progress: resolved 64, reused 57, downloaded 7, added 64, done
2026-05-16T09:03:13.8608687Z 
2026-05-16T09:03:13.8609468Z dependencies:
2026-05-16T09:03:13.8609867Z + maxrects-packer 2.7.3
2026-05-16T09:03:13.8611261Z + sharp 0.34.5
2026-05-16T09:03:13.8611429Z 
2026-05-16T09:03:13.8611535Z devDependencies:
2026-05-16T09:03:13.8612302Z + @types/node 25.6.0
2026-05-16T09:03:13.8612581Z + tsx 4.21.0
2026-05-16T09:03:13.8612855Z + typescript 5.6.3
2026-05-16T09:03:13.8613129Z + vitest 3.2.4
2026-05-16T09:03:13.8613289Z 
2026-05-16T09:03:13.8674844Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:13.8675852Z │                                                                              │
2026-05-16T09:03:13.8677066Z │   Ignored build scripts: esbuild@0.27.7, sharp@0.34.5.                       │
2026-05-16T09:03:13.8677852Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:13.8678613Z │   to run scripts.                                                            │
2026-05-16T09:03:13.8679538Z │                                                                              │
2026-05-16T09:03:13.8680220Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:13.8721610Z Done in 1.1s using pnpm v10.33.4
2026-05-16T09:03:13.9179847Z ##[endgroup]
2026-05-16T09:03:13.9181872Z ##[group]pnpm install in tools/extract-gmd
2026-05-16T09:03:14.3183154Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:03:15.3180629Z Progress: resolved 114, reused 53, downloaded 3, added 0
2026-05-16T09:03:15.8046651Z Packages: +57
2026-05-16T09:03:15.8047329Z +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:03:16.0062444Z Progress: resolved 135, reused 53, downloaded 10, added 57, done
2026-05-16T09:03:16.1992380Z 
2026-05-16T09:03:16.1993217Z dependencies:
2026-05-16T09:03:16.1994012Z + sharp 0.34.5
2026-05-16T09:03:16.1994494Z 
2026-05-16T09:03:16.1994777Z devDependencies:
2026-05-16T09:03:16.1995373Z + @types/node 25.6.0 (25.8.0 is available)
2026-05-16T09:03:16.1995985Z + tsx 4.21.0 (4.22.0 is available)
2026-05-16T09:03:16.1996565Z + typescript 5.6.3 (6.0.3 is available)
2026-05-16T09:03:16.1997138Z + vitest 4.1.5 (4.1.6 is available)
2026-05-16T09:03:16.1997515Z 
2026-05-16T09:03:16.2026936Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:16.2027754Z │                                                                              │
2026-05-16T09:03:16.2028521Z │   Ignored build scripts: esbuild@0.27.7, sharp@0.34.5.                       │
2026-05-16T09:03:16.2029339Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:16.2030111Z │   to run scripts.                                                            │
2026-05-16T09:03:16.2030733Z │                                                                              │
2026-05-16T09:03:16.2031830Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:16.2068113Z Done in 2.2s using pnpm v10.33.4
2026-05-16T09:03:16.2282542Z ##[endgroup]
2026-05-16T09:03:16.2283604Z ##[group]pnpm install in tools/protocol-doc
2026-05-16T09:03:16.4725185Z Lockfile is up to date, resolution step is skipped
2026-05-16T09:03:16.4984293Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:03:16.5108384Z Packages: +52
2026-05-16T09:03:16.5109164Z ++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:03:16.7995935Z Progress: resolved 52, reused 52, downloaded 0, added 52, done
2026-05-16T09:03:17.0941373Z 
2026-05-16T09:03:17.0942407Z devDependencies:
2026-05-16T09:03:17.0943225Z + @types/node 25.6.0
2026-05-16T09:03:17.0943774Z + tsx 4.21.0
2026-05-16T09:03:17.0944293Z + typescript 5.6.3
2026-05-16T09:03:17.0944738Z + vitest 4.1.5
2026-05-16T09:03:17.0945065Z 
2026-05-16T09:03:17.1010678Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:17.1012317Z │                                                                              │
2026-05-16T09:03:17.1013648Z │   Ignored build scripts: esbuild@0.27.7.                                     │
2026-05-16T09:03:17.1014497Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:17.1015269Z │   to run scripts.                                                            │
2026-05-16T09:03:17.1015915Z │                                                                              │
2026-05-16T09:03:17.1016615Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:17.1055937Z Done in 856ms using pnpm v10.33.4
2026-05-16T09:03:17.1143084Z ##[endgroup]
2026-05-16T09:03:17.1143819Z ##[group]pnpm install in tools/room-converter
2026-05-16T09:03:17.3606694Z Lockfile is up to date, resolution step is skipped
2026-05-16T09:03:17.3863656Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:03:17.3977517Z Packages: +58
2026-05-16T09:03:17.3983192Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:03:17.6601146Z Progress: resolved 58, reused 58, downloaded 0, added 58, done
2026-05-16T09:03:18.3036794Z 
2026-05-16T09:03:18.3037780Z devDependencies:
2026-05-16T09:03:18.3042422Z + @types/node 25.6.0
2026-05-16T09:03:18.3042799Z + tsx 4.21.0
2026-05-16T09:03:18.3043304Z + typescript 5.6.3
2026-05-16T09:03:18.3043694Z + vitest 3.2.4
2026-05-16T09:03:18.3044712Z + zod 3.25.76
2026-05-16T09:03:18.3045030Z 
2026-05-16T09:03:18.3110638Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:18.3111647Z │                                                                              │
2026-05-16T09:03:18.3112915Z │   Ignored build scripts: esbuild@0.27.7.                                     │
2026-05-16T09:03:18.3118136Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:18.3119314Z │   to run scripts.                                                            │
2026-05-16T09:03:18.3119991Z │                                                                              │
2026-05-16T09:03:18.3120655Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:18.3155384Z Done in 1.1s using pnpm v10.33.4
2026-05-16T09:03:18.3244638Z ##[endgroup]
2026-05-16T09:03:18.3245449Z ##[group]pnpm install in tools/save-format-doc
2026-05-16T09:03:18.5651567Z Lockfile is up to date, resolution step is skipped
2026-05-16T09:03:18.5822918Z Progress: resolved 1, reused 0, downloaded 0, added 0
2026-05-16T09:03:18.5924608Z Packages: +52
2026-05-16T09:03:18.5943461Z ++++++++++++++++++++++++++++++++++++++++++++++++++++
2026-05-16T09:03:18.7902083Z Progress: resolved 52, reused 52, downloaded 0, added 52, done
2026-05-16T09:03:19.3391663Z 
2026-05-16T09:03:19.3395063Z devDependencies:
2026-05-16T09:03:19.3395547Z + @types/node 25.6.0
2026-05-16T09:03:19.3396268Z + tsx 4.21.0
2026-05-16T09:03:19.3397085Z + typescript 5.6.3
2026-05-16T09:03:19.3397814Z + vitest 4.1.5
2026-05-16T09:03:19.3402660Z 
2026-05-16T09:03:19.3458291Z ╭ Warning ─────────────────────────────────────────────────────────────────────╮
2026-05-16T09:03:19.3459389Z │                                                                              │
2026-05-16T09:03:19.3461644Z │   Ignored build scripts: esbuild@0.27.7.                                     │
2026-05-16T09:03:19.3463320Z │   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
2026-05-16T09:03:19.3464144Z │   to run scripts.                                                            │
2026-05-16T09:03:19.3464802Z │                                                                              │
2026-05-16T09:03:19.3465507Z ╰──────────────────────────────────────────────────────────────────────────────╯
2026-05-16T09:03:19.3512409Z Done in 1s using pnpm v10.33.4
2026-05-16T09:03:19.3604191Z ##[endgroup]
2026-05-16T09:03:19.3637907Z ##[group]Run pnpm -r --filter "@rebno/*" build
2026-05-16T09:03:19.3638378Z [36;1mpnpm -r --filter "@rebno/*" build[0m
2026-05-16T09:03:19.3682008Z shell: /usr/bin/bash -e {0}
2026-05-16T09:03:19.3682319Z env:
2026-05-16T09:03:19.3682652Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T09:03:19.3683065Z ##[endgroup]
2026-05-16T09:03:19.6900189Z Scope: 5 of 6 workspace projects
2026-05-16T09:03:19.6924108Z packages/db build$ tsc
2026-05-16T09:03:19.6931201Z packages/game-logic build$ tsc
2026-05-16T09:03:21.7167086Z packages/game-logic build: Done
2026-05-16T09:03:21.7192887Z packages/protocol prebuild$ node scripts/sync-from-tools-protocol-doc.mjs
2026-05-16T09:03:21.9430994Z packages/protocol prebuild: synced legacy-opcodes from /home/runner/work/rebno/rebno/tools/protocol-doc/output/protocol.ts
2026-05-16T09:03:21.9622996Z packages/protocol prebuild: Done
2026-05-16T09:03:21.9645890Z packages/protocol build$ tsc
2026-05-16T09:03:23.6011221Z packages/db build: Done
2026-05-16T09:03:24.6194457Z packages/protocol build: Done
2026-05-16T09:03:24.6201084Z apps/server build$ tsc -b
2026-05-16T09:03:30.1406414Z apps/server build: Done
2026-05-16T09:03:30.1531446Z ##[group]Run pnpm verify:phase-4
2026-05-16T09:03:30.1532142Z [36;1mpnpm verify:phase-4[0m
2026-05-16T09:03:30.1562329Z shell: /usr/bin/bash -e {0}
2026-05-16T09:03:30.1562545Z env:
2026-05-16T09:03:30.1562774Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T09:03:30.1563031Z   SKIP_PHASE_3_CARRYOVER: 1
2026-05-16T09:03:30.1563225Z   SKIP_TRACE_CHECK: 1
2026-05-16T09:03:30.1563404Z ##[endgroup]
2026-05-16T09:03:30.3822385Z 
2026-05-16T09:03:30.3843569Z > rebno@0.0.0 verify:phase-4 /home/runner/work/rebno/rebno
2026-05-16T09:03:30.3862074Z > node scripts/verify-phase-4.mjs
2026-05-16T09:03:30.3872835Z 
2026-05-16T09:03:30.4123888Z 
2026-05-16T09:03:30.4124523Z === Workspace: typecheck ===
2026-05-16T09:03:30.4125215Z >>> pnpm -r typecheck
2026-05-16T09:03:30.6455815Z Scope: 5 of 6 workspace projects
2026-05-16T09:03:30.6497279Z packages/db typecheck$ tsc --noEmit
2026-05-16T09:03:30.6503572Z packages/game-logic typecheck$ tsc --noEmit
2026-05-16T09:03:32.6764647Z packages/game-logic typecheck: Done
2026-05-16T09:03:32.6812447Z packages/protocol typecheck$ tsc --noEmit
2026-05-16T09:03:34.1091130Z packages/db typecheck: Done
2026-05-16T09:03:35.3391169Z packages/protocol typecheck: Done
2026-05-16T09:03:35.3400982Z apps/client typecheck$ tsc --noEmit
2026-05-16T09:03:35.3403885Z apps/server typecheck$ tsc --noEmit
2026-05-16T09:03:44.9708645Z apps/client typecheck: Done
2026-05-16T09:03:45.2015583Z apps/server typecheck: Done
2026-05-16T09:03:45.2110191Z 
2026-05-16T09:03:45.2110880Z === Lint: protocol-sync ===
2026-05-16T09:03:45.2111504Z >>> pnpm lint:protocol-sync
2026-05-16T09:03:45.4411577Z 
2026-05-16T09:03:45.4412774Z > rebno@0.0.0 lint:protocol-sync /home/runner/work/rebno/rebno
2026-05-16T09:03:45.4413555Z > node tools/scripts/lint-protocol-sync.mjs
2026-05-16T09:03:45.4414004Z 
2026-05-16T09:03:45.4692098Z lint-protocol-sync: OK
2026-05-16T09:03:45.4797509Z 
2026-05-16T09:03:45.4798158Z === Lint: game-logic-purity ===
2026-05-16T09:03:45.4798873Z >>> pnpm lint:game-logic-purity
2026-05-16T09:03:45.7082242Z 
2026-05-16T09:03:45.7083127Z > rebno@0.0.0 lint:game-logic-purity /home/runner/work/rebno/rebno
2026-05-16T09:03:45.7084063Z > node tools/scripts/lint-game-logic-purity.mjs
2026-05-16T09:03:45.7084511Z 
2026-05-16T09:03:45.7376170Z lint-game-logic-purity: OK (8 file(s) clean)
2026-05-16T09:03:45.7479690Z 
2026-05-16T09:03:45.7480285Z === Lint: better-auth-schema-sync ===
2026-05-16T09:03:45.7480998Z >>> pnpm lint:better-auth-schema-sync
2026-05-16T09:03:45.9850437Z 
2026-05-16T09:03:45.9851626Z > rebno@0.0.0 lint:better-auth-schema-sync /home/runner/work/rebno/rebno
2026-05-16T09:03:45.9852875Z > node tools/scripts/lint-better-auth-schema-sync.mjs
2026-05-16T09:03:45.9853352Z 
2026-05-16T09:03:47.2334461Z lint-better-auth-schema-sync: OK
2026-05-16T09:03:47.2440632Z 
2026-05-16T09:03:47.2441263Z === Lint: rate-limit-budgets ===
2026-05-16T09:03:47.2442035Z >>> pnpm lint:rate-limit-budgets
2026-05-16T09:03:47.4709304Z 
2026-05-16T09:03:47.4710273Z > rebno@0.0.0 lint:rate-limit-budgets /home/runner/work/rebno/rebno
2026-05-16T09:03:47.4711209Z > node tools/scripts/lint-rate-limit-budgets.mjs
2026-05-16T09:03:47.4712000Z 
2026-05-16T09:03:47.4959792Z lint-rate-limit-budgets: OK (5 D-22 budgets locked)
2026-05-16T09:03:47.5064331Z 
2026-05-16T09:03:47.5064839Z === Lint: no-clipboard-rce ===
2026-05-16T09:03:47.5065490Z >>> pnpm lint:no-clipboard-rce
2026-05-16T09:03:47.7307933Z 
2026-05-16T09:03:47.7308908Z > rebno@0.0.0 lint:no-clipboard-rce /home/runner/work/rebno/rebno
2026-05-16T09:03:47.7309813Z > node tools/scripts/lint-no-clipboard-rce.mjs
2026-05-16T09:03:47.7310251Z 
2026-05-16T09:03:47.7598536Z lint-no-clipboard-rce: OK (22 file(s) clean)
2026-05-16T09:03:47.7705968Z 
2026-05-16T09:03:47.7706504Z === Lint: room-layout ===
2026-05-16T09:03:47.7707147Z >>> pnpm lint:room-layout
2026-05-16T09:03:47.9932228Z 
2026-05-16T09:03:47.9933147Z > rebno@0.0.0 lint:room-layout /home/runner/work/rebno/rebno
2026-05-16T09:03:47.9934492Z > node tools/scripts/lint-room-layout.mjs
2026-05-16T09:03:47.9935028Z 
2026-05-16T09:03:48.0239017Z lint-room-layout: OK
2026-05-16T09:03:48.0342175Z 
2026-05-16T09:03:48.0342679Z === ADR 0004 lint ===
2026-05-16T09:03:48.0343284Z >>> pnpm lint:adr:0004
2026-05-16T09:03:48.2652064Z 
2026-05-16T09:03:48.2653175Z > rebno@0.0.0 lint:adr:0004 /home/runner/work/rebno/rebno
2026-05-16T09:03:48.2654240Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0004-room-hot-reload.md --no-matrix
2026-05-16T09:03:48.2654925Z 
2026-05-16T09:03:48.2904113Z OK: ADR docs/adr/0004-room-hot-reload.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-16T09:03:48.3005705Z 
2026-05-16T09:03:48.3006278Z === Drizzle: emit-check ===
2026-05-16T09:03:48.3006854Z >>> pnpm db:emit-check
2026-05-16T09:03:48.5268676Z 
2026-05-16T09:03:48.5269587Z > rebno@0.0.0 db:emit-check /home/runner/work/rebno/rebno
2026-05-16T09:03:48.5272048Z > pnpm -C packages/db exec drizzle-kit generate && node -e "require('fs').copyFileSync('packages/db/migrations/0001_baseline.sql','docs/extracted-server/0001_baseline.sql')" && git diff --exit-code packages/db/migrations/0001_baseline.sql docs/extracted-server/0001_baseline.sql
2026-05-16T09:03:48.5273699Z 
2026-05-16T09:03:48.8662973Z No config path provided, using default 'drizzle.config.ts'
2026-05-16T09:03:48.8664175Z Reading config file '/home/runner/work/rebno/rebno/packages/db/drizzle.config.ts'
2026-05-16T09:03:49.2560122Z 8 tables
2026-05-16T09:03:49.2560534Z accounts 8 columns 1 indexes 0 fks
2026-05-16T09:03:49.2560978Z audit_log 6 columns 0 indexes 2 fks
2026-05-16T09:03:49.2561405Z characters 9 columns 0 indexes 1 fks
2026-05-16T09:03:49.2562001Z inventory_items 4 columns 0 indexes 1 fks
2026-05-16T09:03:49.2563009Z legacy_credentials_staging 6 columns 0 indexes 0 fks
2026-05-16T09:03:49.2563520Z message_board_replies 5 columns 0 indexes 2 fks
2026-05-16T09:03:49.2564043Z message_board_topics 7 columns 0 indexes 1 fks
2026-05-16T09:03:49.2564466Z sessions 5 columns 0 indexes 1 fks
2026-05-16T09:03:49.2564672Z 
2026-05-16T09:03:49.2565219Z No schema changes, nothing to migrate 😴
2026-05-16T09:03:49.7059415Z 
2026-05-16T09:03:49.7060222Z === Drizzle: schema-sync ===
2026-05-16T09:03:49.7061056Z >>> pnpm lint:schema-sync
2026-05-16T09:03:49.9311877Z 
2026-05-16T09:03:49.9312817Z > rebno@0.0.0 lint:schema-sync /home/runner/work/rebno/rebno
2026-05-16T09:03:49.9315437Z > node -e "const a=require('fs').readFileSync('packages/db/migrations/0001_baseline.sql');const b=require('fs').readFileSync('docs/extracted-server/0001_baseline.sql');if(Buffer.compare(a,b)!==0){console.error('docs/extracted-server/0001_baseline.sql out of sync with packages/db/migrations/0001_baseline.sql');process.exit(1)}console.log('OK')"
2026-05-16T09:03:49.9317320Z 
2026-05-16T09:03:49.9542622Z OK
2026-05-16T09:03:49.9656742Z 
2026-05-16T09:03:49.9657244Z === Drizzle: source-comments ===
2026-05-16T09:03:49.9657892Z >>> pnpm lint:source-comments
2026-05-16T09:03:50.1909792Z 
2026-05-16T09:03:50.1910939Z > rebno@0.0.0 lint:source-comments /home/runner/work/rebno/rebno
2026-05-16T09:03:50.1912064Z > pnpm -C packages/db run lint:source-comments
2026-05-16T09:03:50.1912517Z 
2026-05-16T09:03:50.4176200Z 
2026-05-16T09:03:50.4177335Z > @rebno/db@0.1.0 lint:source-comments /home/runner/work/rebno/rebno/packages/db
2026-05-16T09:03:50.4178489Z > node scripts/check-source-comments.mjs
2026-05-16T09:03:50.4179013Z 
2026-05-16T09:03:50.4456352Z check-source-comments: OK (50 columns, all SOURCE-cited)
2026-05-16T09:03:50.4637194Z 
2026-05-16T09:03:50.4637705Z === Workspace: test ===
2026-05-16T09:03:50.4638159Z >>> pnpm -r test
2026-05-16T09:03:50.6918480Z Scope: 5 of 6 workspace projects
2026-05-16T09:03:50.6959591Z packages/db test$ vitest run
2026-05-16T09:03:50.6966224Z packages/game-logic test$ vitest run
2026-05-16T09:03:51.0814153Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-16T09:03:51.0830580Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-16T09:03:51.4257831Z packages/game-logic test:  [32m✓[39m test/step-bno-fidelity.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-16T09:03:51.5908150Z packages/game-logic test:  [32m✓[39m test/collision-axis-slide.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:03:51.7587918Z packages/game-logic test:  [32m✓[39m test/wall-slide.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:03:51.8524364Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-16T09:03:51.9343947Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-16T09:03:52.0284322Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:03:52.1247830Z packages/game-logic test:  [32m✓[39m test/navi-mask-bbox.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:03:52.2731594Z packages/game-logic test:  [32m✓[39m test/walkable-edge.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:03:52.4485285Z packages/game-logic test:  [32m✓[39m test/movement-constants.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:03:52.6164112Z packages/game-logic test:  [32m✓[39m test/sprite-state-machine.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:03:52.6454086Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-16T09:03:52.6461139Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-16T09:03:52.6472513Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-16T09:03:52.6492538Z packages/db test: [2m   Start at [22m 09:03:51
2026-05-16T09:03:52.6512885Z packages/db test: [2m   Duration [22m 1.55s[2m (transform 112ms, setup 0ms, import 1.05s, tests 20ms, environment 0ms)[22m
2026-05-16T09:03:52.6607842Z packages/db test: Done
2026-05-16T09:03:52.6608449Z packages/protocol test$ vitest run
2026-05-16T09:03:52.7983978Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-16T09:03:52.9718807Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:03:53.0424457Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-16T09:03:53.1517318Z packages/game-logic test:  [32m✓[39m test/run-speed.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:03:53.3022744Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:03:53.3025350Z packages/game-logic test: [2m Test Files [22m [1m[32m12 passed[39m[22m[90m (12)[39m
2026-05-16T09:03:53.3026173Z packages/game-logic test: [2m      Tests [22m [1m[32m61 passed[39m[22m[90m (61)[39m
2026-05-16T09:03:53.3026834Z packages/game-logic test: [2m   Start at [22m 09:03:51
2026-05-16T09:03:53.3027790Z packages/game-logic test: [2m   Duration [22m 2.21s[2m (transform 202ms, setup 0ms, import 370ms, tests 78ms, environment 1ms)[22m
2026-05-16T09:03:53.3596077Z packages/game-logic test: Done
2026-05-16T09:03:53.3632740Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m15 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-16T09:03:53.5142919Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-16T09:03:53.6505490Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:03:53.7682738Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:03:53.7718363Z packages/protocol test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-16T09:03:53.7734514Z packages/protocol test: [2m      Tests [22m [1m[32m41 passed[39m[22m[90m (41)[39m
2026-05-16T09:03:53.7737795Z packages/protocol test: [2m   Start at [22m 09:03:53
2026-05-16T09:03:53.7739081Z packages/protocol test: [2m   Duration [22m 742ms[2m (transform 123ms, setup 0ms, import 222ms, tests 32ms, environment 0ms)[22m
2026-05-16T09:03:53.8090926Z packages/protocol test: Done
2026-05-16T09:03:53.8095367Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-16T09:03:53.8097380Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-16T09:03:54.2054253Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-16T09:03:54.2765628Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-16T09:03:55.2258022Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 148[2mms[22m[39m
2026-05-16T09:03:55.3373886Z apps/client test:  [32m✓[39m src/__test__/nameplate-stability.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 38[2mms[22m[39m
2026-05-16T09:03:55.5803965Z apps/server test:  [32m✓[39m test/layout-derive.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 100[2mms[22m[39m
2026-05-16T09:03:55.7798106Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-16T09:03:55.9666268Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-16T09:03:56.1957291Z apps/server test: {"level":40,"time":1778922236185,"pid":3241,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-16T09:03:56.2083804Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 26[2mms[22m[39m
2026-05-16T09:03:56.2137269Z apps/server test: {"level":40,"time":1778922236195,"pid":3241,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-16T09:03:56.2173232Z apps/server test: {"level":40,"time":1778922236196,"pid":3241,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-16T09:03:56.7074463Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-16T09:03:56.7105577Z apps/client test: [22m[39mroom_layout signature did not verify — rendering anyway (defense-in-depth; see 06.1-D40-SPIKE.md) mvp-lobby 000
2026-05-16T09:03:56.7978486Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 230[2mms[22m[39m
2026-05-16T09:03:56.9709605Z apps/server test: {"level":30,"time":1778922236969,"pid":3252,"hostname":"runnervmrw5os","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-16T09:03:56.9763305Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 562[2mms[22m[39m
2026-05-16T09:03:56.9764782Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 455[2mms[22m[39m
2026-05-16T09:03:57.7136348Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-16T09:03:57.7169856Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-JqEqWF/rebno.db
2026-05-16T09:03:57.7171540Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-16T09:03:57.7190476Z apps/server test: [run-migrations] OK
2026-05-16T09:03:57.7293714Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-16T09:03:57.7301618Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-6CnSpo/rebno.db
2026-05-16T09:03:57.7303025Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-16T09:03:57.7305070Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-16T09:03:57.7306323Z apps/server test: [run-migrations] OK
2026-05-16T09:03:57.7343400Z apps/client test:  [31m❯[39m src/__test__/sprite-state-machine.teleport-gate.test.ts [2m([22m[2m3 tests[22m[2m | [22m[31m3 failed[39m[2m)[22m[32m 32[2mms[22m[39m
2026-05-16T09:03:57.7346385Z apps/client test: [31m   [31m×[31m D-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot[2m > [22mTest 1: initial-snapshot batch (before microtask flip) → addRemote called with { playTeleportIn: false } for both pre-existing remotes[39m[32m 23[2mms[22m[39m
2026-05-16T09:03:57.7348814Z apps/client test: [31m     → [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?
2026-05-16T09:03:57.7384156Z apps/client test: If you need to partially mock a module, you can use "importOriginal" helper inside:
2026-05-16T09:03:57.7384967Z apps/client test: [39m
2026-05-16T09:03:57.7387048Z apps/client test: [31m   [31m×[31m D-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot[2m > [22mTest 2: post-microtask remote-add → addRemote called with { playTeleportIn: true } (fresh join during session)[39m[32m 5[2mms[22m[39m
2026-05-16T09:03:57.7389540Z apps/client test: [31m     → [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?
2026-05-16T09:03:57.7391224Z apps/client test: If you need to partially mock a module, you can use "importOriginal" helper inside:
2026-05-16T09:03:57.7392305Z apps/client test: [39m
2026-05-16T09:03:57.7394085Z apps/client test: [31m   [31m×[31m D-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot[2m > [22mTest 3 (negative): self-spawn (onLocalJoin) path is UNCHANGED — does not consult inInitialSnapshot[39m[32m 3[2mms[22m[39m
2026-05-16T09:03:57.7396502Z apps/client test: [31m     → [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?
2026-05-16T09:03:57.7397962Z apps/client test: If you need to partially mock a module, you can use "importOriginal" helper inside:
2026-05-16T09:03:57.7398939Z apps/client test: [39m
2026-05-16T09:03:57.7400566Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-16T09:03:57.7402426Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-KpdTw3/rebno.db
2026-05-16T09:03:57.7403562Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-16T09:03:57.7404477Z apps/server test: [run-migrations] OK
2026-05-16T09:03:57.7406028Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-16T09:03:57.7407635Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-KpdTw3/rebno.db
2026-05-16T09:03:57.7408764Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-16T09:03:57.7420579Z apps/server test: [run-migrations] OK
2026-05-16T09:03:57.7467056Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 58[2mms[22m[39m
2026-05-16T09:03:57.9761539Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-16T09:03:58.1488995Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:03:58.3853009Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-16T09:03:58.5780434Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:03:58.6276638Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 45[2mms[22m[39m
2026-05-16T09:03:59.2489581Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-16T09:03:59.2504153Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ◈ secrets for agents [www.dotenvx.com]
2026-05-16T09:03:59.2520703Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-16T09:03:59.5477442Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-16T09:03:59.8014808Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:03:59.8223459Z apps/server test: [2m Test Files [22m [1m[32m12 passed[39m[22m[90m (12)[39m
2026-05-16T09:03:59.8263618Z apps/server test: [2m      Tests [22m [1m[32m72 passed[39m[22m[90m (72)[39m
2026-05-16T09:03:59.8293382Z apps/server test: [2m   Start at [22m 09:03:54
2026-05-16T09:03:59.8295951Z apps/server test: [2m   Duration [22m 5.60s[2m (transform 451ms, setup 0ms, import 2.63s, tests 967ms, environment 1ms)[22m
2026-05-16T09:03:59.8647066Z apps/server test: Done
2026-05-16T09:04:00.2031430Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:04:00.7485804Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-16T09:04:01.4002257Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 56[2mms[22m[39m
2026-05-16T09:04:01.9317988Z apps/client test:  [32m✓[39m src/__test__/player-renderer.teleport.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-16T09:04:02.4779919Z apps/client test:  [32m✓[39m src/__test__/player-renderer-spawn-delay.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-16T09:04:03.0142634Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-16T09:04:03.6057053Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 64[2mms[22m[39m
2026-05-16T09:04:04.1488942Z apps/client test:  [32m✓[39m src/__test__/nameplate-color.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 24[2mms[22m[39m
2026-05-16T09:04:04.7242820Z apps/client test: [90mstderr[2m | src/__test__/background-renderer.test.ts[2m > [22m[2mBackgroundRenderer — wrap math (sim-tick pure state)[2m > [22m[2mD-64 round-4: dispose() survives a group whose .clear() throws (scene-shutdown race)
2026-05-16T09:04:04.7245774Z apps/client test: [22m[39mBackgroundRenderer.dispose: group.clear threw (likely scene-shutdown race) Cannot read properties of undefined (reading 'size')
2026-05-16T09:04:04.7252332Z apps/client test:  [32m✓[39m src/__test__/background-renderer.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 59[2mms[22m[39m
2026-05-16T09:04:05.2680023Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:04:05.7770213Z apps/client test:  [32m✓[39m src/__test__/room-renderer.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:04:06.3420013Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 60[2mms[22m[39m
2026-05-16T09:04:06.9110313Z apps/client test:  [32m✓[39m src/__test__/esc-menu.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 61[2mms[22m[39m
2026-05-16T09:04:07.4336833Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:04:07.9622819Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:04:08.4783984Z apps/client test:  [32m✓[39m src/__test__/sprite-state-rate.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-16T09:04:08.9911900Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-16T09:04:09.4994448Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher-shift.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:04:10.0126146Z apps/client test:  [32m✓[39m src/__test__/boot-font-gate.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:04:10.5560873Z apps/client test:  [32m✓[39m src/__test__/legacy-origin.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:04:11.1345241Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-16T09:04:11.6642054Z apps/client test:  [32m✓[39m src/__test__/room-collision-bottom-edge.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:04:12.1926772Z apps/client test:  [32m✓[39m src/__test__/depth-set.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-16T09:04:12.7216286Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-16T09:04:13.2408919Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-16T09:04:13.7589473Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 3[2mms[22m[39m
2026-05-16T09:04:13.7779036Z apps/client test: [31m⎯⎯⎯⎯⎯⎯⎯[39m[1m[41m Failed Tests 3 [49m[22m[31m⎯⎯⎯⎯⎯⎯⎯[39m
2026-05-16T09:04:13.7804934Z apps/client test: [41m[1m FAIL [22m[49m src/__test__/sprite-state-machine.teleport-gate.test.ts[2m > [22mD-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot[2m > [22mTest 1: initial-snapshot batch (before microtask flip) → addRemote called with { playTeleportIn: false } for both pre-existing remotes
2026-05-16T09:04:13.7813358Z apps/client test: [31m[1mError[22m: [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?
2026-05-16T09:04:13.7822771Z apps/client test: If you need to partially mock a module, you can use "importOriginal" helper inside:
2026-05-16T09:04:13.7842357Z apps/client test: [39m
2026-05-16T09:04:13.7863120Z apps/client test: vi[33m.[39m[34mmock[39m([35mimport[39m([32m"../net/colyseus-client.js"[39m)[33m,[39m [35masync[39m (importOriginal) [33m=>[39m {
2026-05-16T09:04:13.7864365Z apps/client test:   [35mconst[39m actual [33m=[39m [35mawait[39m [34mimportOriginal[39m()
2026-05-16T09:04:13.7865059Z apps/client test:   [35mreturn[39m {
2026-05-16T09:04:13.7865608Z apps/client test:     [33m...[39mactual[33m,[39m
2026-05-16T09:04:13.7866205Z apps/client test:     [90m// your mocked methods[39m
2026-05-16T09:04:13.7866987Z apps/client test:   }
2026-05-16T09:04:13.7867293Z apps/client test: })
2026-05-16T09:04:13.7868402Z apps/client test: [36m [2m❯[22m GameScene.hasCachedReconnectionToken src/scenes/GameScene.ts:[2m869:43[22m[39m
2026-05-16T09:04:13.8093067Z apps/client test:     [90m867| [39m  [35mprivate[39m [34mhasCachedReconnectionToken[39m()[33m:[39m boolean {
2026-05-16T09:04:13.8113381Z apps/client test:     [90m868| [39m    [35mif[39m ([35mtypeof[39m sessionStorage [33m===[39m [32m'undefined'[39m) [35mreturn[39m [35mfalse[39m[33m;[39m
2026-05-16T09:04:13.8163157Z apps/client test:     [90m869| [39m    [35mreturn[39m [33mBoolean[39m(sessionStorage[33m.[39m[34mgetItem[39m([33mRECONNECT_TOKEN_KEY[39m))[33m;[39m
2026-05-16T09:04:13.8182678Z apps/client test:     [90m   | [39m                                          [31m^[39m
2026-05-16T09:04:13.8222538Z apps/client test:     [90m870| [39m  }
2026-05-16T09:04:13.8240103Z apps/client test:     [90m871| [39m
2026-05-16T09:04:13.8240990Z apps/client test: [90m [2m❯[22m GameScene.create src/scenes/GameScene.ts:[2m217:28[22m[39m
2026-05-16T09:04:13.8242373Z apps/client test: [90m [2m❯[22m bootSceneAndCaptureCallbacks src/__test__/sprite-state-machine.teleport-gate.test.ts:[2m283:17[22m[39m
2026-05-16T09:04:13.8243649Z apps/client test: [90m [2m❯[22m src/__test__/sprite-state-machine.teleport-gate.test.ts:[2m294:41[22m[39m
2026-05-16T09:04:13.8244552Z apps/client test: [31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/3]⎯[22m[39m
2026-05-16T09:04:13.8246729Z apps/client test: [41m[1m FAIL [22m[49m src/__test__/sprite-state-machine.teleport-gate.test.ts[2m > [22mD-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot[2m > [22mTest 2: post-microtask remote-add → addRemote called with { playTeleportIn: true } (fresh join during session)
2026-05-16T09:04:13.8249039Z apps/client test: [31m[1mError[22m: [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?
2026-05-16T09:04:13.8250292Z apps/client test: If you need to partially mock a module, you can use "importOriginal" helper inside:
2026-05-16T09:04:13.8250989Z apps/client test: [39m
2026-05-16T09:04:13.8252257Z apps/client test: vi[33m.[39m[34mmock[39m([35mimport[39m([32m"../net/colyseus-client.js"[39m)[33m,[39m [35masync[39m (importOriginal) [33m=>[39m {
2026-05-16T09:04:13.8253397Z apps/client test:   [35mconst[39m actual [33m=[39m [35mawait[39m [34mimportOriginal[39m()
2026-05-16T09:04:13.8254062Z apps/client test:   [35mreturn[39m {
2026-05-16T09:04:13.8254613Z apps/client test:     [33m...[39mactual[33m,[39m
2026-05-16T09:04:13.8255211Z apps/client test:     [90m// your mocked methods[39m
2026-05-16T09:04:13.8255636Z apps/client test:   }
2026-05-16T09:04:13.8255944Z apps/client test: })
2026-05-16T09:04:13.8256838Z apps/client test: [36m [2m❯[22m GameScene.hasCachedReconnectionToken src/scenes/GameScene.ts:[2m869:43[22m[39m
2026-05-16T09:04:13.8258117Z apps/client test:     [90m867| [39m  [35mprivate[39m [34mhasCachedReconnectionToken[39m()[33m:[39m boolean {
2026-05-16T09:04:13.8259576Z apps/client test:     [90m868| [39m    [35mif[39m ([35mtypeof[39m sessionStorage [33m===[39m [32m'undefined'[39m) [35mreturn[39m [35mfalse[39m[33m;[39m
2026-05-16T09:04:13.8261190Z apps/client test:     [90m869| [39m    [35mreturn[39m [33mBoolean[39m(sessionStorage[33m.[39m[34mgetItem[39m([33mRECONNECT_TOKEN_KEY[39m))[33m;[39m
2026-05-16T09:04:13.8263946Z apps/client test:     [90m   | [39m                                          [31m^[39m
2026-05-16T09:04:13.8264545Z apps/client test:     [90m870| [39m  }
2026-05-16T09:04:13.8265000Z apps/client test:     [90m871| [39m
2026-05-16T09:04:13.8266949Z apps/client test: [90m [2m❯[22m GameScene.create src/scenes/GameScene.ts:[2m217:28[22m[39m
2026-05-16T09:04:13.8268199Z apps/client test: [90m [2m❯[22m bootSceneAndCaptureCallbacks src/__test__/sprite-state-machine.teleport-gate.test.ts:[2m283:17[22m[39m
2026-05-16T09:04:13.8270087Z apps/client test: [90m [2m❯[22m src/__test__/sprite-state-machine.teleport-gate.test.ts:[2m328:41[22m[39m
2026-05-16T09:04:13.8271024Z apps/client test: [31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/3]⎯[22m[39m
2026-05-16T09:04:13.8273321Z apps/client test: [41m[1m FAIL [22m[49m src/__test__/sprite-state-machine.teleport-gate.test.ts[2m > [22mD-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot[2m > [22mTest 3 (negative): self-spawn (onLocalJoin) path is UNCHANGED — does not consult inInitialSnapshot
2026-05-16T09:04:13.8275681Z apps/client test: [31m[1mError[22m: [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?
2026-05-16T09:04:13.8276966Z apps/client test: If you need to partially mock a module, you can use "importOriginal" helper inside:
2026-05-16T09:04:13.8277630Z apps/client test: [39m
2026-05-16T09:04:13.8278732Z apps/client test: vi[33m.[39m[34mmock[39m([35mimport[39m([32m"../net/colyseus-client.js"[39m)[33m,[39m [35masync[39m (importOriginal) [33m=>[39m {
2026-05-16T09:04:13.8279986Z apps/client test:   [35mconst[39m actual [33m=[39m [35mawait[39m [34mimportOriginal[39m()
2026-05-16T09:04:13.8280671Z apps/client test:   [35mreturn[39m {
2026-05-16T09:04:13.8281223Z apps/client test:     [33m...[39mactual[33m,[39m
2026-05-16T09:04:13.8312226Z apps/client test:     [90m// your mocked methods[39m
2026-05-16T09:04:13.8312722Z apps/client test:   }
2026-05-16T09:04:13.8313051Z apps/client test: })
2026-05-16T09:04:13.8314039Z apps/client test: [36m [2m❯[22m GameScene.hasCachedReconnectionToken src/scenes/GameScene.ts:[2m869:43[22m[39m
2026-05-16T09:04:13.8315336Z apps/client test:     [90m867| [39m  [35mprivate[39m [34mhasCachedReconnectionToken[39m()[33m:[39m boolean {
2026-05-16T09:04:13.8316751Z apps/client test:     [90m868| [39m    [35mif[39m ([35mtypeof[39m sessionStorage [33m===[39m [32m'undefined'[39m) [35mreturn[39m [35mfalse[39m[33m;[39m
2026-05-16T09:04:13.8318289Z apps/client test:     [90m869| [39m    [35mreturn[39m [33mBoolean[39m(sessionStorage[33m.[39m[34mgetItem[39m([33mRECONNECT_TOKEN_KEY[39m))[33m;[39m
2026-05-16T09:04:13.8319342Z apps/client test:     [90m   | [39m                                          [31m^[39m
2026-05-16T09:04:13.8319907Z apps/client test:     [90m870| [39m  }
2026-05-16T09:04:13.8320329Z apps/client test:     [90m871| [39m
2026-05-16T09:04:13.8321065Z apps/client test: [90m [2m❯[22m GameScene.create src/scenes/GameScene.ts:[2m217:28[22m[39m
2026-05-16T09:04:13.8322645Z apps/client test: [90m [2m❯[22m bootSceneAndCaptureCallbacks src/__test__/sprite-state-machine.teleport-gate.test.ts:[2m283:17[22m[39m
2026-05-16T09:04:13.8323995Z apps/client test: [90m [2m❯[22m src/__test__/sprite-state-machine.teleport-gate.test.ts:[2m362:41[22m[39m
2026-05-16T09:04:13.8324872Z apps/client test: [31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/3]⎯[22m[39m
2026-05-16T09:04:13.8325852Z apps/client test: [2m Test Files [22m [1m[31m1 failed[39m[22m[2m | [22m[1m[32m30 passed[39m[22m[90m (31)[39m
2026-05-16T09:04:13.8337508Z apps/client test: [2m      Tests [22m [1m[31m3 failed[39m[22m[2m | [22m[1m[32m220 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (227)[39m
2026-05-16T09:04:13.8338466Z apps/client test: [2m   Start at [22m 09:03:54
2026-05-16T09:04:13.8339673Z apps/client test: [2m   Duration [22m 19.50s[2m (transform 679ms, setup 45ms, collect 1.36s, tests 805ms, environment 11.28s, prepare 2.12s)[22m
2026-05-16T09:04:13.8363517Z apps/client test: ::error file=/home/runner/work/rebno/rebno/apps/client/src/scenes/GameScene.ts,title=src/__test__/sprite-state-machine.teleport-gate.test.ts > D-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot > Test 1%3A initial-snapshot batch (before microtask flip) → addRemote called with { playTeleportIn%3A false } for both pre-existing remotes,line=869,column=43::Error: [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?%0AIf you need to partially mock a module, you can use "importOriginal" helper inside:%0A%0Avi.mock(import("../net/colyseus-client.js"), async (importOriginal) => {%0A  const actual = await importOriginal()%0A  return {%0A    ...actual,%0A    // your mocked methods%0A  }%0A})%0A%0A ❯ GameScene.hasCachedReconnectionToken src/scenes/GameScene.ts:869:43%0A ❯ GameScene.create src/scenes/GameScene.ts:217:28%0A ❯ bootSceneAndCaptureCallbacks src/__test__/sprite-state-machine.teleport-gate.test.ts:283:17%0A ❯ src/__test__/sprite-state-machine.teleport-gate.test.ts:294:41%0A%0A
2026-05-16T09:04:13.8379001Z apps/client test: ::error file=/home/runner/work/rebno/rebno/apps/client/src/scenes/GameScene.ts,title=src/__test__/sprite-state-machine.teleport-gate.test.ts > D-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot > Test 2%3A post-microtask remote-add → addRemote called with { playTeleportIn%3A true } (fresh join during session),line=869,column=43::Error: [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?%0AIf you need to partially mock a module, you can use "importOriginal" helper inside:%0A%0Avi.mock(import("../net/colyseus-client.js"), async (importOriginal) => {%0A  const actual = await importOriginal()%0A  return {%0A    ...actual,%0A    // your mocked methods%0A  }%0A})%0A%0A ❯ GameScene.hasCachedReconnectionToken src/scenes/GameScene.ts:869:43%0A ❯ GameScene.create src/scenes/GameScene.ts:217:28%0A ❯ bootSceneAndCaptureCallbacks src/__test__/sprite-state-machine.teleport-gate.test.ts:283:17%0A ❯ src/__test__/sprite-state-machine.teleport-gate.test.ts:328:41%0A%0A
2026-05-16T09:04:13.8391414Z apps/client test: ::error file=/home/runner/work/rebno/rebno/apps/client/src/scenes/GameScene.ts,title=src/__test__/sprite-state-machine.teleport-gate.test.ts > D-55d initial-snapshot TeleIn gate — GameScene.inInitialSnapshot > Test 3 (negative)%3A self-spawn (onLocalJoin) path is UNCHANGED — does not consult inInitialSnapshot,line=869,column=43::Error: [vitest] No "RECONNECT_TOKEN_KEY" export is defined on the "../net/colyseus-client.js" mock. Did you forget to return it from "vi.mock"?%0AIf you need to partially mock a module, you can use "importOriginal" helper inside:%0A%0Avi.mock(import("../net/colyseus-client.js"), async (importOriginal) => {%0A  const actual = await importOriginal()%0A  return {%0A    ...actual,%0A    // your mocked methods%0A  }%0A})%0A%0A ❯ GameScene.hasCachedReconnectionToken src/scenes/GameScene.ts:869:43%0A ❯ GameScene.create src/scenes/GameScene.ts:217:28%0A ❯ bootSceneAndCaptureCallbacks src/__test__/sprite-state-machine.teleport-gate.test.ts:283:17%0A ❯ src/__test__/sprite-state-machine.teleport-gate.test.ts:362:41%0A%0A
2026-05-16T09:04:13.9204362Z apps/client test: Failed
2026-05-16T09:04:13.9312831Z /home/runner/work/rebno/rebno/apps/client:
2026-05-16T09:04:13.9314388Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/client@0.1.0 test: `vitest run --exclude 'test/e2e/**'`
2026-05-16T09:04:13.9315094Z Exit status 1
2026-05-16T09:04:13.9486834Z 
2026-05-16T09:04:13.9487484Z verify-phase-4 FAILED at step 'Workspace: test': pnpm -r test (exit 1)
2026-05-16T09:04:13.9492697Z Fix the failing step and re-run `pnpm verify:phase-4`.
2026-05-16T09:04:13.9632216Z  ELIFECYCLE  Command failed with exit code 1.
2026-05-16T09:04:13.9811088Z ##[error]Process completed with exit code 1.
2026-05-16T09:04:13.9932503Z ##[group]Run actions/upload-artifact@v4
2026-05-16T09:04:13.9932766Z with:
2026-05-16T09:04:13.9932950Z   name: playwright-cli-08-25957978015
2026-05-16T09:04:13.9933249Z   path: apps/client/playwright-report
apps/client/test-results

2026-05-16T09:04:13.9933529Z   retention-days: 14
2026-05-16T09:04:13.9933720Z   if-no-files-found: warn
2026-05-16T09:04:13.9933916Z   compression-level: 6
2026-05-16T09:04:13.9934097Z   overwrite: false
2026-05-16T09:04:13.9934496Z   include-hidden-files: false
2026-05-16T09:04:13.9934690Z env:
2026-05-16T09:04:13.9934896Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T09:04:13.9935151Z ##[endgroup]
2026-05-16T09:04:14.1677976Z Multiple search paths detected. Calculating the least common ancestor of all paths
2026-05-16T09:04:14.1680111Z The least common ancestor is /home/runner/work/rebno/rebno/apps/client. This will be the root directory of the artifact
2026-05-16T09:04:14.1695749Z ##[warning]No files were found with the provided path: apps/client/playwright-report
apps/client/test-results. No artifacts will be uploaded.
2026-05-16T09:04:14.1789154Z Post job cleanup.
2026-05-16T09:04:14.3011606Z Pruning is unnecessary.
2026-05-16T09:04:14.3200761Z Post job cleanup.
2026-05-16T09:04:14.4108784Z [command]/usr/bin/git version
2026-05-16T09:04:14.4145696Z git version 2.54.0
2026-05-16T09:04:14.4181484Z Temporarily overriding HOME='/home/runner/work/_temp/c330b5cb-6e0d-4f96-b463-920564c04401' before making global git config changes
2026-05-16T09:04:14.4183149Z Adding repository directory to the temporary git global config as a safe directory
2026-05-16T09:04:14.4196590Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/rebno/rebno
2026-05-16T09:04:14.4228438Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-05-16T09:04:14.4257289Z [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-05-16T09:04:14.4469477Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-05-16T09:04:14.4491001Z http.https://github.com/.extraheader
2026-05-16T09:04:14.4503235Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2026-05-16T09:04:14.4531082Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-05-16T09:04:14.4746969Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-05-16T09:04:14.4775889Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-05-16T09:04:14.5088059Z Cleaning up orphan processes
2026-05-16T09:04:14.5333808Z ##[warning]Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4, pnpm/action-setup@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
