2026-10-24T21:01:07.4596031Z Current runner version: '2.338.1' 2026-10-24T21:01:07.4599453Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-gs6ghjsmie2wrsjs' 2026-10-24T21:01:07.4600266Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T21:01:07.4600959Z Machine name: 'ip-172-31-73-130' 2026-10-24T21:01:07.4602612Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T21:01:07.4603894Z Contents: read 2026-10-24T21:01:07.4604362Z Metadata: read 2026-10-24T21:01:07.4604740Z ##[endgroup] 2026-10-24T21:01:07.4606076Z Secret source: Actions 2026-10-24T21:01:07.4606756Z Cache mode: write 2026-10-24T21:01:07.4607231Z Prepare workflow directory 2026-10-24T21:01:07.4791864Z Prepare all required actions 2026-10-24T21:01:07.4818599Z Getting action download info 2026-10-24T21:01:07.6154808Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T21:01:07.6484023Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T21:01:07.7759451Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T21:01:07.7800954Z Complete job name: Lint 2026-10-24T21:01:07.8241933Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T21:01:07.8307690Z ##[group]Run '/setup.sh' 2026-10-24T21:01:07.8318360Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T21:01:07.8318850Z env: 2026-10-24T21:01:07.8319067Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:07.8319351Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:07.8319953Z BLACKSMITH_CHECK_RUN_ID: 120986548679 2026-10-24T21:01:07.8320227Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T21:01:07.8320496Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T21:01:07.8320752Z ##[endgroup] 2026-10-24T21:01:07.8566436Z Logging daemon started (blacksmithd for logs) 2026-10-24T21:01:07.8661322Z Results daemon started (blacksmithd for results) 2026-10-24T21:01:07.8806898Z Background adoption and SSH setup started (PID: 3063) 2026-10-24T21:01:07.8809860Z 2026-10-24T21:01:07.8810166Z ---------------------------------------- 2026-10-24T21:01:07.8810883Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40132346590/jobs/120986548679 2026-10-24T21:01:07.8811496Z SSH Access (using your GitHub SSH key): 2026-10-24T21:01:07.8811983Z ssh -p 64002 runner@blacksmith-8vcpu-ubuntu-2404-gs6ghjsmie2wrsjs.vm.blacksmith.sh 2026-10-24T21:01:07.8812290Z 2026-10-24T21:01:07.8812400Z No GitHub SSH key? Add one at: 2026-10-24T21:01:07.8812888Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T21:01:07.8813301Z 2026-10-24T21:01:07.8813453Z ---------------------------------------- 2026-10-24T21:01:07.8813651Z 2026-10-24T21:01:07.8813791Z VM ID: blacksmith-8vcpu-ubuntu-2404-gs6ghjsmie2wrsjs 2026-10-24T21:01:07.8814115Z Host: production-152.236.41.162-x8664 2026-10-24T21:01:07.8814387Z Host Agent PID: 1903012 2026-10-24T21:01:07.8814636Z Host Agent Git SHA: 1637818df 2026-10-24T21:01:07.8814896Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T21:01:07.8815173Z Blacksmith Host Generation: gen 2 2026-10-24T21:01:07.8815459Z Petname: production-funky-doe-90bf5525 2026-10-24T21:01:07.8815738Z Region: us-east 2026-10-24T21:01:07.8815970Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T21:01:07.8822735Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T21:01:07.8823722Z 2026-10-24T21:01:07.8823922Z Enabling Blacksmith transparent cache 2026-10-24T21:01:07.9036902Z ##[group]Run actions/checkout@v6 2026-10-24T21:01:07.9037201Z with: 2026-10-24T21:01:07.9037529Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T21:01:07.9037922Z sparse-checkout-cone-mode: false 2026-10-24T21:01:07.9038199Z repository: pingdotgg/t3code 2026-10-24T21:01:07.9040197Z token: *** 2026-10-24T21:01:07.9040413Z ssh-strict: true 2026-10-24T21:01:07.9040632Z ssh-user: git 2026-10-24T21:01:07.9040858Z persist-credentials: true 2026-10-24T21:01:07.9041396Z clean: true 2026-10-24T21:01:07.9041614Z fetch-depth: 1 2026-10-24T21:01:07.9041831Z fetch-tags: false 2026-10-24T21:01:07.9042057Z show-progress: true 2026-10-24T21:01:07.9042283Z lfs: false 2026-10-24T21:01:07.9042491Z submodules: false 2026-10-24T21:01:07.9042721Z set-safe-directory: true 2026-10-24T21:01:07.9042976Z allow-unsafe-pr-checkout: false 2026-10-24T21:01:07.9043239Z env: 2026-10-24T21:01:07.9043482Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:07.9043767Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:07.9044047Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:07.9044309Z ##[endgroup] 2026-10-24T21:01:08.0375386Z Syncing repository: pingdotgg/t3code 2026-10-24T21:01:08.0376485Z ##[group]Getting Git version info 2026-10-24T21:01:08.0376926Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T21:01:08.0377398Z [command]/usr/local/bin/git version 2026-10-24T21:01:08.0458158Z git version 2.55.0 2026-10-24T21:01:08.0469046Z ##[endgroup] 2026-10-24T21:01:08.0475956Z Temporarily overriding HOME='/home/runner/_work/_temp/acbe67d6-1248-45ac-b2b5-96be2ec78142' before making global git config changes 2026-10-24T21:01:08.0476978Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T21:01:08.0479681Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T21:01:08.0508162Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T21:01:08.0510125Z ##[group]Determining repository object format 2026-10-24T21:01:08.0511087Z ##[endgroup] 2026-10-24T21:01:08.0511451Z ##[group]Initializing the repository 2026-10-24T21:01:08.0513356Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T21:01:08.0554846Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T21:01:08.0555306Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T21:01:08.0555778Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T21:01:08.0556134Z hint: call: 2026-10-24T21:01:08.0556340Z hint: 2026-10-24T21:01:08.0556599Z hint: git config --global init.defaultBranch 2026-10-24T21:01:08.0556896Z hint: 2026-10-24T21:01:08.0557175Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T21:01:08.0557624Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T21:01:08.0557990Z hint: 2026-10-24T21:01:08.0558203Z hint: git branch -m 2026-10-24T21:01:08.0558438Z hint: 2026-10-24T21:01:08.0558782Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T21:01:08.0559243Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T21:01:08.0563591Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T21:01:08.0591039Z ##[endgroup] 2026-10-24T21:01:08.0591400Z ##[group]Disabling automatic garbage collection 2026-10-24T21:01:08.0593961Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T21:01:08.0615786Z ##[endgroup] 2026-10-24T21:01:08.0616136Z ##[group]Setting up auth 2026-10-24T21:01:08.0616674Z Removing SSH command configuration 2026-10-24T21:01:08.0620809Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T21:01:08.0646793Z [command]/usr/local/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-24T21:01:08.0795877Z Removing HTTP extra header 2026-10-24T21:01:08.0798968Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T21:01:08.0821930Z [command]/usr/local/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-10-24T21:01:08.0933378Z Removing includeIf entries pointing to credentials config files 2026-10-24T21:01:08.0937254Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T21:01:08.0961146Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T21:01:08.1066335Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-6c8a2821-ad4a-47f9-8df9-995b3d78cfc8.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T21:01:08.1095282Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-6c8a2821-ad4a-47f9-8df9-995b3d78cfc8.config 2026-10-24T21:01:08.1115620Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-6c8a2821-ad4a-47f9-8df9-995b3d78cfc8.config 2026-10-24T21:01:08.1138920Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-6c8a2821-ad4a-47f9-8df9-995b3d78cfc8.config 2026-10-24T21:01:08.1161913Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-6c8a2821-ad4a-47f9-8df9-995b3d78cfc8.config 2026-10-24T21:01:08.1181817Z ##[endgroup] 2026-10-24T21:01:08.1182206Z ##[group]Fetching the repository 2026-10-24T21:01:08.1185977Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +3afb9b366f271b56a3e49fd86f2594981ec11b66:refs/remotes/origin/main 2026-10-24T21:01:08.4216545Z From https://github.com/pingdotgg/t3code 2026-10-24T21:01:08.4217107Z * [new ref] 3afb9b366f271b56a3e49fd86f2594981ec11b66 -> origin/main 2026-10-24T21:01:08.4244777Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T21:01:08.4280463Z origin/main 2026-10-24T21:01:08.4284391Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T21:01:08.4304680Z 3afb9b366f271b56a3e49fd86f2594981ec11b66 2026-10-24T21:01:08.4306474Z ##[endgroup] 2026-10-24T21:01:08.4306923Z ##[group]Determining the checkout info 2026-10-24T21:01:08.4307577Z ##[endgroup] 2026-10-24T21:01:08.4308004Z ##[group]Setting up sparse checkout 2026-10-24T21:01:08.4309541Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T21:01:08.4334691Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T21:01:08.4353710Z .git/info/sparse-checkout 2026-10-24T21:01:08.4356805Z ##[endgroup] 2026-10-24T21:01:08.4357217Z ##[group]Checking out the ref 2026-10-24T21:01:08.4359890Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T21:01:15.4554590Z Updating files: 0% (1/6402) 2026-10-24T21:01:15.4585765Z Updating files: 1% (65/6402) 2026-10-24T21:01:15.4604628Z Updating files: 2% (129/6402) 2026-10-24T21:01:15.4606503Z Updating files: 3% (193/6402) 2026-10-24T21:01:15.4627765Z Updating files: 3% (200/6402) 2026-10-24T21:01:15.4650873Z Updating files: 4% (257/6402) 2026-10-24T21:01:15.4684409Z Updating files: 5% (321/6402) 2026-10-24T21:01:15.4709105Z Updating files: 6% (385/6402) 2026-10-24T21:01:15.4766648Z Updating files: 7% (449/6402) 2026-10-24T21:01:15.4800485Z Updating files: 8% (513/6402) 2026-10-24T21:01:15.4825396Z Updating files: 9% (577/6402) 2026-10-24T21:01:15.5104450Z Updating files: 10% (641/6402) 2026-10-24T21:01:15.5122446Z Updating files: 11% (705/6402) 2026-10-24T21:01:15.5133999Z Updating files: 12% (769/6402) 2026-10-24T21:01:15.5153805Z Updating files: 13% (833/6402) 2026-10-24T21:01:15.5172118Z Updating files: 14% (897/6402) 2026-10-24T21:01:15.5191749Z Updating files: 15% (961/6402) 2026-10-24T21:01:15.5212299Z Updating files: 16% (1025/6402) 2026-10-24T21:01:15.5228157Z Updating files: 17% (1089/6402) 2026-10-24T21:01:15.5248265Z Updating files: 18% (1153/6402) 2026-10-24T21:01:15.5264420Z Updating files: 19% (1217/6402) 2026-10-24T21:01:15.5290996Z Updating files: 20% (1281/6402) 2026-10-24T21:01:15.5308818Z Updating files: 21% (1345/6402) 2026-10-24T21:01:15.5330082Z Updating files: 22% (1409/6402) 2026-10-24T21:01:15.5344589Z Updating files: 23% (1473/6402) 2026-10-24T21:01:15.5359102Z Updating files: 24% (1537/6402) 2026-10-24T21:01:15.5378652Z Updating files: 25% (1601/6402) 2026-10-24T21:01:15.5394136Z Updating files: 26% (1665/6402) 2026-10-24T21:01:15.5409252Z Updating files: 27% (1729/6402) 2026-10-24T21:01:15.5431010Z Updating files: 28% (1793/6402) 2026-10-24T21:01:15.5466527Z Updating files: 29% (1857/6402) 2026-10-24T21:01:15.5489267Z Updating files: 30% (1921/6402) 2026-10-24T21:01:15.5514935Z Updating files: 31% (1985/6402) 2026-10-24T21:01:15.5547735Z Updating files: 32% (2049/6402) 2026-10-24T21:01:15.5579306Z Updating files: 33% (2113/6402) 2026-10-24T21:01:15.5657052Z Updating files: 34% (2177/6402) 2026-10-24T21:01:15.5721505Z Updating files: 35% (2241/6402) 2026-10-24T21:01:15.5761081Z Updating files: 36% (2305/6402) 2026-10-24T21:01:15.5797581Z Updating files: 37% (2369/6402) 2026-10-24T21:01:15.5847098Z Updating files: 38% (2433/6402) 2026-10-24T21:01:15.5877020Z Updating files: 39% (2497/6402) 2026-10-24T21:01:15.5909337Z Updating files: 40% (2561/6402) 2026-10-24T21:01:15.5940935Z Updating files: 41% (2625/6402) 2026-10-24T21:01:15.5956967Z Updating files: 42% (2689/6402) 2026-10-24T21:01:15.5967846Z Updating files: 43% (2753/6402) 2026-10-24T21:01:15.5999937Z Updating files: 44% (2817/6402) 2026-10-24T21:01:15.6030320Z Updating files: 45% (2881/6402) 2026-10-24T21:01:15.6060041Z Updating files: 46% (2945/6402) 2026-10-24T21:01:15.6087730Z Updating files: 47% (3009/6402) 2026-10-24T21:01:15.6120838Z Updating files: 48% (3073/6402) 2026-10-24T21:01:15.6162275Z Updating files: 49% (3137/6402) 2026-10-24T21:01:15.6192717Z Updating files: 50% (3201/6402) 2026-10-24T21:01:15.6209224Z Updating files: 51% (3266/6402) 2026-10-24T21:01:15.6248407Z Updating files: 52% (3330/6402) 2026-10-24T21:01:15.6279171Z Updating files: 53% (3394/6402) 2026-10-24T21:01:15.6302919Z Updating files: 54% (3458/6402) 2026-10-24T21:01:15.6327675Z Updating files: 55% (3522/6402) 2026-10-24T21:01:15.6344203Z Updating files: 56% (3586/6402) 2026-10-24T21:01:15.6364990Z Updating files: 57% (3650/6402) 2026-10-24T21:01:15.6384400Z Updating files: 58% (3714/6402) 2026-10-24T21:01:15.6785680Z Updating files: 59% (3778/6402) 2026-10-24T21:01:15.6801046Z Updating files: 60% (3842/6402) 2026-10-24T21:01:15.6821901Z Updating files: 61% (3906/6402) 2026-10-24T21:01:15.6841411Z Updating files: 62% (3970/6402) 2026-10-24T21:01:15.6868384Z Updating files: 63% (4034/6402) 2026-10-24T21:01:15.6898154Z Updating files: 64% (4098/6402) 2026-10-24T21:01:15.6918960Z Updating files: 65% (4162/6402) 2026-10-24T21:01:15.6937524Z Updating files: 66% (4226/6402) 2026-10-24T21:01:15.6965183Z Updating files: 67% (4290/6402) 2026-10-24T21:01:15.6980724Z Updating files: 68% (4354/6402) 2026-10-24T21:01:15.6999499Z Updating files: 69% (4418/6402) 2026-10-24T21:01:15.7013820Z Updating files: 70% (4482/6402) 2026-10-24T21:01:15.7033568Z Updating files: 71% (4546/6402) 2026-10-24T21:01:15.7047298Z Updating files: 72% (4610/6402) 2026-10-24T21:01:15.7098084Z Updating files: 73% (4674/6402) 2026-10-24T21:01:15.7536477Z Updating files: 74% (4738/6402) 2026-10-24T21:01:15.7564410Z Updating files: 75% (4802/6402) 2026-10-24T21:01:15.7589252Z Updating files: 76% (4866/6402) 2026-10-24T21:01:15.7617200Z Updating files: 77% (4930/6402) 2026-10-24T21:01:15.7640377Z Updating files: 78% (4994/6402) 2026-10-24T21:01:15.7658364Z Updating files: 79% (5058/6402) 2026-10-24T21:01:15.7682288Z Updating files: 80% (5122/6402) 2026-10-24T21:01:15.7699529Z Updating files: 81% (5186/6402) 2026-10-24T21:01:15.7721201Z Updating files: 82% (5250/6402) 2026-10-24T21:01:15.7744549Z Updating files: 83% (5314/6402) 2026-10-24T21:01:15.7772098Z Updating files: 84% (5378/6402) 2026-10-24T21:01:15.7793259Z Updating files: 85% (5442/6402) 2026-10-24T21:01:15.7820656Z Updating files: 86% (5506/6402) 2026-10-24T21:01:15.7897514Z Updating files: 87% (5570/6402) 2026-10-24T21:01:15.7929582Z Updating files: 88% (5634/6402) 2026-10-24T21:01:15.7953198Z Updating files: 89% (5698/6402) 2026-10-24T21:01:15.7984343Z Updating files: 90% (5762/6402) 2026-10-24T21:01:15.8014684Z Updating files: 91% (5826/6402) 2026-10-24T21:01:15.8030747Z Updating files: 92% (5890/6402) 2026-10-24T21:01:15.8054509Z Updating files: 93% (5954/6402) 2026-10-24T21:01:15.8076475Z Updating files: 94% (6018/6402) 2026-10-24T21:01:15.8102840Z Updating files: 95% (6082/6402) 2026-10-24T21:01:15.8166138Z Updating files: 96% (6146/6402) 2026-10-24T21:01:15.8190505Z Updating files: 97% (6210/6402) 2026-10-24T21:01:15.8239737Z Updating files: 98% (6274/6402) 2026-10-24T21:01:15.8261041Z Updating files: 99% (6338/6402) 2026-10-24T21:01:15.8261255Z Updating files: 100% (6402/6402) 2026-10-24T21:01:15.8261448Z Updating files: 100% (6402/6402), done. 2026-10-24T21:01:15.8427665Z Switched to a new branch 'main' 2026-10-24T21:01:15.8429626Z branch 'main' set up to track 'origin/main'. 2026-10-24T21:01:15.8443148Z ##[endgroup] 2026-10-24T21:01:15.8480268Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T21:01:15.8499817Z 3afb9b366f271b56a3e49fd86f2594981ec11b66 2026-10-24T21:01:15.8589200Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T21:01:15.8589585Z files="$(git ls-files .github/pr-assets)" 2026-10-24T21:01:15.8589904Z if test -n "$files"; then 2026-10-24T21:01:15.8590289Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T21:01:15.8590660Z  exit 1 2026-10-24T21:01:15.8590856Z fi 2026-10-24T21:01:15.8603532Z shell: /usr/bin/bash -e {0} 2026-10-24T21:01:15.8603717Z env: 2026-10-24T21:01:15.8603890Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:15.8604069Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:15.8604237Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:15.8604468Z ##[endgroup] 2026-10-24T21:01:15.8760675Z Prepare all required actions 2026-10-24T21:01:15.8761036Z Getting action download info 2026-10-24T21:01:15.9702934Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T21:01:16.0810602Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T21:01:16.0810793Z env: 2026-10-24T21:01:16.0810941Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:16.0811121Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:16.0811295Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:16.0811461Z ##[endgroup] 2026-10-24T21:01:16.0932425Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T21:01:16.0950205Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T21:01:16.0950797Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T21:01:16.0951308Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T21:01:16.0951706Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T21:01:16.0963512Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T21:01:16.0963744Z env: 2026-10-24T21:01:16.0963889Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:16.0964065Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:16.0964238Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:16.0964404Z ##[endgroup] 2026-10-24T21:01:16.1038304Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T21:01:16.1040527Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T21:01:16.1091831Z ##[group]Run actions/cache@v6 2026-10-24T21:01:16.1092225Z with: 2026-10-24T21:01:16.1092427Z path: ~/.vite-plus 2026-10-24T21:01:16.1092726Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T21:01:16.1093090Z enableCrossOsArchive: false 2026-10-24T21:01:16.1093337Z fail-on-cache-miss: false 2026-10-24T21:01:16.1093570Z lookup-only: false 2026-10-24T21:01:16.1093784Z save-always: false 2026-10-24T21:01:16.1093940Z env: 2026-10-24T21:01:16.1094092Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:16.1094264Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:16.1094442Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:16.1094603Z ##[endgroup] 2026-10-24T21:01:16.3162850Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T21:01:16.7189708Z Received 170349591 of 170349591 (100.0%), 425.3 MBs/sec 2026-10-24T21:01:16.7191771Z Cache Size: ~162 MB (170349591 B) 2026-10-24T21:01:16.7240582Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/297d5463-f18b-435f-9a9e-1288141476af/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T21:01:17.4593696Z Cache restored successfully 2026-10-24T21:01:17.4814399Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T21:01:17.4881934Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1384] 2026-10-24T21:01:17.4884312Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T21:01:17.4903657Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T21:01:17.4903882Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T21:01:17.4904056Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T21:01:17.4916039Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T21:01:17.4916203Z env: 2026-10-24T21:01:17.4916319Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:17.4916468Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:17.4916611Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:17.4916758Z ##[endgroup] 2026-10-24T21:01:17.4958289Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T21:01:17.4968107Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T21:01:17.4969538Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T21:01:17.4973300Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T21:01:17.4974400Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T21:01:17.4984031Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T21:01:17.4984210Z store_path="$(vp pm cache dir)" 2026-10-24T21:01:17.4984371Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T21:01:17.4994980Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T21:01:17.4995160Z env: 2026-10-24T21:01:17.4995269Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:17.4995426Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:17.4995583Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:17.4995757Z ##[endgroup] 2026-10-24T21:01:17.5142733Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=16] 2026-10-24T21:01:17.5143970Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T21:01:17.5514678Z ##[group]Run actions/cache@v6 2026-10-24T21:01:17.5514885Z with: 2026-10-24T21:01:17.5515065Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T21:01:17.5515392Z key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T21:01:17.5515696Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T21:01:17.5515912Z enableCrossOsArchive: false 2026-10-24T21:01:17.5529809Z fail-on-cache-miss: false 2026-10-24T21:01:17.5530005Z lookup-only: false 2026-10-24T21:01:17.5530120Z save-always: false 2026-10-24T21:01:17.5530237Z env: 2026-10-24T21:01:17.5530354Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:17.5530735Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:17.5530882Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:17.5531016Z ##[endgroup] 2026-10-24T21:01:17.7369905Z Cache hit for: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T21:01:18.7544665Z Received 671088640 of 995395870 (67.4%), 640.0 MBs/sec 2026-10-24T21:01:19.3091580Z Received 995395870 of 995395870 (100.0%), 610.9 MBs/sec 2026-10-24T21:01:19.3092491Z Cache Size: ~949 MB (995395870 B) 2026-10-24T21:01:19.3126196Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/7e58918a-abfb-484f-9aab-ebef3dfdd9cc/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T21:01:25.0129248Z Cache restored successfully 2026-10-24T21:01:25.0608884Z Cache restored from key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T21:01:25.0681303Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7553] 2026-10-24T21:01:25.0683745Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T21:01:25.0693922Z ##[group]Run vp install 2026-10-24T21:01:25.0694070Z vp install 2026-10-24T21:01:25.0704976Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T21:01:25.0705142Z env: 2026-10-24T21:01:25.0705257Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:25.0705404Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:25.0705549Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:25.0705684Z ##[endgroup] 2026-10-24T21:01:25.1032380Z Scope: all 34 workspace projects 2026-10-24T21:01:25.2112359Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T21:01:25.4754535Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T21:01:25.4754977Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T21:01:25.4755322Z Virtual store is at: node_modules/.pnpm 2026-10-24T21:01:54.2418362Z [WARN] Request took 27036ms: https://registry.npmjs.org/normalize-url 2026-10-24T21:01:54.2420518Z ✓ Lockfile passes supply-chain policies (2088 entries in 29s) 2026-10-24T21:01:54.2422741Z Lockfile is up to date, resolution step is skipped 2026-10-24T21:01:54.2600265Z Packages: +1721 2026-10-24T21:01:54.2600740Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T21:01:54.2946369Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T21:01:55.2719845Z . prepare$ vp config --no-agent 2026-10-24T21:01:55.3706840Z . prepare: Done 2026-10-24T21:01:55.3723505Z 2026-10-24T21:01:55.3724342Z devDependencies: 2026-10-24T21:01:55.3724529Z + @coderabbitai/config 1.1.0 2026-10-24T21:01:55.3724679Z + @shadcn/lint 0.1.5 2026-10-24T21:01:55.3724800Z + @types/node 24.12.4 2026-10-24T21:01:55.3724909Z + knip 6.34.0 2026-10-24T21:01:55.3725043Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T21:01:55.3725185Z + vite-plus 1.3.0 2026-10-24T21:01:55.3725252Z 2026-10-24T21:01:55.3752686Z Done in 30.3s using pnpm v12.14.0 2026-10-24T21:01:55.3901872Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=30321] 2026-10-24T21:01:55.4396993Z ##[group]Run actions/cache@v6 2026-10-24T21:01:55.4397145Z with: 2026-10-24T21:01:55.4397252Z path: ~/.cache/electron 2026-10-24T21:01:55.4397483Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T21:01:55.4397721Z enableCrossOsArchive: false 2026-10-24T21:01:55.4397854Z fail-on-cache-miss: false 2026-10-24T21:01:55.4397980Z lookup-only: false 2026-10-24T21:01:55.4398090Z save-always: false 2026-10-24T21:01:55.4398195Z env: 2026-10-24T21:01:55.4398306Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:55.4398450Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:55.4398590Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:55.4398724Z ##[endgroup] 2026-10-24T21:01:55.6368609Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T21:01:55.8124051Z Received 122906203 of 122906203 (100.0%), 761.1 MBs/sec 2026-10-24T21:01:55.8124978Z Cache Size: ~117 MB (122906203 B) 2026-10-24T21:01:55.8166375Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/13c0335e-96a3-4c8e-a214-e8a1c6d007bc/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T21:01:55.8938565Z Cache restored successfully 2026-10-24T21:01:55.9064630Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T21:01:55.9189874Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T21:01:55.9190117Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T21:01:55.9201621Z shell: /usr/bin/bash -e {0} 2026-10-24T21:01:55.9201745Z env: 2026-10-24T21:01:55.9201854Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:55.9202003Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:55.9202146Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:55.9202279Z ##[endgroup] 2026-10-24T21:01:56.0731018Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T21:01:56.6848902Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T21:01:56.6870556Z 2026-10-24T21:01:56.6983808Z ##[group]Run vp run knip:check 2026-10-24T21:01:56.6984073Z vp run knip:check 2026-10-24T21:01:56.6996058Z shell: /usr/bin/bash -e {0} 2026-10-24T21:01:56.6996243Z env: 2026-10-24T21:01:56.6996354Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:01:56.6996504Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:01:56.6996646Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:01:56.6996775Z ##[endgroup] 2026-10-24T21:01:56.8591398Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T21:02:00.8451357Z 2026-10-24T21:02:00.8454869Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-definitions --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-24T21:02:09.6716023Z 2026-10-24T21:02:09.6716592Z --- 2026-10-24T21:02:09.6716864Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T21:02:09.6803491Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T21:02:09.6803781Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T21:02:09.6815314Z shell: /usr/bin/bash -e {0} 2026-10-24T21:02:09.6815439Z env: 2026-10-24T21:02:09.6815547Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:02:09.6815696Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:02:09.6815872Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:02:09.6816009Z ##[endgroup] 2026-10-24T21:02:09.8299206Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T21:02:10.0259214Z 2026-10-24T21:02:10.0352259Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T21:02:10.0352471Z vp run --filter t3 generate --check 2026-10-24T21:02:10.0363422Z shell: /usr/bin/bash -e {0} 2026-10-24T21:02:10.0363547Z env: 2026-10-24T21:02:10.0363670Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:02:10.0363817Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:02:10.0363957Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:02:10.0364086Z ##[endgroup] 2026-10-24T21:02:10.1864101Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T21:02:10.3397163Z 2026-10-24T21:02:10.3476105Z ##[group]Run vp check 2026-10-24T21:02:10.3476264Z vp check 2026-10-24T21:02:10.3487766Z shell: /usr/bin/bash -e {0} 2026-10-24T21:02:10.3487893Z env: 2026-10-24T21:02:10.3488007Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:02:10.3488155Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:02:10.3488301Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T21:02:10.3488436Z ##[endgroup] 2026-10-24T21:02:10.9079055Z pass: All 5751 files are correctly formatted (409ms, 8 threads) 2026-10-24T21:02:16.2694834Z warn: Lint warnings found 2026-10-24T21:02:16.2696244Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2696758Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T21:02:16.2697032Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T21:02:16.2697236Z 84 │ useEffect(() => { 2026-10-24T21:02:16.2697416Z ·  ────┬──── 2026-10-24T21:02:16.2697650Z · ╰── This is the containing effect 2026-10-24T21:02:16.2697882Z 85 │ if (!actionState.isRunning) return; 2026-10-24T21:02:16.2698057Z 86 │ setNowMs(Date.now()); 2026-10-24T21:02:16.2698218Z ·  ────┬─── 2026-10-24T21:02:16.2698479Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2698791Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T21:02:16.2699019Z ╰──── 2026-10-24T21:02:16.2699701Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2700659Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2700976Z 2026-10-24T21:02:16.2701168Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T21:02:16.2701489Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T21:02:16.2701756Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T21:02:16.2701994Z 194 │ const codes = new Array(count); 2026-10-24T21:02:16.2702215Z ·  ──────────────────────── 2026-10-24T21:02:16.2702441Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T21:02:16.2702614Z ╰──── 2026-10-24T21:02:16.2703102Z  help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`. 2026-10-24T21:02:16.2703504Z 2026-10-24T21:02:16.2703774Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.2704156Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T21:02:16.2704351Z 727 │ 2026-10-24T21:02:16.2704496Z 728 │ const layer = layerWithOptions(); 2026-10-24T21:02:16.2704668Z ·  ──┬── 2026-10-24T21:02:16.2704885Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.2705071Z ╰──── 2026-10-24T21:02:16.2705235Z  help: Consider removing this declaration. 2026-10-24T21:02:16.2705358Z 2026-10-24T21:02:16.2705675Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.2706043Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T21:02:16.2706218Z 35 │ 2026-10-24T21:02:16.2706411Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T21:02:16.2706763Z ·  ─────┬──── 2026-10-24T21:02:16.2707036Z · ╰── 'claudeCaps' is declared here 2026-10-24T21:02:16.2707256Z 37 │ optionDescriptors: [ 2026-10-24T21:02:16.2707398Z ╰──── 2026-10-24T21:02:16.2707561Z  help: Consider removing this declaration. 2026-10-24T21:02:16.2707682Z 2026-10-24T21:02:16.2707913Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T21:02:16.2708254Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T21:02:16.2708434Z 11 │ 2026-10-24T21:02:16.2708594Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T21:02:16.2708808Z ·  ────────────┬──────────── 2026-10-24T21:02:16.2709092Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T21:02:16.2709334Z 13 │ readonly thread: { 2026-10-24T21:02:16.2709474Z ╰──── 2026-10-24T21:02:16.2709631Z  help: Consider removing this declaration. 2026-10-24T21:02:16.2709751Z 2026-10-24T21:02:16.2710271Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.2710835Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T21:02:16.2711088Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T21:02:16.2711445Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T21:02:16.2711797Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T21:02:16.2712106Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T21:02:16.2712405Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T21:02:16.2712648Z 2619 │ │ flush: () => { 2026-10-24T21:02:16.2712887Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T21:02:16.2713177Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T21:02:16.2713413Z 2622 │ │ }, 2026-10-24T21:02:16.2713598Z 2623 │ │ }; 2026-10-24T21:02:16.2713766Z 2624 │ │ 2026-10-24T21:02:16.2714019Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T21:02:16.2714298Z 2626 │ │ let requestChecks = 0; 2026-10-24T21:02:16.2714568Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T21:02:16.2714822Z 2628 │ │ executionMode: "async", 2026-10-24T21:02:16.2715070Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T21:02:16.2715320Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T21:02:16.2715624Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T21:02:16.2715880Z 2632 │ │ requestChecks += 1; 2026-10-24T21:02:16.2716152Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T21:02:16.2716419Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T21:02:16.2716914Z 2635 │ │ return true; 2026-10-24T21:02:16.2717186Z 2636 │ │ }, 2026-10-24T21:02:16.2717370Z 2637 │ │ }; 2026-10-24T21:02:16.2717536Z 2638 │ │ 2026-10-24T21:02:16.2717742Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T21:02:16.2717976Z 2640 │ │ ...WINDOW, 2026-10-24T21:02:16.2718212Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T21:02:16.2718550Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T21:02:16.2718818Z 2643 │ │ }; 2026-10-24T21:02:16.2719029Z 2644 │ │ const first = yield* service 2026-10-24T21:02:16.2719268Z 2645 │ │ .readSummary(input) 2026-10-24T21:02:16.2719482Z 2646 │ │ .pipe( 2026-10-24T21:02:16.2720036Z 2647 │ │ Effect.exit, 2026-10-24T21:02:16.2720314Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T21:02:16.2720582Z 2649 │ │ Effect.forkChild, 2026-10-24T21:02:16.2720783Z 2650 │ │ ); 2026-10-24T21:02:16.2720983Z 2651 │ │ requestFiber = first; 2026-10-24T21:02:16.2721210Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2721431Z 2653 │ │ dispatcher.flush(); 2026-10-24T21:02:16.2721616Z 2654 │ │ 2026-10-24T21:02:16.2721863Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T21:02:16.2722120Z 2656 │ │ Effect.match({ 2026-10-24T21:02:16.2722359Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T21:02:16.2722618Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T21:02:16.2722838Z 2659 │ │ }), 2026-10-24T21:02:16.2723096Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T21:02:16.2723361Z 2661 │ │ Effect.forkChild, 2026-10-24T21:02:16.2723555Z 2662 │ │ ); 2026-10-24T21:02:16.2723756Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2723976Z 2664 │ │ dispatcher.flush(); 2026-10-24T21:02:16.2724225Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T21:02:16.2724481Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T21:02:16.2724723Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T21:02:16.2724961Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T21:02:16.2725170Z 2669 │ │ break; 2026-10-24T21:02:16.2725354Z 2670 │ │ } 2026-10-24T21:02:16.2725604Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T21:02:16.2725896Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T21:02:16.2726135Z 2673 │ │ } 2026-10-24T21:02:16.2726488Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T21:02:16.2726832Z 2675 │ ╰─▶ } 2026-10-24T21:02:16.2727031Z 2676 │ 2026-10-24T21:02:16.2727149Z ╰──── 2026-10-24T21:02:16.2727207Z 2026-10-24T21:02:16.2727439Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T21:02:16.2727794Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T21:02:16.2728007Z 1021 │ instanceId, 2026-10-24T21:02:16.2728236Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T21:02:16.2728530Z ·  ────────────────────────────────────────────────── 2026-10-24T21:02:16.2728728Z 1023 │ ]), 2026-10-24T21:02:16.2728857Z ╰──── 2026-10-24T21:02:16.2729192Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T21:02:16.2729461Z 2026-10-24T21:02:16.2729609Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.2729927Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T21:02:16.2730148Z 276 │ 2026-10-24T21:02:16.2730395Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T21:02:16.2730667Z 278 │ │ ...nativeProps, 2026-10-24T21:02:16.2730924Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T21:02:16.2731261Z 280 │ │ ref: nativeRef, 2026-10-24T21:02:16.2731526Z 281 │ ├─▶ }); 2026-10-24T21:02:16.2731906Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.2732183Z 282 │ } 2026-10-24T21:02:16.2732304Z ╰──── 2026-10-24T21:02:16.2732838Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.2733572Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.2733858Z 2026-10-24T21:02:16.2734296Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.2734838Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T21:02:16.2735075Z 262 │ ...(update._meta !== undefined 2026-10-24T21:02:16.2735349Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T21:02:16.2735656Z ·  ───────── 2026-10-24T21:02:16.2735823Z 264 │ : {}), 2026-10-24T21:02:16.2735951Z ╰──── 2026-10-24T21:02:16.2736008Z 2026-10-24T21:02:16.2736214Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.2736537Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T21:02:16.2736741Z 28 │ getPendingThreadOrder(); 2026-10-24T21:02:16.2737002Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T21:02:16.2737264Z ·  ────┬──── ───────┬────── 2026-10-24T21:02:16.2737582Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T21:02:16.2737907Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T21:02:16.2738119Z 30 │ return pending; 2026-10-24T21:02:16.2738250Z ╰──── 2026-10-24T21:02:16.2738603Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.2739198Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2739507Z 2026-10-24T21:02:16.2739796Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T21:02:16.2740190Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T21:02:16.2740387Z 284 │ }, 2026-10-24T21:02:16.2740534Z 285 │ (effect, flow, stopSessions) => 2026-10-24T21:02:16.2740730Z ·  ──────┬───── 2026-10-24T21:02:16.2740984Z · ╰── 'stopSessions' is declared here 2026-10-24T21:02:16.2741202Z 286 │ effect.pipe( 2026-10-24T21:02:16.2741338Z ╰──── 2026-10-24T21:02:16.2741498Z  help: Consider removing this parameter. 2026-10-24T21:02:16.2741617Z 2026-10-24T21:02:16.2741808Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T21:02:16.2742131Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T21:02:16.2742363Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T21:02:16.2742561Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T21:02:16.2742750Z ·  ──┬── 2026-10-24T21:02:16.2742980Z · ╰── 'Scope' is imported here 2026-10-24T21:02:16.2743201Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T21:02:16.2743358Z ╰──── 2026-10-24T21:02:16.2743508Z  help: Consider removing this import. 2026-10-24T21:02:16.2743623Z 2026-10-24T21:02:16.2743885Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2744317Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7] 2026-10-24T21:02:16.2744552Z 328 │ }; 2026-10-24T21:02:16.2744682Z 329 │ useEffect(() => { 2026-10-24T21:02:16.2744838Z ·  ────┬──── 2026-10-24T21:02:16.2745056Z · ╰── This is the containing effect 2026-10-24T21:02:16.2745291Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T21:02:16.2745504Z 331 │ requestedSection.current = "overview"; 2026-10-24T21:02:16.2745821Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T21:02:16.2746070Z 333 │ setSection("overview"); 2026-10-24T21:02:16.2746240Z ·  ─────┬──── 2026-10-24T21:02:16.2746503Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2746809Z 334 │ } 2026-10-24T21:02:16.2746955Z ╰──── 2026-10-24T21:02:16.2747626Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2748500Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2748807Z 2026-10-24T21:02:16.2749015Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T21:02:16.2749393Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6] 2026-10-24T21:02:16.2749670Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T21:02:16.2749885Z 331 │ requestedSection.current = "overview"; 2026-10-24T21:02:16.2750082Z ·  ────────┬─────── 2026-10-24T21:02:16.2750631Z · ╰── Missing dependency `requestedSection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.2751195Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T21:02:16.2751518Z ·  ─────────┬───────── ──────┬────── 2026-10-24T21:02:16.2752170Z · │ ╰── Missing dependency `scrollOffsets`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.2753060Z · ╰── Missing dependency `currentScrollOffset`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.2753540Z 333 │ setSection("overview"); 2026-10-24T21:02:16.2753693Z 334 │ } 2026-10-24T21:02:16.2753847Z 335 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T21:02:16.2754073Z ·  ──────────────────┬───────────────── 2026-10-24T21:02:16.2754383Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.2754659Z 336 │ const tabContent = activityContent; 2026-10-24T21:02:16.2754812Z ╰──── 2026-10-24T21:02:16.2755115Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T21:02:16.2755667Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2755967Z 2026-10-24T21:02:16.2756175Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T21:02:16.2756546Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6] 2026-10-24T21:02:16.2756782Z 860 │ if ( 2026-10-24T21:02:16.2756967Z 861 │ lastSelection.current.path === route.params.path && 2026-10-24T21:02:16.2757177Z ·  ──────┬────── 2026-10-24T21:02:16.2757718Z · ╰── Missing dependency `lastSelection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.2758240Z 862 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T21:02:16.2758434Z 863 │ ) 2026-10-24T21:02:16.2758559Z 864 │ return; 2026-10-24T21:02:16.2758812Z 865 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T21:02:16.2759127Z 866 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T21:02:16.2759365Z 867 │ setJumpPath(route.params.path); 2026-10-24T21:02:16.2759636Z 868 │ setSelectedRowId(null); 2026-10-24T21:02:16.2759810Z 869 │ jumpStarted.current = false; 2026-10-24T21:02:16.2760061Z 870 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T21:02:16.2760324Z 871 │ if (!file || !nativeView.current) return; 2026-10-24T21:02:16.2760526Z ·  ─────┬──── 2026-10-24T21:02:16.2761073Z · ╰── Missing dependency `nativeView`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.2761589Z 872 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T21:02:16.2761808Z 873 │ jumpStarted.current = true; 2026-10-24T21:02:16.2762043Z 874 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T21:02:16.2762278Z 875 │ jumpStarted.current = false; 2026-10-24T21:02:16.2762435Z 876 │ }); 2026-10-24T21:02:16.2762703Z 877 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T21:02:16.2763120Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T21:02:16.2763551Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.2763872Z 878 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T21:02:16.2764051Z ╰──── 2026-10-24T21:02:16.2764279Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T21:02:16.2764768Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2765069Z 2026-10-24T21:02:16.2765377Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.2765735Z ╭─[apps/web/src/components/Sidebar.tsx:1136:11] 2026-10-24T21:02:16.2765967Z 1135 │ foldSearchQuery(threadSearchQuery), 2026-10-24T21:02:16.2766150Z 1136 │ Date.now(), 2026-10-24T21:02:16.2766321Z ·  ─────┬──── 2026-10-24T21:02:16.2766560Z · ╰── Cannot call impure function 2026-10-24T21:02:16.2766850Z 1137 │ // A list filter, as on mobile: a pick would move rows unexplained. 2026-10-24T21:02:16.2767049Z ╰──── 2026-10-24T21:02:16.2767396Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.2767970Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.2768259Z 2026-10-24T21:02:16.2768526Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T21:02:16.2768922Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T21:02:16.2769237Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T21:02:16.2769479Z 12 │ this.onmessage = listener; 2026-10-24T21:02:16.2769663Z ·  ───────── 2026-10-24T21:02:16.2769814Z 13 │ } 2026-10-24T21:02:16.2769935Z ╰──── 2026-10-24T21:02:16.2770308Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T21:02:16.2770606Z 2026-10-24T21:02:16.2770822Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T21:02:16.2771175Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T21:02:16.2771399Z 15 │ constructor() { 2026-10-24T21:02:16.2771550Z 16 │ source = this; 2026-10-24T21:02:16.2771709Z ·  ────── 2026-10-24T21:02:16.2771854Z 17 │ } 2026-10-24T21:02:16.2771972Z ╰──── 2026-10-24T21:02:16.2772305Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T21:02:16.2772566Z 2026-10-24T21:02:16.2772797Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T21:02:16.2773173Z ╭─[packages/client-runtime/src/operations/projects.ts:238:51] 2026-10-24T21:02:16.2773393Z 237 │ ): string { 2026-10-24T21:02:16.2773628Z 238 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T21:02:16.2773906Z ·  ────── 2026-10-24T21:02:16.2774162Z 239 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T21:02:16.2774356Z ╰──── 2026-10-24T21:02:16.2774586Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T21:02:16.2774761Z 2026-10-24T21:02:16.2774923Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.2775250Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T21:02:16.2775473Z 35 │ 2026-10-24T21:02:16.2775784Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T21:02:16.2776054Z ·  ────────┬──────── 2026-10-24T21:02:16.2776305Z · ╰── `inspectorProgress` originates here 2026-10-24T21:02:16.2776553Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T21:02:16.2776795Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T21:02:16.2776997Z 39 │ 2026-10-24T21:02:16.2777134Z 40 │ const onClosed = props.onClosed; 2026-10-24T21:02:16.2777302Z 41 │ useEffect(() => { 2026-10-24T21:02:16.2777475Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T21:02:16.2777668Z ·  ────────┬──────── 2026-10-24T21:02:16.2777915Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T21:02:16.2778145Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T21:02:16.2778302Z ╰──── 2026-10-24T21:02:16.2778631Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.2779201Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.2779499Z 2026-10-24T21:02:16.2779660Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.2779982Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T21:02:16.2780246Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T21:02:16.2780487Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T21:02:16.2780724Z ·  ──────────┬───────── 2026-10-24T21:02:16.2780994Z · ╰── `renderedContentWidth` originates here 2026-10-24T21:02:16.2781207Z 39 │ 2026-10-24T21:02:16.2781347Z 40 │ const onClosed = props.onClosed; 2026-10-24T21:02:16.2781511Z 41 │ useEffect(() => { 2026-10-24T21:02:16.2781686Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T21:02:16.2781867Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T21:02:16.2782035Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T21:02:16.2782190Z 45 │ (finished) => { 2026-10-24T21:02:16.2782415Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T21:02:16.2782636Z 47 │ runOnJS(onClosed)(); 2026-10-24T21:02:16.2782786Z 48 │ } 2026-10-24T21:02:16.2782912Z 49 │ }, 2026-10-24T21:02:16.2783032Z 50 │ ); 2026-10-24T21:02:16.2783235Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T21:02:16.2783460Z 52 │ renderedInspectorWidth.set( 2026-10-24T21:02:16.2783707Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T21:02:16.2783917Z 54 │ ); 2026-10-24T21:02:16.2784037Z 55 │ }, [ 2026-10-24T21:02:16.2784167Z 56 │ inspectorProgress, 2026-10-24T21:02:16.2784320Z 57 │ inspectorVisible, 2026-10-24T21:02:16.2784472Z 58 │ inspectorWidth, 2026-10-24T21:02:16.2784613Z 59 │ onClosed, 2026-10-24T21:02:16.2784761Z 60 │ renderedInspectorWidth, 2026-10-24T21:02:16.2784912Z 61 │ resizing, 2026-10-24T21:02:16.2785040Z 62 │ ]); 2026-10-24T21:02:16.2785154Z 63 │ 2026-10-24T21:02:16.2785275Z 64 │ useEffect(() => { 2026-10-24T21:02:16.2785451Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T21:02:16.2785750Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T21:02:16.2785992Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T21:02:16.2786196Z ·  ──────────┬───────── 2026-10-24T21:02:16.2786462Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T21:02:16.2786680Z 68 │ return; 2026-10-24T21:02:16.2786807Z ╰──── 2026-10-24T21:02:16.2787130Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.2787702Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.2787995Z 2026-10-24T21:02:16.2788208Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.2788583Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T21:02:16.2788809Z 154 │ } 2026-10-24T21:02:16.2788945Z 155 │ }, [wrappedRender]); 2026-10-24T21:02:16.2789114Z ·  ──────┬────── 2026-10-24T21:02:16.2789363Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T21:02:16.2789571Z 156 │ 2026-10-24T21:02:16.2789683Z ╰──── 2026-10-24T21:02:16.2790035Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.2790638Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2790939Z 2026-10-24T21:02:16.2791192Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T21:02:16.2791596Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T21:02:16.2791825Z 799 │ > 2026-10-24T21:02:16.2792020Z 800 │ 2026-10-24T21:02:16.2792289Z ·  ──────────────────── 2026-10-24T21:02:16.2792517Z 801 │ 2026-10-24T21:02:16.2792687Z ╰──── 2026-10-24T21:02:16.2792970Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T21:02:16.2793470Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T21:02:16.2793780Z 2026-10-24T21:02:16.2794031Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T21:02:16.2794347Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T21:02:16.2794607Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T21:02:16.2794877Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T21:02:16.2795098Z ·  ──────┬────── 2026-10-24T21:02:16.2795341Z · ╰── 'HookForwarder' is imported here 2026-10-24T21:02:16.2795634Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T21:02:16.2795806Z ╰──── 2026-10-24T21:02:16.2795957Z  help: Consider removing this import. 2026-10-24T21:02:16.2796072Z 2026-10-24T21:02:16.2796286Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T21:02:16.2814285Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T21:02:16.2814516Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T21:02:16.2814682Z 3 │ type AuthSessionState, 2026-10-24T21:02:16.2814857Z ·  ────────┬─────── 2026-10-24T21:02:16.2815111Z · ╰── 'AuthSessionState' is imported here 2026-10-24T21:02:16.2815328Z 4 │ sessionGrantsScope, 2026-10-24T21:02:16.2815463Z ╰──── 2026-10-24T21:02:16.2815658Z  help: Consider removing this import. 2026-10-24T21:02:16.2815774Z 2026-10-24T21:02:16.2815951Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.2816285Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T21:02:16.2816500Z 465 │ 2026-10-24T21:02:16.2816668Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T21:02:16.2816858Z ·  ── 2026-10-24T21:02:16.2817001Z 467 │ } 2026-10-24T21:02:16.2817110Z ╰──── 2026-10-24T21:02:16.2817406Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.2817635Z 2026-10-24T21:02:16.2817884Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T21:02:16.2818287Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T21:02:16.2818513Z 289 │ return ( 2026-10-24T21:02:16.2818726Z 290 │ 2026-10-24T21:02:16.2819004Z ·  ───────────── 2026-10-24T21:02:16.2819205Z 291 │ {props.children} 2026-10-24T21:02:16.2819343Z ╰──── 2026-10-24T21:02:16.2819628Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T21:02:16.2819989Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T21:02:16.2820173Z 2026-10-24T21:02:16.2820420Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T21:02:16.2820854Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T21:02:16.2821079Z 653 │ return ( 2026-10-24T21:02:16.2821271Z 654 │ 2026-10-24T21:02:16.2821677Z ·  ───────────── 2026-10-24T21:02:16.2821917Z 655 │ {props.children} 2026-10-24T21:02:16.2822054Z ╰──── 2026-10-24T21:02:16.2822336Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T21:02:16.2822692Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T21:02:16.2822871Z 2026-10-24T21:02:16.2823116Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T21:02:16.2823512Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T21:02:16.2823745Z 1461 │ return ( 2026-10-24T21:02:16.2823982Z 1462 │ 2026-10-24T21:02:16.2824296Z ·  ──────────────────── 2026-10-24T21:02:16.2824530Z 1463 │ ({ thread, now: Date.now() })); 2026-10-24T21:02:16.2828766Z 698 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T21:02:16.2829087Z ·  ─────┬──── 2026-10-24T21:02:16.2829417Z · ╰── Cannot call impure function 2026-10-24T21:02:16.2829731Z 699 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T21:02:16.2829932Z ╰──── 2026-10-24T21:02:16.2830280Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.2830863Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.2831150Z 2026-10-24T21:02:16.2831323Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.2831736Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71] 2026-10-24T21:02:16.2832014Z 718 │ const snoozePresets = useMemo( 2026-10-24T21:02:16.2832303Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T21:02:16.2832623Z ·  ─────┬──── 2026-10-24T21:02:16.2832951Z · ╰── Cannot call impure function 2026-10-24T21:02:16.2833242Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T21:02:16.2833430Z ╰──── 2026-10-24T21:02:16.2833768Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.2834342Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.2834632Z 2026-10-24T21:02:16.2834818Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T21:02:16.2835165Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6] 2026-10-24T21:02:16.2835514Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T21:02:16.2835843Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T21:02:16.2836070Z ·  ────────────┬─────────── 2026-10-24T21:02:16.2836365Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T21:02:16.2836598Z 721 │ ); 2026-10-24T21:02:16.2836724Z ╰──── 2026-10-24T21:02:16.2837102Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.2837719Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2838019Z 2026-10-24T21:02:16.2838207Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T21:02:16.2838555Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7] 2026-10-24T21:02:16.2838789Z 765 │ thread.pinnedAt, 2026-10-24T21:02:16.2838946Z 766 │ variant, 2026-10-24T21:02:16.2839095Z ·  ───┬─── 2026-10-24T21:02:16.2839332Z · ╰── Unnecessary dependency `variant` 2026-10-24T21:02:16.2839630Z 767 │ ], 2026-10-24T21:02:16.2839750Z ╰──── 2026-10-24T21:02:16.2840127Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.2840741Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2841042Z 2026-10-24T21:02:16.2841244Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.2841605Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21] 2026-10-24T21:02:16.2841907Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T21:02:16.2842273Z 1216 │ 2026-10-24T21:02:16.2842583Z ·  ────────────────────────── 2026-10-24T21:02:16.2842817Z 1217 │ 2026-10-24T21:02:16.2842999Z ╰──── 2026-10-24T21:02:16.2843204Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T21:02:16.2843364Z 2026-10-24T21:02:16.2843601Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T21:02:16.2843992Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T21:02:16.2844216Z 1397 │ 2026-10-24T21:02:16.2844369Z 1398 │ function assertUserMessagesExclude( 2026-10-24T21:02:16.2844596Z ·  ────────────┬──────────── 2026-10-24T21:02:16.2844885Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T21:02:16.2845167Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T21:02:16.2845344Z ╰──── 2026-10-24T21:02:16.2845941Z  help: Consider removing this declaration. 2026-10-24T21:02:16.2846059Z 2026-10-24T21:02:16.2846327Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2846734Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:406:5] 2026-10-24T21:02:16.2846949Z 404 │ 2026-10-24T21:02:16.2847078Z 405 │ useEffect(() => { 2026-10-24T21:02:16.2847237Z ·  ────┬──── 2026-10-24T21:02:16.2847465Z · ╰── This is the containing effect 2026-10-24T21:02:16.2847701Z 406 │ setInspectorSelection((current) => { 2026-10-24T21:02:16.2847898Z ·  ──────────┬────────── 2026-10-24T21:02:16.2848178Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2848453Z 407 │ if (props.renderInspector === undefined) { 2026-10-24T21:02:16.2848624Z ╰──── 2026-10-24T21:02:16.2849298Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2850182Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2850495Z 2026-10-24T21:02:16.2850716Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T21:02:16.2851087Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:534:24] 2026-10-24T21:02:16.2851410Z 533 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T21:02:16.2851754Z 534 │ ╭─▶ const GitInspector = () => ( 2026-10-24T21:02:16.2852021Z 535 │ │ 2026-10-24T21:02:16.2853409Z 540 │ ╰─▶ ); 2026-10-24T21:02:16.2853626Z 541 │ const FilesInspector = () => 2026-10-24T21:02:16.2853782Z ╰──── 2026-10-24T21:02:16.2854062Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T21:02:16.2854285Z 2026-10-24T21:02:16.2854505Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T21:02:16.2854871Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:541:26] 2026-10-24T21:02:16.2855093Z 540 │ ); 2026-10-24T21:02:16.2855338Z 541 │ ╭─▶ const FilesInspector = () => 2026-10-24T21:02:16.2855706Z 542 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T21:02:16.2855970Z 543 │ │ 2026-10-24T21:02:16.2857994Z 551 │ ╰─▶ ) : null; 2026-10-24T21:02:16.2858289Z 552 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T21:02:16.2858502Z ╰──── 2026-10-24T21:02:16.2858774Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T21:02:16.2858992Z 2026-10-24T21:02:16.2859187Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T21:02:16.2859501Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T21:02:16.2859747Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T21:02:16.2859936Z 187 │ let next = initial; 2026-10-24T21:02:16.2860095Z ·  ──┬─ 2026-10-24T21:02:16.2860386Z · ╰── From this accumulator 2026-10-24T21:02:16.2860631Z 188 │ let receivedSnapshot = false; 2026-10-24T21:02:16.2860804Z 189 │ for (const item of items) { 2026-10-24T21:02:16.2860968Z ·  ─┬─ 2026-10-24T21:02:16.2861157Z · ╰── For this loop 2026-10-24T21:02:16.2861361Z 190 │ if (item.kind === "synchronized") { 2026-10-24T21:02:16.2861535Z 191 │ waiting = false; 2026-10-24T21:02:16.2861710Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T21:02:16.2861939Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T21:02:16.2862155Z ·  ───┬─── 2026-10-24T21:02:16.2862388Z · ╰── From this spread 2026-10-24T21:02:16.2862587Z 194 │ } 2026-10-24T21:02:16.2862710Z ╰──── 2026-10-24T21:02:16.2862918Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T21:02:16.2863242Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T21:02:16.2863411Z 2026-10-24T21:02:16.2863679Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2864088Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T21:02:16.2864385Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T21:02:16.2864595Z 356 │ useEffect(() => { 2026-10-24T21:02:16.2864751Z ·  ────┬──── 2026-10-24T21:02:16.2864970Z · ╰── This is the containing effect 2026-10-24T21:02:16.2865204Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T21:02:16.2865373Z 358 │ return; 2026-10-24T21:02:16.2865501Z 359 │ } 2026-10-24T21:02:16.2865686Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T21:02:16.2865893Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T21:02:16.2866111Z ·  ──────────────┬────────────── 2026-10-24T21:02:16.2866407Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2866639Z 362 │ return; 2026-10-24T21:02:16.2866761Z ╰──── 2026-10-24T21:02:16.2867435Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2868313Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2868621Z 2026-10-24T21:02:16.2868884Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2869287Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T21:02:16.2869499Z 447 │ 2026-10-24T21:02:16.2869621Z 448 │ useEffect(() => { 2026-10-24T21:02:16.2869772Z ·  ────┬──── 2026-10-24T21:02:16.2869990Z · ╰── This is the containing effect 2026-10-24T21:02:16.2870227Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T21:02:16.2870483Z 450 │ return; 2026-10-24T21:02:16.2870645Z 451 │ } 2026-10-24T21:02:16.2870850Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T21:02:16.2871140Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T21:02:16.2871390Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T21:02:16.2871565Z 455 │ } 2026-10-24T21:02:16.2871770Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T21:02:16.2872053Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T21:02:16.2872296Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T21:02:16.2872484Z 459 │ const directProject = 2026-10-24T21:02:16.2872643Z 460 │ projects.find( 2026-10-24T21:02:16.2872792Z 461 │ (project) => 2026-10-24T21:02:16.2873058Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T21:02:16.2873298Z 463 │ ) ?? null; 2026-10-24T21:02:16.2873430Z 464 │ 2026-10-24T21:02:16.2873556Z 465 │ if (directProject) { 2026-10-24T21:02:16.2873784Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T21:02:16.2874072Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T21:02:16.2874386Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T21:02:16.2874691Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T21:02:16.2874904Z 470 │ return; 2026-10-24T21:02:16.2875038Z 471 │ } 2026-10-24T21:02:16.2875202Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T21:02:16.2875383Z 473 │ if ( 2026-10-24T21:02:16.2875636Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T21:02:16.2875893Z 475 │ selectedProject.id !== directProject.id 2026-10-24T21:02:16.2876066Z 476 │ ) { 2026-10-24T21:02:16.2876225Z 477 │ setProject(directProject); 2026-10-24T21:02:16.2876387Z 478 │ return; 2026-10-24T21:02:16.2876526Z 479 │ } 2026-10-24T21:02:16.2876676Z 480 │ if (!flow.draftKey) return; 2026-10-24T21:02:16.2876913Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T21:02:16.2877208Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T21:02:16.2877473Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T21:02:16.2877675Z 484 │ workspaceSelection: { 2026-10-24T21:02:16.2877845Z 485 │ mode: "local", 2026-10-24T21:02:16.2878042Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T21:02:16.2878298Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T21:02:16.2878529Z 488 │ startFromOrigin: false, 2026-10-24T21:02:16.2878687Z 489 │ }, 2026-10-24T21:02:16.2878821Z 490 │ }); 2026-10-24T21:02:16.2878948Z 491 │ } 2026-10-24T21:02:16.2879141Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T21:02:16.2879340Z 493 │ if ( 2026-10-24T21:02:16.2879629Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T21:02:16.2879881Z 495 │ selectedProject.id === directProject.id 2026-10-24T21:02:16.2880049Z 496 │ ) { 2026-10-24T21:02:16.2880273Z 497 │ return; 2026-10-24T21:02:16.2880445Z 498 │ } 2026-10-24T21:02:16.2880592Z 499 │ setProject(directProject); 2026-10-24T21:02:16.2880751Z 500 │ return; 2026-10-24T21:02:16.2880878Z 501 │ } 2026-10-24T21:02:16.2880995Z 502 │ 2026-10-24T21:02:16.2881130Z 503 │ if (projects.length > 0) { 2026-10-24T21:02:16.2881325Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T21:02:16.2881550Z ·  ──────────────┬────────────── 2026-10-24T21:02:16.2881849Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2882079Z 505 │ } 2026-10-24T21:02:16.2882195Z ╰──── 2026-10-24T21:02:16.2882866Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2883742Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2884053Z 2026-10-24T21:02:16.2884317Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2884721Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T21:02:16.2884933Z 545 │ 2026-10-24T21:02:16.2885058Z 546 │ useEffect(() => { 2026-10-24T21:02:16.2885211Z ·  ────┬──── 2026-10-24T21:02:16.2885436Z · ╰── This is the containing effect 2026-10-24T21:02:16.2885715Z 547 │ const shareId = props.incomingShareId; 2026-10-24T21:02:16.2885907Z 548 │ const draftKey = flow.draftKey; 2026-10-24T21:02:16.2886106Z 549 │ const destinationProject = selectedProject; 2026-10-24T21:02:16.2886360Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T21:02:16.2886640Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T21:02:16.2886867Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T21:02:16.2887049Z 553 │ !initialEnvironmentId || 2026-10-24T21:02:16.2887213Z 554 │ !initialProjectId || 2026-10-24T21:02:16.2887435Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T21:02:16.2887683Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T21:02:16.2887859Z 557 │ if ( 2026-10-24T21:02:16.2887992Z 558 │ !shareId || 2026-10-24T21:02:16.2888136Z 559 │ !draftKey || 2026-10-24T21:02:16.2888286Z 560 │ !destinationProject || 2026-10-24T21:02:16.2888464Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T21:02:16.2888660Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T21:02:16.2888819Z 563 │ ) { 2026-10-24T21:02:16.2888942Z 564 │ return; 2026-10-24T21:02:16.2889066Z 565 │ } 2026-10-24T21:02:16.2889225Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T21:02:16.2889391Z 567 │ if ( 2026-10-24T21:02:16.2889568Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T21:02:16.2889806Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T21:02:16.2889986Z 570 │ ) { 2026-10-24T21:02:16.2890108Z 571 │ return; 2026-10-24T21:02:16.2890233Z 572 │ } 2026-10-24T21:02:16.2890427Z 573 │ 2026-10-24T21:02:16.2890599Z 574 │ if (!incomingShare) { 2026-10-24T21:02:16.2890886Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T21:02:16.2891217Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T21:02:16.2891428Z 577 │ Dialog.alert( 2026-10-24T21:02:16.2891597Z 578 │ "Shared content unavailable", 2026-10-24T21:02:16.2891873Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T21:02:16.2892109Z 580 │ ); 2026-10-24T21:02:16.2892233Z 581 │ } 2026-10-24T21:02:16.2892358Z 582 │ return; 2026-10-24T21:02:16.2892483Z 583 │ } 2026-10-24T21:02:16.2892598Z 584 │ 2026-10-24T21:02:16.2892711Z 585 │ if ( 2026-10-24T21:02:16.2892947Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T21:02:16.2893221Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T21:02:16.2893392Z 588 │ ) { 2026-10-24T21:02:16.2893515Z 589 │ return; 2026-10-24T21:02:16.2893639Z 590 │ } 2026-10-24T21:02:16.2893754Z 591 │ 2026-10-24T21:02:16.2893952Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T21:02:16.2894225Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T21:02:16.2894415Z 594 │ } 2026-10-24T21:02:16.2894586Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T21:02:16.2894776Z 596 │ const draftBackup = 2026-10-24T21:02:16.2895050Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T21:02:16.2895387Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T21:02:16.2895664Z 599 │ const importToken = Symbol(importKey); 2026-10-24T21:02:16.2895851Z 600 │ let didReserveShare = false; 2026-10-24T21:02:16.2896023Z 601 │ let didConsumeShare = false; 2026-10-24T21:02:16.2896199Z 602 │ let needsDraftRestore = false; 2026-10-24T21:02:16.2896408Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T21:02:16.2896618Z 604 │ setImportingShareKey(importKey); 2026-10-24T21:02:16.2896809Z ·  ──────────┬───────── 2026-10-24T21:02:16.2897085Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2897325Z 605 │ void (async () => { 2026-10-24T21:02:16.2897462Z ╰──── 2026-10-24T21:02:16.2898139Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2899016Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2899324Z 2026-10-24T21:02:16.2899532Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.2899890Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T21:02:16.2900128Z 523 │ props.initialProjectRef, 2026-10-24T21:02:16.2900296Z 524 │ props.incomingShareId, 2026-10-24T21:02:16.2900476Z ·  ──────────┬────────── 2026-10-24T21:02:16.2900818Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T21:02:16.2901084Z 525 │ props.pendingTaskId, 2026-10-24T21:02:16.2901223Z ╰──── 2026-10-24T21:02:16.2901580Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.2902177Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2902477Z 2026-10-24T21:02:16.2902698Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T21:02:16.2903062Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T21:02:16.2903343Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T21:02:16.2903542Z 543 │ flow.loadBranches(); 2026-10-24T21:02:16.2903702Z ·  ──┬─ 2026-10-24T21:02:16.2903911Z · ╰── Missing dependency `flow` 2026-10-24T21:02:16.2904141Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T21:02:16.2904337Z ·  ────────┬──────── 2026-10-24T21:02:16.2904639Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T21:02:16.2904888Z 545 │ 2026-10-24T21:02:16.2905002Z ╰──── 2026-10-24T21:02:16.2905485Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.2906227Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2906531Z 2026-10-24T21:02:16.2906735Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.2907089Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T21:02:16.2907313Z 765 │ flow.draftKey, 2026-10-24T21:02:16.2907474Z 766 │ hasImportedIncomingShare, 2026-10-24T21:02:16.2907666Z ·  ────────────┬─────────── 2026-10-24T21:02:16.2907949Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T21:02:16.2908189Z 767 │ incomingShare, 2026-10-24T21:02:16.2908351Z 768 │ isIncomingShareInboxLoading, 2026-10-24T21:02:16.2908556Z ·  ─────────────┬───────────── 2026-10-24T21:02:16.2908847Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T21:02:16.2909106Z 769 │ isIncomingShareUnavailable, 2026-10-24T21:02:16.2909278Z 770 │ props.incomingShareId, 2026-10-24T21:02:16.2909467Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T21:02:16.2909666Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T21:02:16.2909845Z 773 │ releaseShareReservation, 2026-10-24T21:02:16.2910001Z 774 │ reserveShare, 2026-10-24T21:02:16.2910168Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T21:02:16.2910339Z 776 │ selectedProject, 2026-10-24T21:02:16.2910491Z 777 │ shareImportAttempt, 2026-10-24T21:02:16.2910667Z ·  ─────────┬──────── 2026-10-24T21:02:16.2911011Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T21:02:16.2911266Z 778 │ ]); 2026-10-24T21:02:16.2911381Z ╰──── 2026-10-24T21:02:16.2911733Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.2912328Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.2912630Z 2026-10-24T21:02:16.2912905Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.2913278Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T21:02:16.2913462Z 168 │ 2026-10-24T21:02:16.2913601Z 169 │ const layerTest = Layer.succeed( 2026-10-24T21:02:16.2913777Z ·  ────┬──── 2026-10-24T21:02:16.2913999Z · ╰── 'layerTest' is declared here 2026-10-24T21:02:16.2914203Z 170 │ UsageService, 2026-10-24T21:02:16.2914331Z ╰──── 2026-10-24T21:02:16.2914489Z  help: Consider removing this declaration. 2026-10-24T21:02:16.2914609Z 2026-10-24T21:02:16.2915090Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.2915698Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T21:02:16.2915916Z 168 │ }); 2026-10-24T21:02:16.2916199Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T21:02:16.2916594Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T21:02:16.2916899Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2917153Z 172 │ ╰─▶ } 2026-10-24T21:02:16.2917343Z 173 │ 2026-10-24T21:02:16.2917458Z ╰──── 2026-10-24T21:02:16.2917515Z 2026-10-24T21:02:16.2918020Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.2918599Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T21:02:16.2918937Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T21:02:16.2919296Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T21:02:16.2919688Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T21:02:16.2919936Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2920190Z 181 │ ╰─▶ } 2026-10-24T21:02:16.2920384Z 182 │ 2026-10-24T21:02:16.2920495Z ╰──── 2026-10-24T21:02:16.2920551Z 2026-10-24T21:02:16.2921029Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.2921603Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T21:02:16.2921887Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T21:02:16.2922222Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T21:02:16.2922532Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T21:02:16.2922865Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T21:02:16.2923147Z 310 │ │ break; 2026-10-24T21:02:16.2923328Z 311 │ │ } 2026-10-24T21:02:16.2923530Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2923789Z 313 │ ╰─▶ } 2026-10-24T21:02:16.2923986Z 314 │ 2026-10-24T21:02:16.2924099Z ╰──── 2026-10-24T21:02:16.2924156Z 2026-10-24T21:02:16.2924367Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T21:02:16.2924697Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T21:02:16.2924933Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T21:02:16.2925209Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T21:02:16.2925499Z 159 │ │ constructor(data: Record) { 2026-10-24T21:02:16.2925792Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T21:02:16.2925995Z 161 │ │ } 2026-10-24T21:02:16.2926222Z 162 │ ╰─▶ }, 2026-10-24T21:02:16.2926423Z 163 │ clipboard: { 2026-10-24T21:02:16.2926559Z ╰──── 2026-10-24T21:02:16.2926783Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T21:02:16.2926959Z 2026-10-24T21:02:16.2927152Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T21:02:16.2927499Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T21:02:16.2927832Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T21:02:16.2928084Z 602 │ const gesture = Gesture.Pan() 2026-10-24T21:02:16.2928270Z ·  ─┬─ 2026-10-24T21:02:16.2928612Z · ╰── `Pan` may be a component 2026-10-24T21:02:16.2928875Z 603 │ .enabled(!props.disabled) 2026-10-24T21:02:16.2929020Z ╰──── 2026-10-24T21:02:16.2929360Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T21:02:16.2930082Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T21:02:16.2930493Z 2026-10-24T21:02:16.2930970Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.2931556Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T21:02:16.2931819Z 1679 │ yield* harness.replaceSession; 2026-10-24T21:02:16.2932147Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T21:02:16.2932504Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T21:02:16.2932749Z 1682 │ │ break; 2026-10-24T21:02:16.2932934Z 1683 │ │ } 2026-10-24T21:02:16.2933140Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2933399Z 1685 │ ╰─▶ } 2026-10-24T21:02:16.2933615Z 1686 │ yield* Queue.offer( 2026-10-24T21:02:16.2933764Z ╰──── 2026-10-24T21:02:16.2933819Z 2026-10-24T21:02:16.2934300Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.2934885Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T21:02:16.2935135Z 1788 │ yield* harness.replaceSession; 2026-10-24T21:02:16.2935456Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T21:02:16.2935855Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T21:02:16.2936129Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.2936388Z 1792 │ ╰─▶ } 2026-10-24T21:02:16.2936662Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T21:02:16.2936857Z ╰──── 2026-10-24T21:02:16.2936917Z 2026-10-24T21:02:16.2937182Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2937589Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T21:02:16.2937910Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T21:02:16.2938151Z 29 │ useEffect(() => { 2026-10-24T21:02:16.2938307Z ·  ────┬──── 2026-10-24T21:02:16.2938527Z · ╰── This is the containing effect 2026-10-24T21:02:16.2938788Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T21:02:16.2939109Z ·  ───┬─── 2026-10-24T21:02:16.2939454Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2939712Z 31 │ }, [key, live, snapshot]); 2026-10-24T21:02:16.2939855Z ╰──── 2026-10-24T21:02:16.2940529Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2941404Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2941718Z 2026-10-24T21:02:16.2941888Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.2942203Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T21:02:16.2942510Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T21:02:16.2942803Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T21:02:16.2943032Z ·  ────┬─── 2026-10-24T21:02:16.2943256Z · ╰── `rotation` originates here 2026-10-24T21:02:16.2943450Z 172 │ 2026-10-24T21:02:16.2943579Z 173 │ useLayoutEffect(() => { 2026-10-24T21:02:16.2943810Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T21:02:16.2944028Z ·  ────┬─── 2026-10-24T21:02:16.2944257Z · ╰── `rotation` cannot be modified 2026-10-24T21:02:16.2944500Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T21:02:16.2944669Z ╰──── 2026-10-24T21:02:16.2944997Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.2945596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.2945894Z 2026-10-24T21:02:16.2946095Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.2946443Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T21:02:16.2946669Z 1245 │ ` or list indent), 2026-10-24T21:02:16.2962348Z ╰──── 2026-10-24T21:02:16.2962665Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T21:02:16.2962917Z 2026-10-24T21:02:16.2963178Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2963593Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T21:02:16.2963823Z 434 │ : null; 2026-10-24T21:02:16.2963965Z 435 │ useEffect(() => { 2026-10-24T21:02:16.2964118Z ·  ────┬──── 2026-10-24T21:02:16.2964347Z · ╰── This is the containing effect 2026-10-24T21:02:16.2964546Z 436 │ if ( 2026-10-24T21:02:16.2964692Z 437 │ props.active === false || 2026-10-24T21:02:16.2964866Z 438 │ activeDraftKey !== null || 2026-10-24T21:02:16.2965044Z 439 │ editingPendingTask !== null || 2026-10-24T21:02:16.2965222Z 440 │ selectedProject === null 2026-10-24T21:02:16.2965371Z 441 │ ) { 2026-10-24T21:02:16.2965499Z 442 │ return; 2026-10-24T21:02:16.2965670Z 443 │ } 2026-10-24T21:02:16.2965806Z 444 │ setActiveDraftKey( 2026-10-24T21:02:16.2965976Z ·  ────────┬──────── 2026-10-24T21:02:16.2966246Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2966489Z 445 │ createNewTaskDraft({ 2026-10-24T21:02:16.2966627Z ╰──── 2026-10-24T21:02:16.2967395Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2968310Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2968619Z 2026-10-24T21:02:16.2968868Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T21:02:16.2969275Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T21:02:16.2969553Z 1243 │ 2026-10-24T21:02:16.2969879Z 1244 │ {props.children} 2026-10-24T21:02:16.2970192Z ·  ───────────── 2026-10-24T21:02:16.2970385Z 1245 │ 2026-10-24T21:02:16.2970533Z ╰──── 2026-10-24T21:02:16.2970815Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T21:02:16.2971172Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T21:02:16.2971349Z 2026-10-24T21:02:16.2971611Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2971998Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5] 2026-10-24T21:02:16.2972342Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T21:02:16.2972614Z 168 │ useLayoutEffect(() => { 2026-10-24T21:02:16.2978095Z ·  ───────┬─────── 2026-10-24T21:02:16.2978359Z · ╰── This is the containing effect 2026-10-24T21:02:16.2978593Z 169 │ if (faviconRequest === null) return; 2026-10-24T21:02:16.2978753Z 170 │ 2026-10-24T21:02:16.2978947Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T21:02:16.2979188Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T21:02:16.2979392Z ·  ───────────┬─────────── 2026-10-24T21:02:16.2979668Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2979907Z 173 │ return endRequest; 2026-10-24T21:02:16.2980041Z ╰──── 2026-10-24T21:02:16.2980723Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2981606Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2981914Z 2026-10-24T21:02:16.2982121Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T21:02:16.2982463Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T21:02:16.2982675Z 1 │ import type { 2026-10-24T21:02:16.2982812Z 2 │ EnvironmentId, 2026-10-24T21:02:16.2983067Z ·  ──────┬────── 2026-10-24T21:02:16.2983326Z · ╰── 'EnvironmentId' is imported here 2026-10-24T21:02:16.2983557Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T21:02:16.2983713Z ╰──── 2026-10-24T21:02:16.2983866Z  help: Consider removing this import. 2026-10-24T21:02:16.2983980Z 2026-10-24T21:02:16.2984246Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2984654Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:570:5] 2026-10-24T21:02:16.2984872Z 568 │ }, []); 2026-10-24T21:02:16.2985008Z 569 │ useEffect(() => { 2026-10-24T21:02:16.2985163Z ·  ────┬──── 2026-10-24T21:02:16.2985391Z · ╰── This is the containing effect 2026-10-24T21:02:16.2985644Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T21:02:16.2985838Z ·  ───────────┬─────────── 2026-10-24T21:02:16.2986112Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2986384Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T21:02:16.2986551Z ╰──── 2026-10-24T21:02:16.2987217Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2988096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2988409Z 2026-10-24T21:02:16.2988673Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2989075Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7] 2026-10-24T21:02:16.2989393Z 963 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T21:02:16.2989622Z 964 │ useEffect(() => { 2026-10-24T21:02:16.2989778Z ·  ────┬──── 2026-10-24T21:02:16.2989993Z · ╰── This is the containing effect 2026-10-24T21:02:16.2990290Z 965 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T21:02:16.2990572Z 966 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T21:02:16.2990803Z ·  ─────────────┬──────────── 2026-10-24T21:02:16.2991091Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2991321Z 967 │ } 2026-10-24T21:02:16.2991438Z ╰──── 2026-10-24T21:02:16.2992103Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2992977Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2993284Z 2026-10-24T21:02:16.2993636Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.2994074Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1222:5] 2026-10-24T21:02:16.2994290Z 1220 │ 2026-10-24T21:02:16.2994415Z 1221 │ useEffect(() => { 2026-10-24T21:02:16.2994572Z ·  ────┬──── 2026-10-24T21:02:16.2994792Z · ╰── This is the containing effect 2026-10-24T21:02:16.2995004Z 1222 │ setAnchorMessageId(null); 2026-10-24T21:02:16.2995186Z ·  ─────────┬──────── 2026-10-24T21:02:16.2995457Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.2995746Z 1223 │ setSubmittedMessageId(null); 2026-10-24T21:02:16.2995897Z ╰──── 2026-10-24T21:02:16.2996565Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.2997437Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.2997745Z 2026-10-24T21:02:16.2997950Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.2998306Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:571:7] 2026-10-24T21:02:16.2998553Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T21:02:16.2998755Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T21:02:16.2999022Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T21:02:16.2999381Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T21:02:16.3000156Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T21:02:16.3000445Z 572 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T21:02:16.3000635Z ╰──── 2026-10-24T21:02:16.3000987Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3001585Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3001891Z 2026-10-24T21:02:16.3002100Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3002462Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1170:7] 2026-10-24T21:02:16.3002711Z 1169 │ userInputInsetProgress.set(1); 2026-10-24T21:02:16.3002982Z 1170 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T21:02:16.3003255Z ·  ────────────┬─────────── 2026-10-24T21:02:16.3003541Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T21:02:16.3003825Z 1171 │ const showContent = props.showContent ?? true; 2026-10-24T21:02:16.3003994Z ╰──── 2026-10-24T21:02:16.3004440Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3005087Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3005387Z 2026-10-24T21:02:16.3005623Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3005985Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1228:15] 2026-10-24T21:02:16.3006218Z 1227 │ freeze.set(false); 2026-10-24T21:02:16.3006301Z 1228 │ }, [freeze, selectedThreadKey]); 2026-10-24T21:02:16.3006399Z ·  ────────┬──────── 2026-10-24T21:02:16.3006566Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T21:02:16.3006625Z 1229 │ 2026-10-24T21:02:16.3006680Z ╰──── 2026-10-24T21:02:16.3006976Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3007289Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3007291Z 2026-10-24T21:02:16.3007452Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3007606Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1058:5] 2026-10-24T21:02:16.3007719Z 1053 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T21:02:16.3007828Z 1054 │ const floatingControlCoverage = useSharedValue( 2026-10-24T21:02:16.3007931Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3008100Z · ╰── `floatingControlCoverage` originates here 2026-10-24T21:02:16.3008229Z 1055 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T21:02:16.3008284Z 1056 │ ); 2026-10-24T21:02:16.3008351Z 1057 │ useEffect(() => { 2026-10-24T21:02:16.3008457Z 1058 │ floatingControlCoverage.value = withTiming( 2026-10-24T21:02:16.3008552Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3008718Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T21:02:16.3008847Z 1059 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T21:02:16.3008900Z ╰──── 2026-10-24T21:02:16.3009178Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3009491Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3009493Z 2026-10-24T21:02:16.3009650Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3009804Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1076:7] 2026-10-24T21:02:16.3009994Z 1066 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T21:02:16.3010121Z 1067 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T21:02:16.3010234Z ·  ────────────────┬──────────────── 2026-10-24T21:02:16.3010503Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T21:02:16.3010666Z 1068 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T21:02:16.3010722Z 1069 │ ); 2026-10-24T21:02:16.3010791Z 1070 │ useAnimatedReaction( 2026-10-24T21:02:16.3010851Z 1071 │ () => 2026-10-24T21:02:16.3010946Z 1072 │ contentInsetEndAdjustment.value + 2026-10-24T21:02:16.3011036Z 1073 │ floatingControlCoverage.value + 2026-10-24T21:02:16.3011236Z 1074 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T21:02:16.3011300Z 1075 │ (value) => { 2026-10-24T21:02:16.3011417Z 1076 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T21:02:16.3011529Z ·  ────────────────┬──────────────── 2026-10-24T21:02:16.3011730Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T21:02:16.3011790Z 1077 │ }, 2026-10-24T21:02:16.3011843Z ╰──── 2026-10-24T21:02:16.3012111Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3012417Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3012422Z 2026-10-24T21:02:16.3012620Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3012770Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25] 2026-10-24T21:02:16.3012878Z 271 │ {record.elements?.map((element, index) => ( 2026-10-24T21:02:16.3013049Z 272 │ 2026-10-24T21:02:16.3013209Z ·  ─────────────────────────────────────────────────────── 2026-10-24T21:02:16.3013287Z 273 │ 0 && !threadSearchQuery.startsWith(">") && !isOpen) { 2026-10-24T21:02:16.3015212Z 152 │ claimThreadOpen(thread.environmentId, thread.id, Date.now()); 2026-10-24T21:02:16.3015339Z ·  ─────┬──── 2026-10-24T21:02:16.3015520Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3015600Z 153 │ } 2026-10-24T21:02:16.3015651Z ╰──── 2026-10-24T21:02:16.3015941Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3016241Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3016244Z 2026-10-24T21:02:16.3016506Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3016640Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T21:02:16.3016692Z 3404 │ 2026-10-24T21:02:16.3016891Z 3405 │ const layer: Layer.Layer = 2026-10-24T21:02:16.3016966Z ·  ──┬── 2026-10-24T21:02:16.3017095Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.3017158Z 3406 │ Layer.effect( 2026-10-24T21:02:16.3017211Z ╰──── 2026-10-24T21:02:16.3017317Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3017320Z 2026-10-24T21:02:16.3017582Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3017717Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T21:02:16.3017770Z 57 │ 2026-10-24T21:02:16.3017837Z 58 │ useEffect(() => { 2026-10-24T21:02:16.3017908Z ·  ────┬──── 2026-10-24T21:02:16.3018045Z · ╰── This is the containing effect 2026-10-24T21:02:16.3018144Z 59 │ const controller = new AbortController(); 2026-10-24T21:02:16.3018216Z 60 │ setLoadState("pending"); 2026-10-24T21:02:16.3018292Z ·  ──────┬───── 2026-10-24T21:02:16.3018461Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3018623Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T21:02:16.3018675Z ╰──── 2026-10-24T21:02:16.3019351Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3019712Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3019714Z 2026-10-24T21:02:16.3019916Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3020051Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T21:02:16.3020132Z 70 │ return () => controller.abort(); 2026-10-24T21:02:16.3020229Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T21:02:16.3020407Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T21:02:16.3020646Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T21:02:16.3020857Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T21:02:16.3020995Z · ╰── Unnecessary dependency `player_0` 2026-10-24T21:02:16.3021048Z 72 │ 2026-10-24T21:02:16.3021099Z ╰──── 2026-10-24T21:02:16.3021396Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3021712Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3021714Z 2026-10-24T21:02:16.3021921Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3022053Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T21:02:16.3022110Z 81 │ }, 2026-10-24T21:02:16.3022173Z 82 │ [draftKey], 2026-10-24T21:02:16.3022246Z ·  ────┬─── 2026-10-24T21:02:16.3022383Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T21:02:16.3022438Z 83 │ ); 2026-10-24T21:02:16.3022489Z ╰──── 2026-10-24T21:02:16.3022783Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3023096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3023099Z 2026-10-24T21:02:16.3023318Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T21:02:16.3023468Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T21:02:16.3023570Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T21:02:16.3023702Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T21:02:16.3023796Z ·  ────────────┬──────────── 2026-10-24T21:02:16.3023973Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T21:02:16.3024028Z 774 │ } 2026-10-24T21:02:16.3024234Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T21:02:16.3024344Z ·  ────────────────┬──────────────── 2026-10-24T21:02:16.3024700Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T21:02:16.3024787Z 776 │ 2026-10-24T21:02:16.3024838Z ╰──── 2026-10-24T21:02:16.3025264Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3025616Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3025619Z 2026-10-24T21:02:16.3025777Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3025922Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T21:02:16.3026086Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T21:02:16.3026221Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T21:02:16.3026314Z ·  ──────────┬───────── 2026-10-24T21:02:16.3026471Z · ╰── `animatedBorderRadius` originates here 2026-10-24T21:02:16.3026629Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T21:02:16.3026698Z 390 │ useLayoutEffect(() => { 2026-10-24T21:02:16.3026799Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T21:02:16.3026887Z ·  ──────────┬───────── 2026-10-24T21:02:16.3027045Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T21:02:16.3027139Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T21:02:16.3027195Z ╰──── 2026-10-24T21:02:16.3027462Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3027769Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3027771Z 2026-10-24T21:02:16.3027918Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3028069Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T21:02:16.3028250Z 151 │ 2026-10-24T21:02:16.3028328Z 152 │ {props.children(open)} 2026-10-24T21:02:16.3028422Z ·  ──┬─ 2026-10-24T21:02:16.3028584Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3028647Z 153 │ 2026-10-24T21:02:16.3028698Z ╰──── 2026-10-24T21:02:16.3029174Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3029466Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3029470Z 2026-10-24T21:02:16.3029667Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T21:02:16.3029883Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T21:02:16.3029991Z 139 │ if (action.id !== undefined) { 2026-10-24T21:02:16.3030069Z 140 │ props.onPressAction?.({ 2026-10-24T21:02:16.3030140Z ·  ──┬── 2026-10-24T21:02:16.3030272Z · ╰── Missing dependency `props` 2026-10-24T21:02:16.3030364Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T21:02:16.3030510Z 142 │ } as Parameters>[0]); 2026-10-24T21:02:16.3030565Z 143 │ } 2026-10-24T21:02:16.3030621Z 144 │ }, 2026-10-24T21:02:16.3030701Z 145 │ [close, props.onPressAction], 2026-10-24T21:02:16.3030794Z ·  ─────────┬───────── 2026-10-24T21:02:16.3031018Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T21:02:16.3031076Z 146 │ ); 2026-10-24T21:02:16.3031127Z ╰──── 2026-10-24T21:02:16.3031615Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.3031930Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3031933Z 2026-10-24T21:02:16.3032194Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3032352Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T21:02:16.3032407Z 55 │ 2026-10-24T21:02:16.3032470Z 56 │ useEffect(() => { 2026-10-24T21:02:16.3032543Z ·  ────┬──── 2026-10-24T21:02:16.3032673Z · ╰── This is the containing effect 2026-10-24T21:02:16.3032742Z 57 │ setDecodedSize(null); 2026-10-24T21:02:16.3032818Z ·  ───────┬────── 2026-10-24T21:02:16.3032990Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3033060Z 58 │ }, [props.sourceKey]); 2026-10-24T21:02:16.3033110Z ╰──── 2026-10-24T21:02:16.3033783Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3034137Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3034140Z 2026-10-24T21:02:16.3034398Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3034550Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T21:02:16.3034602Z 59 │ 2026-10-24T21:02:16.3034665Z 60 │ useEffect(() => { 2026-10-24T21:02:16.3034735Z ·  ────┬──── 2026-10-24T21:02:16.3034864Z · ╰── This is the containing effect 2026-10-24T21:02:16.3034931Z 61 │ setFailedUri(null); 2026-10-24T21:02:16.3035009Z ·  ──────┬───── 2026-10-24T21:02:16.3035180Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3035244Z 62 │ }, [props.uri]); 2026-10-24T21:02:16.3035294Z ╰──── 2026-10-24T21:02:16.3035925Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3036251Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3036253Z 2026-10-24T21:02:16.3036476Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T21:02:16.3036631Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T21:02:16.3036756Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T21:02:16.3036933Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T21:02:16.3037022Z ·  ────────┬──────── 2026-10-24T21:02:16.3037176Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T21:02:16.3037228Z 8 │ 2026-10-24T21:02:16.3037278Z ╰──── 2026-10-24T21:02:16.3037378Z  help: Consider removing this import. 2026-10-24T21:02:16.3037381Z 2026-10-24T21:02:16.3037583Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3037742Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T21:02:16.3037814Z 57 │ setDecodedSize(null); 2026-10-24T21:02:16.3037882Z 58 │ }, [props.sourceKey]); 2026-10-24T21:02:16.3037964Z ·  ───────┬─────── 2026-10-24T21:02:16.3038120Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T21:02:16.3038170Z 59 │ 2026-10-24T21:02:16.3038221Z ╰──── 2026-10-24T21:02:16.3038516Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3038829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3038831Z 2026-10-24T21:02:16.3039106Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3039288Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T21:02:16.3039355Z 61 │ setFailedUri(null); 2026-10-24T21:02:16.3039419Z 62 │ }, [props.uri]); 2026-10-24T21:02:16.3039491Z ·  ────┬──── 2026-10-24T21:02:16.3039699Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T21:02:16.3039751Z 63 │ 2026-10-24T21:02:16.3039801Z ╰──── 2026-10-24T21:02:16.3040093Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3040410Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3040415Z 2026-10-24T21:02:16.3040890Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3041073Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T21:02:16.3041145Z 222 │ let idlePasses = 0; 2026-10-24T21:02:16.3041293Z 223 │ ╭─▶ for (;;) { 2026-10-24T21:02:16.3041434Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T21:02:16.3041581Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T21:02:16.3041685Z 226 │ │ if (!pending) { 2026-10-24T21:02:16.3041781Z 227 │ │ idlePasses++; 2026-10-24T21:02:16.3041888Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T21:02:16.3041975Z 229 │ │ return; 2026-10-24T21:02:16.3042052Z 230 │ │ } 2026-10-24T21:02:16.3042138Z 231 │ │ continue; 2026-10-24T21:02:16.3042213Z 232 │ │ } 2026-10-24T21:02:16.3042306Z 233 │ │ idlePasses = 0; 2026-10-24T21:02:16.3042421Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T21:02:16.3042636Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T21:02:16.3042720Z 236 │ │ ); 2026-10-24T21:02:16.3042830Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T21:02:16.3042935Z 238 │ │ pending.resolve(exit); 2026-10-24T21:02:16.3043013Z 239 │ │ }); 2026-10-24T21:02:16.3043142Z 240 │ ╰─▶ } 2026-10-24T21:02:16.3043200Z 241 │ }, 2026-10-24T21:02:16.3043252Z ╰──── 2026-10-24T21:02:16.3043254Z 2026-10-24T21:02:16.3043425Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3043563Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T21:02:16.3043696Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T21:02:16.3043941Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T21:02:16.3044120Z ·  ─────┬──── 2026-10-24T21:02:16.3044292Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3044391Z 141 │ onSelect={(selected) => { 2026-10-24T21:02:16.3044442Z ╰──── 2026-10-24T21:02:16.3044726Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3045026Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3045029Z 2026-10-24T21:02:16.3045508Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3045677Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T21:02:16.3045753Z 138 │ Effect.gen(function* () { 2026-10-24T21:02:16.3045950Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T21:02:16.3046074Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T21:02:16.3046403Z 141 │ │ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock 2026-10-24T21:02:16.3046599Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T21:02:16.3046735Z 143 │ ╰─▶ } 2026-10-24T21:02:16.3046821Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T21:02:16.3046873Z ╰──── 2026-10-24T21:02:16.3046875Z 2026-10-24T21:02:16.3047034Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3047190Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T21:02:16.3047241Z 83 │ 2026-10-24T21:02:16.3047334Z 84 │ const cardCoverage = props.cardCoverage; 2026-10-24T21:02:16.3047414Z ·  ──────┬───── 2026-10-24T21:02:16.3047552Z · ╰── `cardCoverage` originates here 2026-10-24T21:02:16.3047631Z 85 │ const barHeightRef = useRef(0); 2026-10-24T21:02:16.3047718Z 86 │ const cardHeightRef = useRef(0); 2026-10-24T21:02:16.3047807Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T21:02:16.3047897Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T21:02:16.3047963Z 89 │ if (!cardCoverage) { 2026-10-24T21:02:16.3048024Z 90 │ return; 2026-10-24T21:02:16.3048078Z 91 │ } 2026-10-24T21:02:16.3048244Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T21:02:16.3048346Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T21:02:16.3048506Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T21:02:16.3048582Z ·  ──────┬───── 2026-10-24T21:02:16.3048723Z · ╰── `cardCoverage` cannot be modified 2026-10-24T21:02:16.3048788Z 95 │ }, [cardCoverage]); 2026-10-24T21:02:16.3048908Z ╰──── 2026-10-24T21:02:16.3049236Z  help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state 2026-10-24T21:02:16.3049549Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3049551Z 2026-10-24T21:02:16.3049710Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3049868Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T21:02:16.3049950Z  86 │ const cardHeightRef = useRef(0); 2026-10-24T21:02:16.3050037Z  87 │ const cardHeight = useSharedValue(0); 2026-10-24T21:02:16.3050115Z ·  ─────┬──── 2026-10-24T21:02:16.3050256Z · ╰── `cardHeight` originates here 2026-10-24T21:02:16.3050352Z  88 │ const notifyCoverage = useCallback(() => { 2026-10-24T21:02:16.3050419Z  89 │ if (!cardCoverage) { 2026-10-24T21:02:16.3050480Z  90 │ return; 2026-10-24T21:02:16.3050533Z  91 │ } 2026-10-24T21:02:16.3050698Z  92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T21:02:16.3050800Z  93 │ // feed inset and floating controls trailing it. 2026-10-24T21:02:16.3050959Z  94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T21:02:16.3051022Z  95 │ }, [cardCoverage]); 2026-10-24T21:02:16.3051106Z  96 │ const handleBarLayout = useCallback( 2026-10-24T21:02:16.3051187Z  97 │ (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3051308Z  98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T21:02:16.3051380Z  99 │ notifyCoverage(); 2026-10-24T21:02:16.3051438Z 100 │ }, 2026-10-24T21:02:16.3051504Z 101 │ [notifyCoverage], 2026-10-24T21:02:16.3051556Z 102 │ ); 2026-10-24T21:02:16.3051643Z 103 │ const handleCardLayout = useCallback( 2026-10-24T21:02:16.3051724Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3051850Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T21:02:16.3051964Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T21:02:16.3052040Z ·  ─────┬──── 2026-10-24T21:02:16.3052178Z · ╰── `cardHeight` cannot be modified 2026-10-24T21:02:16.3052245Z 107 │ notifyCoverage(); 2026-10-24T21:02:16.3052295Z ╰──── 2026-10-24T21:02:16.3052569Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3052880Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3052882Z 2026-10-24T21:02:16.3053085Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T21:02:16.3053241Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T21:02:16.3053326Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T21:02:16.3053417Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T21:02:16.3053521Z ·  ───┬─── 2026-10-24T21:02:16.3053834Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T21:02:16.3053928Z 89 │ if (!cardCoverage) { 2026-10-24T21:02:16.3053987Z 90 │ return; 2026-10-24T21:02:16.3054040Z 91 │ } 2026-10-24T21:02:16.3054207Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T21:02:16.3054308Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T21:02:16.3054466Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T21:02:16.3054542Z ·  ──────┬───── 2026-10-24T21:02:16.3054676Z · ╰── This modifies `cardCoverage` 2026-10-24T21:02:16.3054739Z 95 │ }, [cardCoverage]); 2026-10-24T21:02:16.3054791Z ╰──── 2026-10-24T21:02:16.3055144Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T21:02:16.3055456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3055459Z 2026-10-24T21:02:16.3055698Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T21:02:16.3055853Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T21:02:16.3055955Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T21:02:16.3056113Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T21:02:16.3056186Z ·  ──────┬───── 2026-10-24T21:02:16.3056323Z · ╰── This modifies `cardCoverage` 2026-10-24T21:02:16.3056391Z 95 │ }, [cardCoverage]); 2026-10-24T21:02:16.3056476Z 96 │ const handleBarLayout = useCallback( 2026-10-24T21:02:16.3056555Z 97 │ (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3056661Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3056886Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T21:02:16.3057009Z 98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T21:02:16.3057058Z ╰──── 2026-10-24T21:02:16.3057399Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T21:02:16.3057713Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3057718Z 2026-10-24T21:02:16.3057917Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T21:02:16.3058074Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T21:02:16.3058160Z 103 │ const handleCardLayout = useCallback( 2026-10-24T21:02:16.3058242Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3058351Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3058574Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T21:02:16.3058699Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T21:02:16.3058883Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T21:02:16.3058993Z ·  ─────┬──── 2026-10-24T21:02:16.3059124Z · ╰── This modifies `cardHeight` 2026-10-24T21:02:16.3059190Z 107 │ notifyCoverage(); 2026-10-24T21:02:16.3059241Z ╰──── 2026-10-24T21:02:16.3059583Z  help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T21:02:16.3059892Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3059894Z 2026-10-24T21:02:16.3060156Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3060326Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7] 2026-10-24T21:02:16.3060383Z 213 │ }; 2026-10-24T21:02:16.3060449Z 214 │ useEffect(() => { 2026-10-24T21:02:16.3060520Z ·  ────┬──── 2026-10-24T21:02:16.3060651Z · ╰── This is the containing effect 2026-10-24T21:02:16.3060827Z 215 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T21:02:16.3060890Z 216 │ if (inserted) { 2026-10-24T21:02:16.3060965Z 217 │ setSelection((current) => 2026-10-24T21:02:16.3061042Z ·  ──────┬───── 2026-10-24T21:02:16.3061215Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3061393Z 218 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T21:02:16.3061447Z ╰──── 2026-10-24T21:02:16.3062057Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3062383Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3062385Z 2026-10-24T21:02:16.3062678Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3062845Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7] 2026-10-24T21:02:16.3062991Z 286 │ }, [hasWorkspaceSnapshot]); 2026-10-24T21:02:16.3063080Z 287 │ useEffect(() => { 2026-10-24T21:02:16.3063150Z ·  ────┬──── 2026-10-24T21:02:16.3063280Z · ╰── This is the containing effect 2026-10-24T21:02:16.3063428Z 288 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T21:02:16.3063574Z 289 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T21:02:16.3063644Z 290 │ const now = Date.now(); 2026-10-24T21:02:16.3063759Z 291 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T21:02:16.3063816Z 292 │ if ( 2026-10-24T21:02:16.3063892Z 293 │ lastRequest?.key === key && 2026-10-24T21:02:16.3064031Z 294 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T21:02:16.3064091Z 295 │ ) 2026-10-24T21:02:16.3064153Z 296 │ return; 2026-10-24T21:02:16.3064327Z 297 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T21:02:16.3064415Z 298 │ setWorkspaceRefreshRetry(null); 2026-10-24T21:02:16.3064511Z ·  ────────────┬─────────── 2026-10-24T21:02:16.3064693Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3064752Z 299 │ return; 2026-10-24T21:02:16.3064804Z ╰──── 2026-10-24T21:02:16.3065408Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3065764Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3065770Z 2026-10-24T21:02:16.3065975Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3066138Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5] 2026-10-24T21:02:16.3066195Z 327 │ }, [ 2026-10-24T21:02:16.3066258Z 328 │ draftMessage, 2026-10-24T21:02:16.3066334Z ·  ──────┬───── 2026-10-24T21:02:16.3066480Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T21:02:16.3066545Z 329 │ environmentId, 2026-10-24T21:02:16.3066597Z ╰──── 2026-10-24T21:02:16.3066898Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3067215Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3067218Z 2026-10-24T21:02:16.3067476Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3067639Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T21:02:16.3067752Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T21:02:16.3067821Z 38 │ useLayoutEffect(() => { 2026-10-24T21:02:16.3067899Z ·  ───────┬─────── 2026-10-24T21:02:16.3068111Z · ╰── This is the containing effect 2026-10-24T21:02:16.3068203Z 39 │ reset(); 2026-10-24T21:02:16.3068271Z 40 │ setInitialized(true); 2026-10-24T21:02:16.3068349Z ·  ───────┬────── 2026-10-24T21:02:16.3068522Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3068582Z 41 │ }, [reset]); 2026-10-24T21:02:16.3068632Z ╰──── 2026-10-24T21:02:16.3069241Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3069568Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3069574Z 2026-10-24T21:02:16.3069831Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3069993Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T21:02:16.3070044Z 88 │ 2026-10-24T21:02:16.3070109Z 89 │ useEffect(() => { 2026-10-24T21:02:16.3070180Z ·  ────┬──── 2026-10-24T21:02:16.3070310Z · ╰── This is the containing effect 2026-10-24T21:02:16.3070469Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T21:02:16.3070575Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T21:02:16.3070641Z 92 │ let active = true; 2026-10-24T21:02:16.3070742Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T21:02:16.3070828Z ·  ─────────┬───────── 2026-10-24T21:02:16.3071029Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3071185Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T21:02:16.3071236Z ╰──── 2026-10-24T21:02:16.3071840Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3072188Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3072193Z 2026-10-24T21:02:16.3072453Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3072631Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T21:02:16.3072684Z 58 │ 2026-10-24T21:02:16.3072747Z 59 │ useEffect(() => { 2026-10-24T21:02:16.3072819Z ·  ────┬──── 2026-10-24T21:02:16.3072948Z · ╰── This is the containing effect 2026-10-24T21:02:16.3073030Z 60 │ setMountedModes((current) => { 2026-10-24T21:02:16.3073107Z ·  ───────┬─────── 2026-10-24T21:02:16.3073277Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3073423Z 61 │ if (current.has(props.mode)) { 2026-10-24T21:02:16.3073507Z ╰──── 2026-10-24T21:02:16.3074110Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3074433Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3074436Z 2026-10-24T21:02:16.3074694Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3074858Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5] 2026-10-24T21:02:16.3074983Z 277 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T21:02:16.3075048Z 278 │ useEffect(() => { 2026-10-24T21:02:16.3075121Z ·  ────┬──── 2026-10-24T21:02:16.3075253Z · ╰── This is the containing effect 2026-10-24T21:02:16.3075338Z 279 │ setNow(new Date().toISOString()); 2026-10-24T21:02:16.3075405Z ·  ───┬── 2026-10-24T21:02:16.3075599Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3075739Z 280 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T21:02:16.3075791Z ╰──── 2026-10-24T21:02:16.3076397Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3076723Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3076725Z 2026-10-24T21:02:16.3076958Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T21:02:16.3077119Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8] 2026-10-24T21:02:16.3077188Z 12 │ threadSearchMatchKey, 2026-10-24T21:02:16.3077274Z 13 │ type EnvironmentThreadSearchMatch, 2026-10-24T21:02:16.3077378Z ·  ──────────────┬───────────── 2026-10-24T21:02:16.3077563Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T21:02:16.3077677Z 14 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T21:02:16.3077727Z ╰──── 2026-10-24T21:02:16.3077826Z  help: Consider removing this import. 2026-10-24T21:02:16.3077829Z 2026-10-24T21:02:16.3078032Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3078198Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25] 2026-10-24T21:02:16.3078329Z 358 │ // range) the boundary string is identical and the chain would die. 2026-10-24T21:02:16.3078419Z 359 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T21:02:16.3078522Z ·  ───────┬────── 2026-10-24T21:02:16.3078765Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T21:02:16.3078914Z 360 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T21:02:16.3078965Z ╰──── 2026-10-24T21:02:16.3079262Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3079640Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3079643Z 2026-10-24T21:02:16.3079814Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3079977Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53] 2026-10-24T21:02:16.3080063Z 349 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T21:02:16.3080224Z 350 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T21:02:16.3080350Z ·  ─────┬──── 2026-10-24T21:02:16.3080519Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3080598Z 351 │ const id = setTimeout(() => { 2026-10-24T21:02:16.3080650Z ╰──── 2026-10-24T21:02:16.3080939Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3081261Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3081264Z 2026-10-24T21:02:16.3081504Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T21:02:16.3081645Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T21:02:16.3081770Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T21:02:16.3082015Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T21:02:16.3082136Z 986 │ │ (approval) => approval.requestId, 2026-10-24T21:02:16.3082272Z 987 │ ╰─▶ ); 2026-10-24T21:02:16.3082411Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T21:02:16.3082463Z ╰──── 2026-10-24T21:02:16.3082539Z  help: Switch to `Set` 2026-10-24T21:02:16.3082548Z 2026-10-24T21:02:16.3082709Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3082874Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T21:02:16.3082929Z 107 │ ); 2026-10-24T21:02:16.3083080Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T21:02:16.3083169Z ·  ─────────┬──────── 2026-10-24T21:02:16.3083322Z · ╰── `separationProgress` originates here 2026-10-24T21:02:16.3083376Z 109 │ 2026-10-24T21:02:16.3083439Z 110 │ useEffect(() => { 2026-10-24T21:02:16.3083614Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T21:02:16.3083698Z ·  ─────────┬──────── 2026-10-24T21:02:16.3083934Z · ╰── `separationProgress` cannot be modified 2026-10-24T21:02:16.3084078Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T21:02:16.3084130Z ╰──── 2026-10-24T21:02:16.3084400Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3084710Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3084713Z 2026-10-24T21:02:16.3084869Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3085029Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T21:02:16.3085147Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T21:02:16.3085263Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T21:02:16.3085343Z ·  ──────┬───── 2026-10-24T21:02:16.3085480Z · ╰── `capsuleWidth` originates here 2026-10-24T21:02:16.3085616Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T21:02:16.3085732Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3085839Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T21:02:16.3085934Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T21:02:16.3085995Z 134 │ return; 2026-10-24T21:02:16.3086049Z 135 │ } 2026-10-24T21:02:16.3086155Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T21:02:16.3086241Z 137 │ measuredWidthRef.current = width; 2026-10-24T21:02:16.3086390Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T21:02:16.3086469Z ·  ──────┬───── 2026-10-24T21:02:16.3086609Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T21:02:16.3086663Z 139 │ }; 2026-10-24T21:02:16.3086714Z ╰──── 2026-10-24T21:02:16.3086980Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3087289Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3087292Z 2026-10-24T21:02:16.3087446Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3087675Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T21:02:16.3087819Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T21:02:16.3087932Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T21:02:16.3088011Z ·  ──────┬───── 2026-10-24T21:02:16.3088149Z · ╰── `capsuleWidth` originates here 2026-10-24T21:02:16.3088259Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T21:02:16.3088375Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3088478Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T21:02:16.3088599Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T21:02:16.3088658Z 134 │ return; 2026-10-24T21:02:16.3088713Z 135 │ } 2026-10-24T21:02:16.3088820Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T21:02:16.3088910Z 137 │ measuredWidthRef.current = width; 2026-10-24T21:02:16.3089053Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T21:02:16.3089106Z 139 │ }; 2026-10-24T21:02:16.3089195Z 140 │ const hasStatus = props.status !== null; 2026-10-24T21:02:16.3089330Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T21:02:16.3089395Z 142 │ useEffect(() => { 2026-10-24T21:02:16.3089460Z 143 │ if (!hasStatus) { 2026-10-24T21:02:16.3089546Z 144 │ measuredWidthRef.current = null; 2026-10-24T21:02:16.3089624Z 145 │ capsuleWidth.value = null; 2026-10-24T21:02:16.3089701Z ·  ──────┬───── 2026-10-24T21:02:16.3089842Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T21:02:16.3089901Z 146 │ } 2026-10-24T21:02:16.3089956Z ╰──── 2026-10-24T21:02:16.3090222Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3090529Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3090532Z 2026-10-24T21:02:16.3090734Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T21:02:16.3090899Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T21:02:16.3091033Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T21:02:16.3091098Z 142 │ useEffect(() => { 2026-10-24T21:02:16.3091180Z ·  ───┬─── 2026-10-24T21:02:16.3091405Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T21:02:16.3091471Z 143 │ if (!hasStatus) { 2026-10-24T21:02:16.3091560Z 144 │ measuredWidthRef.current = null; 2026-10-24T21:02:16.3091637Z 145 │ capsuleWidth.value = null; 2026-10-24T21:02:16.3091713Z ·  ──────┬───── 2026-10-24T21:02:16.3091849Z · ╰── This modifies `capsuleWidth` 2026-10-24T21:02:16.3091905Z 146 │ } 2026-10-24T21:02:16.3091954Z ╰──── 2026-10-24T21:02:16.3092299Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T21:02:16.3092704Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3092736Z 2026-10-24T21:02:16.3092937Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T21:02:16.3093100Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T21:02:16.3093211Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T21:02:16.3093327Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T21:02:16.3093452Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3093697Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T21:02:16.3093810Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T21:02:16.3093911Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T21:02:16.3093971Z 134 │ return; 2026-10-24T21:02:16.3094025Z 135 │ } 2026-10-24T21:02:16.3094129Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T21:02:16.3094215Z 137 │ measuredWidthRef.current = width; 2026-10-24T21:02:16.3094356Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T21:02:16.3094433Z ·  ──────┬───── 2026-10-24T21:02:16.3094566Z · ╰── This modifies `capsuleWidth` 2026-10-24T21:02:16.3094620Z 139 │ }; 2026-10-24T21:02:16.3094671Z ╰──── 2026-10-24T21:02:16.3095019Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T21:02:16.3095328Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3095332Z 2026-10-24T21:02:16.3095864Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3096050Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T21:02:16.3096121Z 520 │ })).delivery; 2026-10-24T21:02:16.3096324Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T21:02:16.3096444Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3096595Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T21:02:16.3096698Z 524 │ │ id: task.id, 2026-10-24T21:02:16.3096818Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T21:02:16.3096915Z 526 │ │ })).delivery; 2026-10-24T21:02:16.3097054Z 527 │ ╰─▶ } 2026-10-24T21:02:16.3097171Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T21:02:16.3097223Z ╰──── 2026-10-24T21:02:16.3097225Z 2026-10-24T21:02:16.3097450Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T21:02:16.3097662Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T21:02:16.3097762Z 20 │ [instanceId]: { 2026-10-24T21:02:16.3097841Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T21:02:16.3097942Z ·  ──────────────────────────── 2026-10-24T21:02:16.3098010Z 22 │ [model]: options, 2026-10-24T21:02:16.3098062Z ╰──── 2026-10-24T21:02:16.3098333Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T21:02:16.3098335Z 2026-10-24T21:02:16.3098549Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T21:02:16.3098675Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T21:02:16.3098727Z 78 │ 2026-10-24T21:02:16.3098870Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T21:02:16.3098960Z ·  ────────┬─────── 2026-10-24T21:02:16.3099108Z · ╰── 'describeSchedule' is declared here 2026-10-24T21:02:16.3099216Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T21:02:16.3099267Z ╰──── 2026-10-24T21:02:16.3099372Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3099374Z 2026-10-24T21:02:16.3099634Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3099796Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T21:02:16.3099858Z 259 │ .join("|"); 2026-10-24T21:02:16.3099924Z 260 │ useEffect(() => { 2026-10-24T21:02:16.3100001Z ·  ────┬──── 2026-10-24T21:02:16.3100138Z · ╰── This is the containing effect 2026-10-24T21:02:16.3100198Z 261 │ stop(); 2026-10-24T21:02:16.3100267Z ·  ──┬─ 2026-10-24T21:02:16.3100433Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3100499Z 262 │ }, [orderVersion]); 2026-10-24T21:02:16.3100550Z ╰──── 2026-10-24T21:02:16.3101157Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3101488Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3101495Z 2026-10-24T21:02:16.3101712Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T21:02:16.3101874Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T21:02:16.3101938Z 260 │ useEffect(() => { 2026-10-24T21:02:16.3101997Z 261 │ stop(); 2026-10-24T21:02:16.3102062Z ·  ──┬─ 2026-10-24T21:02:16.3102189Z · ╰── Missing dependency `stop` 2026-10-24T21:02:16.3102253Z 262 │ }, [orderVersion]); 2026-10-24T21:02:16.3102330Z ·  ──────┬───── 2026-10-24T21:02:16.3102479Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T21:02:16.3102610Z 263 │ useEffect( 2026-10-24T21:02:16.3102690Z ╰──── 2026-10-24T21:02:16.3103117Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3103432Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3103435Z 2026-10-24T21:02:16.3103583Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3103743Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T21:02:16.3103821Z 95 │ const latest = useRef(props); 2026-10-24T21:02:16.3103890Z 96 │ latest.current = props; 2026-10-24T21:02:16.3104000Z ·  ───┬──────┬─── 2026-10-24T21:02:16.3104185Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3104299Z · ╰── This value is a ref 2026-10-24T21:02:16.3104366Z 97 │ const gesture = useMemo( 2026-10-24T21:02:16.3104417Z ╰──── 2026-10-24T21:02:16.3104894Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3105189Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3105192Z 2026-10-24T21:02:16.3105345Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3105507Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T21:02:16.3105596Z 103 │ .runOnJS(true) 2026-10-24T21:02:16.3105698Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T21:02:16.3105815Z ·  ───────────────┬────────────── 2026-10-24T21:02:16.3106017Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3106151Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3106203Z ╰──── 2026-10-24T21:02:16.3106704Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3107001Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3107004Z 2026-10-24T21:02:16.3107147Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3107308Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T21:02:16.3107406Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T21:02:16.3107539Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3107683Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T21:02:16.3107964Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3108120Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3108172Z ╰──── 2026-10-24T21:02:16.3108643Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3108936Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3108939Z 2026-10-24T21:02:16.3109084Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3109248Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T21:02:16.3109380Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3109502Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3109646Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T21:02:16.3109857Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3109983Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T21:02:16.3110033Z ╰──── 2026-10-24T21:02:16.3110513Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3110810Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3110813Z 2026-10-24T21:02:16.3110958Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3111118Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T21:02:16.3111238Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3111363Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T21:02:16.3111501Z ·  ───────────────────────┬────────────────────── 2026-10-24T21:02:16.3111779Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3111880Z 108 │ [props.disabled], 2026-10-24T21:02:16.3111931Z ╰──── 2026-10-24T21:02:16.3112400Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3112694Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3112696Z 2026-10-24T21:02:16.3112841Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3113000Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T21:02:16.3113119Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T21:02:16.3113228Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T21:02:16.3113333Z ·  ───┬──────┬─── 2026-10-24T21:02:16.3113515Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3113632Z · ╰── This value is a ref 2026-10-24T21:02:16.3113686Z 250 │ 2026-10-24T21:02:16.3113738Z ╰──── 2026-10-24T21:02:16.3114205Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3114525Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3114530Z 2026-10-24T21:02:16.3114674Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3114836Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T21:02:16.3114956Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T21:02:16.3115070Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T21:02:16.3115197Z ·  ──────────────────┬────────────────── 2026-10-24T21:02:16.3115367Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3115479Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T21:02:16.3115529Z ╰──── 2026-10-24T21:02:16.3116029Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3116327Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3116330Z 2026-10-24T21:02:16.3116501Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3116661Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T21:02:16.3116726Z 323 │ update(0); 2026-10-24T21:02:16.3116807Z 324 │ let last = performance.now(); 2026-10-24T21:02:16.3116904Z ·  ────────┬──────── 2026-10-24T21:02:16.3117117Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3117217Z 325 │ const tick = () => { 2026-10-24T21:02:16.3117269Z ╰──── 2026-10-24T21:02:16.3117571Z  help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3117868Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3117871Z 2026-10-24T21:02:16.3118062Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T21:02:16.3118222Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T21:02:16.3118281Z  98 │ () => 2026-10-24T21:02:16.3118352Z  99 │ Gesture.Pan() 2026-10-24T21:02:16.3118429Z ·  ─┬─ 2026-10-24T21:02:16.3118560Z · ╰── `Pan` may be a component 2026-10-24T21:02:16.3118640Z 100 │ .enabled(!props.disabled) 2026-10-24T21:02:16.3118691Z ╰──── 2026-10-24T21:02:16.3118969Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T21:02:16.3119420Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T21:02:16.3119423Z 2026-10-24T21:02:16.3119712Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T21:02:16.3119878Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T21:02:16.3119945Z 103 │ .runOnJS(true) 2026-10-24T21:02:16.3120043Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T21:02:16.3120134Z ·  ───┬── 2026-10-24T21:02:16.3120575Z · ╰── Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3120709Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3120833Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T21:02:16.3120989Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T21:02:16.3121058Z 108 │ [props.disabled], 2026-10-24T21:02:16.3121140Z ·  ────────┬─────── 2026-10-24T21:02:16.3121330Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3121384Z 109 │ ); 2026-10-24T21:02:16.3121435Z ╰──── 2026-10-24T21:02:16.3121642Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T21:02:16.3121959Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3121961Z 2026-10-24T21:02:16.3122130Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3122357Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T21:02:16.3122508Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T21:02:16.3122677Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T21:02:16.3122805Z ·  ─────┬──── 2026-10-24T21:02:16.3122977Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3123031Z 179 │ } 2026-10-24T21:02:16.3123082Z ╰──── 2026-10-24T21:02:16.3123363Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3123665Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3123670Z 2026-10-24T21:02:16.3123933Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3124072Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2195:5] 2026-10-24T21:02:16.3124128Z 2193 │ ); 2026-10-24T21:02:16.3124194Z 2194 │ useEffect(() => { 2026-10-24T21:02:16.3124268Z ·  ────┬──── 2026-10-24T21:02:16.3124400Z · ╰── This is the containing effect 2026-10-24T21:02:16.3124474Z 2195 │ setExpandedVideo(null); 2026-10-24T21:02:16.3124556Z ·  ────────┬─────── 2026-10-24T21:02:16.3124730Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3124809Z 2196 │ setExpandedFile(null); 2026-10-24T21:02:16.3124866Z ╰──── 2026-10-24T21:02:16.3125474Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3125841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3125844Z 2026-10-24T21:02:16.3126104Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3126242Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2700:9] 2026-10-24T21:02:16.3126384Z 2691 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false)); 2026-10-24T21:02:16.3126450Z 2692 │ useEffect(() => { 2026-10-24T21:02:16.3126522Z ·  ────┬──── 2026-10-24T21:02:16.3126652Z · ╰── This is the containing effect 2026-10-24T21:02:16.3126781Z 2693 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return; 2026-10-24T21:02:16.3126897Z 2694 │ const index = presentedFeed.findIndex( 2026-10-24T21:02:16.3127033Z 2695 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId, 2026-10-24T21:02:16.3127088Z 2696 │ ); 2026-10-24T21:02:16.3127160Z 2697 │ if (index === -1) { 2026-10-24T21:02:16.3127287Z 2698 │ const runId = messageFoldRunId(props.feed, jumpToMessageId); 2026-10-24T21:02:16.3127390Z 2699 │ if (runId && !expandedTurnIds.has(runId)) { 2026-10-24T21:02:16.3127558Z 2700 │ setInteractionState((current) => ({ 2026-10-24T21:02:16.3127681Z ·  ─────────┬───────── 2026-10-24T21:02:16.3127857Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3127923Z 2701 │ ...current, 2026-10-24T21:02:16.3127976Z ╰──── 2026-10-24T21:02:16.3128587Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3128917Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3128923Z 2026-10-24T21:02:16.3129155Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T21:02:16.3129290Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:70:10] 2026-10-24T21:02:16.3129428Z 69 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T21:02:16.3129566Z 70 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T21:02:16.3129661Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3129829Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T21:02:16.3129985Z 71 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T21:02:16.3130037Z ╰──── 2026-10-24T21:02:16.3130140Z  help: Consider removing this import. 2026-10-24T21:02:16.3130146Z 2026-10-24T21:02:16.3130357Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T21:02:16.3130490Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:96:3] 2026-10-24T21:02:16.3130548Z 95 │ import { 2026-10-24T21:02:16.3130611Z 96 │ createContext, 2026-10-24T21:02:16.3130687Z ·  ──────┬────── 2026-10-24T21:02:16.3130823Z · ╰── 'createContext' is imported here 2026-10-24T21:02:16.3130880Z 97 │ memo, 2026-10-24T21:02:16.3130930Z ╰──── 2026-10-24T21:02:16.3131027Z  help: Consider removing this import. 2026-10-24T21:02:16.3131030Z 2026-10-24T21:02:16.3131246Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T21:02:16.3131446Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:3] 2026-10-24T21:02:16.3131535Z 111 │ import { 2026-10-24T21:02:16.3131603Z 112 │ ActivityIndicator, 2026-10-24T21:02:16.3131685Z ·  ────────┬──────── 2026-10-24T21:02:16.3131833Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T21:02:16.3131890Z 113 │ Image, 2026-10-24T21:02:16.3131943Z ╰──── 2026-10-24T21:02:16.3132037Z  help: Consider removing this import. 2026-10-24T21:02:16.3132040Z 2026-10-24T21:02:16.3132240Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T21:02:16.3132373Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:119:3] 2026-10-24T21:02:16.3132434Z 118 │ Pressable, 2026-10-24T21:02:16.3132502Z 119 │ ScrollView, 2026-10-24T21:02:16.3132577Z ·  ─────┬──── 2026-10-24T21:02:16.3132708Z · ╰── 'ScrollView' is imported here 2026-10-24T21:02:16.3132770Z 120 │ StyleSheet, 2026-10-24T21:02:16.3132822Z ╰──── 2026-10-24T21:02:16.3132917Z  help: Consider removing this import. 2026-10-24T21:02:16.3132920Z 2026-10-24T21:02:16.3133119Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T21:02:16.3133253Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:11] 2026-10-24T21:02:16.3133314Z 120 │ StyleSheet, 2026-10-24T21:02:16.3133379Z 121 │ Text as NativeText, 2026-10-24T21:02:16.3133458Z ·  ─────┬──── 2026-10-24T21:02:16.3133602Z · ╰── 'NativeText' is imported here 2026-10-24T21:02:16.3133671Z 122 │ type ColorValue, 2026-10-24T21:02:16.3133722Z ╰──── 2026-10-24T21:02:16.3133841Z  help: Consider removing this import. 2026-10-24T21:02:16.3133844Z 2026-10-24T21:02:16.3134061Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T21:02:16.3134195Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:144:10] 2026-10-24T21:02:16.3134329Z 143 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T21:02:16.3134455Z 144 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T21:02:16.3134546Z ·  ─────────┬──────── 2026-10-24T21:02:16.3134701Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T21:02:16.3134854Z 145 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T21:02:16.3134908Z ╰──── 2026-10-24T21:02:16.3135003Z  help: Consider removing this import. 2026-10-24T21:02:16.3135005Z 2026-10-24T21:02:16.3135224Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T21:02:16.3135357Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:147:10] 2026-10-24T21:02:16.3135492Z 146 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T21:02:16.3135649Z 147 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T21:02:16.3135742Z ·  ─────────┬───────── 2026-10-24T21:02:16.3135897Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T21:02:16.3135955Z 148 │ import { 2026-10-24T21:02:16.3136078Z ╰──── 2026-10-24T21:02:16.3136231Z  help: Consider removing this import. 2026-10-24T21:02:16.3136234Z 2026-10-24T21:02:16.3136449Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T21:02:16.3136582Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:10] 2026-10-24T21:02:16.3136729Z 160 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T21:02:16.3136864Z 161 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T21:02:16.3136953Z ·  ────────┬─────── 2026-10-24T21:02:16.3137105Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T21:02:16.3137243Z 162 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T21:02:16.3137300Z ╰──── 2026-10-24T21:02:16.3137398Z  help: Consider removing this import. 2026-10-24T21:02:16.3137400Z 2026-10-24T21:02:16.3137624Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T21:02:16.3137755Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:3] 2026-10-24T21:02:16.3137837Z 164 │ attachmentVideoPreviewSource, 2026-10-24T21:02:16.3137909Z 165 │ mediaVideoPreviewUri, 2026-10-24T21:02:16.3137993Z ·  ──────────┬───────── 2026-10-24T21:02:16.3138145Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T21:02:16.3138218Z 166 │ mediaVideoThumbnailKey, 2026-10-24T21:02:16.3138269Z ╰──── 2026-10-24T21:02:16.3138365Z  help: Consider removing this import. 2026-10-24T21:02:16.3138367Z 2026-10-24T21:02:16.3138597Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T21:02:16.3138733Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:166:3] 2026-10-24T21:02:16.3138803Z 165 │ mediaVideoPreviewUri, 2026-10-24T21:02:16.3138872Z 166 │ mediaVideoThumbnailKey, 2026-10-24T21:02:16.3138959Z ·  ───────────┬────────── 2026-10-24T21:02:16.3139117Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T21:02:16.3139198Z 167 │ type MediaVideoPreviewSource, 2026-10-24T21:02:16.3139249Z ╰──── 2026-10-24T21:02:16.3139341Z  help: Consider removing this import. 2026-10-24T21:02:16.3139344Z 2026-10-24T21:02:16.3139565Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T21:02:16.3139700Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:8] 2026-10-24T21:02:16.3139770Z 166 │ mediaVideoThumbnailKey, 2026-10-24T21:02:16.3139847Z 167 │ type MediaVideoPreviewSource, 2026-10-24T21:02:16.3139943Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3140106Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T21:02:16.3140194Z 168 │ } from "../../lib/videoPreviewSource"; 2026-10-24T21:02:16.3140243Z ╰──── 2026-10-24T21:02:16.3140337Z  help: Consider removing this import. 2026-10-24T21:02:16.3140340Z 2026-10-24T21:02:16.3140540Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T21:02:16.3140699Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:175:15] 2026-10-24T21:02:16.3140946Z 174 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T21:02:16.3141121Z 175 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T21:02:16.3141212Z ·  ───────┬─────── 2026-10-24T21:02:16.3141365Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T21:02:16.3141425Z 176 │ import { 2026-10-24T21:02:16.3141474Z ╰──── 2026-10-24T21:02:16.3141568Z  help: Consider removing this import. 2026-10-24T21:02:16.3141570Z 2026-10-24T21:02:16.3141803Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T21:02:16.3141934Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:190:3] 2026-10-24T21:02:16.3141997Z 189 │ import { 2026-10-24T21:02:16.3142076Z 190 │ resolveMarkdownFontSizes, 2026-10-24T21:02:16.3142167Z ·  ────────────┬─────────── 2026-10-24T21:02:16.3142327Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T21:02:16.3142413Z 191 │ resolveNativeMarkdownTypography, 2026-10-24T21:02:16.3142465Z ╰──── 2026-10-24T21:02:16.3142560Z  help: Consider removing this import. 2026-10-24T21:02:16.3142562Z 2026-10-24T21:02:16.3142825Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T21:02:16.3142957Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:197:3] 2026-10-24T21:02:16.3143034Z 196 │ normalizeNativeMarkdownUrl, 2026-10-24T21:02:16.3143129Z 197 │ resolveMarkdownInlineCodePresentation, 2026-10-24T21:02:16.3143246Z ·  ──────────────────┬────────────────── 2026-10-24T21:02:16.3143445Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T21:02:16.3143531Z 198 │ resolveMarkdownLinkPresentation, 2026-10-24T21:02:16.3143583Z ╰──── 2026-10-24T21:02:16.3143678Z  help: Consider removing this import. 2026-10-24T21:02:16.3143680Z 2026-10-24T21:02:16.3143909Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T21:02:16.3144042Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:242:10] 2026-10-24T21:02:16.3144144Z 241 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T21:02:16.3144289Z 242 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T21:02:16.3144393Z ·  ────────────┬─────────── 2026-10-24T21:02:16.3144564Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T21:02:16.3144622Z 243 │ import { 2026-10-24T21:02:16.3144673Z ╰──── 2026-10-24T21:02:16.3144766Z  help: Consider removing this import. 2026-10-24T21:02:16.3144769Z 2026-10-24T21:02:16.3144982Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T21:02:16.3145114Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:246:3] 2026-10-24T21:02:16.3145177Z 245 │ useAssetUrl, 2026-10-24T21:02:16.3145242Z 246 │ useAssetUrlState, 2026-10-24T21:02:16.3145322Z ·  ────────┬─────── 2026-10-24T21:02:16.3145465Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T21:02:16.3145632Z 247 │ useRefreshAssetUrl, 2026-10-24T21:02:16.3145713Z ╰──── 2026-10-24T21:02:16.3145809Z  help: Consider removing this import. 2026-10-24T21:02:16.3145811Z 2026-10-24T21:02:16.3146015Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3146151Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2197:7] 2026-10-24T21:02:16.3146223Z 2196 │ setExpandedFile(null); 2026-10-24T21:02:16.3146383Z 2197 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T21:02:16.3146614Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T21:02:16.3146926Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T21:02:16.3147133Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T21:02:16.3147298Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T21:02:16.3147441Z 2198 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T21:02:16.3147493Z ╰──── 2026-10-24T21:02:16.3147817Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3148135Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3148144Z 2026-10-24T21:02:16.3148349Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3148486Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2669:7] 2026-10-24T21:02:16.3148584Z 2668 │ reportHeaderMaterialVisibility(false); 2026-10-24T21:02:16.3148700Z 2669 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T21:02:16.3148779Z ·  ──────┬────── 2026-10-24T21:02:16.3148931Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T21:02:16.3148985Z 2670 │ 2026-10-24T21:02:16.3149036Z ╰──── 2026-10-24T21:02:16.3149329Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3149712Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3149752Z 2026-10-24T21:02:16.3149955Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3150093Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2685:7] 2026-10-24T21:02:16.3150149Z 2684 │ } 2026-10-24T21:02:16.3150282Z 2685 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T21:02:16.3150363Z ·  ──────┬───── 2026-10-24T21:02:16.3150514Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T21:02:16.3150658Z 2686 │ // Opening at a message: its run unfolds, the list stops following the end 2026-10-24T21:02:16.3150711Z ╰──── 2026-10-24T21:02:16.3151010Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3188386Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3188403Z 2026-10-24T21:02:16.3188726Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3188879Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2881:7] 2026-10-24T21:02:16.3188939Z 2880 │ } 2026-10-24T21:02:16.3189127Z 2881 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T21:02:16.3189361Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T21:02:16.3189632Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T21:02:16.3189842Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T21:02:16.3189997Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T21:02:16.3190054Z 2882 │ 2026-10-24T21:02:16.3190105Z ╰──── 2026-10-24T21:02:16.3190432Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3190765Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3190771Z 2026-10-24T21:02:16.3190957Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T21:02:16.3191096Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:627:9] 2026-10-24T21:02:16.3191154Z 626 │ }; 2026-10-24T21:02:16.3191270Z 627 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T21:02:16.3191468Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T21:02:16.3191712Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T21:02:16.3192079Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T21:02:16.3192301Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T21:02:16.3192356Z 628 │ ); 2026-10-24T21:02:16.3192406Z ╰──── 2026-10-24T21:02:16.3192719Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.3193030Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3193033Z 2026-10-24T21:02:16.3193236Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3193388Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5] 2026-10-24T21:02:16.3193472Z 1320 │ queuedMessagesByThreadKey, 2026-10-24T21:02:16.3193533Z 1321 │ retryTick, 2026-10-24T21:02:16.3193607Z ·  ────┬──── 2026-10-24T21:02:16.3193747Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T21:02:16.3193817Z 1322 │ restoreQueuedMessage, 2026-10-24T21:02:16.3193869Z ╰──── 2026-10-24T21:02:16.3194162Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3194470Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3194473Z 2026-10-24T21:02:16.3194659Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T21:02:16.3194848Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T21:02:16.3194916Z 115 │ return [...commands]; 2026-10-24T21:02:16.3195048Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T21:02:16.3195163Z ·  ─────────┬───────── 2026-10-24T21:02:16.3195347Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T21:02:16.3195399Z 117 │ 2026-10-24T21:02:16.3195449Z ╰──── 2026-10-24T21:02:16.3195805Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.3196139Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3196147Z 2026-10-24T21:02:16.3196293Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3196447Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T21:02:16.3196504Z 493 │ > 2026-10-24T21:02:16.3196582Z 494 │ {props.children(close)} 2026-10-24T21:02:16.3196672Z ·  ──┬── 2026-10-24T21:02:16.3196832Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3196911Z 495 │ 2026-10-24T21:02:16.3196961Z ╰──── 2026-10-24T21:02:16.3197505Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3197825Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3197827Z 2026-10-24T21:02:16.3198028Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3198190Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T21:02:16.3198284Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T21:02:16.3198381Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T21:02:16.3198488Z ·  ──────┬───── 2026-10-24T21:02:16.3198660Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T21:02:16.3198767Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T21:02:16.3198816Z ╰──── 2026-10-24T21:02:16.3199108Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3199416Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3199419Z 2026-10-24T21:02:16.3199738Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T21:02:16.3199864Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8] 2026-10-24T21:02:16.3199939Z 14 │ threadSearchMatchKey, 2026-10-24T21:02:16.3200025Z 15 │ type EnvironmentThreadSearchMatch, 2026-10-24T21:02:16.3200128Z ·  ──────────────┬───────────── 2026-10-24T21:02:16.3200303Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T21:02:16.3200412Z 16 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T21:02:16.3200462Z ╰──── 2026-10-24T21:02:16.3200559Z  help: Consider removing this import. 2026-10-24T21:02:16.3200561Z 2026-10-24T21:02:16.3200760Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3200889Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25] 2026-10-24T21:02:16.3201018Z 526 │ // range) the boundary string is identical and the chain would die. 2026-10-24T21:02:16.3201112Z 527 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T21:02:16.3201215Z ·  ───────┬────── 2026-10-24T21:02:16.3201378Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T21:02:16.3201516Z 528 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T21:02:16.3201565Z ╰──── 2026-10-24T21:02:16.3201857Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3202165Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3202167Z 2026-10-24T21:02:16.3202414Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3202577Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53] 2026-10-24T21:02:16.3202663Z 517 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T21:02:16.3202843Z 518 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T21:02:16.3202965Z ·  ─────┬──── 2026-10-24T21:02:16.3203134Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3203212Z 519 │ const id = setTimeout(() => { 2026-10-24T21:02:16.3203261Z ╰──── 2026-10-24T21:02:16.3203545Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3203843Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3203848Z 2026-10-24T21:02:16.3204014Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3204162Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T21:02:16.3204290Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T21:02:16.3204442Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T21:02:16.3204555Z ·  ─────┬──── 2026-10-24T21:02:16.3204716Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3204780Z 373 │ return ( 2026-10-24T21:02:16.3204833Z ╰──── 2026-10-24T21:02:16.3205109Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3205402Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3205404Z 2026-10-24T21:02:16.3205602Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3205747Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T21:02:16.3205841Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T21:02:16.3205969Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T21:02:16.3206128Z ·  ─────┬──── 2026-10-24T21:02:16.3206313Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3206367Z 854 │ } 2026-10-24T21:02:16.3206417Z ╰──── 2026-10-24T21:02:16.3206691Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3206980Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3206982Z 2026-10-24T21:02:16.3207210Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T21:02:16.3207333Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T21:02:16.3207393Z 730 │ ); 2026-10-24T21:02:16.3207565Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T21:02:16.3207661Z ·  ────── 2026-10-24T21:02:16.3207776Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T21:02:16.3207825Z ╰──── 2026-10-24T21:02:16.3207994Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T21:02:16.3207997Z 2026-10-24T21:02:16.3208185Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T21:02:16.3208302Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T21:02:16.3208359Z 7 │ () => 2026-10-24T21:02:16.3208425Z 8 │ Gesture.Hover() 2026-10-24T21:02:16.3208500Z ·  ──┬── 2026-10-24T21:02:16.3208639Z · ╰── `Hover` may be a component 2026-10-24T21:02:16.3208716Z 9 │ .manualActivation(true) 2026-10-24T21:02:16.3208764Z ╰──── 2026-10-24T21:02:16.3209070Z  help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T21:02:16.3209522Z  note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T21:02:16.3209525Z 2026-10-24T21:02:16.3209764Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T21:02:16.3209892Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:517:11] 2026-10-24T21:02:16.3209993Z 516 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T21:02:16.3210130Z 517 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T21:02:16.3210215Z ·  ─────────────── 2026-10-24T21:02:16.3210268Z 518 │ ) 2026-10-24T21:02:16.3210317Z ╰──── 2026-10-24T21:02:16.3210472Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T21:02:16.3210474Z 2026-10-24T21:02:16.3210833Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3210969Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T21:02:16.3211178Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T21:02:16.3211351Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T21:02:16.3211467Z ·  ─────────────────── 2026-10-24T21:02:16.3211529Z 1787 │ cwd, 2026-10-24T21:02:16.3211581Z ╰──── 2026-10-24T21:02:16.3211584Z 2026-10-24T21:02:16.3211953Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3212078Z ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35] 2026-10-24T21:02:16.3212226Z 974 │ // Every client and server release spells the resource this way on the wire. 2026-10-24T21:02:16.3212380Z 975 │ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({ 2026-10-24T21:02:16.3212507Z ·  ────────────────────────── 2026-10-24T21:02:16.3212624Z 976 │ resource: { _tag: "github-media", cwd: "/repo", url }, 2026-10-24T21:02:16.3212674Z ╰──── 2026-10-24T21:02:16.3212677Z 2026-10-24T21:02:16.3213126Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3213254Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32] 2026-10-24T21:02:16.3213388Z 1011 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T21:02:16.3213576Z 1012 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T21:02:16.3213694Z ·  ─────────────────── 2026-10-24T21:02:16.3213790Z 1013 │ expect(encoded).not.toContain(url); 2026-10-24T21:02:16.3213839Z ╰──── 2026-10-24T21:02:16.3213841Z 2026-10-24T21:02:16.3214124Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T21:02:16.3214274Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T21:02:16.3214326Z 1619 │ 2026-10-24T21:02:16.3214534Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T21:02:16.3214651Z ·  ──────────────────┬────────────────── 2026-10-24T21:02:16.3214855Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T21:02:16.3214938Z 1621 │ const meta = response._meta; 2026-10-24T21:02:16.3214990Z ╰──── 2026-10-24T21:02:16.3215095Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3215098Z 2026-10-24T21:02:16.3215579Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3215700Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T21:02:16.3215869Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T21:02:16.3216053Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T21:02:16.3216163Z ·  ─────────────────── 2026-10-24T21:02:16.3216331Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T21:02:16.3216412Z ╰──── 2026-10-24T21:02:16.3216415Z 2026-10-24T21:02:16.3216855Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3216974Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T21:02:16.3217156Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T21:02:16.3217262Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T21:02:16.3217375Z ·  ─────────────────── 2026-10-24T21:02:16.3217489Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T21:02:16.3217544Z ╰──── 2026-10-24T21:02:16.3217549Z 2026-10-24T21:02:16.3217881Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3217998Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T21:02:16.3218159Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T21:02:16.3218280Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T21:02:16.3218358Z ·  ───────── 2026-10-24T21:02:16.3218417Z 19 │ expect( 2026-10-24T21:02:16.3218466Z ╰──── 2026-10-24T21:02:16.3218469Z 2026-10-24T21:02:16.3218805Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3218923Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T21:02:16.3218979Z 19 │ expect( 2026-10-24T21:02:16.3219145Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T21:02:16.3219218Z ·  ───────── 2026-10-24T21:02:16.3219279Z 21 │ ).toBe(true); 2026-10-24T21:02:16.3219329Z ╰──── 2026-10-24T21:02:16.3219332Z 2026-10-24T21:02:16.3219497Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.3219637Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T21:02:16.3219689Z 185 │ 2026-10-24T21:02:16.3219789Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T21:02:16.3219857Z ·  ── 2026-10-24T21:02:16.3219916Z 187 │ } 2026-10-24T21:02:16.3219968Z ╰──── 2026-10-24T21:02:16.3220199Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.3220201Z 2026-10-24T21:02:16.3220365Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.3220503Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T21:02:16.3220553Z 188 │ 2026-10-24T21:02:16.3220618Z 189 │ for (const {} of [ 2026-10-24T21:02:16.3220685Z ·  ── 2026-10-24T21:02:16.3220774Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T21:02:16.3220824Z ╰──── 2026-10-24T21:02:16.3221075Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.3221129Z 2026-10-24T21:02:16.3221329Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.3221464Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T21:02:16.3221515Z 310 │ 2026-10-24T21:02:16.3221640Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T21:02:16.3221705Z ·  ── 2026-10-24T21:02:16.3221756Z 312 │ } 2026-10-24T21:02:16.3221805Z ╰──── 2026-10-24T21:02:16.3222030Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.3222032Z 2026-10-24T21:02:16.3222193Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.3222333Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T21:02:16.3222385Z 313 │ 2026-10-24T21:02:16.3222448Z 314 │ for (const {} of [ 2026-10-24T21:02:16.3222512Z ·  ── 2026-10-24T21:02:16.3222566Z 315 │ { 2026-10-24T21:02:16.3222615Z ╰──── 2026-10-24T21:02:16.3222837Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.3222840Z 2026-10-24T21:02:16.3223098Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3223226Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T21:02:16.3223277Z 407 │ 2026-10-24T21:02:16.3223345Z 408 │ const layer: Layer.Layer< 2026-10-24T21:02:16.3223412Z ·  ──┬── 2026-10-24T21:02:16.3223542Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.3223635Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T21:02:16.3223685Z ╰──── 2026-10-24T21:02:16.3223787Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3223791Z 2026-10-24T21:02:16.3224254Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3224373Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T21:02:16.3224466Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T21:02:16.3224574Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T21:02:16.3224693Z ·  ────────────────────────── 2026-10-24T21:02:16.3224762Z 130 │ Schema.Struct({ 2026-10-24T21:02:16.3224811Z ╰──── 2026-10-24T21:02:16.3224814Z 2026-10-24T21:02:16.3225269Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3225390Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T21:02:16.3225440Z 499 │ 2026-10-24T21:02:16.3225576Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T21:02:16.3225694Z ·  ────────────────────────── 2026-10-24T21:02:16.3225800Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T21:02:16.3225850Z ╰──── 2026-10-24T21:02:16.3225852Z 2026-10-24T21:02:16.3226282Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3226426Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T21:02:16.3226598Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T21:02:16.3226770Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T21:02:16.3226873Z ·  ────────────────────────── 2026-10-24T21:02:16.3227018Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T21:02:16.3227068Z ╰──── 2026-10-24T21:02:16.3227070Z 2026-10-24T21:02:16.3227234Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.3227357Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T21:02:16.3227411Z 265 │ 2026-10-24T21:02:16.3227515Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T21:02:16.3227584Z ·  ── 2026-10-24T21:02:16.3227637Z 267 │ } 2026-10-24T21:02:16.3227687Z ╰──── 2026-10-24T21:02:16.3227914Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.3227916Z 2026-10-24T21:02:16.3228199Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3228356Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T21:02:16.3228407Z 14 │ 2026-10-24T21:02:16.3228482Z 15 │ const legacyCredentials = { 2026-10-24T21:02:16.3228567Z ·  ────────┬──────── 2026-10-24T21:02:16.3228714Z · ╰── 'legacyCredentials' is declared here 2026-10-24T21:02:16.3228781Z 16 │ version: 1 as const, 2026-10-24T21:02:16.3228830Z ╰──── 2026-10-24T21:02:16.3228931Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3228934Z 2026-10-24T21:02:16.3229205Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3229350Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T21:02:16.3229402Z 60 │ ) { 2026-10-24T21:02:16.3229568Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T21:02:16.3229703Z ·  ──────┬────── 2026-10-24T21:02:16.3229870Z · ╰── 'useDragRegion' is declared here 2026-10-24T21:02:16.3229961Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T21:02:16.3230009Z ╰──── 2026-10-24T21:02:16.3230111Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3230114Z 2026-10-24T21:02:16.3230396Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T21:02:16.3230524Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T21:02:16.3230578Z 248 │ }, 2026-10-24T21:02:16.3230662Z 249 │ (effect, flow, stopSessions) => 2026-10-24T21:02:16.3230754Z ·  ──────┬───── 2026-10-24T21:02:16.3230910Z · ╰── 'stopSessions' is declared here 2026-10-24T21:02:16.3230975Z 250 │ effect.pipe( 2026-10-24T21:02:16.3231026Z ╰──── 2026-10-24T21:02:16.3231127Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3231129Z 2026-10-24T21:02:16.3231294Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3231412Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T21:02:16.3231513Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T21:02:16.3231669Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T21:02:16.3231792Z ·  ─────┬──── 2026-10-24T21:02:16.3231968Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3232049Z 822 │ return AsyncResult.failure( 2026-10-24T21:02:16.3232099Z ╰──── 2026-10-24T21:02:16.3232404Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3232702Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3232705Z 2026-10-24T21:02:16.3232869Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3232990Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T21:02:16.3233060Z 708 │ const wokeAt = resolved 2026-10-24T21:02:16.3233198Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T21:02:16.3233311Z ·  ─────┬──── 2026-10-24T21:02:16.3233472Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3233534Z 710 │ : null; 2026-10-24T21:02:16.3233584Z ╰──── 2026-10-24T21:02:16.3233857Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3234150Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3234153Z 2026-10-24T21:02:16.3234343Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T21:02:16.3234543Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T21:02:16.3234628Z  80 │ 2026-10-24T21:02:16.3234899Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T21:02:16.3235018Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T21:02:16.3235140Z  83 │ │ ): Effect.fn.Return { 2026-10-24T21:02:16.3235305Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T21:02:16.3235438Z  85 │ │ const connections = new Map(); 2026-10-24T21:02:16.3235508Z  86 │ │ 2026-10-24T21:02:16.3235762Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T21:02:16.3235864Z  88 │ │ Effect.suspend(() => { 2026-10-24T21:02:16.3235997Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T21:02:16.3236107Z  90 │ │ return connection === undefined 2026-10-24T21:02:16.3236321Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T21:02:16.3236430Z  92 │ │ : Effect.succeed(connection); 2026-10-24T21:02:16.3236503Z  93 │ │ }); 2026-10-24T21:02:16.3236570Z  94 │ │ 2026-10-24T21:02:16.3236653Z  95 │ │ const send = ( 2026-10-24T21:02:16.3236751Z  96 │ │ connection: Connection, 2026-10-24T21:02:16.3236848Z  97 │ │ message: unknown, 2026-10-24T21:02:16.3237008Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T21:02:16.3237122Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T21:02:16.3237227Z 100 │ │ Effect.gen(function* () { 2026-10-24T21:02:16.3237346Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T21:02:16.3237487Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T21:02:16.3237697Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T21:02:16.3237774Z 104 │ │ } 2026-10-24T21:02:16.3237925Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T21:02:16.3238028Z 106 │ │ try: (signal) => 2026-10-24T21:02:16.3238162Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T21:02:16.3238262Z 108 │ │ method: "POST", 2026-10-24T21:02:16.3238353Z 109 │ │ signal, 2026-10-24T21:02:16.3238447Z 110 │ │ headers: { 2026-10-24T21:02:16.3238575Z 111 │ │ "content-type": "application/json", 2026-10-24T21:02:16.3238717Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T21:02:16.3238849Z 113 │ │ authorization: options.authorization, 2026-10-24T21:02:16.3238973Z 114 │ │ ...(connection.sessionId === null 2026-10-24T21:02:16.3239120Z 115 │ │ ? {} 2026-10-24T21:02:16.3239293Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T21:02:16.3239425Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T21:02:16.3239514Z 118 │ │ ? {} 2026-10-24T21:02:16.3239777Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T21:02:16.3239860Z 120 │ │ }, 2026-10-24T21:02:16.3239949Z 121 │ │ body, 2026-10-24T21:02:16.3240031Z 122 │ │ }), 2026-10-24T21:02:16.3240132Z 123 │ │ catch: bridgeError, 2026-10-24T21:02:16.3240210Z 124 │ │ }); 2026-10-24T21:02:16.3240427Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T21:02:16.3240528Z 126 │ │ if (!response.ok) { 2026-10-24T21:02:16.3240632Z 127 │ │ yield* Effect.promise( 2026-10-24T21:02:16.3240815Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T21:02:16.3240896Z 129 │ │ ); 2026-10-24T21:02:16.3241005Z 130 │ │ return yield* Effect.fail( 2026-10-24T21:02:16.3241214Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T21:02:16.3241293Z 132 │ │ ); 2026-10-24T21:02:16.3241368Z 133 │ │ } 2026-10-24T21:02:16.3241583Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T21:02:16.3241704Z 135 │ │ for (const payload of payloads) { 2026-10-24T21:02:16.3241919Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T21:02:16.3241995Z 137 │ │ } 2026-10-24T21:02:16.3242091Z 138 │ │ return payloads; 2026-10-24T21:02:16.3242211Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T21:02:16.3242285Z 140 │ │ ); 2026-10-24T21:02:16.3242352Z 141 │ │ 2026-10-24T21:02:16.3242527Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T21:02:16.3242656Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T21:02:16.3242843Z 144 │ │ ): Effect.fn.Return { 2026-10-24T21:02:16.3243003Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T21:02:16.3243128Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T21:02:16.3243247Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T21:02:16.3243347Z 148 │ │ if (sessionId !== null) { 2026-10-24T21:02:16.3243476Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T21:02:16.3243571Z 150 │ │ try: (signal) => 2026-10-24T21:02:16.3243779Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T21:02:16.3243914Z 152 │ │ method: "DELETE", 2026-10-24T21:02:16.3244004Z 153 │ │ signal, 2026-10-24T21:02:16.3244097Z 154 │ │ headers: { 2026-10-24T21:02:16.3244226Z 155 │ │ authorization: options.authorization, 2026-10-24T21:02:16.3244344Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T21:02:16.3244475Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T21:02:16.3244565Z 158 │ │ ? {} 2026-10-24T21:02:16.3244728Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T21:02:16.3244809Z 160 │ │ }, 2026-10-24T21:02:16.3244896Z 161 │ │ }), 2026-10-24T21:02:16.3244998Z 162 │ │ catch: bridgeError, 2026-10-24T21:02:16.3245073Z 163 │ │ }); 2026-10-24T21:02:16.3245228Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T21:02:16.3245337Z 165 │ │ return yield* Effect.fail( 2026-10-24T21:02:16.3245445Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T21:02:16.3245661Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T21:02:16.3245741Z 168 │ │ ), 2026-10-24T21:02:16.3245818Z 169 │ │ ); 2026-10-24T21:02:16.3245892Z 170 │ │ } 2026-10-24T21:02:16.3245998Z 171 │ │ yield* Effect.promise( 2026-10-24T21:02:16.3246178Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T21:02:16.3246254Z 173 │ │ ); 2026-10-24T21:02:16.3246327Z 174 │ │ } 2026-10-24T21:02:16.3246408Z 175 │ │ return {}; 2026-10-24T21:02:16.3246480Z 176 │ │ }); 2026-10-24T21:02:16.3246546Z 177 │ │ 2026-10-24T21:02:16.3246624Z 178 │ │ return { 2026-10-24T21:02:16.3246794Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T21:02:16.3246914Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T21:02:16.3247021Z 181 │ │ return yield* Effect.fail( 2026-10-24T21:02:16.3247211Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T21:02:16.3247290Z 183 │ │ ); 2026-10-24T21:02:16.3247364Z 184 │ │ } 2026-10-24T21:02:16.3247490Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T21:02:16.3247698Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T21:02:16.3247771Z 187 │ │ } 2026-10-24T21:02:16.3247925Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T21:02:16.3248038Z 189 │ │ connections.set(connectionId, { 2026-10-24T21:02:16.3248339Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T21:02:16.3248467Z 191 │ │ sessionId: null, 2026-10-24T21:02:16.3248570Z 192 │ │ protocolVersion: null, 2026-10-24T21:02:16.3248668Z 193 │ │ nextRequestId: 0, 2026-10-24T21:02:16.3248744Z 194 │ │ }); 2026-10-24T21:02:16.3248846Z 195 │ │ return { connectionId }; 2026-10-24T21:02:16.3248918Z 196 │ │ }), 2026-10-24T21:02:16.3249087Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T21:02:16.3249249Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T21:02:16.3249371Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T21:02:16.3249503Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T21:02:16.3249603Z 201 │ │ jsonrpc: "2.0", 2026-10-24T21:02:16.3249681Z 202 │ │ id, 2026-10-24T21:02:16.3249783Z 203 │ │ method: request.method, 2026-10-24T21:02:16.3249941Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T21:02:16.3250016Z 205 │ │ }); 2026-10-24T21:02:16.3250203Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T21:02:16.3250322Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T21:02:16.3250421Z 208 │ │ if (envelope === null) { 2026-10-24T21:02:16.3250528Z 209 │ │ return yield* Effect.fail( 2026-10-24T21:02:16.3250717Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T21:02:16.3250797Z 211 │ │ ); 2026-10-24T21:02:16.3250896Z 212 │ │ } 2026-10-24T21:02:16.3251012Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T21:02:16.3251206Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T21:02:16.3251279Z 215 │ │ } 2026-10-24T21:02:16.3251450Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T21:02:16.3251522Z 217 │ │ }), 2026-10-24T21:02:16.3251718Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T21:02:16.3251881Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T21:02:16.3251982Z 220 │ │ yield* send(connection, { 2026-10-24T21:02:16.3252078Z 221 │ │ jsonrpc: "2.0", 2026-10-24T21:02:16.3252178Z 222 │ │ method: request.method, 2026-10-24T21:02:16.3252336Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T21:02:16.3252410Z 224 │ │ }); 2026-10-24T21:02:16.3252484Z 225 │ │ }), 2026-10-24T21:02:16.3252569Z 226 │ │ disconnect, 2026-10-24T21:02:16.3252676Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T21:02:16.3252825Z 228 │ │ Effect.forEach( 2026-10-24T21:02:16.3252955Z 229 │ │ [...connections.keys()], 2026-10-24T21:02:16.3253124Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T21:02:16.3253222Z 231 │ │ { discard: true }, 2026-10-24T21:02:16.3253296Z 232 │ │ ), 2026-10-24T21:02:16.3253371Z 233 │ │ ), 2026-10-24T21:02:16.3253443Z 234 │ │ }; 2026-10-24T21:02:16.3253569Z 235 │ ╰─▶ }); 2026-10-24T21:02:16.3253620Z ╰──── 2026-10-24T21:02:16.3253872Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T21:02:16.3253875Z 2026-10-24T21:02:16.3254093Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T21:02:16.3254234Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T21:02:16.3254285Z 21 │ 2026-10-24T21:02:16.3254441Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T21:02:16.3254528Z ·  ────────┬─────── 2026-10-24T21:02:16.3254678Z · ╰── 'summarizePayload' is declared here 2026-10-24T21:02:16.3254782Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T21:02:16.3254830Z ╰──── 2026-10-24T21:02:16.3254935Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3254938Z 2026-10-24T21:02:16.3255407Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3255568Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T21:02:16.3255700Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T21:02:16.3255879Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T21:02:16.3255984Z ·  ──────────────────────── 2026-10-24T21:02:16.3256048Z 182 │ version: 1, 2026-10-24T21:02:16.3256096Z ╰──── 2026-10-24T21:02:16.3256099Z 2026-10-24T21:02:16.3256433Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3256631Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T21:02:16.3256823Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T21:02:16.3256993Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T21:02:16.3257074Z ·  ───────── 2026-10-24T21:02:16.3257251Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T21:02:16.3257301Z ╰──── 2026-10-24T21:02:16.3257304Z 2026-10-24T21:02:16.3257659Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3257800Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T21:02:16.3257974Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T21:02:16.3258156Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T21:02:16.3258237Z ·  ───────── 2026-10-24T21:02:16.3258288Z 52 │ } 2026-10-24T21:02:16.3258337Z ╰──── 2026-10-24T21:02:16.3258340Z 2026-10-24T21:02:16.3258669Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3258808Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T21:02:16.3258869Z 54 │ assert.equal( 2026-10-24T21:02:16.3259039Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T21:02:16.3259117Z ·  ───────── 2026-10-24T21:02:16.3259175Z 56 │ true, 2026-10-24T21:02:16.3259223Z ╰──── 2026-10-24T21:02:16.3259225Z 2026-10-24T21:02:16.3259553Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3259689Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T21:02:16.3259750Z 58 │ assert.equal( 2026-10-24T21:02:16.3259930Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T21:02:16.3259999Z ·  ───────── 2026-10-24T21:02:16.3260054Z 60 │ true, 2026-10-24T21:02:16.3260103Z ╰──── 2026-10-24T21:02:16.3260105Z 2026-10-24T21:02:16.3260438Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3260586Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T21:02:16.3260636Z 102 │ 2026-10-24T21:02:16.3260802Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T21:02:16.3260884Z ·  ───────── 2026-10-24T21:02:16.3260935Z 104 │ }); 2026-10-24T21:02:16.3260986Z ╰──── 2026-10-24T21:02:16.3260988Z 2026-10-24T21:02:16.3261461Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3261664Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T21:02:16.3261820Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T21:02:16.3261965Z 133 │ ╭─▶ for ( 2026-10-24T21:02:16.3262067Z 134 │ │ let attempt = 0; 2026-10-24T21:02:16.3262234Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T21:02:16.3262329Z 136 │ │ attempt += 1 2026-10-24T21:02:16.3262409Z 137 │ │ ) { 2026-10-24T21:02:16.3262519Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3262653Z 139 │ ╰─▶ } 2026-10-24T21:02:16.3262795Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T21:02:16.3262851Z ╰──── 2026-10-24T21:02:16.3262856Z 2026-10-24T21:02:16.3263012Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3263180Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T21:02:16.3263280Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T21:02:16.3263361Z 66 │ const progress = useSharedValue(0); 2026-10-24T21:02:16.3263434Z ·  ────┬─── 2026-10-24T21:02:16.3263566Z · ╰── `progress` originates here 2026-10-24T21:02:16.3263629Z 67 │ useEffect(() => { 2026-10-24T21:02:16.3263750Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T21:02:16.3263820Z ·  ────┬─── 2026-10-24T21:02:16.3263960Z · ╰── `progress` cannot be modified 2026-10-24T21:02:16.3264031Z 69 │ }, [expanded, progress]); 2026-10-24T21:02:16.3264079Z ╰──── 2026-10-24T21:02:16.3264348Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3264657Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3264660Z 2026-10-24T21:02:16.3264808Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3264966Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T21:02:16.3265124Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T21:02:16.3265250Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T21:02:16.3265373Z ·  ───────────┬────────── 2026-10-24T21:02:16.3265579Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3265697Z 123 │ const sessionRef = useRef(null); 2026-10-24T21:02:16.3265747Z ╰──── 2026-10-24T21:02:16.3266219Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3266510Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3266575Z 2026-10-24T21:02:16.3266746Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3266904Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T21:02:16.3266956Z 125 │ 2026-10-24T21:02:16.3267063Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T21:02:16.3267147Z ·  ─────────┬──────── 2026-10-24T21:02:16.3267296Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3267396Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T21:02:16.3267445Z ╰──── 2026-10-24T21:02:16.3267913Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3268205Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3268207Z 2026-10-24T21:02:16.3268349Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3268504Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T21:02:16.3268556Z 125 │ 2026-10-24T21:02:16.3268659Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T21:02:16.3268744Z ·  ─────────┬───────── 2026-10-24T21:02:16.3268890Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3268989Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T21:02:16.3269042Z ╰──── 2026-10-24T21:02:16.3269510Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3269823Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3269825Z 2026-10-24T21:02:16.3269967Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3270125Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T21:02:16.3270174Z 125 │ 2026-10-24T21:02:16.3270281Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T21:02:16.3270397Z ·  ─────────┬───────── 2026-10-24T21:02:16.3270567Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3270665Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T21:02:16.3270714Z ╰──── 2026-10-24T21:02:16.3271176Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3271463Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3271465Z 2026-10-24T21:02:16.3271605Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3271814Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T21:02:16.3271889Z 125 │ 2026-10-24T21:02:16.3271993Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T21:02:16.3272103Z ·  ──────────┬───────── 2026-10-24T21:02:16.3272271Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3272368Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T21:02:16.3272417Z ╰──── 2026-10-24T21:02:16.3272880Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3273171Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3273177Z 2026-10-24T21:02:16.3273318Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3273473Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T21:02:16.3273582Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T21:02:16.3273773Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T21:02:16.3273945Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T21:02:16.3274069Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T21:02:16.3274227Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T21:02:16.3274346Z 131 │ │ isFinished: status.isFinished, 2026-10-24T21:02:16.3274521Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T21:02:16.3274623Z 133 │ │ error: status.error, 2026-10-24T21:02:16.3274720Z 134 │ │ url: status.url, 2026-10-24T21:02:16.3274799Z 135 │ │ }); 2026-10-24T21:02:16.3274874Z 136 │ │ }, 2026-10-24T21:02:16.3275091Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T21:02:16.3275198Z 138 │ │ selectInput: (inputs) => { 2026-10-24T21:02:16.3275358Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T21:02:16.3275504Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T21:02:16.3275709Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T21:02:16.3275848Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T21:02:16.3275948Z 143 │ │ if (order !== known) { 2026-10-24T21:02:16.3276085Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T21:02:16.3276199Z 145 │ │ transform: (current) => ({ 2026-10-24T21:02:16.3276403Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T21:02:16.3276545Z 147 │ │ }), 2026-10-24T21:02:16.3276656Z 148 │ │ }); 2026-10-24T21:02:16.3276733Z 149 │ │ } 2026-10-24T21:02:16.3276872Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T21:02:16.3276947Z 151 │ │ }, 2026-10-24T21:02:16.3277076Z 152 │ ├─▶ }); 2026-10-24T21:02:16.3277314Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3277399Z 153 │ recorderRef.current = recorder; 2026-10-24T21:02:16.3277450Z ╰──── 2026-10-24T21:02:16.3277922Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3278212Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3278215Z 2026-10-24T21:02:16.3278359Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3278517Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T21:02:16.3278573Z 152 │ }); 2026-10-24T21:02:16.3278653Z 153 │ recorderRef.current = recorder; 2026-10-24T21:02:16.3278766Z ·  ─────┬─────────┬─── 2026-10-24T21:02:16.3278957Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3279077Z · ╰── This value is a ref 2026-10-24T21:02:16.3279178Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T21:02:16.3279228Z ╰──── 2026-10-24T21:02:16.3279765Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3280052Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3280055Z 2026-10-24T21:02:16.3280197Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3280358Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T21:02:16.3280445Z 153 │ recorderRef.current = recorder; 2026-10-24T21:02:16.3280639Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T21:02:16.3280723Z 155 │ │ recorder, 2026-10-24T21:02:16.3280849Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T21:02:16.3280964Z 157 │ │ requestPermission: async () => { 2026-10-24T21:02:16.3281126Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T21:02:16.3281339Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T21:02:16.3281414Z 160 │ │ }, 2026-10-24T21:02:16.3281620Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T21:02:16.3281790Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T21:02:16.3281924Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T21:02:16.3282034Z 164 │ │ onStateChange: (nextState) => 2026-10-24T21:02:16.3282123Z 165 │ │ setState({ 2026-10-24T21:02:16.3282221Z 166 │ │ state: nextState, 2026-10-24T21:02:16.3282358Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T21:02:16.3282486Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T21:02:16.3282562Z 169 │ │ }), 2026-10-24T21:02:16.3282698Z 170 │ ├─▶ }); 2026-10-24T21:02:16.3282899Z · ╰──── Cannot access ref value during render 2026-10-24T21:02:16.3282955Z 171 │ } 2026-10-24T21:02:16.3283004Z ╰──── 2026-10-24T21:02:16.3283471Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3283758Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3283760Z 2026-10-24T21:02:16.3283903Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3284065Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T21:02:16.3284147Z 153 │ recorderRef.current = recorder; 2026-10-24T21:02:16.3284248Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T21:02:16.3284358Z ·  ─────┬────────┬─── 2026-10-24T21:02:16.3284543Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3284658Z · ╰── This value is a ref 2026-10-24T21:02:16.3284721Z 155 │ recorder, 2026-10-24T21:02:16.3284770Z ╰──── 2026-10-24T21:02:16.3285289Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3285628Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3285631Z 2026-10-24T21:02:16.3285773Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3285932Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T21:02:16.3286018Z 184 │ return () => subscription.remove(); 2026-10-24T21:02:16.3286080Z 185 │ }, [controller]); 2026-10-24T21:02:16.3286155Z ·  ─────┬──── 2026-10-24T21:02:16.3286301Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3286352Z 186 │ 2026-10-24T21:02:16.3286401Z ╰──── 2026-10-24T21:02:16.3286868Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3287160Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3287162Z 2026-10-24T21:02:16.3287303Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3287459Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T21:02:16.3287543Z 184 │ return () => subscription.remove(); 2026-10-24T21:02:16.3287605Z 185 │ }, [controller]); 2026-10-24T21:02:16.3287682Z ·  ──────┬───── 2026-10-24T21:02:16.3287828Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3287881Z 186 │ 2026-10-24T21:02:16.3287931Z ╰──── 2026-10-24T21:02:16.3288417Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3288704Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3288707Z 2026-10-24T21:02:16.3288847Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3289001Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T21:02:16.3289056Z 191 │ }, 2026-10-24T21:02:16.3289130Z 192 │ [controller, recorder], 2026-10-24T21:02:16.3289204Z ·  ─────┬──── 2026-10-24T21:02:16.3289346Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3289399Z 193 │ ); 2026-10-24T21:02:16.3289448Z ╰──── 2026-10-24T21:02:16.3289911Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3290197Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3290199Z 2026-10-24T21:02:16.3290393Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3290578Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T21:02:16.3290668Z 174 │ const controller = session.controller; 2026-10-24T21:02:16.3290752Z 175 │ const recorder = recorderRef.current; 2026-10-24T21:02:16.3290855Z ·  ─────────┬───────── 2026-10-24T21:02:16.3291016Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3291068Z 176 │ 2026-10-24T21:02:16.3291116Z ╰──── 2026-10-24T21:02:16.3291579Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3291870Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3291875Z 2026-10-24T21:02:16.3292018Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3292174Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T21:02:16.3292228Z 191 │ }, 2026-10-24T21:02:16.3292298Z 192 │ [controller, recorder], 2026-10-24T21:02:16.3292385Z ·  ───────────┬────────── 2026-10-24T21:02:16.3292532Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3292585Z 193 │ ); 2026-10-24T21:02:16.3292634Z ╰──── 2026-10-24T21:02:16.3293102Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3293393Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3293396Z 2026-10-24T21:02:16.3293537Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3293693Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T21:02:16.3293783Z 245 │ return () => clearInterval(intervalId); 2026-10-24T21:02:16.3293892Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T21:02:16.3293980Z ·  ─────┬──── 2026-10-24T21:02:16.3294137Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3294190Z 247 │ 2026-10-24T21:02:16.3294240Z ╰──── 2026-10-24T21:02:16.3294704Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3294990Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3294992Z 2026-10-24T21:02:16.3295134Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3295290Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T21:02:16.3295381Z 245 │ return () => clearInterval(intervalId); 2026-10-24T21:02:16.3295614Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T21:02:16.3295778Z ·  ────────────────────────┬─────────────────────── 2026-10-24T21:02:16.3295938Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3295988Z 247 │ 2026-10-24T21:02:16.3296037Z ╰──── 2026-10-24T21:02:16.3296504Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3296793Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3296795Z 2026-10-24T21:02:16.3296944Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3297102Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T21:02:16.3297166Z 260 │ setOwnerFocused, 2026-10-24T21:02:16.3297228Z 261 │ session, 2026-10-24T21:02:16.3297299Z ·  ───┬─── 2026-10-24T21:02:16.3297436Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3297492Z 262 │ stop, 2026-10-24T21:02:16.3297542Z ╰──── 2026-10-24T21:02:16.3298006Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3298297Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3298302Z 2026-10-24T21:02:16.3298443Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3298598Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T21:02:16.3298651Z 250 │ 2026-10-24T21:02:16.3298789Z 251 │ ╭─▶ return { 2026-10-24T21:02:16.3298997Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T21:02:16.3299075Z 253 │ │ state, 2026-10-24T21:02:16.3299164Z 254 │ │ audioLevels, 2026-10-24T21:02:16.3299255Z 255 │ │ elapsedSeconds, 2026-10-24T21:02:16.3299390Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T21:02:16.3299473Z 257 │ │ ownerKey, 2026-10-24T21:02:16.3299550Z 258 │ │ label, 2026-10-24T21:02:16.3299640Z 259 │ │ focusedOwners, 2026-10-24T21:02:16.3299731Z 260 │ │ setOwnerFocused, 2026-10-24T21:02:16.3299809Z 261 │ │ session, 2026-10-24T21:02:16.3299885Z 262 │ │ stop, 2026-10-24T21:02:16.3299962Z 263 │ │ cancel, 2026-10-24T21:02:16.3300089Z 264 │ ├─▶ }; 2026-10-24T21:02:16.3300286Z · ╰──── Cannot access ref value during render 2026-10-24T21:02:16.3300399Z 265 │ } 2026-10-24T21:02:16.3300481Z ╰──── 2026-10-24T21:02:16.3300948Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3301234Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3301238Z 2026-10-24T21:02:16.3301393Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3301550Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T21:02:16.3301708Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T21:02:16.3301834Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T21:02:16.3301913Z ·  ─────┬───── 2026-10-24T21:02:16.3302048Z · ╰── `audioLevels` originates here 2026-10-24T21:02:16.3302165Z 123 │ const sessionRef = useRef(null); 2026-10-24T21:02:16.3302310Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T21:02:16.3302359Z 125 │ 2026-10-24T21:02:16.3302463Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T21:02:16.3302561Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T21:02:16.3302698Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T21:02:16.3302789Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T21:02:16.3302915Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T21:02:16.3303001Z 131 │ isFinished: status.isFinished, 2026-10-24T21:02:16.3303142Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T21:02:16.3303212Z 133 │ error: status.error, 2026-10-24T21:02:16.3303279Z 134 │ url: status.url, 2026-10-24T21:02:16.3303338Z 135 │ }); 2026-10-24T21:02:16.3303392Z 136 │ }, 2026-10-24T21:02:16.3303555Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T21:02:16.3303631Z 138 │ selectInput: (inputs) => { 2026-10-24T21:02:16.3303752Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T21:02:16.3303862Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T21:02:16.3304000Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T21:02:16.3304110Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T21:02:16.3304182Z 143 │ if (order !== known) { 2026-10-24T21:02:16.3304286Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T21:02:16.3304368Z 145 │ transform: (current) => ({ 2026-10-24T21:02:16.3304541Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T21:02:16.3304601Z 147 │ }), 2026-10-24T21:02:16.3304659Z 148 │ }); 2026-10-24T21:02:16.3304715Z 149 │ } 2026-10-24T21:02:16.3304823Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T21:02:16.3304879Z 151 │ }, 2026-10-24T21:02:16.3304930Z 152 │ }); 2026-10-24T21:02:16.3305011Z 153 │ recorderRef.current = recorder; 2026-10-24T21:02:16.3305171Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T21:02:16.3305267Z 155 │ recorder, 2026-10-24T21:02:16.3305364Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T21:02:16.3305448Z 157 │ requestPermission: async () => { 2026-10-24T21:02:16.3305608Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T21:02:16.3305764Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T21:02:16.3305817Z 160 │ }, 2026-10-24T21:02:16.3305927Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T21:02:16.3306034Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T21:02:16.3306134Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T21:02:16.3306211Z 164 │ onStateChange: (nextState) => 2026-10-24T21:02:16.3306274Z 165 │ setState({ 2026-10-24T21:02:16.3306348Z 166 │ state: nextState, 2026-10-24T21:02:16.3306455Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T21:02:16.3306552Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T21:02:16.3306609Z 169 │ }), 2026-10-24T21:02:16.3306662Z 170 │ }); 2026-10-24T21:02:16.3306715Z 171 │ } 2026-10-24T21:02:16.3306764Z 172 │ 2026-10-24T21:02:16.3306848Z 173 │ const session = sessionRef.current; 2026-10-24T21:02:16.3306935Z 174 │ const controller = session.controller; 2026-10-24T21:02:16.3307018Z 175 │ const recorder = recorderRef.current; 2026-10-24T21:02:16.3307068Z 176 │ 2026-10-24T21:02:16.3307133Z 177 │ useEffect(() => { 2026-10-24T21:02:16.3307280Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T21:02:16.3307424Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T21:02:16.3307563Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T21:02:16.3307664Z 181 │ // calls and route interruptions during capture. 2026-10-24T21:02:16.3307797Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T21:02:16.3307851Z 183 │ }); 2026-10-24T21:02:16.3307936Z 184 │ return () => subscription.remove(); 2026-10-24T21:02:16.3308000Z 185 │ }, [controller]); 2026-10-24T21:02:16.3308050Z 186 │ 2026-10-24T21:02:16.3308107Z 187 │ useEffect( 2026-10-24T21:02:16.3308167Z 188 │ () => () => { 2026-10-24T21:02:16.3308239Z 189 │ controller.dispose(); 2026-10-24T21:02:16.3308306Z 190 │ recorder.release(); 2026-10-24T21:02:16.3308358Z 191 │ }, 2026-10-24T21:02:16.3308428Z 192 │ [controller, recorder], 2026-10-24T21:02:16.3308484Z 193 │ ); 2026-10-24T21:02:16.3308537Z 194 │ 2026-10-24T21:02:16.3308597Z 195 │ useEffect(() => { 2026-10-24T21:02:16.3308687Z 196 │ if (state.phase !== "recording") return; 2026-10-24T21:02:16.3308737Z 197 │ 2026-10-24T21:02:16.3308882Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T21:02:16.3308986Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T21:02:16.3309066Z 200 │ void activation.catch(() => {}); 2026-10-24T21:02:16.3309128Z 201 │ return () => { 2026-10-24T21:02:16.3309275Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T21:02:16.3309411Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T21:02:16.3309464Z 204 │ }; 2026-10-24T21:02:16.3309541Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T21:02:16.3309648Z 206 │ 2026-10-24T21:02:16.3309745Z 207 │ useEffect(() => { 2026-10-24T21:02:16.3309878Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T21:02:16.3309930Z 209 │ 2026-10-24T21:02:16.3310049Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T21:02:16.3310202Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T21:02:16.3310304Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T21:02:16.3310381Z ·  ─────┬───── 2026-10-24T21:02:16.3310521Z · ╰── `audioLevels` cannot be modified 2026-10-24T21:02:16.3310576Z 213 │ } 2026-10-24T21:02:16.3310627Z ╰──── 2026-10-24T21:02:16.3310903Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3311212Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3311217Z 2026-10-24T21:02:16.3311418Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T21:02:16.3311578Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T21:02:16.3311632Z 206 │ 2026-10-24T21:02:16.3311693Z 207 │ useEffect(() => { 2026-10-24T21:02:16.3311773Z ·  ───┬─── 2026-10-24T21:02:16.3311991Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T21:02:16.3312133Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T21:02:16.3312187Z 209 │ 2026-10-24T21:02:16.3312307Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T21:02:16.3312459Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T21:02:16.3312561Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T21:02:16.3312637Z ·  ─────┬───── 2026-10-24T21:02:16.3312768Z · ╰── This modifies `audioLevels` 2026-10-24T21:02:16.3312824Z 213 │ } 2026-10-24T21:02:16.3312877Z ╰──── 2026-10-24T21:02:16.3313218Z  help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T21:02:16.3313585Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3313619Z 2026-10-24T21:02:16.3313766Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3313935Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T21:02:16.3314018Z 26 │ const latestInput = useRef(input); 2026-10-24T21:02:16.3314092Z 27 │ latestInput.current = input; 2026-10-24T21:02:16.3314206Z ·  ─────┬─────────┬─── 2026-10-24T21:02:16.3314393Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3314508Z · ╰── This value is a ref 2026-10-24T21:02:16.3314581Z 28 │ const mounted = useRef(true); 2026-10-24T21:02:16.3314674Z ╰──── 2026-10-24T21:02:16.3315181Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3315592Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3315595Z 2026-10-24T21:02:16.3315797Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3315963Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T21:02:16.3316155Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T21:02:16.3316286Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T21:02:16.3316397Z ·  ┬ 2026-10-24T21:02:16.3316561Z · ╰── '_' is declared here 2026-10-24T21:02:16.3316694Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T21:02:16.3316772Z ╰──── 2026-10-24T21:02:16.3317040Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3317043Z 2026-10-24T21:02:16.3317244Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3317414Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T21:02:16.3317499Z 133 │ ); 2026-10-24T21:02:16.3317643Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T21:02:16.3317764Z ·  ┬ 2026-10-24T21:02:16.3317946Z · ╰── '_' is declared here 2026-10-24T21:02:16.3318046Z 135 │ Effect.succeed( 2026-10-24T21:02:16.3318120Z ╰──── 2026-10-24T21:02:16.3318251Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3318254Z 2026-10-24T21:02:16.3318472Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3318638Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T21:02:16.3318724Z 177 │ }); 2026-10-24T21:02:16.3318833Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T21:02:16.3318974Z ·  ┬ 2026-10-24T21:02:16.3319138Z · ╰── '_' is declared here 2026-10-24T21:02:16.3319338Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T21:02:16.3319434Z ╰──── 2026-10-24T21:02:16.3319750Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3319752Z 2026-10-24T21:02:16.3319975Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3320146Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T21:02:16.3320215Z 202 │ ); 2026-10-24T21:02:16.3320336Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T21:02:16.3320482Z ·  ┬ 2026-10-24T21:02:16.3320654Z · ╰── '_' is declared here 2026-10-24T21:02:16.3320764Z 204 │ options.removeWorktreeFails 2026-10-24T21:02:16.3320828Z ╰──── 2026-10-24T21:02:16.3320968Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3320973Z 2026-10-24T21:02:16.3321194Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3321361Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T21:02:16.3321432Z 207 │ ); 2026-10-24T21:02:16.3321555Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T21:02:16.3321701Z ·  ┬ 2026-10-24T21:02:16.3321876Z · ╰── '_' is declared here 2026-10-24T21:02:16.3321976Z 209 │ options.deleteLocalBranchFails 2026-10-24T21:02:16.3322170Z ╰──── 2026-10-24T21:02:16.3322306Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3322309Z 2026-10-24T21:02:16.3322536Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3322687Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T21:02:16.3322775Z 212 │ ); 2026-10-24T21:02:16.3322910Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T21:02:16.3323065Z ·  ┬ 2026-10-24T21:02:16.3323222Z · ╰── '_' is declared here 2026-10-24T21:02:16.3323338Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T21:02:16.3323419Z ╰──── 2026-10-24T21:02:16.3323556Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3323559Z 2026-10-24T21:02:16.3323784Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3323938Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T21:02:16.3324023Z 253 │ ); 2026-10-24T21:02:16.3324137Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T21:02:16.3324278Z ·  ┬ 2026-10-24T21:02:16.3324429Z · ╰── '_' is declared here 2026-10-24T21:02:16.3324529Z 255 │ Effect.succeed({ 2026-10-24T21:02:16.3324728Z ╰──── 2026-10-24T21:02:16.3324866Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3324869Z 2026-10-24T21:02:16.3325070Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3325234Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T21:02:16.3325321Z 263 │ ); 2026-10-24T21:02:16.3325609Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T21:02:16.3325765Z ·  ┬ 2026-10-24T21:02:16.3325941Z · ╰── '_' is declared here 2026-10-24T21:02:16.3326116Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T21:02:16.3326204Z ╰──── 2026-10-24T21:02:16.3326309Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3326311Z 2026-10-24T21:02:16.3326518Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3326719Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T21:02:16.3326809Z 90 │ }) { 2026-10-24T21:02:16.3326933Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T21:02:16.3327048Z ·  ────┬─── 2026-10-24T21:02:16.3327218Z · ╰── `rotation` originates here 2026-10-24T21:02:16.3327441Z 92 │ useLayoutEffect(() => { 2026-10-24T21:02:16.3327598Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T21:02:16.3327693Z ·  ────┬─── 2026-10-24T21:02:16.3327877Z · ╰── `rotation` cannot be modified 2026-10-24T21:02:16.3327989Z 94 │ }, [props.hidden, rotation]); 2026-10-24T21:02:16.3328054Z ╰──── 2026-10-24T21:02:16.3328353Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3328704Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3328710Z 2026-10-24T21:02:16.3328904Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3329110Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T21:02:16.3329218Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T21:02:16.3329379Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T21:02:16.3329518Z ·  ────────┬──────── 2026-10-24T21:02:16.3329700Z · ╰── `loadingVisibility` originates here 2026-10-24T21:02:16.3329783Z 268 │ useLayoutEffect(() => { 2026-10-24T21:02:16.3329977Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T21:02:16.3330104Z ·  ────────┬──────── 2026-10-24T21:02:16.3330299Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T21:02:16.3330532Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T21:02:16.3330596Z ╰──── 2026-10-24T21:02:16.3330893Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3331252Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3331255Z 2026-10-24T21:02:16.3331441Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3331627Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T21:02:16.3331714Z 325 │ }) { 2026-10-24T21:02:16.3331976Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T21:02:16.3332135Z ·  ─────────┬───────── 2026-10-24T21:02:16.3332302Z · ╰── `recordingVisibility` originates here 2026-10-24T21:02:16.3332402Z 327 │ useLayoutEffect(() => { 2026-10-24T21:02:16.3332618Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T21:02:16.3332756Z ·  ─────────┬───────── 2026-10-24T21:02:16.3332941Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T21:02:16.3333048Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T21:02:16.3333135Z ╰──── 2026-10-24T21:02:16.3333440Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3333892Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3333895Z 2026-10-24T21:02:16.3334053Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3334207Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T21:02:16.3334296Z 184 │ "options", 2026-10-24T21:02:16.3334439Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T21:02:16.3334561Z ·  ────────────────┬─────────────── 2026-10-24T21:02:16.3334788Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3334925Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T21:02:16.3335019Z ╰──── 2026-10-24T21:02:16.3335526Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3335870Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3335873Z 2026-10-24T21:02:16.3336053Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3336194Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T21:02:16.3336340Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T21:02:16.3336453Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T21:02:16.3336602Z ·  ────────────────┬──────────────── 2026-10-24T21:02:16.3336828Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3337054Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T21:02:16.3337146Z ╰──── 2026-10-24T21:02:16.3337631Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3337951Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3337954Z 2026-10-24T21:02:16.3338250Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T21:02:16.3338452Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T21:02:16.3338585Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T21:02:16.3338727Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T21:02:16.3338915Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T21:02:16.3339004Z 347 │ }; 2026-10-24T21:02:16.3339097Z ╰──── 2026-10-24T21:02:16.3339376Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T21:02:16.3339380Z 2026-10-24T21:02:16.3339631Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T21:02:16.3339781Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T21:02:16.3339906Z 447 │ const favorites = 2026-10-24T21:02:16.3340027Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T21:02:16.3340149Z ·  ───┬── 2026-10-24T21:02:16.3340405Z · ╰── For this reduce 2026-10-24T21:02:16.3340526Z 449 │ const exists = current.some( 2026-10-24T21:02:16.3340723Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T21:02:16.3340811Z 451 │ ); 2026-10-24T21:02:16.3340911Z 452 │ return change.favorite 2026-10-24T21:02:16.3340999Z 453 │ ? exists 2026-10-24T21:02:16.3341089Z 454 │ ? current 2026-10-24T21:02:16.3341273Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T21:02:16.3341389Z ·  ─────┬──── 2026-10-24T21:02:16.3341544Z · ╰── From this spread 2026-10-24T21:02:16.3341620Z 456 │ : current.filter( 2026-10-24T21:02:16.3341720Z ╰──── 2026-10-24T21:02:16.3341954Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T21:02:16.3342140Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T21:02:16.3342143Z 2026-10-24T21:02:16.3342357Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T21:02:16.3342500Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T21:02:16.3342595Z 464 │ null; 2026-10-24T21:02:16.3342908Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T21:02:16.3343059Z ·  ──────────┬───────── 2026-10-24T21:02:16.3343191Z · ╰── From this accumulator 2026-10-24T21:02:16.3343340Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T21:02:16.3343440Z ·  ─┬─ 2026-10-24T21:02:16.3343572Z · ╰── For this loop 2026-10-24T21:02:16.3343721Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T21:02:16.3343834Z 468 │ hiddenModels: [], 2026-10-24T21:02:16.3343945Z 469 │ modelOrder: [], 2026-10-24T21:02:16.3344034Z 470 │ }; 2026-10-24T21:02:16.3344226Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T21:02:16.3344365Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T21:02:16.3344492Z 473 │ nextModelPreferences = { 2026-10-24T21:02:16.3344604Z 474 │ ...nextModelPreferences, 2026-10-24T21:02:16.3344711Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3344866Z · ╰── From this spread 2026-10-24T21:02:16.3345013Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T21:02:16.3345223Z ╰──── 2026-10-24T21:02:16.3345389Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T21:02:16.3345618Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T21:02:16.3345621Z 2026-10-24T21:02:16.3345907Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3346106Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T21:02:16.3346244Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T21:02:16.3346321Z 67 │ useEffect(() => { 2026-10-24T21:02:16.3346422Z ·  ────┬──── 2026-10-24T21:02:16.3346583Z · ╰── This is the containing effect 2026-10-24T21:02:16.3346691Z 68 │ setUri(null); 2026-10-24T21:02:16.3346775Z ·  ───┬── 2026-10-24T21:02:16.3346971Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3347058Z 69 │ setError(null); 2026-10-24T21:02:16.3347166Z ╰──── 2026-10-24T21:02:16.3347793Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3348151Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3348154Z 2026-10-24T21:02:16.3348390Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3348565Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T21:02:16.3348768Z 90 │ }; 2026-10-24T21:02:16.3348856Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T21:02:16.3349007Z ·  ──────┬───── ───┬─── 2026-10-24T21:02:16.3349273Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T21:02:16.3349522Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T21:02:16.3349671Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T21:02:16.3349760Z ╰──── 2026-10-24T21:02:16.3350087Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3350436Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3350439Z 2026-10-24T21:02:16.3350693Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T21:02:16.3350850Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T21:02:16.3350955Z 212 │ useEffect(() => { 2026-10-24T21:02:16.3351091Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T21:02:16.3351238Z ·  ──┬── 2026-10-24T21:02:16.3351404Z · ╰── Missing dependency `props` 2026-10-24T21:02:16.3351547Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T21:02:16.3351691Z ·  ──────────┬───────── 2026-10-24T21:02:16.3352053Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T21:02:16.3352149Z 215 │ const { source } = props; 2026-10-24T21:02:16.3352236Z ╰──── 2026-10-24T21:02:16.3352697Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3353038Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3353041Z 2026-10-24T21:02:16.3353348Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3353514Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T21:02:16.3353603Z 61 │ }, []); 2026-10-24T21:02:16.3353698Z 62 │ useEffect(() => { 2026-10-24T21:02:16.3353805Z ·  ────┬──── 2026-10-24T21:02:16.3353960Z · ╰── This is the containing effect 2026-10-24T21:02:16.3354149Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T21:02:16.3354304Z ·  ───────┬────── 2026-10-24T21:02:16.3354534Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3354671Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T21:02:16.3354736Z ╰──── 2026-10-24T21:02:16.3355369Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3355919Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3355952Z 2026-10-24T21:02:16.3356364Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3356516Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T21:02:16.3356688Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T21:02:16.3356886Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T21:02:16.3357016Z ·  ──────────────────────── 2026-10-24T21:02:16.3357132Z 18 │ "review:write", 2026-10-24T21:02:16.3357206Z ╰──── 2026-10-24T21:02:16.3357212Z 2026-10-24T21:02:16.3357606Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3357753Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T21:02:16.3360997Z 19 │ ]); 2026-10-24T21:02:16.3361183Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T21:02:16.3361294Z ·  ──────────────────────── 2026-10-24T21:02:16.3361424Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T21:02:16.3361475Z ╰──── 2026-10-24T21:02:16.3361478Z 2026-10-24T21:02:16.3361851Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3361963Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T21:02:16.3362133Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T21:02:16.3362255Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T21:02:16.3362364Z ·  ──────────────────────── 2026-10-24T21:02:16.3362435Z 59 │ authenticated: true, 2026-10-24T21:02:16.3362486Z ╰──── 2026-10-24T21:02:16.3362488Z 2026-10-24T21:02:16.3362948Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T21:02:16.3363080Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T21:02:16.3363148Z 38 │ JSON.stringify( 2026-10-24T21:02:16.3363264Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T21:02:16.3363360Z ·  ──────────────────────── 2026-10-24T21:02:16.3363425Z 40 │ { name: "a" }, 2026-10-24T21:02:16.3363475Z ╰──── 2026-10-24T21:02:16.3363478Z 2026-10-24T21:02:16.3363684Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T21:02:16.3363788Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T21:02:16.3363856Z 296 │ } from "./device.ts"; 2026-10-24T21:02:16.3363950Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T21:02:16.3364017Z ·  ── 2026-10-24T21:02:16.3364073Z 298 │ import { 2026-10-24T21:02:16.3364233Z ╰──── 2026-10-24T21:02:16.3364357Z  help: Remove empty braces 2026-10-24T21:02:16.3364360Z 2026-10-24T21:02:16.3364574Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T21:02:16.3364711Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T21:02:16.3364835Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T21:02:16.3364943Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T21:02:16.3365051Z ·  ─────── 2026-10-24T21:02:16.3365159Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T21:02:16.3365209Z ╰──── 2026-10-24T21:02:16.3365476Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T21:02:16.3365481Z 2026-10-24T21:02:16.3365713Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3365885Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T21:02:16.3365945Z 87 │
  • label.name.trim().toLowerCase()); 2026-10-24T21:02:16.3367273Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T21:02:16.3367421Z 263 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T21:02:16.3367470Z ╰──── 2026-10-24T21:02:16.3367546Z  help: Switch to `Set` 2026-10-24T21:02:16.3367549Z 2026-10-24T21:02:16.3367760Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T21:02:16.3367952Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T21:02:16.3368072Z 89 │ let cursor = prompt.length; 2026-10-24T21:02:16.3368178Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T21:02:16.3368281Z ·  ─────── 2026-10-24T21:02:16.3368361Z 91 │ let { start, end } = occurrence; 2026-10-24T21:02:16.3368410Z ╰──── 2026-10-24T21:02:16.3368672Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T21:02:16.3368675Z 2026-10-24T21:02:16.3368923Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T21:02:16.3369034Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T21:02:16.3369085Z 55 │ 2026-10-24T21:02:16.3369188Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T21:02:16.3369300Z ·  ────────────────┬──────────────── 2026-10-24T21:02:16.3369492Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T21:02:16.3369580Z 57 │ selection: TerminalContextSelection, 2026-10-24T21:02:16.3369628Z ╰──── 2026-10-24T21:02:16.3369733Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3369736Z 2026-10-24T21:02:16.3370105Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3370228Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T21:02:16.3370285Z 145 │ name, 2026-10-24T21:02:16.3370434Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T21:02:16.3370542Z ·  ────────────────────────── 2026-10-24T21:02:16.3370663Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T21:02:16.3370712Z ╰──── 2026-10-24T21:02:16.3370715Z 2026-10-24T21:02:16.3371008Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3371132Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T21:02:16.3371185Z 217 │ 2026-10-24T21:02:16.3371330Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T21:02:16.3371420Z ·  ──────────┬────────── 2026-10-24T21:02:16.3371588Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T21:02:16.3371781Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T21:02:16.3371830Z ╰──── 2026-10-24T21:02:16.3371933Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3371936Z 2026-10-24T21:02:16.3372246Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3372369Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T21:02:16.3372420Z 220 │ 2026-10-24T21:02:16.3372551Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T21:02:16.3372654Z ·  ──────────────┬────────────── 2026-10-24T21:02:16.3372891Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T21:02:16.3373080Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T21:02:16.3373130Z ╰──── 2026-10-24T21:02:16.3373232Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3373234Z 2026-10-24T21:02:16.3373390Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T21:02:16.3373511Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T21:02:16.3373620Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T21:02:16.3373716Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T21:02:16.3373813Z ·  ───────────────────────────── 2026-10-24T21:02:16.3373940Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T21:02:16.3373989Z ╰──── 2026-10-24T21:02:16.3374153Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T21:02:16.3374158Z 2026-10-24T21:02:16.3374324Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T21:02:16.3374482Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12] 2026-10-24T21:02:16.3374535Z 1436 │ 2026-10-24T21:02:16.3374602Z 1437 │ for (const [] of [ 2026-10-24T21:02:16.3374674Z ·  ── 2026-10-24T21:02:16.3374746Z 1438 │ ["github", "github.com"], 2026-10-24T21:02:16.3374795Z ╰──── 2026-10-24T21:02:16.3375075Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T21:02:16.3375078Z 2026-10-24T21:02:16.3375367Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T21:02:16.3375660Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T21:02:16.3375720Z 472 │ onFilters, 2026-10-24T21:02:16.3375788Z 473 │ authorOptions = [], 2026-10-24T21:02:16.3375864Z ·  ── 2026-10-24T21:02:16.3375931Z 474 │ labelOptions = [], 2026-10-24T21:02:16.3375980Z ╰──── 2026-10-24T21:02:16.3376296Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T21:02:16.3376298Z 2026-10-24T21:02:16.3376578Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T21:02:16.3376752Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T21:02:16.3376821Z 473 │ authorOptions = [], 2026-10-24T21:02:16.3376884Z 474 │ labelOptions = [], 2026-10-24T21:02:16.3376959Z ·  ── 2026-10-24T21:02:16.3377022Z 475 │ optionScope, 2026-10-24T21:02:16.3377070Z ╰──── 2026-10-24T21:02:16.3377384Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T21:02:16.3377387Z 2026-10-24T21:02:16.3377647Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3377819Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T21:02:16.3377942Z 638 │ 2026-10-24T21:02:16.3378037Z 639 │ useEffect(() => { 2026-10-24T21:02:16.3378110Z ·  ────┬──── 2026-10-24T21:02:16.3378241Z · ╰── This is the containing effect 2026-10-24T21:02:16.3378352Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T21:02:16.3378412Z 641 │ return; 2026-10-24T21:02:16.3378466Z 642 │ } 2026-10-24T21:02:16.3378540Z 643 │ setPendingLaunchEntry({ 2026-10-24T21:02:16.3378627Z ·  ──────────┬────────── 2026-10-24T21:02:16.3378800Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3378872Z 644 │ key: launchTargetKey, 2026-10-24T21:02:16.3378922Z ╰──── 2026-10-24T21:02:16.3379531Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3379858Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3379860Z 2026-10-24T21:02:16.3380117Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3380284Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T21:02:16.3380336Z 648 │ 2026-10-24T21:02:16.3380399Z 649 │ useEffect(() => { 2026-10-24T21:02:16.3380469Z ·  ────┬──── 2026-10-24T21:02:16.3380602Z · ╰── This is the containing effect 2026-10-24T21:02:16.3380720Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T21:02:16.3380778Z 651 │ return; 2026-10-24T21:02:16.3380831Z 652 │ } 2026-10-24T21:02:16.3380911Z 653 │ setInitialAttachGridEntry({ 2026-10-24T21:02:16.3381004Z ·  ────────────┬──────────── 2026-10-24T21:02:16.3381175Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3381245Z 654 │ key: launchTargetKey, 2026-10-24T21:02:16.3381296Z ╰──── 2026-10-24T21:02:16.3381898Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3382221Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3382224Z 2026-10-24T21:02:16.3382478Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3382646Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T21:02:16.3382697Z 743 │ 2026-10-24T21:02:16.3382761Z 744 │ useEffect(() => { 2026-10-24T21:02:16.3382830Z ·  ────┬──── 2026-10-24T21:02:16.3382959Z · ╰── This is the containing effect 2026-10-24T21:02:16.3383117Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T21:02:16.3383217Z 746 │ setLastGridSize({ 2026-10-24T21:02:16.3383297Z ·  ───────┬─────── 2026-10-24T21:02:16.3383467Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3383548Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T21:02:16.3383598Z ╰──── 2026-10-24T21:02:16.3384197Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3384521Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3384526Z 2026-10-24T21:02:16.3384727Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3384897Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T21:02:16.3384953Z 537 │ }); 2026-10-24T21:02:16.3385074Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T21:02:16.3385183Z ·  ───────────┬────────── 2026-10-24T21:02:16.3385431Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T21:02:16.3385630Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T21:02:16.3385680Z ╰──── 2026-10-24T21:02:16.3385980Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3386293Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3386295Z 2026-10-24T21:02:16.3386495Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3386661Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T21:02:16.3386757Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T21:02:16.3386821Z 709 │ }, [terminalKey]); 2026-10-24T21:02:16.3386897Z ·  ─────┬───── 2026-10-24T21:02:16.3387098Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T21:02:16.3387178Z 710 │ 2026-10-24T21:02:16.3387227Z ╰──── 2026-10-24T21:02:16.3387518Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3387826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3387829Z 2026-10-24T21:02:16.3388026Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3388195Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T21:02:16.3388251Z 799 │ }; 2026-10-24T21:02:16.3388434Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T21:02:16.3388618Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T21:02:16.3388852Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T21:02:16.3389062Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T21:02:16.3389114Z 801 │ 2026-10-24T21:02:16.3389163Z ╰──── 2026-10-24T21:02:16.3389453Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3389767Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3389773Z 2026-10-24T21:02:16.3389919Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3390087Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T21:02:16.3390141Z 792 │ } 2026-10-24T21:02:16.3390245Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T21:02:16.3390357Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3390520Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3390572Z 794 │ 2026-10-24T21:02:16.3390620Z ╰──── 2026-10-24T21:02:16.3391096Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3391389Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3391392Z 2026-10-24T21:02:16.3391584Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3391742Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T21:02:16.3391808Z 71 │ ({ key: input.targetKey, location: candidate })); 2026-10-24T21:02:16.3393095Z 113 │ useEffect(() => { 2026-10-24T21:02:16.3393166Z ·  ────┬──── 2026-10-24T21:02:16.3393295Z · ╰── This is the containing effect 2026-10-24T21:02:16.3393458Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T21:02:16.3393524Z 115 │ return; 2026-10-24T21:02:16.3393580Z 116 │ } 2026-10-24T21:02:16.3393697Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T21:02:16.3393767Z ·  ────┬─── 2026-10-24T21:02:16.3393934Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3394056Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T21:02:16.3394106Z ╰──── 2026-10-24T21:02:16.3394704Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3395030Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3395035Z 2026-10-24T21:02:16.3395228Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T21:02:16.3395323Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T21:02:16.3395411Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T21:02:16.3395494Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T21:02:16.3395599Z ·  ──┬── 2026-10-24T21:02:16.3395729Z · ╰── 'Fiber' is imported here 2026-10-24T21:02:16.3395828Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T21:02:16.3395878Z ╰──── 2026-10-24T21:02:16.3395976Z  help: Consider removing this import. 2026-10-24T21:02:16.3395984Z 2026-10-24T21:02:16.3396186Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T21:02:16.3396277Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T21:02:16.3396355Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T21:02:16.3396445Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T21:02:16.3396522Z ·  ────┬─── 2026-10-24T21:02:16.3396655Z · ╰── 'Schedule' is imported here 2026-10-24T21:02:16.3396738Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T21:02:16.3396788Z ╰──── 2026-10-24T21:02:16.3396884Z  help: Consider removing this import. 2026-10-24T21:02:16.3396886Z 2026-10-24T21:02:16.3397241Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3397368Z ╭─[apps/server/src/ws.ts:1286:13] 2026-10-24T21:02:16.3397524Z 1285 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T21:02:16.3397722Z 1286 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T21:02:16.3397827Z ·  ────────────┬─────────── 2026-10-24T21:02:16.3397999Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T21:02:16.3398168Z 1287 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T21:02:16.3398220Z ╰──── 2026-10-24T21:02:16.3398323Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3398326Z 2026-10-24T21:02:16.3398515Z ⚠ react(static-components): Cannot create components during render 2026-10-24T21:02:16.3398680Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T21:02:16.3398767Z 196 │ const { onInput, onResize } = props; 2026-10-24T21:02:16.3398914Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T21:02:16.3399044Z ·  ────────────────┬─────────────── 2026-10-24T21:02:16.3399235Z · ╰── The component is created during render here 2026-10-24T21:02:16.3399360Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T21:02:16.3399412Z 199 │ 2026-10-24T21:02:16.3399475Z 200 │ useEffect(() => { 2026-10-24T21:02:16.3399646Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T21:02:16.3399734Z 202 │ terminalKey: props.terminalKey, 2026-10-24T21:02:16.3399810Z 203 │ native: hasNativeSurface, 2026-10-24T21:02:16.3399942Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T21:02:16.3400024Z 205 │ bufferLen: props.buffer.length, 2026-10-24T21:02:16.3400101Z 206 │ isRunning: props.isRunning, 2026-10-24T21:02:16.3400156Z 207 │ }); 2026-10-24T21:02:16.3400313Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T21:02:16.3400399Z 209 │ const handleNativeInput = useCallback( 2026-10-24T21:02:16.3400513Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T21:02:16.3400609Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T21:02:16.3400669Z 212 │ return; 2026-10-24T21:02:16.3400724Z 213 │ } 2026-10-24T21:02:16.3400817Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T21:02:16.3400970Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T21:02:16.3401026Z 216 │ }); 2026-10-24T21:02:16.3401109Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T21:02:16.3401163Z 218 │ }, 2026-10-24T21:02:16.3401262Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T21:02:16.3401313Z 220 │ ); 2026-10-24T21:02:16.3401402Z 221 │ const handleNativeResize = useCallback( 2026-10-24T21:02:16.3401516Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T21:02:16.3401577Z 223 │ onResize({ 2026-10-24T21:02:16.3401658Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T21:02:16.3401739Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T21:02:16.3401796Z 226 │ }); 2026-10-24T21:02:16.3401929Z 227 │ }, 2026-10-24T21:02:16.3402030Z 228 │ [onResize], 2026-10-24T21:02:16.3402083Z 229 │ ); 2026-10-24T21:02:16.3402134Z 230 │ 2026-10-24T21:02:16.3402216Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T21:02:16.3402274Z 232 │ return ( 2026-10-24T21:02:16.3402350Z 233 │ 2026-10-24T21:02:16.3402429Z 234 │ { 2026-10-24T21:02:16.3408441Z ·  ────┬──── 2026-10-24T21:02:16.3408571Z · ╰── This is the containing effect 2026-10-24T21:02:16.3408650Z 106 │ clearReviewCommentTarget(); 2026-10-24T21:02:16.3408746Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T21:02:16.3408851Z ·  ────────────────┬─────────────── 2026-10-24T21:02:16.3409028Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3409099Z 108 │ }, [selectedSection?.id]); 2026-10-24T21:02:16.3409148Z ╰──── 2026-10-24T21:02:16.3409756Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3410079Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3410082Z 2026-10-24T21:02:16.3410339Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3410524Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T21:02:16.3410574Z 109 │ 2026-10-24T21:02:16.3410636Z 110 │ useEffect(() => { 2026-10-24T21:02:16.3410706Z ·  ────┬──── 2026-10-24T21:02:16.3410833Z · ╰── This is the containing effect 2026-10-24T21:02:16.3410979Z 111 │ if (activeCommentTarget === null) { 2026-10-24T21:02:16.3411111Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T21:02:16.3411218Z ·  ────────────────┬─────────────── 2026-10-24T21:02:16.3411395Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3411449Z 113 │ } 2026-10-24T21:02:16.3411498Z ╰──── 2026-10-24T21:02:16.3412095Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3412421Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3412426Z 2026-10-24T21:02:16.3412625Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3412809Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T21:02:16.3412904Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T21:02:16.3412975Z 108 │ }, [selectedSection?.id]); 2026-10-24T21:02:16.3413061Z ·  ─────────┬───────── 2026-10-24T21:02:16.3413223Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T21:02:16.3413273Z 109 │ 2026-10-24T21:02:16.3413324Z ╰──── 2026-10-24T21:02:16.3413621Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3413934Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3413937Z 2026-10-24T21:02:16.3414141Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T21:02:16.3414307Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T21:02:16.3414378Z 14 │ } from "@t3tools/contracts"; 2026-10-24T21:02:16.3414466Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T21:02:16.3414535Z ·  ── 2026-10-24T21:02:16.3414584Z 16 │ 2026-10-24T21:02:16.3414634Z ╰──── 2026-10-24T21:02:16.3414714Z  help: Remove empty braces 2026-10-24T21:02:16.3414717Z 2026-10-24T21:02:16.3414977Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3415142Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T21:02:16.3415194Z 100 │ 2026-10-24T21:02:16.3415257Z 101 │ useEffect(() => { 2026-10-24T21:02:16.3415327Z ·  ────┬──── 2026-10-24T21:02:16.3415452Z · ╰── This is the containing effect 2026-10-24T21:02:16.3415589Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T21:02:16.3415673Z 103 │ setHighlightedLinesById({}); 2026-10-24T21:02:16.3415763Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3415934Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3416053Z 104 │ return; 2026-10-24T21:02:16.3416135Z ╰──── 2026-10-24T21:02:16.3416731Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3417050Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3417054Z 2026-10-24T21:02:16.3417274Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T21:02:16.3417404Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T21:02:16.3417477Z 113 │ const declared = { 2026-10-24T21:02:16.3417568Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T21:02:16.3417678Z ·  ──────────────────────────────── 2026-10-24T21:02:16.3417783Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T21:02:16.3417833Z ╰──── 2026-10-24T21:02:16.3418098Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T21:02:16.3418101Z 2026-10-24T21:02:16.3418318Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T21:02:16.3418445Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T21:02:16.3418534Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T21:02:16.3418641Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T21:02:16.3418764Z ·  ──────────────────────────────────────── 2026-10-24T21:02:16.3418860Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T21:02:16.3418909Z ╰──── 2026-10-24T21:02:16.3419172Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T21:02:16.3419175Z 2026-10-24T21:02:16.3419390Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T21:02:16.3419516Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T21:02:16.3419617Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T21:02:16.3419711Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T21:02:16.3419829Z ·  ──────────────────────────────────── 2026-10-24T21:02:16.3419891Z 117 │ }; 2026-10-24T21:02:16.3419941Z ╰──── 2026-10-24T21:02:16.3420205Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T21:02:16.3420208Z 2026-10-24T21:02:16.3420415Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T21:02:16.3420560Z ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10] 2026-10-24T21:02:16.3420614Z 236 │ 2026-10-24T21:02:16.3420727Z 237 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T21:02:16.3420812Z ·  ───────┬────── 2026-10-24T21:02:16.3420956Z · ╰── 'nonEmptyString' is declared here 2026-10-24T21:02:16.3421157Z 238 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T21:02:16.3421234Z ╰──── 2026-10-24T21:02:16.3421338Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3421340Z 2026-10-24T21:02:16.3421596Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3421771Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T21:02:16.3421823Z 55 │ 2026-10-24T21:02:16.3421887Z 56 │ useEffect(() => { 2026-10-24T21:02:16.3421956Z ·  ────┬──── 2026-10-24T21:02:16.3422085Z · ╰── This is the containing effect 2026-10-24T21:02:16.3422151Z 57 │ scheduler.reset(); 2026-10-24T21:02:16.3422255Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T21:02:16.3422342Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T21:02:16.3422457Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T21:02:16.3422538Z ·  ───────┬─────── 2026-10-24T21:02:16.3422708Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3422818Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T21:02:16.3422869Z ╰──── 2026-10-24T21:02:16.3423469Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3423796Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3423801Z 2026-10-24T21:02:16.3424003Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3424176Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T21:02:16.3424257Z 62 │ return () => scheduler.cancel(); 2026-10-24T21:02:16.3424357Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T21:02:16.3424483Z ·  ───┬─── ─────┬───── 2026-10-24T21:02:16.3424672Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T21:02:16.3424816Z · ╰── Unnecessary dependency `enabled` 2026-10-24T21:02:16.3424871Z 64 │ 2026-10-24T21:02:16.3424922Z ╰──── 2026-10-24T21:02:16.3425214Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3425525Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3425527Z 2026-10-24T21:02:16.3425757Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3425922Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17] 2026-10-24T21:02:16.3425986Z 817 │
    ( 2026-10-24T21:02:16.3427231Z 223 │ 2026-10-24T21:02:16.3427342Z ·  ─────────────── 2026-10-24T21:02:16.3427436Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T21:02:16.3427486Z ╰──── 2026-10-24T21:02:16.3427629Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T21:02:16.3427632Z 2026-10-24T21:02:16.3427823Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3427968Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T21:02:16.3428043Z 226 │ cancelAnimationFrame(frame); 2026-10-24T21:02:16.3429015Z 257 │ }, [props.path, targetIndex]); 2026-10-24T21:02:16.3429090Z ·  ─────┬──── 2026-10-24T21:02:16.3429233Z · ╰── Unnecessary dependency `props.path` 2026-10-24T21:02:16.3429285Z 258 │ 2026-10-24T21:02:16.3429334Z ╰──── 2026-10-24T21:02:16.3429693Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3430035Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3430037Z 2026-10-24T21:02:16.3430227Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3430372Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T21:02:16.3430442Z 292 │ 2026-10-24T21:02:16.3431504Z ·  ─────────── 2026-10-24T21:02:16.3431568Z 310 │ {body} 2026-10-24T21:02:16.3431616Z ╰──── 2026-10-24T21:02:16.3431758Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T21:02:16.3431760Z 2026-10-24T21:02:16.3431964Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T21:02:16.3432130Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T21:02:16.3432218Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T21:02:16.3432334Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T21:02:16.3432415Z ·  ─────┬───── 2026-10-24T21:02:16.3432556Z · ╰── 'HostProcess' is imported here 2026-10-24T21:02:16.3432606Z 26 │ 2026-10-24T21:02:16.3432655Z ╰──── 2026-10-24T21:02:16.3432750Z  help: Consider removing this import. 2026-10-24T21:02:16.3432753Z 2026-10-24T21:02:16.3433025Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3433211Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T21:02:16.3433295Z 123 │ const path = yield* Path.Path; 2026-10-24T21:02:16.3433410Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T21:02:16.3433491Z ·  ──────┬───── 2026-10-24T21:02:16.3433629Z · ╰── 'serverConfig' is declared here 2026-10-24T21:02:16.3433770Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T21:02:16.3433819Z ╰──── 2026-10-24T21:02:16.3433922Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3433925Z 2026-10-24T21:02:16.3434200Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3434361Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T21:02:16.3434537Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T21:02:16.3434706Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T21:02:16.3434789Z ·  ───────┬────── 2026-10-24T21:02:16.3434931Z · ╰── 'serverSettings' is declared here 2026-10-24T21:02:16.3435067Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T21:02:16.3435116Z ╰──── 2026-10-24T21:02:16.3435218Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3435221Z 2026-10-24T21:02:16.3435423Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T21:02:16.3435515Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T21:02:16.3435627Z 21 │ EnvironmentThreadShell, 2026-10-24T21:02:16.3435696Z 22 │ ThreadRunSummary, 2026-10-24T21:02:16.3435772Z ·  ────────┬─────── 2026-10-24T21:02:16.3435912Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T21:02:16.3435981Z 23 │ ThreadRuntimeSummary, 2026-10-24T21:02:16.3436031Z ╰──── 2026-10-24T21:02:16.3436125Z  help: Consider removing this import. 2026-10-24T21:02:16.3436127Z 2026-10-24T21:02:16.3436384Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3436525Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T21:02:16.3436577Z 150 │ 2026-10-24T21:02:16.3436640Z 151 │ useEffect(() => { 2026-10-24T21:02:16.3436710Z ·  ────┬──── 2026-10-24T21:02:16.3436845Z · ╰── This is the containing effect 2026-10-24T21:02:16.3436931Z 152 │ if (!controlledSelectedPath) { 2026-10-24T21:02:16.3436990Z 153 │ return; 2026-10-24T21:02:16.3437045Z 154 │ } 2026-10-24T21:02:16.3437126Z 155 │ setExpandedPaths((current) => { 2026-10-24T21:02:16.3437205Z ·  ────────┬─────── 2026-10-24T21:02:16.3437374Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3437495Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T21:02:16.3437546Z ╰──── 2026-10-24T21:02:16.3438153Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3438479Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3438482Z 2026-10-24T21:02:16.3438760Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3438904Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12395:7] 2026-10-24T21:02:16.3438957Z 12394 │ 2026-10-24T21:02:16.3439097Z 12395 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T21:02:16.3439180Z ·  ────────┬─────── 2026-10-24T21:02:16.3439389Z · ╰── 'layerUnavailable' is declared here 2026-10-24T21:02:16.3439487Z 12396 │ OrchestratorV2, 2026-10-24T21:02:16.3439709Z ╰──── 2026-10-24T21:02:16.3439811Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3439814Z 2026-10-24T21:02:16.3440285Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3440417Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T21:02:16.3440476Z 130 │ ) { 2026-10-24T21:02:16.3440686Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T21:02:16.3440816Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T21:02:16.3440908Z 133 │ │ return; 2026-10-24T21:02:16.3440988Z 134 │ │ } 2026-10-24T21:02:16.3441093Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3441226Z 136 │ ╰─▶ } 2026-10-24T21:02:16.3441391Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T21:02:16.3441442Z ╰──── 2026-10-24T21:02:16.3441444Z 2026-10-24T21:02:16.3441911Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3442048Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T21:02:16.3442215Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T21:02:16.3442467Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T21:02:16.3442571Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3442701Z 254 │ ╰─▶ } 2026-10-24T21:02:16.3442823Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T21:02:16.3442874Z ╰──── 2026-10-24T21:02:16.3442877Z 2026-10-24T21:02:16.3443344Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3443478Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T21:02:16.3443533Z 257 │ 2026-10-24T21:02:16.3443783Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T21:02:16.3443886Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3444015Z 260 │ ╰─▶ } 2026-10-24T21:02:16.3444115Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T21:02:16.3444167Z ╰──── 2026-10-24T21:02:16.3444169Z 2026-10-24T21:02:16.3444703Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3444875Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T21:02:16.3444934Z 321 │ ); 2026-10-24T21:02:16.3445187Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T21:02:16.3445289Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3445418Z 324 │ ╰─▶ } 2026-10-24T21:02:16.3445471Z 325 │ 2026-10-24T21:02:16.3445520Z ╰──── 2026-10-24T21:02:16.3445523Z 2026-10-24T21:02:16.3446021Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3446153Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T21:02:16.3446313Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T21:02:16.3446557Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T21:02:16.3446659Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3446787Z 332 │ ╰─▶ } 2026-10-24T21:02:16.3446888Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T21:02:16.3446938Z ╰──── 2026-10-24T21:02:16.3446942Z 2026-10-24T21:02:16.3447408Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3447544Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T21:02:16.3447599Z 225 │ ) { 2026-10-24T21:02:16.3447798Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T21:02:16.3447906Z 227 │ │ const socket = sockets[index]; 2026-10-24T21:02:16.3447994Z 228 │ │ if (socket) { 2026-10-24T21:02:16.3448087Z 229 │ │ return socket; 2026-10-24T21:02:16.3448159Z 230 │ │ } 2026-10-24T21:02:16.3448265Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3448392Z 232 │ ╰─▶ } 2026-10-24T21:02:16.3448566Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T21:02:16.3448616Z ╰──── 2026-10-24T21:02:16.3448619Z 2026-10-24T21:02:16.3449076Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3449208Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T21:02:16.3449264Z 239 │ ) { 2026-10-24T21:02:16.3449463Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T21:02:16.3449741Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T21:02:16.3449858Z 242 │ │ if (request) { 2026-10-24T21:02:16.3449952Z 243 │ │ return request; 2026-10-24T21:02:16.3450024Z 244 │ │ } 2026-10-24T21:02:16.3450124Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3450248Z 246 │ ╰─▶ } 2026-10-24T21:02:16.3450412Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T21:02:16.3450462Z ╰──── 2026-10-24T21:02:16.3450464Z 2026-10-24T21:02:16.3450646Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T21:02:16.3450812Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T21:02:16.3450914Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T21:02:16.3451094Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T21:02:16.3451242Z ·  ─────┬───── 2026-10-24T21:02:16.3451447Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T21:02:16.3451525Z 101 │ const readEditor = useCallback( 2026-10-24T21:02:16.3451574Z ╰──── 2026-10-24T21:02:16.3451892Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.3452209Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3452214Z 2026-10-24T21:02:16.3452394Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T21:02:16.3452554Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T21:02:16.3452617Z 120 │ setEditor, 2026-10-24T21:02:16.3452680Z 121 │ startEditor, 2026-10-24T21:02:16.3452754Z ·  ─────┬───── 2026-10-24T21:02:16.3452898Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T21:02:16.3452961Z 122 │ hasChanges, 2026-10-24T21:02:16.3453010Z ╰──── 2026-10-24T21:02:16.3453370Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T21:02:16.3453709Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3453712Z 2026-10-24T21:02:16.3453878Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T21:02:16.3454069Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T21:02:16.3454121Z 52 │ 2026-10-24T21:02:16.3454184Z 53 │ for (const {} of [ 2026-10-24T21:02:16.3454255Z ·  ── 2026-10-24T21:02:16.3454320Z 54 │ { healthy: true }, 2026-10-24T21:02:16.3454369Z ╰──── 2026-10-24T21:02:16.3454604Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T21:02:16.3454610Z 2026-10-24T21:02:16.3454809Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T21:02:16.3454912Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T21:02:16.3454999Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T21:02:16.3455090Z 28 │ import { identity } from "effect/Function"; 2026-10-24T21:02:16.3455165Z ·  ────┬─── 2026-10-24T21:02:16.3455297Z · ╰── 'identity' is imported here 2026-10-24T21:02:16.3455380Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T21:02:16.3455429Z ╰──── 2026-10-24T21:02:16.3455527Z  help: Consider removing this import. 2026-10-24T21:02:16.3455529Z 2026-10-24T21:02:16.3455836Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3455980Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T21:02:16.3456031Z 3754 │ 2026-10-24T21:02:16.3456230Z 3755 │ const layer: Layer.Layer = 2026-10-24T21:02:16.3456300Z ·  ──┬── 2026-10-24T21:02:16.3456424Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.3456485Z 3756 │ Layer.effect( 2026-10-24T21:02:16.3456537Z ╰──── 2026-10-24T21:02:16.3456639Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3456642Z 2026-10-24T21:02:16.3456903Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3457073Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T21:02:16.3457125Z 76 │ 2026-10-24T21:02:16.3457188Z 77 │ useEffect(() => { 2026-10-24T21:02:16.3457257Z ·  ────┬──── 2026-10-24T21:02:16.3457384Z · ╰── This is the containing effect 2026-10-24T21:02:16.3457510Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T21:02:16.3457578Z 79 │ setHostInput(host); 2026-10-24T21:02:16.3457651Z ·  ──────┬───── 2026-10-24T21:02:16.3457815Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3457880Z 80 │ setCodeInput(code); 2026-10-24T21:02:16.3457930Z ╰──── 2026-10-24T21:02:16.3458593Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3458952Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3458955Z 2026-10-24T21:02:16.3459210Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3459379Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T21:02:16.3459432Z 82 │ 2026-10-24T21:02:16.3459494Z 83 │ useEffect(() => { 2026-10-24T21:02:16.3459566Z ·  ────┬──── 2026-10-24T21:02:16.3459694Z · ╰── This is the containing effect 2026-10-24T21:02:16.3459781Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T21:02:16.3459841Z 85 │ return; 2026-10-24T21:02:16.3459894Z 86 │ } 2026-10-24T21:02:16.3459945Z 87 │ 2026-10-24T21:02:16.3460059Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T21:02:16.3460123Z 89 │ setHostInput(host); 2026-10-24T21:02:16.3460196Z ·  ──────┬───── 2026-10-24T21:02:16.3460360Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3460424Z 90 │ setCodeInput(code); 2026-10-24T21:02:16.3460474Z ╰──── 2026-10-24T21:02:16.3461075Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3461397Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3461400Z 2026-10-24T21:02:16.3461654Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3461823Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T21:02:16.3461873Z 92 │ 2026-10-24T21:02:16.3461934Z 93 │ useEffect(() => { 2026-10-24T21:02:16.3462002Z ·  ────┬──── 2026-10-24T21:02:16.3462132Z · ╰── This is the containing effect 2026-10-24T21:02:16.3462216Z 94 │ if (pairingConnectionError) { 2026-10-24T21:02:16.3462288Z 95 │ setIsSubmitting(false); 2026-10-24T21:02:16.3462369Z ·  ───────┬─────── 2026-10-24T21:02:16.3462538Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3462591Z 96 │ } 2026-10-24T21:02:16.3462640Z ╰──── 2026-10-24T21:02:16.3463235Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3463607Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3463643Z 2026-10-24T21:02:16.3463798Z ⚠ react(immutability): This value cannot be modified 2026-10-24T21:02:16.3463954Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T21:02:16.3464049Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T21:02:16.3464140Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T21:02:16.3464219Z ·  ──────┬────── 2026-10-24T21:02:16.3464356Z · ╰── `pulseProgress` originates here 2026-10-24T21:02:16.3464407Z 55 │ 2026-10-24T21:02:16.3464469Z 56 │ useEffect(() => { 2026-10-24T21:02:16.3464532Z 57 │ if (pulse) { 2026-10-24T21:02:16.3464623Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T21:02:16.3464704Z ·  ──────┬────── 2026-10-24T21:02:16.3464843Z · ╰── `pulseProgress` cannot be modified 2026-10-24T21:02:16.3464910Z 59 │ withTiming(1, { 2026-10-24T21:02:16.3464959Z ╰──── 2026-10-24T21:02:16.3465223Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T21:02:16.3465527Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T21:02:16.3465530Z 2026-10-24T21:02:16.3465749Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3465924Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T21:02:16.3466006Z 554 │ assert.deepStrictEqual( 2026-10-24T21:02:16.3466172Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T21:02:16.3466292Z ·  ┬ 2026-10-24T21:02:16.3466457Z · ╰── '_' is declared here 2026-10-24T21:02:16.3466516Z 556 │ [ 2026-10-24T21:02:16.3466566Z ╰──── 2026-10-24T21:02:16.3466667Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3466670Z 2026-10-24T21:02:16.3466853Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3467032Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T21:02:16.3467117Z 1154 │ assert.deepStrictEqual( 2026-10-24T21:02:16.3467281Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T21:02:16.3467402Z ·  ┬ 2026-10-24T21:02:16.3467565Z · ╰── '_' is declared here 2026-10-24T21:02:16.3467626Z 1156 │ [ 2026-10-24T21:02:16.3467677Z ╰──── 2026-10-24T21:02:16.3467776Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3467779Z 2026-10-24T21:02:16.3468313Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3468480Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T21:02:16.3468617Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T21:02:16.3468748Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T21:02:16.3468853Z ·  ──────────────────────── 2026-10-24T21:02:16.3468994Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T21:02:16.3469044Z ╰──── 2026-10-24T21:02:16.3469047Z 2026-10-24T21:02:16.3469411Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T21:02:16.3469533Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T21:02:16.3469636Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T21:02:16.3469794Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T21:02:16.3469906Z ·  ──────────────────────── 2026-10-24T21:02:16.3469965Z 257 │ return [ 2026-10-24T21:02:16.3470014Z ╰──── 2026-10-24T21:02:16.3470017Z 2026-10-24T21:02:16.3470216Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T21:02:16.3470381Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T21:02:16.3470445Z 1782 │ assert.equal( 2026-10-24T21:02:16.3470588Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T21:02:16.3470690Z ·  ────────────────────────── 2026-10-24T21:02:16.3470776Z 1784 │ stored.attachments[0]?.id, 2026-10-24T21:02:16.3470830Z ╰──── 2026-10-24T21:02:16.3470999Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T21:02:16.3471002Z 2026-10-24T21:02:16.3471473Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3471629Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T21:02:16.3471739Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T21:02:16.3471953Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T21:02:16.3472092Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T21:02:16.3472198Z 137 │ │ if (predicate(lastState)) { 2026-10-24T21:02:16.3472294Z 138 │ │ return lastState; 2026-10-24T21:02:16.3472367Z 139 │ │ } 2026-10-24T21:02:16.3472466Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3472590Z 141 │ ╰─▶ } 2026-10-24T21:02:16.3472663Z 142 │ return yield* Effect.die( 2026-10-24T21:02:16.3472714Z ╰──── 2026-10-24T21:02:16.3472716Z 2026-10-24T21:02:16.3472909Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T21:02:16.3473053Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T21:02:16.3473189Z 35 │ 2026-10-24T21:02:16.3474257Z 35 │ instanceId === configured ? true : false, 2026-10-24T21:02:16.3474378Z ·  ──────────────────────────────────────── 2026-10-24T21:02:16.3474435Z 36 │ ); 2026-10-24T21:02:16.3474486Z ╰──── 2026-10-24T21:02:16.3474579Z  help: Remove this ternary operator 2026-10-24T21:02:16.3474582Z 2026-10-24T21:02:16.3474763Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T21:02:16.3474867Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T21:02:16.3474930Z 457 │ ): Array { 2026-10-24T21:02:16.3475034Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T21:02:16.3475132Z ·  ┬ 2026-10-24T21:02:16.3475277Z · ╰── '_' is declared here 2026-10-24T21:02:16.3475348Z 459 │ for (const b of data) { 2026-10-24T21:02:16.3475398Z ╰──── 2026-10-24T21:02:16.3475503Z  help: Consider removing this parameter. 2026-10-24T21:02:16.3475508Z 2026-10-24T21:02:16.3475805Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3475992Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T21:02:16.3476044Z 117 │ 2026-10-24T21:02:16.3476107Z 118 │ useEffect(() => { 2026-10-24T21:02:16.3476178Z ·  ────┬──── 2026-10-24T21:02:16.3476307Z · ╰── This is the containing effect 2026-10-24T21:02:16.3476384Z 119 │ void refreshNotifications(); 2026-10-24T21:02:16.3476473Z ·  ──────────┬───────── 2026-10-24T21:02:16.3476702Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3476874Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T21:02:16.3476925Z ╰──── 2026-10-24T21:02:16.3477527Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3477848Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3477851Z 2026-10-24T21:02:16.3478106Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3478294Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T21:02:16.3478348Z 125 │ 2026-10-24T21:02:16.3478410Z 126 │ useEffect(() => { 2026-10-24T21:02:16.3478481Z ·  ────┬──── 2026-10-24T21:02:16.3478609Z · ╰── This is the containing effect 2026-10-24T21:02:16.3478672Z 127 │ if (!isLoaded) { 2026-10-24T21:02:16.3478759Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T21:02:16.3478849Z ·  ──────────┬────────── 2026-10-24T21:02:16.3479019Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3479080Z 129 │ return; 2026-10-24T21:02:16.3479129Z ╰──── 2026-10-24T21:02:16.3479811Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3480135Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3480137Z 2026-10-24T21:02:16.3480303Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T21:02:16.3480495Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T21:02:16.3480633Z 219 │ 2026-10-24T21:02:16.3480779Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T21:02:16.3480889Z ·  ──┬─ 2026-10-24T21:02:16.3481056Z · ╰── 'U+001B' is a control character. 2026-10-24T21:02:16.3481118Z 221 │ 2026-10-24T21:02:16.3481168Z ╰──── 2026-10-24T21:02:16.3481399Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T21:02:16.3481402Z 2026-10-24T21:02:16.3481669Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3481799Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T21:02:16.3481849Z 339 │ 2026-10-24T21:02:16.3482021Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T21:02:16.3482142Z ·  ────┬──── 2026-10-24T21:02:16.3482273Z · ╰── 'layerTest' is declared here 2026-10-24T21:02:16.3482322Z ╰──── 2026-10-24T21:02:16.3482427Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3482430Z 2026-10-24T21:02:16.3482685Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3482857Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T21:02:16.3482908Z 118 │ 2026-10-24T21:02:16.3482973Z 119 │ useEffect(() => { 2026-10-24T21:02:16.3483043Z ·  ────┬──── 2026-10-24T21:02:16.3483170Z · ╰── This is the containing effect 2026-10-24T21:02:16.3483258Z 120 │ if (orientationSettled) return; 2026-10-24T21:02:16.3483374Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T21:02:16.3483448Z 122 │ if (orientation === null) { 2026-10-24T21:02:16.3483530Z 123 │ setOrientationSettled(true); 2026-10-24T21:02:16.3483618Z ·  ──────────┬────────── 2026-10-24T21:02:16.3483790Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3483851Z 124 │ return; 2026-10-24T21:02:16.3483901Z ╰──── 2026-10-24T21:02:16.3484505Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3484829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3484831Z 2026-10-24T21:02:16.3485087Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T21:02:16.3485256Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T21:02:16.3485308Z 292 │ 2026-10-24T21:02:16.3485370Z 293 │ useEffect(() => { 2026-10-24T21:02:16.3485440Z ·  ────┬──── 2026-10-24T21:02:16.3485597Z · ╰── This is the containing effect 2026-10-24T21:02:16.3485655Z 294 │ if ( 2026-10-24T21:02:16.3485720Z 295 │ scene === null || 2026-10-24T21:02:16.3485801Z 296 │ requestedScene === null || 2026-10-24T21:02:16.3485880Z 297 │ scene !== requestedScene || 2026-10-24T21:02:16.3485943Z 298 │ !hasFixture || 2026-10-24T21:02:16.3486014Z 299 │ !orientationSettled || 2026-10-24T21:02:16.3486081Z 300 │ !themeApplied || 2026-10-24T21:02:16.3486196Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T21:02:16.3486329Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T21:02:16.3486384Z 303 │ ) { 2026-10-24T21:02:16.3486452Z 304 │ setReadyScene(null); 2026-10-24T21:02:16.3486531Z ·  ──────┬────── 2026-10-24T21:02:16.3486698Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T21:02:16.3486758Z 305 │ return; 2026-10-24T21:02:16.3486809Z ╰──── 2026-10-24T21:02:16.3487468Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T21:02:16.3487828Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T21:02:16.3487831Z 2026-10-24T21:02:16.3488098Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3488269Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T21:02:16.3488338Z 127 │ let cancelled = false; 2026-10-24T21:02:16.3488432Z 128 │ let lastOutcome: string | null = null; 2026-10-24T21:02:16.3488511Z ·  ─────┬───── 2026-10-24T21:02:16.3488647Z · ╰── 'lastOutcome' is declared here 2026-10-24T21:02:16.3488825Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T21:02:16.3488874Z ╰──── 2026-10-24T21:02:16.3488976Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3488979Z 2026-10-24T21:02:16.3489178Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T21:02:16.3489310Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T21:02:16.3489393Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T21:02:16.3489501Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T21:02:16.3489647Z ·  ──────┬────── ────┬─── 2026-10-24T21:02:16.3489847Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T21:02:16.3489994Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T21:02:16.3490053Z 455 │ const { 2026-10-24T21:02:16.3490102Z ╰──── 2026-10-24T21:02:16.3490397Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3490706Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3490709Z 2026-10-24T21:02:16.3490899Z ⚠ react(static-components): Cannot create components during render 2026-10-24T21:02:16.3491035Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T21:02:16.3491098Z 492 │ // same check. 2026-10-24T21:02:16.3491225Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T21:02:16.3491344Z ·  ─────────────┬───────────── 2026-10-24T21:02:16.3491525Z · ╰── The component is created during render here 2026-10-24T21:02:16.3491674Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T21:02:16.3491792Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T21:02:16.3491971Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T21:02:16.3492094Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T21:02:16.3492170Z 498 │ setIsPullRefreshing(true); 2026-10-24T21:02:16.3492253Z 499 │ await refreshSelectedSection(); 2026-10-24T21:02:16.3492328Z 500 │ setIsPullRefreshing(false); 2026-10-24T21:02:16.3492380Z 501 │ }; 2026-10-24T21:02:16.3492522Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T21:02:16.3492664Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T21:02:16.3492771Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T21:02:16.3492854Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T21:02:16.3492944Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T21:02:16.3493011Z 507 │ files: reviewFiles, 2026-10-24T21:02:16.3493115Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T21:02:16.3493246Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T21:02:16.3493308Z 510 │ : undefined, 2026-10-24T21:02:16.3493401Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T21:02:16.3493522Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T21:02:16.3493582Z 513 │ : undefined, 2026-10-24T21:02:16.3493635Z 514 │ }); 2026-10-24T21:02:16.3493824Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T21:02:16.3493952Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T21:02:16.3494012Z 517 │ environmentId, 2026-10-24T21:02:16.3494072Z 518 │ threadId, 2026-10-24T21:02:16.3494137Z 519 │ selectedSection, 2026-10-24T21:02:16.3494206Z 520 │ nativeReviewDiffData, 2026-10-24T21:02:16.3494264Z 521 │ }); 2026-10-24T21:02:16.3494370Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T21:02:16.3494453Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T21:02:16.3494542Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T21:02:16.3494616Z 525 │ diff: selectedSection?.diff, 2026-10-24T21:02:16.3494691Z 526 │ data: nativeReviewDiffData, 2026-10-24T21:02:16.3494757Z 527 │ collapsedFileIds, 2026-10-24T21:02:16.3494818Z 528 │ viewedFileIds, 2026-10-24T21:02:16.3494926Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T21:02:16.3495021Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T21:02:16.3495074Z 531 │ }); 2026-10-24T21:02:16.3495145Z 532 │ const showcaseReviewKey = 2026-10-24T21:02:16.3495276Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T21:02:16.3495487Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T21:02:16.3495574Z 535 │ : null; 2026-10-24T21:02:16.3495737Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T21:02:16.3495813Z 537 │ nativeBridge.onDebug(event); 2026-10-24T21:02:16.3495870Z 538 │ if ( 2026-10-24T21:02:16.3495950Z 539 │ showcaseReviewKey === null || 2026-10-24T21:02:16.3496069Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T21:02:16.3496176Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T21:02:16.3496231Z 542 │ ) { 2026-10-24T21:02:16.3496289Z 543 │ return; 2026-10-24T21:02:16.3496341Z 544 │ } 2026-10-24T21:02:16.3496452Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T21:02:16.3496668Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T21:02:16.3496754Z 547 │ }; 2026-10-24T21:02:16.3496804Z 548 │ 2026-10-24T21:02:16.3496919Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T21:02:16.3496996Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T21:02:16.3497084Z 551 │ commentSelection.clearSelection(); 2026-10-24T21:02:16.3497201Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T21:02:16.3497278Z 553 │ toggleExpandedFile(fileId); 2026-10-24T21:02:16.3497330Z 554 │ } 2026-10-24T21:02:16.3497440Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T21:02:16.3497508Z 556 │ if (!nativeView) return; 2026-10-24T21:02:16.3497599Z 557 │ const result = await settlePromise(() => 2026-10-24T21:02:16.3497778Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T21:02:16.3497835Z 559 │ ); 2026-10-24T21:02:16.3497919Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T21:02:16.3498100Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T21:02:16.3498153Z 562 │ } 2026-10-24T21:02:16.3498205Z 563 │ }; 2026-10-24T21:02:16.3498286Z 564 │ const handleVisibleFileChange = ( 2026-10-24T21:02:16.3498415Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T21:02:16.3498471Z 566 │ ) => { 2026-10-24T21:02:16.3498578Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T21:02:16.3498745Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T21:02:16.3498798Z 569 │ }; 2026-10-24T21:02:16.3498881Z 570 │ const renderInspector = () => ( 2026-10-24T21:02:16.3498950Z 571 │ void handleSelectFile(fileId)} 2026-10-24T21:02:16.3499458Z 577 │ /> 2026-10-24T21:02:16.3499511Z 578 │ ); 2026-10-24T21:02:16.3499561Z 579 │ 2026-10-24T21:02:16.3499743Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T21:02:16.3499828Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T21:02:16.3499889Z 582 │ if (fileId) { 2026-10-24T21:02:16.3499973Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T21:02:16.3500053Z 584 │ toggleExpandedFile(fileId); 2026-10-24T21:02:16.3500105Z 585 │ } 2026-10-24T21:02:16.3500157Z 586 │ }; 2026-10-24T21:02:16.3500207Z 587 │ 2026-10-24T21:02:16.3500295Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T21:02:16.3500411Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T21:02:16.3500465Z 590 │ ) => { 2026-10-24T21:02:16.3500550Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T21:02:16.3500612Z 592 │ if (fileId) { 2026-10-24T21:02:16.3500686Z 593 │ toggleViewedFile(fileId); 2026-10-24T21:02:16.3500737Z 594 │ } 2026-10-24T21:02:16.3500789Z 595 │ }; 2026-10-24T21:02:16.3500840Z 596 │ 2026-10-24T21:02:16.3500911Z 597 │ const parsedDiffNotice = 2026-10-24T21:02:16.3501131Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T21:02:16.3501283Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T21:02:16.3501437Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T21:02:16.3501555Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T21:02:16.3501710Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T21:02:16.3501818Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T21:02:16.3501919Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T21:02:16.3501988Z 605 │ hasCachedSelectedDiff, 2026-10-24T21:02:16.3502052Z 606 │ hasAnyCachedDiff, 2026-10-24T21:02:16.3502106Z 607 │ }); 2026-10-24T21:02:16.3502191Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T21:02:16.3502283Z 609 │ void retryEnvironment(environmentId); 2026-10-24T21:02:16.3502336Z 610 │ }; 2026-10-24T21:02:16.3502420Z 611 │ const handleReturnToThread = () => { 2026-10-24T21:02:16.3502496Z 612 │ if (navigation.canGoBack()) { 2026-10-24T21:02:16.3502566Z 613 │ navigation.goBack(); 2026-10-24T21:02:16.3502623Z 614 │ return; 2026-10-24T21:02:16.3502677Z 615 │ } 2026-10-24T21:02:16.3502756Z 616 │ navigation.navigate("Thread", { 2026-10-24T21:02:16.3502842Z 617 │ environmentId: String(environmentId), 2026-10-24T21:02:16.3502917Z 618 │ threadId: String(threadId), 2026-10-24T21:02:16.3502973Z 619 │ }); 2026-10-24T21:02:16.3503025Z 620 │ }; 2026-10-24T21:02:16.3503101Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T21:02:16.3503172Z 622 │ selectedSection?.title, 2026-10-24T21:02:16.3503250Z 623 │ headerDiffSummary.additions, 2026-10-24T21:02:16.3503338Z 624 │ headerDiffSummary.deletions, 2026-10-24T21:02:16.3503392Z 625 │ ] 2026-10-24T21:02:16.3503497Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T21:02:16.3503560Z 627 │ .join(" · "); 2026-10-24T21:02:16.3503611Z 628 │ 2026-10-24T21:02:16.3503685Z 629 │ const showChangedFilesPane = 2026-10-24T21:02:16.3503758Z 630 │ !showConnectionNotice && 2026-10-24T21:02:16.3503831Z 631 │ selectedSection !== null && 2026-10-24T21:02:16.3503908Z 632 │ parsedDiff.kind === "files" && 2026-10-24T21:02:16.3503986Z 633 │ NativeReviewDiffView !== null; 2026-10-24T21:02:16.3504154Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T21:02:16.3504322Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T21:02:16.3504374Z 636 │ 2026-10-24T21:02:16.3504450Z 637 │ const listHeader = (() => { 2026-10-24T21:02:16.3504536Z 638 │ const children: ReactElement[] = []; 2026-10-24T21:02:16.3504586Z 639 │ 2026-10-24T21:02:16.3504645Z 640 │ if (error) { 2026-10-24T21:02:16.3504710Z 641 │ children.push( 2026-10-24T21:02:16.3504769Z 642 │ 2026-10-24T21:02:16.3505406Z 649 │ Review unavailable 2026-10-24T21:02:16.3505666Z 650 │ {error} 2026-10-24T21:02:16.3505762Z 651 │ , 2026-10-24T21:02:16.3505816Z 652 │ ); 2026-10-24T21:02:16.3505869Z 653 │ } 2026-10-24T21:02:16.3505919Z 654 │ 2026-10-24T21:02:16.3505989Z 655 │ if (parsedDiffNotice) { 2026-10-24T21:02:16.3506146Z 656 │ children.push(); 2026-10-24T21:02:16.3506201Z 657 │ } 2026-10-24T21:02:16.3506250Z 658 │ 2026-10-24T21:02:16.3506325Z 659 │ if (children.length === 0) { 2026-10-24T21:02:16.3506388Z 660 │ return null; 2026-10-24T21:02:16.3506441Z 661 │ } 2026-10-24T21:02:16.3506491Z 662 │ 2026-10-24T21:02:16.3506558Z 663 │ return <>{children}; 2026-10-24T21:02:16.3506614Z 664 │ })(); 2026-10-24T21:02:16.3506684Z 665 │ const headerSubtitle = [ 2026-10-24T21:02:16.3506769Z 666 │ headerDiffSummary.additions, 2026-10-24T21:02:16.3506850Z 667 │ headerDiffSummary.deletions, 2026-10-24T21:02:16.3506929Z 668 │ pendingReviewCommentCount > 0 2026-10-24T21:02:16.3507100Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T21:02:16.3507158Z 670 │ : null, 2026-10-24T21:02:16.3507208Z 671 │ ] 2026-10-24T21:02:16.3507273Z 672 │ .filter(Boolean) 2026-10-24T21:02:16.3507335Z 673 │ .join(" · "); 2026-10-24T21:02:16.3507468Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T21:02:16.3507518Z 675 │ 2026-10-24T21:02:16.3507576Z 676 │ return ( 2026-10-24T21:02:16.3507629Z 677 │ <> 2026-10-24T21:02:16.3507691Z 678 │ 2026-10-24T21:02:16.3509078Z 694 │ 2026-10-24T21:02:16.3509142Z 695 │ 2026-10-24T21:02:16.3509262Z 696 │ 2026-10-24T21:02:16.3509342Z 697 │ {showConnectionNotice ? ( 2026-10-24T21:02:16.3509479Z 698 │ 2026-10-24T21:02:16.3509568Z 699 │ 2026-10-24T21:02:16.3510565Z 711 │ 2026-10-24T21:02:16.3510720Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T21:02:16.3510778Z 713 │ 2026-10-24T21:02:16.3511217Z 719 │ 2026-10-24T21:02:16.3512597Z 723 │ {listHeader} 2026-10-24T21:02:16.3512724Z 724 │ 2026-10-24T21:02:16.3512805Z 725 │ } 2026-10-24T21:02:16.3514529Z ·  ───────────────────────────────────────────── 2026-10-24T21:02:16.3514648Z 1080 │ screenOptions={({ route }) => 2026-10-24T21:02:16.3514699Z ╰──── 2026-10-24T21:02:16.3515062Z  help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true. 2026-10-24T21:02:16.3515065Z 2026-10-24T21:02:16.3515328Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3515494Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7] 2026-10-24T21:02:16.3515579Z 409 │ 2026-10-24T21:02:16.3515705Z 410 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T21:02:16.3515776Z ·  ──┬── 2026-10-24T21:02:16.3515906Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.3515959Z ╰──── 2026-10-24T21:02:16.3516063Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3516066Z 2026-10-24T21:02:16.3516211Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3516326Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T21:02:16.3516504Z 53 │ const child = children as ReactElement>; 2026-10-24T21:02:16.3516680Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T21:02:16.3516784Z 55 │ │ onTouchStart: (event) => { 2026-10-24T21:02:16.3516942Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T21:02:16.3517104Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T21:02:16.3517233Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T21:02:16.3517398Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T21:02:16.3517510Z 60 │ │ pendingPress.current = null; 2026-10-24T21:02:16.3517626Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T21:02:16.3517702Z 62 │ │ }, 2026-10-24T21:02:16.3517799Z 63 │ │ onPress: (event) => { 2026-10-24T21:02:16.3517970Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T21:02:16.3518112Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T21:02:16.3518279Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T21:02:16.3518469Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T21:02:16.3518554Z 68 │ │ return; 2026-10-24T21:02:16.3518629Z 69 │ │ } 2026-10-24T21:02:16.3518766Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T21:02:16.3518936Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T21:02:16.3519102Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T21:02:16.3519199Z 73 │ │ event.persist(); 2026-10-24T21:02:16.3519414Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T21:02:16.3519530Z 75 │ │ return; 2026-10-24T21:02:16.3519945Z 76 │ │ } 2026-10-24T21:02:16.3520058Z 77 │ │ child.props.onPress?.(event); 2026-10-24T21:02:16.3520131Z 78 │ │ }, 2026-10-24T21:02:16.3520262Z 79 │ ├─▶ }); 2026-10-24T21:02:16.3520500Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3520603Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T21:02:16.3520653Z ╰──── 2026-10-24T21:02:16.3521133Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3521429Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3521432Z 2026-10-24T21:02:16.3521627Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T21:02:16.3521770Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T21:02:16.3521902Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T21:02:16.3522016Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T21:02:16.3522087Z ·  ──┬── 2026-10-24T21:02:16.3522220Z · ╰── 'Image' is imported here 2026-10-24T21:02:16.3522272Z 18 │ 2026-10-24T21:02:16.3522322Z ╰──── 2026-10-24T21:02:16.3522418Z  help: Consider removing this import. 2026-10-24T21:02:16.3522421Z 2026-10-24T21:02:16.3522624Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T21:02:16.3522764Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T21:02:16.3522925Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T21:02:16.3523014Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3523106Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3523577Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3523653Z 227 │ mostRecentEventCount, 2026-10-24T21:02:16.3523708Z 228 │ ); 2026-10-24T21:02:16.3523830Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T21:02:16.3523963Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T21:02:16.3524166Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3524249Z 230 │ const assumedValue = props.value; 2026-10-24T21:02:16.3524299Z ╰──── 2026-10-24T21:02:16.3524467Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T21:02:16.3524861Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3524905Z 2026-10-24T21:02:16.3525120Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T21:02:16.3525262Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T21:02:16.3525405Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T21:02:16.3525492Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3525612Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3526079Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3526152Z 238 │ controlledEventCount, 2026-10-24T21:02:16.3526215Z 239 │ assumedValue, 2026-10-24T21:02:16.3526269Z 240 │ ); 2026-10-24T21:02:16.3526425Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T21:02:16.3526561Z ·  ───────────┬────────── 2026-10-24T21:02:16.3526772Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T21:02:16.3526859Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T21:02:16.3526908Z ╰──── 2026-10-24T21:02:16.3527336Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3527652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3527655Z 2026-10-24T21:02:16.3527798Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3527942Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T21:02:16.3528063Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T21:02:16.3528175Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T21:02:16.3528291Z ·  ─────────────┬──────────── 2026-10-24T21:02:16.3528459Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3528520Z 163 │ }); 2026-10-24T21:02:16.3528574Z ╰──── 2026-10-24T21:02:16.3529043Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3529332Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3529334Z 2026-10-24T21:02:16.3529477Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3529620Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T21:02:16.3529740Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T21:02:16.3529902Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T21:02:16.3530047Z ·  ─────────────┬──────────── 2026-10-24T21:02:16.3530257Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3530312Z 163 │ }); 2026-10-24T21:02:16.3530360Z ╰──── 2026-10-24T21:02:16.3530827Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3531116Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3531118Z 2026-10-24T21:02:16.3531267Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3531412Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T21:02:16.3531466Z 163 │ }); 2026-10-24T21:02:16.3531555Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T21:02:16.3531678Z ·  ─────────┬────────────┬─── 2026-10-24T21:02:16.3531868Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3531984Z · ╰── This value is a ref 2026-10-24T21:02:16.3532054Z 165 │ return JSON.stringify( 2026-10-24T21:02:16.3532104Z ╰──── 2026-10-24T21:02:16.3532576Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3532867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3532870Z 2026-10-24T21:02:16.3533013Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3533155Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T21:02:16.3533225Z 205 │ mostRecentEventCount, 2026-10-24T21:02:16.3533311Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3533415Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3533657Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3533750Z 207 │ ); 2026-10-24T21:02:16.3533799Z ╰──── 2026-10-24T21:02:16.3534263Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3534551Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3534554Z 2026-10-24T21:02:16.3534697Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3534837Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T21:02:16.3534906Z 211 │ mostRecentEventCount, 2026-10-24T21:02:16.3534994Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3535098Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3535285Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3535338Z 213 │ ); 2026-10-24T21:02:16.3535386Z ╰──── 2026-10-24T21:02:16.3535888Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3536175Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3536178Z 2026-10-24T21:02:16.3536367Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T21:02:16.3536510Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T21:02:16.3536629Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T21:02:16.3536739Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T21:02:16.3536848Z ·  ─────────┬──────── 2026-10-24T21:02:16.3537319Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3537373Z 163 │ }); 2026-10-24T21:02:16.3537462Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T21:02:16.3537537Z 165 │ return JSON.stringify( 2026-10-24T21:02:16.3537702Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T21:02:16.3537767Z 167 │ const record = 2026-10-24T21:02:16.3537844Z 168 │ token.type === "context" 2026-10-24T21:02:16.3538008Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T21:02:16.3538073Z 170 │ : undefined; 2026-10-24T21:02:16.3538178Z 171 │ const presentation = contextChipPresentation( 2026-10-24T21:02:16.3538287Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T21:02:16.3538348Z 173 │ record, 2026-10-24T21:02:16.3538404Z 174 │ ); 2026-10-24T21:02:16.3538485Z 175 │ const icon = contextChipIcon( 2026-10-24T21:02:16.3538551Z 176 │ presentation, 2026-10-24T21:02:16.3538748Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T21:02:16.3538922Z 178 │ ); 2026-10-24T21:02:16.3538981Z 179 │ return { 2026-10-24T21:02:16.3539050Z 180 │ type: token.type, 2026-10-24T21:02:16.3539123Z 181 │ source: token.source, 2026-10-24T21:02:16.3539194Z 182 │ start: token.start, 2026-10-24T21:02:16.3539259Z 183 │ end: token.end, 2026-10-24T21:02:16.3539407Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T21:02:16.3539466Z 185 │ label: 2026-10-24T21:02:16.3539540Z 186 │ token.type === "skill" 2026-10-24T21:02:16.3539645Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T21:02:16.3539726Z 188 │ : token.type === "context" 2026-10-24T21:02:16.3539966Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T21:02:16.3540049Z 190 │ : basename(token.value), 2026-10-24T21:02:16.3540191Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T21:02:16.3540283Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T21:02:16.3540369Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T21:02:16.3540425Z 194 │ }; 2026-10-24T21:02:16.3540481Z 195 │ }), 2026-10-24T21:02:16.3540534Z 196 │ ); 2026-10-24T21:02:16.3540664Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T21:02:16.3540815Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T21:02:16.3541029Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3541169Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T21:02:16.3541220Z ╰──── 2026-10-24T21:02:16.3541424Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T21:02:16.3541736Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3541739Z 2026-10-24T21:02:16.3541926Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T21:02:16.3542066Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T21:02:16.3542195Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T21:02:16.3542299Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T21:02:16.3542393Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3542852Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3542942Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T21:02:16.3543002Z 254 │ value, 2026-10-24T21:02:16.3543078Z 255 │ selection: nextSelection, 2026-10-24T21:02:16.3543134Z 256 │ }); 2026-10-24T21:02:16.3543216Z 257 │ return acknowledgedEventCount; 2026-10-24T21:02:16.3543268Z 258 │ }, 2026-10-24T21:02:16.3543321Z 259 │ [], 2026-10-24T21:02:16.3543388Z ·  ─┬ 2026-10-24T21:02:16.3543624Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3543706Z 260 │ ); 2026-10-24T21:02:16.3543756Z ╰──── 2026-10-24T21:02:16.3543960Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T21:02:16.3544271Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3544274Z 2026-10-24T21:02:16.3544571Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3544735Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T21:02:16.3544786Z 345 │ 2026-10-24T21:02:16.3544888Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T21:02:16.3544982Z ·  ────────────┬─────────── 2026-10-24T21:02:16.3545147Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T21:02:16.3545223Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T21:02:16.3545273Z ╰──── 2026-10-24T21:02:16.3545376Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3545380Z 2026-10-24T21:02:16.3545606Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T21:02:16.3545741Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T21:02:16.3545902Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T21:02:16.3545991Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3546084Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3546548Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3546620Z 229 │ mostRecentEventCount, 2026-10-24T21:02:16.3546674Z 230 │ ); 2026-10-24T21:02:16.3546795Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T21:02:16.3546928Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T21:02:16.3547127Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3547208Z 232 │ const assumedValue = props.value; 2026-10-24T21:02:16.3547257Z ╰──── 2026-10-24T21:02:16.3547429Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T21:02:16.3547743Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3547746Z 2026-10-24T21:02:16.3547959Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T21:02:16.3548092Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T21:02:16.3548232Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T21:02:16.3548320Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3548408Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3548922Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3549027Z 240 │ controlledEventCount, 2026-10-24T21:02:16.3549091Z 241 │ assumedValue, 2026-10-24T21:02:16.3549144Z 242 │ ); 2026-10-24T21:02:16.3549299Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T21:02:16.3549433Z ·  ───────────┬────────── 2026-10-24T21:02:16.3549643Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T21:02:16.3549730Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T21:02:16.3549780Z ╰──── 2026-10-24T21:02:16.3550205Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T21:02:16.3550518Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3550521Z 2026-10-24T21:02:16.3550664Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3550800Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T21:02:16.3550920Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T21:02:16.3551030Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T21:02:16.3551150Z ·  ─────────────┬──────────── 2026-10-24T21:02:16.3551319Z · ╰── Cannot access ref value during render 2026-10-24T21:02:16.3551373Z 165 │ }); 2026-10-24T21:02:16.3551421Z ╰──── 2026-10-24T21:02:16.3551896Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3552186Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3552188Z 2026-10-24T21:02:16.3552333Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3552526Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T21:02:16.3552678Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T21:02:16.3552788Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T21:02:16.3552902Z ·  ─────────────┬──────────── 2026-10-24T21:02:16.3553113Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3553167Z 165 │ }); 2026-10-24T21:02:16.3553217Z ╰──── 2026-10-24T21:02:16.3553682Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3553973Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3553978Z 2026-10-24T21:02:16.3554121Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3554253Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T21:02:16.3554308Z 165 │ }); 2026-10-24T21:02:16.3554395Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T21:02:16.3554517Z ·  ─────────┬────────────┬─── 2026-10-24T21:02:16.3554704Z · │ ╰── Cannot update ref value during render 2026-10-24T21:02:16.3554819Z · ╰── This value is a ref 2026-10-24T21:02:16.3554894Z 167 │ return JSON.stringify( 2026-10-24T21:02:16.3554946Z ╰──── 2026-10-24T21:02:16.3555411Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3555726Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3555728Z 2026-10-24T21:02:16.3555871Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3556004Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T21:02:16.3556072Z 207 │ mostRecentEventCount, 2026-10-24T21:02:16.3556158Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3556266Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3556456Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3556510Z 209 │ ); 2026-10-24T21:02:16.3556559Z ╰──── 2026-10-24T21:02:16.3557022Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3557309Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3557311Z 2026-10-24T21:02:16.3557454Z ⚠ react(refs): Cannot access refs during render 2026-10-24T21:02:16.3557638Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T21:02:16.3557738Z 213 │ mostRecentEventCount, 2026-10-24T21:02:16.3557824Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T21:02:16.3557927Z ·  ───────────────┬─────────────── 2026-10-24T21:02:16.3558114Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T21:02:16.3558167Z 215 │ ); 2026-10-24T21:02:16.3558216Z ╰──── 2026-10-24T21:02:16.3558682Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T21:02:16.3558972Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T21:02:16.3558977Z 2026-10-24T21:02:16.3559163Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T21:02:16.3559297Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T21:02:16.3559415Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T21:02:16.3559525Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T21:02:16.3559681Z ·  ─────────┬──────── 2026-10-24T21:02:16.3560153Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3560211Z 165 │ }); 2026-10-24T21:02:16.3560300Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T21:02:16.3560367Z 167 │ return JSON.stringify( 2026-10-24T21:02:16.3560530Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T21:02:16.3560596Z 169 │ const record = 2026-10-24T21:02:16.3560673Z 170 │ token.type === "context" 2026-10-24T21:02:16.3560835Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T21:02:16.3560900Z 172 │ : undefined; 2026-10-24T21:02:16.3561006Z 173 │ const presentation = contextChipPresentation( 2026-10-24T21:02:16.3561115Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T21:02:16.3561176Z 175 │ record, 2026-10-24T21:02:16.3561233Z 176 │ ); 2026-10-24T21:02:16.3561320Z 177 │ const icon = contextChipIcon( 2026-10-24T21:02:16.3561389Z 178 │ presentation, 2026-10-24T21:02:16.3561528Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T21:02:16.3561584Z 180 │ ); 2026-10-24T21:02:16.3561645Z 181 │ return { 2026-10-24T21:02:16.3561715Z 182 │ type: token.type, 2026-10-24T21:02:16.3561787Z 183 │ source: token.source, 2026-10-24T21:02:16.3561857Z 184 │ start: token.start, 2026-10-24T21:02:16.3561923Z 185 │ end: token.end, 2026-10-24T21:02:16.3562068Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T21:02:16.3562126Z 187 │ label: 2026-10-24T21:02:16.3562203Z 188 │ token.type === "skill" 2026-10-24T21:02:16.3562375Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T21:02:16.3562496Z 190 │ : token.type === "context" 2026-10-24T21:02:16.3562728Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T21:02:16.3562809Z 192 │ : basename(token.value), 2026-10-24T21:02:16.3562952Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T21:02:16.3563043Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T21:02:16.3563128Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T21:02:16.3563185Z 196 │ }; 2026-10-24T21:02:16.3563241Z 197 │ }), 2026-10-24T21:02:16.3563294Z 198 │ ); 2026-10-24T21:02:16.3563424Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T21:02:16.3563582Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T21:02:16.3563793Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3563929Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T21:02:16.3563978Z ╰──── 2026-10-24T21:02:16.3564183Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T21:02:16.3564495Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3564498Z 2026-10-24T21:02:16.3564684Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T21:02:16.3564822Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T21:02:16.3564953Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T21:02:16.3565052Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T21:02:16.3565142Z ·  ───────────┬─────────── 2026-10-24T21:02:16.3565628Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T21:02:16.3565717Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T21:02:16.3565777Z 256 │ value, 2026-10-24T21:02:16.3565854Z 257 │ selection: nextSelection, 2026-10-24T21:02:16.3565909Z 258 │ }); 2026-10-24T21:02:16.3565991Z 259 │ return acknowledgedEventCount; 2026-10-24T21:02:16.3566050Z 260 │ }, 2026-10-24T21:02:16.3566107Z 261 │ [], 2026-10-24T21:02:16.3566172Z ·  ─┬ 2026-10-24T21:02:16.3566352Z · ╰── This dependency list is missing values used by the callback 2026-10-24T21:02:16.3566405Z 262 │ ); 2026-10-24T21:02:16.3566455Z ╰──── 2026-10-24T21:02:16.3566656Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T21:02:16.3566968Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T21:02:16.3566971Z 2026-10-24T21:02:16.3567174Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T21:02:16.3567392Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T21:02:16.3567496Z 3 │ AuthProvidersManageScope, 2026-10-24T21:02:16.3567562Z 4 │ type AuthSessionState, 2026-10-24T21:02:16.3567645Z ·  ────────┬─────── 2026-10-24T21:02:16.3567789Z · ╰── 'AuthSessionState' is imported here 2026-10-24T21:02:16.3567856Z 5 │ type EnvironmentId, 2026-10-24T21:02:16.3567905Z ╰──── 2026-10-24T21:02:16.3568002Z  help: Consider removing this import. 2026-10-24T21:02:16.3568005Z 2026-10-24T21:02:16.3568173Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T21:02:16.3568303Z ╭─[apps/web/src/components/CommandPalette.tsx:2037:20] 2026-10-24T21:02:16.3568419Z 2036 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T21:02:16.3568517Z 2037 │ createdAt: new Date().toISOString(), 2026-10-24T21:02:16.3568610Z ·  ─────┬──── 2026-10-24T21:02:16.3568751Z · ╰── Cannot call impure function 2026-10-24T21:02:16.3568856Z 2038 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T21:02:16.3568907Z ╰──── 2026-10-24T21:02:16.3569185Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T21:02:16.3569478Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T21:02:16.3569481Z 2026-10-24T21:02:16.3569957Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3570129Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T21:02:16.3570229Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T21:02:16.3570428Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T21:02:16.3570530Z 567 │ │ const nextEvent = { 2026-10-24T21:02:16.3570687Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T21:02:16.3570820Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T21:02:16.3570909Z 570 │ │ threadId, 2026-10-24T21:02:16.3571019Z 571 │ │ providerInstanceId, 2026-10-24T21:02:16.3571118Z 572 │ │ occurredAt: now, 2026-10-24T21:02:16.3571266Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T21:02:16.3571392Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T21:02:16.3571506Z 575 │ │ const reader = yield* eventSink 2026-10-24T21:02:16.3571625Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T21:02:16.3571755Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T21:02:16.3571859Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3572022Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T21:02:16.3572209Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T21:02:16.3572353Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T21:02:16.3572552Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T21:02:16.3572629Z 583 │ │ } 2026-10-24T21:02:16.3572791Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T21:02:16.3572933Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T21:02:16.3573062Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T21:02:16.3573192Z 587 │ ╰─▶ } 2026-10-24T21:02:16.3573249Z 588 │ }), 2026-10-24T21:02:16.3573304Z ╰──── 2026-10-24T21:02:16.3573309Z 2026-10-24T21:02:16.3573775Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3573948Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T21:02:16.3574024Z 2326 │ let settled = false; 2026-10-24T21:02:16.3574184Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T21:02:16.3574343Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T21:02:16.3574474Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T21:02:16.3574560Z 2330 │ │ ); 2026-10-24T21:02:16.3574686Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T21:02:16.3574821Z 2332 │ ╰─▶ } 2026-10-24T21:02:16.3574936Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T21:02:16.3574986Z ╰──── 2026-10-24T21:02:16.3574989Z 2026-10-24T21:02:16.3575275Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T21:02:16.3575427Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T21:02:16.3575482Z 162 │ keys, 2026-10-24T21:02:16.3575582Z 163 │ overridingProjects = [], 2026-10-24T21:02:16.3575665Z ·  ── 2026-10-24T21:02:16.3575782Z 164 │ onClearOverrides, 2026-10-24T21:02:16.3575862Z ╰──── 2026-10-24T21:02:16.3576183Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T21:02:16.3576185Z 2026-10-24T21:02:16.3576456Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3576590Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T21:02:16.3576642Z 913 │ 2026-10-24T21:02:16.3576827Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T21:02:16.3576903Z ·  ─────┬───── 2026-10-24T21:02:16.3577041Z · ╰── 'layerDaemon' is declared here 2026-10-24T21:02:16.3577128Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T21:02:16.3577177Z ╰──── 2026-10-24T21:02:16.3577280Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3577283Z 2026-10-24T21:02:16.3577492Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T21:02:16.3577616Z ╭─[apps/web/src/lib/announce.browser.test.ts:41:46] 2026-10-24T21:02:16.3577668Z 40 │ 2026-10-24T21:02:16.3577774Z 41 │ expect(regionTexts()).toEqual([...first].reverse()); 2026-10-24T21:02:16.3577882Z ·  ─────── 2026-10-24T21:02:16.3577976Z 42 │ expect(regionTexts()).toContain("Claude"); 2026-10-24T21:02:16.3578025Z ╰──── 2026-10-24T21:02:16.3578292Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T21:02:16.3578298Z 2026-10-24T21:02:16.3578554Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3578722Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10602:7] 2026-10-24T21:02:16.3578776Z 10601 │ 2026-10-24T21:02:16.3578847Z 10602 │ const layer: Layer.Layer< 2026-10-24T21:02:16.3578919Z ·  ──┬── 2026-10-24T21:02:16.3579043Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.3579138Z 10603 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T21:02:16.3579189Z ╰──── 2026-10-24T21:02:16.3579290Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3579293Z 2026-10-24T21:02:16.3579524Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T21:02:16.3579696Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T21:02:16.3579762Z 1997 │ assert.equal( 2026-10-24T21:02:16.3579907Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T21:02:16.3579984Z ·  ────── 2026-10-24T21:02:16.3580061Z 1999 │ "authoritative answer", 2026-10-24T21:02:16.3580111Z ╰──── 2026-10-24T21:02:16.3580281Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T21:02:16.3580283Z 2026-10-24T21:02:16.3580803Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3581002Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T21:02:16.3581180Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T21:02:16.3581386Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T21:02:16.3581495Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3581627Z 3953 │ ╰─▶ } 2026-10-24T21:02:16.3581745Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T21:02:16.3581795Z ╰──── 2026-10-24T21:02:16.3581798Z 2026-10-24T21:02:16.3582266Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3582435Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T21:02:16.3582522Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T21:02:16.3582706Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T21:02:16.3582815Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3582947Z 6064 │ ╰─▶ } 2026-10-24T21:02:16.3583121Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T21:02:16.3583175Z ╰──── 2026-10-24T21:02:16.3583177Z 2026-10-24T21:02:16.3583638Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T21:02:16.3583803Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T21:02:16.3583888Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T21:02:16.3584072Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T21:02:16.3584179Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T21:02:16.3584312Z 6199 │ ╰─▶ } 2026-10-24T21:02:16.3584481Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T21:02:16.3584534Z ╰──── 2026-10-24T21:02:16.3584536Z 2026-10-24T21:02:16.3584792Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T21:02:16.3584971Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T21:02:16.3585022Z 959 │ 2026-10-24T21:02:16.3585130Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T21:02:16.3585244Z ·  ──────────────────┬───────────────── 2026-10-24T21:02:16.3585443Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T21:02:16.3585568Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T21:02:16.3585670Z ╰──── 2026-10-24T21:02:16.3585809Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3585812Z 2026-10-24T21:02:16.3586146Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3586307Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T21:02:16.3586357Z 1443 │ 2026-10-24T21:02:16.3586471Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T21:02:16.3586587Z ·  ───────────────────┬─────────────────── 2026-10-24T21:02:16.3586790Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T21:02:16.3586907Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T21:02:16.3586964Z ╰──── 2026-10-24T21:02:16.3587068Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3587071Z 2026-10-24T21:02:16.3587327Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T21:02:16.3587485Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T21:02:16.3587537Z 1679 │ 2026-10-24T21:02:16.3587608Z 1680 │ const layer: Layer.Layer< 2026-10-24T21:02:16.3587677Z ·  ──┬── 2026-10-24T21:02:16.3587799Z · ╰── 'layer' is declared here 2026-10-24T21:02:16.3587892Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T21:02:16.3587941Z ╰──── 2026-10-24T21:02:16.3588041Z  help: Consider removing this declaration. 2026-10-24T21:02:16.3588049Z 2026-10-24T21:02:16.3588131Z Found 0 errors and 367 warnings in 5479 files (5.3s, 8 threads) 2026-10-24T21:02:16.4044087Z Post job cleanup. 2026-10-24T21:02:16.4739918Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T21:02:16.4811885Z Post job cleanup. 2026-10-24T21:02:16.4825400Z ##[start-action display=Cache full pnpm store;id=__b2f9ef63-193e-4fe4-bdac-dc64c568c1d4.__actions_cache] 2026-10-24T21:02:16.5137691Z Post job cleanup. 2026-10-24T21:02:16.5768767Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6, not saving cache. 2026-10-24T21:02:16.5805979Z ##[end-action id=__b2f9ef63-193e-4fe4-bdac-dc64c568c1d4.__actions_cache;outcome=success;conclusion=success;duration_ms=97] 2026-10-24T21:02:16.5807798Z ##[start-action display=Cache Vite+;id=__b2f9ef63-193e-4fe4-bdac-dc64c568c1d4.vp_cache] 2026-10-24T21:02:16.5834676Z Post job cleanup. 2026-10-24T21:02:16.6434806Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache. 2026-10-24T21:02:16.6469018Z ##[end-action id=__b2f9ef63-193e-4fe4-bdac-dc64c568c1d4.vp_cache;outcome=success;conclusion=success;duration_ms=66] 2026-10-24T21:02:16.6513418Z Post job cleanup. 2026-10-24T21:02:16.6935950Z [command]/usr/local/bin/git version 2026-10-24T21:02:16.6966713Z git version 2.55.0 2026-10-24T21:02:16.6984304Z Temporarily overriding HOME='/home/runner/_work/_temp/c4913e15-cba5-4736-b1e9-f6a5a218c3a9' before making global git config changes 2026-10-24T21:02:16.6984708Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T21:02:16.6987222Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T21:02:16.7011303Z Removing SSH command configuration 2026-10-24T21:02:16.7014859Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T21:02:16.7041116Z [command]/usr/local/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-24T21:02:16.7177469Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T21:02:16.7231742Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T21:02:16.7276134Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T21:02:16.7292903Z ##[group]Run '/job_completed.sh' 2026-10-24T21:02:16.7299808Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T21:02:16.7299981Z env: 2026-10-24T21:02:16.7300093Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 209 2026-10-24T21:02:16.7300241Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 470 2026-10-24T21:02:16.7300382Z BLACKSMITH_CHECK_RUN_ID: 120986548679 2026-10-24T21:02:16.7300523Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T21:02:16.7300675Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T21:02:16.7300811Z ##[endgroup] 2026-10-24T21:02:16.7376721Z Docker container cache not activated, skipping hash computation. 2026-10-24T21:02:16.7668831Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T21:02:16.7712764Z Cleaning up orphan processes