2026-10-24T11:41:22.9437753Z Current runner version: '2.338.1' 2026-10-24T11:41:22.9441708Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-b6o53qzjdcy3kf4q' 2026-10-24T11:41:22.9442595Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T11:41:22.9443349Z Machine name: 'ip-172-31-73-130' 2026-10-24T11:41:22.9444993Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T11:41:22.9446510Z Contents: read 2026-10-24T11:41:22.9447192Z Metadata: read 2026-10-24T11:41:22.9447596Z ##[endgroup] 2026-10-24T11:41:22.9449177Z Secret source: Actions 2026-10-24T11:41:22.9449837Z Cache mode: write 2026-10-24T11:41:22.9450408Z Prepare workflow directory 2026-10-24T11:41:22.9647528Z Prepare all required actions 2026-10-24T11:41:22.9674888Z Getting action download info 2026-10-24T11:41:23.0814642Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T11:41:23.1222168Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T11:41:23.2360082Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T11:41:23.2398937Z Complete job name: Lint 2026-10-24T11:41:23.2778448Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T11:41:23.2844321Z ##[group]Run '/setup.sh' 2026-10-24T11:41:23.2853435Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:41:23.2853858Z env: 2026-10-24T11:41:23.2854085Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:23.2854383Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:23.2854664Z BLACKSMITH_CHECK_RUN_ID: 120863167874 2026-10-24T11:41:23.2854943Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T11:41:23.2855217Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T11:41:23.2855481Z ##[endgroup] 2026-10-24T11:41:23.3078503Z Logging daemon started (blacksmithd for logs) 2026-10-24T11:41:23.3199369Z Results daemon started (blacksmithd for results) 2026-10-24T11:41:23.3359925Z Background adoption and SSH setup started (PID: 3083) 2026-10-24T11:41:23.3360378Z 2026-10-24T11:41:23.3360598Z ---------------------------------------- 2026-10-24T11:41:23.3361230Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40090902566/jobs/120863167874 2026-10-24T11:41:23.3361640Z SSH Access (using your GitHub SSH key): 2026-10-24T11:41:23.3362080Z ssh -p 64001 runner@blacksmith-8vcpu-ubuntu-2404-b6o53qzjdcy3kf4q.vm.blacksmith.sh 2026-10-24T11:41:23.3362436Z 2026-10-24T11:41:23.3362547Z No GitHub SSH key? Add one at: 2026-10-24T11:41:23.3363035Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T11:41:23.3363429Z 2026-10-24T11:41:23.3363537Z ---------------------------------------- 2026-10-24T11:41:23.3363712Z 2026-10-24T11:41:23.3363856Z VM ID: blacksmith-8vcpu-ubuntu-2404-b6o53qzjdcy3kf4q 2026-10-24T11:41:23.3364178Z Host: production-152.236.41.171-x8664 2026-10-24T11:41:23.3364450Z Host Agent PID: 823459 2026-10-24T11:41:23.3364694Z Host Agent Git SHA: 1637818df 2026-10-24T11:41:23.3364957Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T11:41:23.3365236Z Blacksmith Host Generation: gen 2 2026-10-24T11:41:23.3365529Z Petname: production-smashing-possum-3347f699 2026-10-24T11:41:23.3365827Z Region: us-east 2026-10-24T11:41:23.3366066Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T11:41:23.3374155Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T11:41:23.3374560Z 2026-10-24T11:41:23.3374691Z Enabling Blacksmith transparent cache 2026-10-24T11:41:23.3658159Z ##[group]Run actions/checkout@v6 2026-10-24T11:41:23.3658469Z with: 2026-10-24T11:41:23.3658820Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T11:41:23.3659222Z sparse-checkout-cone-mode: false 2026-10-24T11:41:23.3659506Z repository: pingdotgg/t3code 2026-10-24T11:41:23.3661385Z token: *** 2026-10-24T11:41:23.3661601Z ssh-strict: true 2026-10-24T11:41:23.3661824Z ssh-user: git 2026-10-24T11:41:23.3662055Z persist-credentials: true 2026-10-24T11:41:23.3662553Z clean: true 2026-10-24T11:41:23.3662773Z fetch-depth: 1 2026-10-24T11:41:23.3662996Z fetch-tags: false 2026-10-24T11:41:23.3663225Z show-progress: true 2026-10-24T11:41:23.3663452Z lfs: false 2026-10-24T11:41:23.3663666Z submodules: false 2026-10-24T11:41:23.3663897Z set-safe-directory: true 2026-10-24T11:41:23.3664155Z allow-unsafe-pr-checkout: false 2026-10-24T11:41:23.3664419Z env: 2026-10-24T11:41:23.3664671Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:23.3664959Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:23.3665245Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:23.3665509Z ##[endgroup] 2026-10-24T11:41:23.4895587Z Syncing repository: pingdotgg/t3code 2026-10-24T11:41:23.4896492Z ##[group]Getting Git version info 2026-10-24T11:41:23.4896825Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T11:41:23.4897308Z [command]/usr/local/bin/git version 2026-10-24T11:41:23.4982806Z git version 2.55.0 2026-10-24T11:41:23.4996711Z ##[endgroup] 2026-10-24T11:41:23.5007456Z Temporarily overriding HOME='/home/runner/_work/_temp/0d8620be-8cc7-4e61-876d-60d34d165f9e' before making global git config changes 2026-10-24T11:41:23.5008269Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T11:41:23.5009078Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T11:41:23.5038379Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T11:41:23.5040271Z ##[group]Determining repository object format 2026-10-24T11:41:23.5041473Z ##[endgroup] 2026-10-24T11:41:23.5041836Z ##[group]Initializing the repository 2026-10-24T11:41:23.5043953Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T11:41:23.5085403Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T11:41:23.5085964Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T11:41:23.5086495Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T11:41:23.5086859Z hint: call: 2026-10-24T11:41:23.5087070Z hint: 2026-10-24T11:41:23.5087345Z hint: git config --global init.defaultBranch 2026-10-24T11:41:23.5087656Z hint: 2026-10-24T11:41:23.5087944Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T11:41:23.5088398Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T11:41:23.5088772Z hint: 2026-10-24T11:41:23.5088988Z hint: git branch -m 2026-10-24T11:41:23.5089229Z hint: 2026-10-24T11:41:23.5089538Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T11:41:23.5090004Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T11:41:23.5091715Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T11:41:23.5117901Z ##[endgroup] 2026-10-24T11:41:23.5118326Z ##[group]Disabling automatic garbage collection 2026-10-24T11:41:23.5120429Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T11:41:23.5145710Z ##[endgroup] 2026-10-24T11:41:23.5146087Z ##[group]Setting up auth 2026-10-24T11:41:23.5146361Z Removing SSH command configuration 2026-10-24T11:41:23.5149914Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T11:41:23.5180158Z [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-24T11:41:23.5327647Z Removing HTTP extra header 2026-10-24T11:41:23.5330512Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T11:41:23.5355770Z [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-24T11:41:23.5465205Z Removing includeIf entries pointing to credentials config files 2026-10-24T11:41:23.5468265Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T11:41:23.5494740Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T11:41:23.5617261Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-ee8b81ba-2688-4c43-ba54-a8b79241e338.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T11:41:23.5650130Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-ee8b81ba-2688-4c43-ba54-a8b79241e338.config 2026-10-24T11:41:23.5671683Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-ee8b81ba-2688-4c43-ba54-a8b79241e338.config 2026-10-24T11:41:23.5695646Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-ee8b81ba-2688-4c43-ba54-a8b79241e338.config 2026-10-24T11:41:23.5717857Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-ee8b81ba-2688-4c43-ba54-a8b79241e338.config 2026-10-24T11:41:23.5738583Z ##[endgroup] 2026-10-24T11:41:23.5738956Z ##[group]Fetching the repository 2026-10-24T11:41:23.5743167Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +4a334831f613e54bbbf2c64f8e290c8b6400fba3:refs/remotes/pull/24410/merge 2026-10-24T11:41:23.8879623Z From https://github.com/pingdotgg/t3code 2026-10-24T11:41:23.8880419Z * [new ref] 4a334831f613e54bbbf2c64f8e290c8b6400fba3 -> pull/24410/merge 2026-10-24T11:41:23.8908965Z ##[endgroup] 2026-10-24T11:41:23.8909470Z ##[group]Determining the checkout info 2026-10-24T11:41:23.8909939Z ##[endgroup] 2026-10-24T11:41:23.8910338Z ##[group]Setting up sparse checkout 2026-10-24T11:41:23.8913316Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T11:41:23.8940057Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T11:41:23.8957430Z .git/info/sparse-checkout 2026-10-24T11:41:23.8961673Z ##[endgroup] 2026-10-24T11:41:23.8962103Z ##[group]Checking out the ref 2026-10-24T11:41:23.8964407Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24410/merge 2026-10-24T11:41:30.5172384Z Updating files: 0% (1/6392) 2026-10-24T11:41:30.5202848Z Updating files: 1% (64/6392) 2026-10-24T11:41:30.5222162Z Updating files: 2% (128/6392) 2026-10-24T11:41:30.5245503Z Updating files: 3% (192/6392) 2026-10-24T11:41:30.5268405Z Updating files: 4% (256/6392) 2026-10-24T11:41:30.5301242Z Updating files: 5% (320/6392) 2026-10-24T11:41:30.5325058Z Updating files: 6% (384/6392) 2026-10-24T11:41:30.5382572Z Updating files: 7% (448/6392) 2026-10-24T11:41:30.5414153Z Updating files: 8% (512/6392) 2026-10-24T11:41:30.5438019Z Updating files: 9% (576/6392) 2026-10-24T11:41:30.5727362Z Updating files: 10% (640/6392) 2026-10-24T11:41:30.5744762Z Updating files: 11% (704/6392) 2026-10-24T11:41:30.5756363Z Updating files: 12% (768/6392) 2026-10-24T11:41:30.5773639Z Updating files: 13% (831/6392) 2026-10-24T11:41:30.5790748Z Updating files: 14% (895/6392) 2026-10-24T11:41:30.5810969Z Updating files: 15% (959/6392) 2026-10-24T11:41:30.5830943Z Updating files: 16% (1023/6392) 2026-10-24T11:41:30.5847139Z Updating files: 17% (1087/6392) 2026-10-24T11:41:30.5866621Z Updating files: 18% (1151/6392) 2026-10-24T11:41:30.5882774Z Updating files: 19% (1215/6392) 2026-10-24T11:41:30.5907529Z Updating files: 20% (1279/6392) 2026-10-24T11:41:30.5927303Z Updating files: 21% (1343/6392) 2026-10-24T11:41:30.5947574Z Updating files: 22% (1407/6392) 2026-10-24T11:41:30.5962970Z Updating files: 23% (1471/6392) 2026-10-24T11:41:30.5977166Z Updating files: 24% (1535/6392) 2026-10-24T11:41:30.5993752Z Updating files: 25% (1598/6392) 2026-10-24T11:41:30.6008950Z Updating files: 26% (1662/6392) 2026-10-24T11:41:30.6022846Z Updating files: 27% (1726/6392) 2026-10-24T11:41:30.6044527Z Updating files: 28% (1790/6392) 2026-10-24T11:41:30.6079789Z Updating files: 29% (1854/6392) 2026-10-24T11:41:30.6103344Z Updating files: 30% (1918/6392) 2026-10-24T11:41:30.6128707Z Updating files: 31% (1982/6392) 2026-10-24T11:41:30.6161239Z Updating files: 32% (2046/6392) 2026-10-24T11:41:30.6192484Z Updating files: 33% (2110/6392) 2026-10-24T11:41:30.6271866Z Updating files: 34% (2174/6392) 2026-10-24T11:41:30.6335467Z Updating files: 35% (2238/6392) 2026-10-24T11:41:30.6375248Z Updating files: 36% (2302/6392) 2026-10-24T11:41:30.6410083Z Updating files: 37% (2366/6392) 2026-10-24T11:41:30.6455878Z Updating files: 38% (2429/6392) 2026-10-24T11:41:30.6485340Z Updating files: 39% (2493/6392) 2026-10-24T11:41:30.6518488Z Updating files: 40% (2557/6392) 2026-10-24T11:41:30.6547448Z Updating files: 41% (2621/6392) 2026-10-24T11:41:30.6565304Z Updating files: 42% (2685/6392) 2026-10-24T11:41:30.6576348Z Updating files: 43% (2749/6392) 2026-10-24T11:41:30.6607614Z Updating files: 44% (2813/6392) 2026-10-24T11:41:30.6637644Z Updating files: 45% (2877/6392) 2026-10-24T11:41:30.6668452Z Updating files: 46% (2941/6392) 2026-10-24T11:41:30.6691269Z Updating files: 47% (3005/6392) 2026-10-24T11:41:30.6717814Z Updating files: 48% (3069/6392) 2026-10-24T11:41:30.6753702Z Updating files: 49% (3133/6392) 2026-10-24T11:41:30.6779273Z Updating files: 50% (3196/6392) 2026-10-24T11:41:30.6793716Z Updating files: 51% (3260/6392) 2026-10-24T11:41:30.6833117Z Updating files: 52% (3324/6392) 2026-10-24T11:41:30.6863732Z Updating files: 53% (3388/6392) 2026-10-24T11:41:30.6884600Z Updating files: 54% (3452/6392) 2026-10-24T11:41:30.6908519Z Updating files: 55% (3516/6392) 2026-10-24T11:41:30.6925036Z Updating files: 56% (3580/6392) 2026-10-24T11:41:30.6945833Z Updating files: 57% (3644/6392) 2026-10-24T11:41:30.6965239Z Updating files: 58% (3708/6392) 2026-10-24T11:41:30.7357578Z Updating files: 59% (3772/6392) 2026-10-24T11:41:30.7373770Z Updating files: 60% (3836/6392) 2026-10-24T11:41:30.7394853Z Updating files: 61% (3900/6392) 2026-10-24T11:41:30.7413354Z Updating files: 62% (3964/6392) 2026-10-24T11:41:30.7437723Z Updating files: 63% (4027/6392) 2026-10-24T11:41:30.7466718Z Updating files: 64% (4091/6392) 2026-10-24T11:41:30.7487908Z Updating files: 65% (4155/6392) 2026-10-24T11:41:30.7506847Z Updating files: 66% (4219/6392) 2026-10-24T11:41:30.7531641Z Updating files: 67% (4283/6392) 2026-10-24T11:41:30.7547080Z Updating files: 68% (4347/6392) 2026-10-24T11:41:30.7566080Z Updating files: 69% (4411/6392) 2026-10-24T11:41:30.7580192Z Updating files: 70% (4475/6392) 2026-10-24T11:41:30.7599554Z Updating files: 71% (4539/6392) 2026-10-24T11:41:30.7613890Z Updating files: 72% (4603/6392) 2026-10-24T11:41:30.7663688Z Updating files: 73% (4667/6392) 2026-10-24T11:41:30.8094894Z Updating files: 74% (4731/6392) 2026-10-24T11:41:30.8120727Z Updating files: 75% (4794/6392) 2026-10-24T11:41:30.8144298Z Updating files: 76% (4858/6392) 2026-10-24T11:41:30.8170328Z Updating files: 77% (4922/6392) 2026-10-24T11:41:30.8193349Z Updating files: 78% (4986/6392) 2026-10-24T11:41:30.8210604Z Updating files: 79% (5050/6392) 2026-10-24T11:41:30.8233851Z Updating files: 80% (5114/6392) 2026-10-24T11:41:30.8251197Z Updating files: 81% (5178/6392) 2026-10-24T11:41:30.8270587Z Updating files: 82% (5242/6392) 2026-10-24T11:41:30.8295711Z Updating files: 83% (5306/6392) 2026-10-24T11:41:30.8323360Z Updating files: 84% (5370/6392) 2026-10-24T11:41:30.8342386Z Updating files: 85% (5434/6392) 2026-10-24T11:41:30.8369480Z Updating files: 86% (5498/6392) 2026-10-24T11:41:30.8443973Z Updating files: 87% (5562/6392) 2026-10-24T11:41:30.8476545Z Updating files: 88% (5625/6392) 2026-10-24T11:41:30.8497898Z Updating files: 89% (5689/6392) 2026-10-24T11:41:30.8529120Z Updating files: 90% (5753/6392) 2026-10-24T11:41:30.8557884Z Updating files: 91% (5817/6392) 2026-10-24T11:41:30.8574051Z Updating files: 92% (5881/6392) 2026-10-24T11:41:30.8597097Z Updating files: 93% (5945/6392) 2026-10-24T11:41:30.8619273Z Updating files: 94% (6009/6392) 2026-10-24T11:41:30.8644375Z Updating files: 95% (6073/6392) 2026-10-24T11:41:30.8705174Z Updating files: 96% (6137/6392) 2026-10-24T11:41:30.8729430Z Updating files: 97% (6201/6392) 2026-10-24T11:41:30.8779604Z Updating files: 98% (6265/6392) 2026-10-24T11:41:30.8799516Z Updating files: 99% (6329/6392) 2026-10-24T11:41:30.8799789Z Updating files: 100% (6392/6392) 2026-10-24T11:41:30.8800050Z Updating files: 100% (6392/6392), done. 2026-10-24T11:41:30.8960905Z Note: switching to 'refs/remotes/pull/24410/merge'. 2026-10-24T11:41:30.8961059Z 2026-10-24T11:41:30.8961300Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T11:41:30.8961581Z changes and commit them, and you can discard any commits you make in this 2026-10-24T11:41:30.8961865Z state without impacting any branches by switching back to a branch. 2026-10-24T11:41:30.8962020Z 2026-10-24T11:41:30.8962166Z If you want to create a new branch to retain commits you create, you may 2026-10-24T11:41:30.8962437Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T11:41:30.8962593Z 2026-10-24T11:41:30.8962674Z git switch -c 2026-10-24T11:41:30.8962786Z 2026-10-24T11:41:30.8962890Z Or undo this operation with: 2026-10-24T11:41:30.8962991Z 2026-10-24T11:41:30.8963054Z git switch - 2026-10-24T11:41:30.8963166Z 2026-10-24T11:41:30.8963316Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T11:41:30.8963490Z 2026-10-24T11:41:30.8963693Z HEAD is now at 4a33483 Merge a459583c71f7edee50f5ec0724db712f771398ed into 6e792117436662208bf2b6eb71ee8d0d88817e43 2026-10-24T11:41:30.8975405Z ##[endgroup] 2026-10-24T11:41:30.9010839Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T11:41:30.9028789Z 4a334831f613e54bbbf2c64f8e290c8b6400fba3 2026-10-24T11:41:30.9115467Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T11:41:30.9115738Z files="$(git ls-files .github/pr-assets)" 2026-10-24T11:41:30.9115950Z if test -n "$files"; then 2026-10-24T11:41:30.9116207Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T11:41:30.9116448Z  exit 1 2026-10-24T11:41:30.9116584Z fi 2026-10-24T11:41:30.9126852Z shell: /usr/bin/bash -e {0} 2026-10-24T11:41:30.9127031Z env: 2026-10-24T11:41:30.9127190Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:30.9127381Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:30.9127555Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:30.9127718Z ##[endgroup] 2026-10-24T11:41:30.9277309Z Prepare all required actions 2026-10-24T11:41:30.9277727Z Getting action download info 2026-10-24T11:41:31.0106900Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T11:41:31.1267624Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T11:41:31.1267820Z env: 2026-10-24T11:41:31.1267967Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:31.1268142Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:31.1268320Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:31.1268483Z ##[endgroup] 2026-10-24T11:41:31.1362863Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T11:41:31.1380208Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T11:41:31.1380733Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T11:41:31.1381066Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T11:41:31.1381336Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T11:41:31.1390285Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:41:31.1390480Z env: 2026-10-24T11:41:31.1390622Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:31.1390798Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:31.1390966Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:31.1391134Z ##[endgroup] 2026-10-24T11:41:31.1465289Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T11:41:31.1467282Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T11:41:31.1532178Z ##[group]Run actions/cache@v6 2026-10-24T11:41:31.1532434Z with: 2026-10-24T11:41:31.1532634Z path: ~/.vite-plus 2026-10-24T11:41:31.1532925Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T11:41:31.1533273Z enableCrossOsArchive: false 2026-10-24T11:41:31.1533514Z fail-on-cache-miss: false 2026-10-24T11:41:31.1533749Z lookup-only: false 2026-10-24T11:41:31.1533957Z save-always: false 2026-10-24T11:41:31.1534166Z env: 2026-10-24T11:41:31.1534370Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:31.1534644Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:31.1534907Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:31.1535153Z ##[endgroup] 2026-10-24T11:41:31.3681245Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T11:41:31.7684583Z Received 170349591 of 170349591 (100.0%), 432.1 MBs/sec 2026-10-24T11:41:31.7685727Z Cache Size: ~162 MB (170349591 B) 2026-10-24T11:41:31.7712624Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/359b4b7d-83f5-4850-ae03-f932fa5bc6ad/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T11:41:32.5589860Z Cache restored successfully 2026-10-24T11:41:32.5737465Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T11:41:32.5825666Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1435] 2026-10-24T11:41:32.5828228Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T11:41:32.5878630Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T11:41:32.5878857Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T11:41:32.5879040Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T11:41:32.5888834Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:41:32.5889011Z env: 2026-10-24T11:41:32.5889135Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:32.5889293Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:32.5889445Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:32.5889603Z ##[endgroup] 2026-10-24T11:41:32.5928575Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T11:41:32.5939569Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=11] 2026-10-24T11:41:32.5941746Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T11:41:32.5946587Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T11:41:32.5947792Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T11:41:32.5977262Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T11:41:32.5977460Z store_path="$(vp pm cache dir)" 2026-10-24T11:41:32.5977625Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T11:41:32.5989541Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:41:32.5989723Z env: 2026-10-24T11:41:32.5989845Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:32.5990154Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:32.5990339Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:32.5990517Z ##[endgroup] 2026-10-24T11:41:32.6137587Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=18] 2026-10-24T11:41:32.6138991Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T11:41:32.6487214Z ##[group]Run actions/cache@v6 2026-10-24T11:41:32.6487353Z with: 2026-10-24T11:41:32.6487487Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T11:41:32.6487754Z key: pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074 2026-10-24T11:41:32.6488028Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T11:41:32.6488182Z enableCrossOsArchive: false 2026-10-24T11:41:32.6488321Z fail-on-cache-miss: false 2026-10-24T11:41:32.6488447Z lookup-only: false 2026-10-24T11:41:32.6488566Z save-always: false 2026-10-24T11:41:32.6488676Z env: 2026-10-24T11:41:32.6488793Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:32.6488967Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:32.6489111Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:32.6489250Z ##[endgroup] 2026-10-24T11:41:32.8390739Z Cache hit for: pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074 2026-10-24T11:41:33.8619758Z Received 700448768 of 994208090 (70.5%), 664.7 MBs/sec 2026-10-24T11:41:34.3204757Z Received 994208090 of 994208090 (100.0%), 647.6 MBs/sec 2026-10-24T11:41:34.3205007Z Cache Size: ~948 MB (994208090 B) 2026-10-24T11:41:34.3243017Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/6f494117-60bc-4713-80a7-53f7b7d4a1ba/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T11:41:40.1930380Z Cache restored successfully 2026-10-24T11:41:40.2411836Z Cache restored from key: pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074 2026-10-24T11:41:40.2493768Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7635] 2026-10-24T11:41:40.2496078Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T11:41:40.2508314Z ##[group]Run vp install 2026-10-24T11:41:40.2508465Z vp install 2026-10-24T11:41:40.2517955Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:41:40.2518128Z env: 2026-10-24T11:41:40.2518246Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:40.2518396Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:40.2518543Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:40.2518684Z ##[endgroup] 2026-10-24T11:41:40.2882438Z Scope: all 34 workspace projects 2026-10-24T11:41:40.3875597Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T11:41:40.7423682Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T11:41:40.7424025Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T11:41:40.7424252Z Virtual store is at: node_modules/.pnpm 2026-10-24T11:41:43.0726052Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.7s) 2026-10-24T11:41:43.0726338Z Lockfile is up to date, resolution step is skipped 2026-10-24T11:41:43.0920009Z Packages: +1721 2026-10-24T11:41:43.0920180Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T11:41:43.1306091Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T11:41:44.2331763Z . prepare$ vp config --no-agent 2026-10-24T11:41:44.3420196Z . prepare: Done 2026-10-24T11:41:44.3435914Z 2026-10-24T11:41:44.3436450Z devDependencies: 2026-10-24T11:41:44.3436673Z + @coderabbitai/config 1.1.0 2026-10-24T11:41:44.3436937Z + @shadcn/lint 0.1.5 2026-10-24T11:41:44.3437105Z + @types/node 24.12.4 2026-10-24T11:41:44.3437235Z + knip 6.34.0 2026-10-24T11:41:44.3437394Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T11:41:44.3437545Z + vite-plus 1.3.0 2026-10-24T11:41:44.3437619Z 2026-10-24T11:41:44.3457920Z Done in 4.1s using pnpm v12.14.0 2026-10-24T11:41:44.3642578Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=4114] 2026-10-24T11:41:44.4160318Z ##[group]Run actions/cache@v6 2026-10-24T11:41:44.4160480Z with: 2026-10-24T11:41:44.4160599Z path: ~/.cache/electron 2026-10-24T11:41:44.4160824Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T11:41:44.4161065Z enableCrossOsArchive: false 2026-10-24T11:41:44.4161309Z fail-on-cache-miss: false 2026-10-24T11:41:44.4161436Z lookup-only: false 2026-10-24T11:41:44.4161556Z save-always: false 2026-10-24T11:41:44.4161669Z env: 2026-10-24T11:41:44.4161832Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:44.4161988Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:44.4162159Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:44.4162303Z ##[endgroup] 2026-10-24T11:41:44.6166561Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T11:41:44.7719845Z Received 122906203 of 122906203 (100.0%), 849.4 MBs/sec 2026-10-24T11:41:44.7723167Z Cache Size: ~117 MB (122906203 B) 2026-10-24T11:41:44.7749089Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/0781b8e4-bab9-4ec4-b9d7-962777c8e208/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T11:41:44.8585451Z Cache restored successfully 2026-10-24T11:41:44.8713379Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T11:41:44.8796766Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T11:41:44.8797023Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T11:41:44.8806756Z shell: /usr/bin/bash -e {0} 2026-10-24T11:41:44.8806888Z env: 2026-10-24T11:41:44.8807190Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:44.8807344Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:44.8807489Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:44.8807631Z ##[endgroup] 2026-10-24T11:41:45.0562975Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T11:41:45.6523273Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T11:41:45.6541930Z 2026-10-24T11:41:45.6656193Z ##[group]Run vp run knip:check 2026-10-24T11:41:45.6656357Z vp run knip:check 2026-10-24T11:41:45.6665323Z shell: /usr/bin/bash -e {0} 2026-10-24T11:41:45.6665455Z env: 2026-10-24T11:41:45.6665567Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:45.6665716Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:45.6665863Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:45.6666001Z ##[endgroup] 2026-10-24T11:41:45.8176336Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T11:41:49.9200024Z 2026-10-24T11:41:49.9203532Z $ 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-24T11:41:58.8074953Z 2026-10-24T11:41:58.8076516Z --- 2026-10-24T11:41:58.8076814Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T11:41:58.8177651Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T11:41:58.8177963Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T11:41:58.8187214Z shell: /usr/bin/bash -e {0} 2026-10-24T11:41:58.8187350Z env: 2026-10-24T11:41:58.8187464Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:58.8187618Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:58.8187763Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:58.8187904Z ##[endgroup] 2026-10-24T11:41:58.9703534Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T11:41:59.1739868Z 2026-10-24T11:41:59.1825423Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T11:41:59.1825656Z vp run --filter t3 generate --check 2026-10-24T11:41:59.1835483Z shell: /usr/bin/bash -e {0} 2026-10-24T11:41:59.1835623Z env: 2026-10-24T11:41:59.1835757Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:59.1835913Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:59.1836059Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:59.1836202Z ##[endgroup] 2026-10-24T11:41:59.3378253Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T11:41:59.4973838Z 2026-10-24T11:41:59.5064136Z ##[group]Run vp check 2026-10-24T11:41:59.5064299Z vp check 2026-10-24T11:41:59.5073544Z shell: /usr/bin/bash -e {0} 2026-10-24T11:41:59.5073684Z env: 2026-10-24T11:41:59.5073803Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:41:59.5073959Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:41:59.5074110Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:41:59.5074249Z ##[endgroup] 2026-10-24T11:42:00.0715218Z pass: All 5741 files are correctly formatted (415ms, 8 threads) 2026-10-24T11:42:05.5826192Z warn: Lint warnings found 2026-10-24T11:42:05.5827315Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.5827701Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T11:42:05.5828091Z 151 │ 2026-10-24T11:42:05.5828379Z 152 │ {props.children(open)} 2026-10-24T11:42:05.5828620Z ·  ──┬─ 2026-10-24T11:42:05.5828916Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.5829155Z 153 │ 2026-10-24T11:42:05.5829296Z ╰──── 2026-10-24T11:42:05.5829927Z  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-24T11:42:05.5830738Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.5831081Z 2026-10-24T11:42:05.5831414Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T11:42:05.5831785Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T11:42:05.5832038Z 139 │ if (action.id !== undefined) { 2026-10-24T11:42:05.5832230Z 140 │ props.onPressAction?.({ 2026-10-24T11:42:05.5832428Z ·  ──┬── 2026-10-24T11:42:05.5832659Z · ╰── Missing dependency `props` 2026-10-24T11:42:05.5832913Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T11:42:05.5833205Z 142 │ } as Parameters>[0]); 2026-10-24T11:42:05.5833434Z 143 │ } 2026-10-24T11:42:05.5833564Z 144 │ }, 2026-10-24T11:42:05.5833721Z 145 │ [close, props.onPressAction], 2026-10-24T11:42:05.5833927Z ·  ─────────┬───────── 2026-10-24T11:42:05.5834264Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T11:42:05.5834532Z 146 │ ); 2026-10-24T11:42:05.5834657Z ╰──── 2026-10-24T11:42:05.5835212Z  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-24T11:42:05.5835993Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.5836304Z 2026-10-24T11:42:05.5836464Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.5836798Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T11:42:05.5837029Z 276 │ 2026-10-24T11:42:05.5837291Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T11:42:05.5837575Z 278 │ │ ...nativeProps, 2026-10-24T11:42:05.5837846Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T11:42:05.5838096Z 280 │ │ ref: nativeRef, 2026-10-24T11:42:05.5838505Z 281 │ ├─▶ }); 2026-10-24T11:42:05.5838971Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.5839258Z 282 │ } 2026-10-24T11:42:05.5839383Z ╰──── 2026-10-24T11:42:05.5839924Z  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-24T11:42:05.5840672Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.5840962Z 2026-10-24T11:42:05.5848228Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.5848722Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T11:42:05.5848969Z 35 │ 2026-10-24T11:42:05.5849188Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T11:42:05.5849448Z ·  ────────┬──────── 2026-10-24T11:42:05.5849715Z · ╰── `inspectorProgress` originates here 2026-10-24T11:42:05.5849964Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T11:42:05.5850219Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T11:42:05.5850419Z 39 │ 2026-10-24T11:42:05.5850566Z 40 │ const onClosed = props.onClosed; 2026-10-24T11:42:05.5850736Z 41 │ useEffect(() => { 2026-10-24T11:42:05.5850917Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T11:42:05.5851158Z ·  ────────┬──────── 2026-10-24T11:42:05.5851413Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T11:42:05.5851643Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T11:42:05.5851805Z ╰──── 2026-10-24T11:42:05.5852147Z  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-24T11:42:05.5852742Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5853042Z 2026-10-24T11:42:05.5853212Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.5853547Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T11:42:05.5853819Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T11:42:05.5854071Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T11:42:05.5854308Z ·  ──────────┬───────── 2026-10-24T11:42:05.5854567Z · ╰── `renderedContentWidth` originates here 2026-10-24T11:42:05.5854779Z 39 │ 2026-10-24T11:42:05.5854921Z 40 │ const onClosed = props.onClosed; 2026-10-24T11:42:05.5855093Z 41 │ useEffect(() => { 2026-10-24T11:42:05.5855269Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T11:42:05.5855459Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T11:42:05.5855627Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T11:42:05.5855791Z 45 │ (finished) => { 2026-10-24T11:42:05.5856020Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T11:42:05.5856497Z 47 │ runOnJS(onClosed)(); 2026-10-24T11:42:05.5856726Z 48 │ } 2026-10-24T11:42:05.5856855Z 49 │ }, 2026-10-24T11:42:05.5856984Z 50 │ ); 2026-10-24T11:42:05.5857185Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T11:42:05.5857415Z 52 │ renderedInspectorWidth.set( 2026-10-24T11:42:05.5857663Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T11:42:05.5857878Z 54 │ ); 2026-10-24T11:42:05.5857999Z 55 │ }, [ 2026-10-24T11:42:05.5858136Z 56 │ inspectorProgress, 2026-10-24T11:42:05.5858294Z 57 │ inspectorVisible, 2026-10-24T11:42:05.5858445Z 58 │ inspectorWidth, 2026-10-24T11:42:05.5858594Z 59 │ onClosed, 2026-10-24T11:42:05.5858743Z 60 │ renderedInspectorWidth, 2026-10-24T11:42:05.5858902Z 61 │ resizing, 2026-10-24T11:42:05.5859038Z 62 │ ]); 2026-10-24T11:42:05.5859163Z 63 │ 2026-10-24T11:42:05.5859288Z 64 │ useEffect(() => { 2026-10-24T11:42:05.5859463Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T11:42:05.5859665Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T11:42:05.5859868Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T11:42:05.5860079Z ·  ──────────┬───────── 2026-10-24T11:42:05.5860342Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T11:42:05.5860562Z 68 │ return; 2026-10-24T11:42:05.5860689Z ╰──── 2026-10-24T11:42:05.5861020Z  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-24T11:42:05.5861630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5861933Z 2026-10-24T11:42:05.5862147Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.5862519Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T11:42:05.5862749Z 154 │ } 2026-10-24T11:42:05.5862886Z 155 │ }, [wrappedRender]); 2026-10-24T11:42:05.5863061Z ·  ──────┬────── 2026-10-24T11:42:05.5863312Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T11:42:05.5863519Z 156 │ 2026-10-24T11:42:05.5863638Z ╰──── 2026-10-24T11:42:05.5864003Z  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-24T11:42:05.5864606Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.5864908Z 2026-10-24T11:42:05.5865157Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:42:05.5865565Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T11:42:05.5865793Z 799 │ > 2026-10-24T11:42:05.5865997Z 800 │ 2026-10-24T11:42:05.5866267Z ·  ──────────────────── 2026-10-24T11:42:05.5866506Z 801 │ 2026-10-24T11:42:05.5866677Z ╰──── 2026-10-24T11:42:05.5867050Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:42:05.5867450Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:42:05.5867633Z 2026-10-24T11:42:05.5867831Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T11:42:05.5868176Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T11:42:05.5868519Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T11:42:05.5868774Z 602 │ const gesture = Gesture.Pan() 2026-10-24T11:42:05.5868969Z ·  ─┬─ 2026-10-24T11:42:05.5869220Z · ╰── `Pan` may be a component 2026-10-24T11:42:05.5869458Z 603 │ .enabled(!props.disabled) 2026-10-24T11:42:05.5869615Z ╰──── 2026-10-24T11:42:05.5869963Z  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-24T11:42:05.5870698Z  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-24T11:42:05.5871322Z 2026-10-24T11:42:05.5871591Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.5872029Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:406:5] 2026-10-24T11:42:05.5872247Z 404 │ 2026-10-24T11:42:05.5872380Z 405 │ useEffect(() => { 2026-10-24T11:42:05.5872545Z ·  ────┬──── 2026-10-24T11:42:05.5872774Z · ╰── This is the containing effect 2026-10-24T11:42:05.5873006Z 406 │ setInspectorSelection((current) => { 2026-10-24T11:42:05.5873205Z ·  ──────────┬────────── 2026-10-24T11:42:05.5873486Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.5873763Z 407 │ if (props.renderInspector === undefined) { 2026-10-24T11:42:05.5873940Z ╰──── 2026-10-24T11:42:05.5874627Z  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-24T11:42:05.5875517Z  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-24T11:42:05.5875830Z 2026-10-24T11:42:05.5876056Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T11:42:05.5876425Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:534:24] 2026-10-24T11:42:05.5876772Z 533 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T11:42:05.5877116Z 534 │ ╭─▶ const GitInspector = () => ( 2026-10-24T11:42:05.5877383Z 535 │ │ 2026-10-24T11:42:05.5878775Z 540 │ ╰─▶ ); 2026-10-24T11:42:05.5878993Z 541 │ const FilesInspector = () => 2026-10-24T11:42:05.5879153Z ╰──── 2026-10-24T11:42:05.5879438Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T11:42:05.5879658Z 2026-10-24T11:42:05.5879882Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T11:42:05.5880255Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:541:26] 2026-10-24T11:42:05.5880484Z 540 │ ); 2026-10-24T11:42:05.5880722Z 541 │ ╭─▶ const FilesInspector = () => 2026-10-24T11:42:05.5881072Z 542 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T11:42:05.5881424Z 543 │ │ 2026-10-24T11:42:05.5883512Z 551 │ ╰─▶ ) : null; 2026-10-24T11:42:05.5883813Z 552 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T11:42:05.5884040Z ╰──── 2026-10-24T11:42:05.5884316Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T11:42:05.5884536Z 2026-10-24T11:42:05.5884699Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.5885021Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T11:42:05.5885247Z  86 │ 2026-10-24T11:42:05.5885411Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T11:42:05.5885616Z ·  ──────┬───── 2026-10-24T11:42:05.5885855Z · ╰── `cardCoverage` originates here 2026-10-24T11:42:05.5886087Z  88 │ const barHeightRef = useRef(0); 2026-10-24T11:42:05.5886271Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T11:42:05.5886466Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T11:42:05.5886667Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T11:42:05.5886853Z  92 │ if (!cardCoverage) { 2026-10-24T11:42:05.5887013Z  93 │ return; 2026-10-24T11:42:05.5887152Z  94 │ } 2026-10-24T11:42:05.5887380Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T11:42:05.5887637Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T11:42:05.5887918Z  97 │ return; 2026-10-24T11:42:05.5905766Z  98 │ } 2026-10-24T11:42:05.5905941Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:42:05.5906146Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:42:05.5906345Z ·  ──────┬───── 2026-10-24T11:42:05.5906602Z · ╰── `cardCoverage` cannot be modified 2026-10-24T11:42:05.5906827Z 101 │ return; 2026-10-24T11:42:05.5906960Z ╰──── 2026-10-24T11:42:05.5907337Z  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-24T11:42:05.5907947Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5908255Z 2026-10-24T11:42:05.5908434Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.5908775Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T11:42:05.5909037Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T11:42:05.5909238Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T11:42:05.5909437Z ·  ─────┬──── 2026-10-24T11:42:05.5909675Z · ╰── `cardHeight` originates here 2026-10-24T11:42:05.5909921Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T11:42:05.5910111Z  92 │ if (!cardCoverage) { 2026-10-24T11:42:05.5910272Z  93 │ return; 2026-10-24T11:42:05.5910409Z  94 │ } 2026-10-24T11:42:05.5910634Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T11:42:05.5910904Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T11:42:05.5911107Z  97 │ return; 2026-10-24T11:42:05.5911253Z  98 │ } 2026-10-24T11:42:05.5911511Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:42:05.5911746Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:42:05.5911919Z 101 │ return; 2026-10-24T11:42:05.5912060Z 102 │ } 2026-10-24T11:42:05.5912236Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T11:42:05.5912467Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T11:42:05.5912674Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T11:42:05.5912845Z 106 │ }); 2026-10-24T11:42:05.5912980Z 107 │ }, [cardCoverage]); 2026-10-24T11:42:05.5913163Z 108 │ const handleBarLayout = useCallback( 2026-10-24T11:42:05.5913353Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.5913691Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:42:05.5913977Z 111 │ notifyCoverage(); 2026-10-24T11:42:05.5914128Z 112 │ }, 2026-10-24T11:42:05.5914269Z 113 │ [notifyCoverage], 2026-10-24T11:42:05.5914416Z 114 │ ); 2026-10-24T11:42:05.5914572Z 115 │ const handleCardLayout = useCallback( 2026-10-24T11:42:05.5914754Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.5914985Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:42:05.5915247Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T11:42:05.5915452Z ·  ─────┬──── 2026-10-24T11:42:05.5915684Z · ╰── `cardHeight` cannot be modified 2026-10-24T11:42:05.5915893Z 119 │ notifyCoverage(); 2026-10-24T11:42:05.5916031Z ╰──── 2026-10-24T11:42:05.5916369Z  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-24T11:42:05.5916948Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5917247Z 2026-10-24T11:42:05.5917454Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:42:05.5917811Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T11:42:05.5918061Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T11:42:05.5918258Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T11:42:05.5918473Z ·  ───┬─── 2026-10-24T11:42:05.5918839Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T11:42:05.5919132Z  92 │ if (!cardCoverage) { 2026-10-24T11:42:05.5919281Z  93 │ return; 2026-10-24T11:42:05.5919409Z  94 │ } 2026-10-24T11:42:05.5919626Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T11:42:05.5919878Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T11:42:05.5920043Z  97 │ return; 2026-10-24T11:42:05.5920175Z  98 │ } 2026-10-24T11:42:05.5920321Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:42:05.5920508Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:42:05.5920692Z ·  ──────┬───── 2026-10-24T11:42:05.5920928Z · ╰── This modifies `cardCoverage` 2026-10-24T11:42:05.5921291Z 101 │ return; 2026-10-24T11:42:05.5921429Z ╰──── 2026-10-24T11:42:05.5921839Z  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-24T11:42:05.5922480Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5922776Z 2026-10-24T11:42:05.5922982Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:42:05.5923344Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T11:42:05.5923592Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:42:05.5923782Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:42:05.5924059Z ·  ──────┬───── 2026-10-24T11:42:05.5924331Z · ╰── This modifies `cardCoverage` 2026-10-24T11:42:05.5924535Z 101 │ return; 2026-10-24T11:42:05.5924665Z 102 │ } 2026-10-24T11:42:05.5924836Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T11:42:05.5925053Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T11:42:05.5925257Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T11:42:05.5925421Z 106 │ }); 2026-10-24T11:42:05.5925560Z 107 │ }, [cardCoverage]); 2026-10-24T11:42:05.5925732Z 108 │ const handleBarLayout = useCallback( 2026-10-24T11:42:05.5925919Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.5926134Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.5926482Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T11:42:05.5926831Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:42:05.5927027Z ╰──── 2026-10-24T11:42:05.5927431Z  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-24T11:42:05.5928056Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5928352Z 2026-10-24T11:42:05.5928558Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:42:05.5928916Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T11:42:05.5929180Z 115 │ const handleCardLayout = useCallback( 2026-10-24T11:42:05.5929372Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.5929587Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.5929924Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T11:42:05.5930272Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:42:05.5930534Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T11:42:05.5930746Z ·  ─────┬──── 2026-10-24T11:42:05.5930973Z · ╰── This modifies `cardHeight` 2026-10-24T11:42:05.5931210Z 119 │ notifyCoverage(); 2026-10-24T11:42:05.5931352Z ╰──── 2026-10-24T11:42:05.5932233Z  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-24T11:42:05.5932864Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.5933163Z 2026-10-24T11:42:05.5933387Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:42:05.5933741Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T11:42:05.5934029Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T11:42:05.5934284Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T11:42:05.5934527Z ·  ─────── 2026-10-24T11:42:05.5934761Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T11:42:05.5935014Z ╰──── 2026-10-24T11:42:05.5935380Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:42:05.5935636Z 2026-10-24T11:42:05.5936130Z ⚠ 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-24T11:42:05.5936722Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T11:42:05.5937032Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T11:42:05.5937336Z 133 │ ╭─▶ for ( 2026-10-24T11:42:05.5937602Z 134 │ │ let attempt = 0; 2026-10-24T11:42:05.5937900Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T11:42:05.5938177Z 136 │ │ attempt += 1 2026-10-24T11:42:05.5938376Z 137 │ │ ) { 2026-10-24T11:42:05.5938594Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.5938860Z 139 │ ╰─▶ } 2026-10-24T11:42:05.5939130Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T11:42:05.5939327Z ╰──── 2026-10-24T11:42:05.5939388Z 2026-10-24T11:42:05.5939583Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5939923Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T11:42:05.5940242Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T11:42:05.5940507Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T11:42:05.5940705Z ·  ┬ 2026-10-24T11:42:05.5940946Z · ╰── '_' is declared here 2026-10-24T11:42:05.5941210Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T11:42:05.5941386Z ╰──── 2026-10-24T11:42:05.5941551Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5941673Z 2026-10-24T11:42:05.5941865Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5942188Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T11:42:05.5942398Z 133 │ ); 2026-10-24T11:42:05.5942580Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T11:42:05.5942810Z ·  ┬ 2026-10-24T11:42:05.5943066Z · ╰── '_' is declared here 2026-10-24T11:42:05.5943278Z 135 │ Effect.succeed( 2026-10-24T11:42:05.5943423Z ╰──── 2026-10-24T11:42:05.5943585Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5943707Z 2026-10-24T11:42:05.5943896Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5944216Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T11:42:05.5944424Z 177 │ }); 2026-10-24T11:42:05.5944593Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T11:42:05.5944878Z ·  ┬ 2026-10-24T11:42:05.5945164Z · ╰── '_' is declared here 2026-10-24T11:42:05.5945405Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T11:42:05.5945579Z ╰──── 2026-10-24T11:42:05.5945745Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5945861Z 2026-10-24T11:42:05.5946049Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5946373Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T11:42:05.5946578Z 202 │ ); 2026-10-24T11:42:05.5946742Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T11:42:05.5946954Z ·  ┬ 2026-10-24T11:42:05.5947206Z · ╰── '_' is declared here 2026-10-24T11:42:05.5947436Z 204 │ options.removeWorktreeFails 2026-10-24T11:42:05.5947594Z ╰──── 2026-10-24T11:42:05.5947759Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5947875Z 2026-10-24T11:42:05.5948063Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5948385Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T11:42:05.5948590Z 207 │ ); 2026-10-24T11:42:05.5948763Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T11:42:05.5948979Z ·  ┬ 2026-10-24T11:42:05.5949231Z · ╰── '_' is declared here 2026-10-24T11:42:05.5949458Z 209 │ options.deleteLocalBranchFails 2026-10-24T11:42:05.5949620Z ╰──── 2026-10-24T11:42:05.5949792Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5949916Z 2026-10-24T11:42:05.5950100Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5950423Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T11:42:05.5950629Z 212 │ ); 2026-10-24T11:42:05.5950815Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T11:42:05.5951076Z ·  ┬ 2026-10-24T11:42:05.5951345Z · ╰── '_' is declared here 2026-10-24T11:42:05.5951579Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T11:42:05.5951747Z ╰──── 2026-10-24T11:42:05.5951908Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5952029Z 2026-10-24T11:42:05.5952225Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5952553Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T11:42:05.5952765Z 253 │ ); 2026-10-24T11:42:05.5952926Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T11:42:05.5953131Z ·  ┬ 2026-10-24T11:42:05.5953380Z · ╰── '_' is declared here 2026-10-24T11:42:05.5953586Z 255 │ Effect.succeed({ 2026-10-24T11:42:05.5953733Z ╰──── 2026-10-24T11:42:05.5953895Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5954016Z 2026-10-24T11:42:05.5954206Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.5954592Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T11:42:05.5954835Z 263 │ ); 2026-10-24T11:42:05.5955056Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T11:42:05.5955316Z ·  ┬ 2026-10-24T11:42:05.5955564Z · ╰── '_' is declared here 2026-10-24T11:42:05.5955858Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T11:42:05.5956071Z ╰──── 2026-10-24T11:42:05.5956237Z  help: Consider removing this parameter. 2026-10-24T11:42:05.5956400Z 2026-10-24T11:42:05.5956589Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:42:05.5956951Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T11:42:05.5957235Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T11:42:05.5957542Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T11:42:05.5957887Z ·  ─────┬───── 2026-10-24T11:42:05.5958255Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T11:42:05.5958530Z 101 │ const readEditor = useCallback( 2026-10-24T11:42:05.5958687Z ╰──── 2026-10-24T11:42:05.5959079Z  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-24T11:42:05.5959705Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.5960016Z 2026-10-24T11:42:05.5960207Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:42:05.5960556Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T11:42:05.5960791Z 120 │ setEditor, 2026-10-24T11:42:05.5960939Z 121 │ startEditor, 2026-10-24T11:42:05.5961228Z ·  ─────┬───── 2026-10-24T11:42:05.5961474Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T11:42:05.5961696Z 122 │ hasChanges, 2026-10-24T11:42:05.5961829Z ╰──── 2026-10-24T11:42:05.5962215Z  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-24T11:42:05.5962841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.5963145Z 2026-10-24T11:42:05.5963363Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T11:42:05.5963696Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T11:42:05.5963941Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T11:42:05.5964227Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T11:42:05.5964530Z 159 │ │ constructor(data: Record) { 2026-10-24T11:42:05.5964880Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T11:42:05.5965139Z 161 │ │ } 2026-10-24T11:42:05.5965365Z 162 │ ╰─▶ }, 2026-10-24T11:42:05.5965573Z 163 │ clipboard: { 2026-10-24T11:42:05.5965712Z ╰──── 2026-10-24T11:42:05.5965939Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T11:42:05.5966119Z 2026-10-24T11:42:05.5966284Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T11:42:05.5966572Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T11:42:05.5966829Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T11:42:05.5967057Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T11:42:05.5967288Z ·  ───────────────────────────── 2026-10-24T11:42:05.5967532Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T11:42:05.5967729Z ╰──── 2026-10-24T11:42:05.5967950Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T11:42:05.5968122Z 2026-10-24T11:42:05.5968428Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.5968832Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T11:42:05.5969032Z 217 │ 2026-10-24T11:42:05.5969247Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T11:42:05.5969507Z ·  ──────────┬────────── 2026-10-24T11:42:05.5969780Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T11:42:05.5970133Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T11:42:05.5970378Z ╰──── 2026-10-24T11:42:05.5970544Z  help: Consider removing this declaration. 2026-10-24T11:42:05.5970664Z 2026-10-24T11:42:05.5970982Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.5971424Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T11:42:05.5971616Z 220 │ 2026-10-24T11:42:05.5971816Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T11:42:05.5972079Z ·  ──────────────┬────────────── 2026-10-24T11:42:05.5972441Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T11:42:05.5972825Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T11:42:05.5973049Z ╰──── 2026-10-24T11:42:05.5973215Z  help: Consider removing this declaration. 2026-10-24T11:42:05.5973338Z 2026-10-24T11:42:05.5973553Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T11:42:05.5973868Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T11:42:05.5974129Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T11:42:05.5974407Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T11:42:05.5974627Z ·  ──────┬────── 2026-10-24T11:42:05.5974878Z · ╰── 'HookForwarder' is imported here 2026-10-24T11:42:05.5975141Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T11:42:05.5975320Z ╰──── 2026-10-24T11:42:05.5975476Z  help: Consider removing this import. 2026-10-24T11:42:05.5975593Z 2026-10-24T11:42:05.5975767Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T11:42:05.5976136Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T11:42:05.5976480Z 219 │ 2026-10-24T11:42:05.5976777Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T11:42:05.5977040Z ·  ──┬─ 2026-10-24T11:42:05.5977327Z · ╰── 'U+001B' is a control character. 2026-10-24T11:42:05.5977560Z 221 │ 2026-10-24T11:42:05.5977707Z ╰──── 2026-10-24T11:42:05.5978003Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T11:42:05.5978240Z 2026-10-24T11:42:05.5978507Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.5978945Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T11:42:05.5979189Z 117 │ 2026-10-24T11:42:05.5979319Z 118 │ useEffect(() => { 2026-10-24T11:42:05.5979484Z ·  ────┬──── 2026-10-24T11:42:05.5979709Z · ╰── This is the containing effect 2026-10-24T11:42:05.5979932Z 119 │ void refreshNotifications(); 2026-10-24T11:42:05.5980135Z ·  ──────────┬───────── 2026-10-24T11:42:05.5980425Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.5980748Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T11:42:05.5980963Z ╰──── 2026-10-24T11:42:05.5981667Z  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-24T11:42:05.5982553Z  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-24T11:42:05.5982868Z 2026-10-24T11:42:05.5983196Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.5983674Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T11:42:05.5983918Z 125 │ 2026-10-24T11:42:05.5984045Z 126 │ useEffect(() => { 2026-10-24T11:42:05.5984202Z ·  ────┬──── 2026-10-24T11:42:05.5984427Z · ╰── This is the containing effect 2026-10-24T11:42:05.5984632Z 127 │ if (!isLoaded) { 2026-10-24T11:42:05.5984810Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T11:42:05.5985010Z ·  ──────────┬────────── 2026-10-24T11:42:05.5985288Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.5985527Z 129 │ return; 2026-10-24T11:42:05.5985657Z ╰──── 2026-10-24T11:42:05.5986328Z  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-24T11:42:05.5987201Z  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-24T11:42:05.5987511Z 2026-10-24T11:42:05.5987776Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.5988205Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7] 2026-10-24T11:42:05.5988442Z 328 │ }; 2026-10-24T11:42:05.5988577Z 329 │ useEffect(() => { 2026-10-24T11:42:05.5988735Z ·  ────┬──── 2026-10-24T11:42:05.5988957Z · ╰── This is the containing effect 2026-10-24T11:42:05.5989199Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T11:42:05.5989414Z 331 │ requestedSection.current = "overview"; 2026-10-24T11:42:05.5989700Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T11:42:05.5989949Z 333 │ setSection("overview"); 2026-10-24T11:42:05.5990124Z ·  ─────┬──── 2026-10-24T11:42:05.5990392Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.5990621Z 334 │ } 2026-10-24T11:42:05.5990740Z ╰──── 2026-10-24T11:42:05.5991433Z  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-24T11:42:05.5992301Z  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-24T11:42:05.5992607Z 2026-10-24T11:42:05.5992819Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:42:05.5993198Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6] 2026-10-24T11:42:05.5993479Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T11:42:05.5993803Z 331 │ requestedSection.current = "overview"; 2026-10-24T11:42:05.5994041Z ·  ────────┬─────── 2026-10-24T11:42:05.5994600Z · ╰── 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-24T11:42:05.5995170Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T11:42:05.5995503Z ·  ─────────┬───────── ──────┬────── 2026-10-24T11:42:05.5996170Z · │ ╰── 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-24T11:42:05.5997066Z · ╰── 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-24T11:42:05.5997547Z 333 │ setSection("overview"); 2026-10-24T11:42:05.5997698Z 334 │ } 2026-10-24T11:42:05.5997861Z 335 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T11:42:05.5998092Z ·  ──────────────────┬───────────────── 2026-10-24T11:42:05.5998415Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.5998693Z 336 │ const tabContent = activityContent; 2026-10-24T11:42:05.5998856Z ╰──── 2026-10-24T11:42:05.5999096Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:42:05.5999602Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.5999910Z 2026-10-24T11:42:05.6000120Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:42:05.6000502Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6] 2026-10-24T11:42:05.6000740Z 860 │ if ( 2026-10-24T11:42:05.6000932Z 861 │ lastSelection.current.path === route.params.path && 2026-10-24T11:42:05.6001245Z ·  ──────┬────── 2026-10-24T11:42:05.6001794Z · ╰── 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-24T11:42:05.6002322Z 862 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T11:42:05.6002524Z 863 │ ) 2026-10-24T11:42:05.6002654Z 864 │ return; 2026-10-24T11:42:05.6002911Z 865 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T11:42:05.6003234Z 866 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T11:42:05.6003476Z 867 │ setJumpPath(route.params.path); 2026-10-24T11:42:05.6003660Z 868 │ setSelectedRowId(null); 2026-10-24T11:42:05.6003836Z 869 │ jumpStarted.current = false; 2026-10-24T11:42:05.6004092Z 870 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T11:42:05.6004434Z 871 │ if (!file || !nativeView.current) return; 2026-10-24T11:42:05.6004691Z ·  ─────┬──── 2026-10-24T11:42:05.6005244Z · ╰── 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-24T11:42:05.6005766Z 872 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T11:42:05.6005987Z 873 │ jumpStarted.current = true; 2026-10-24T11:42:05.6006233Z 874 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T11:42:05.6006467Z 875 │ jumpStarted.current = false; 2026-10-24T11:42:05.6006636Z 876 │ }); 2026-10-24T11:42:05.6006904Z 877 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T11:42:05.6007339Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T11:42:05.6007769Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6008096Z 878 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T11:42:05.6008280Z ╰──── 2026-10-24T11:42:05.6008512Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:42:05.6009005Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6009306Z 2026-10-24T11:42:05.6009788Z ⚠ 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-24T11:42:05.6010344Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T11:42:05.6010552Z 38 │ JSON.stringify( 2026-10-24T11:42:05.6010763Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T11:42:05.6011000Z ·  ──────────────────────── 2026-10-24T11:42:05.6011199Z 40 │ { name: "a" }, 2026-10-24T11:42:05.6011343Z ╰──── 2026-10-24T11:42:05.6011399Z 2026-10-24T11:42:05.6011665Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6012054Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T11:42:05.6012374Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T11:42:05.6012604Z 84 │ useEffect(() => { 2026-10-24T11:42:05.6012767Z ·  ────┬──── 2026-10-24T11:42:05.6012991Z · ╰── This is the containing effect 2026-10-24T11:42:05.6013221Z 85 │ if (!actionState.isRunning) return; 2026-10-24T11:42:05.6013396Z 86 │ setNowMs(Date.now()); 2026-10-24T11:42:05.6013560Z ·  ────┬─── 2026-10-24T11:42:05.6013820Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6014122Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T11:42:05.6014317Z ╰──── 2026-10-24T11:42:05.6014999Z  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-24T11:42:05.6015872Z  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-24T11:42:05.6016181Z 2026-10-24T11:42:05.6016395Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T11:42:05.6016710Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T11:42:05.6016902Z 296 │ } from "./device.ts"; 2026-10-24T11:42:05.6017083Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T11:42:05.6017266Z ·  ── 2026-10-24T11:42:05.6017412Z 298 │ import { 2026-10-24T11:42:05.6017538Z ╰──── 2026-10-24T11:42:05.6017685Z  help: Remove empty braces 2026-10-24T11:42:05.6017793Z 2026-10-24T11:42:05.6018000Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6018348Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5] 2026-10-24T11:42:05.6018583Z 1320 │ queuedMessagesByThreadKey, 2026-10-24T11:42:05.6018753Z 1321 │ retryTick, 2026-10-24T11:42:05.6018909Z ·  ────┬──── 2026-10-24T11:42:05.6019150Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T11:42:05.6019372Z 1322 │ restoreQueuedMessage, 2026-10-24T11:42:05.6019521Z ╰──── 2026-10-24T11:42:05.6019881Z  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-24T11:42:05.6020494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6020804Z 2026-10-24T11:42:05.6021010Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T11:42:05.6021417Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T11:42:05.6021668Z 14 │ } from "@t3tools/contracts"; 2026-10-24T11:42:05.6021855Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T11:42:05.6022036Z ·  ── 2026-10-24T11:42:05.6022181Z 16 │ 2026-10-24T11:42:05.6022293Z ╰──── 2026-10-24T11:42:05.6022433Z  help: Remove empty braces 2026-10-24T11:42:05.6022538Z 2026-10-24T11:42:05.6022773Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:42:05.6023176Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T11:42:05.6023427Z 52 │ 2026-10-24T11:42:05.6023553Z 53 │ for (const {} of [ 2026-10-24T11:42:05.6023714Z ·  ── 2026-10-24T11:42:05.6023870Z 54 │ { healthy: true }, 2026-10-24T11:42:05.6024014Z ╰──── 2026-10-24T11:42:05.6024302Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:42:05.6024530Z 2026-10-24T11:42:05.6024719Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:42:05.6025090Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T11:42:05.6025353Z 115 │ return [...commands]; 2026-10-24T11:42:05.6025585Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T11:42:05.6025860Z ·  ─────────┬───────── 2026-10-24T11:42:05.6026173Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T11:42:05.6026404Z 117 │ 2026-10-24T11:42:05.6026521Z ╰──── 2026-10-24T11:42:05.6026899Z  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-24T11:42:05.6027521Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6027824Z 2026-10-24T11:42:05.6028206Z ⚠ 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-24T11:42:05.6028662Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T11:42:05.6028959Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T11:42:05.6029300Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T11:42:05.6029592Z ·  ──────────────────────── 2026-10-24T11:42:05.6029775Z 18 │ "review:write", 2026-10-24T11:42:05.6029916Z ╰──── 2026-10-24T11:42:05.6029975Z 2026-10-24T11:42:05.6030347Z ⚠ 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-24T11:42:05.6030805Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T11:42:05.6030998Z 19 │ ]); 2026-10-24T11:42:05.6031255Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T11:42:05.6031545Z ·  ──────────────────────── 2026-10-24T11:42:05.6031793Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T11:42:05.6031993Z ╰──── 2026-10-24T11:42:05.6032049Z 2026-10-24T11:42:05.6032422Z ⚠ 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-24T11:42:05.6032880Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T11:42:05.6033181Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T11:42:05.6033552Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T11:42:05.6033836Z ·  ──────────────────────── 2026-10-24T11:42:05.6034028Z 59 │ authenticated: true, 2026-10-24T11:42:05.6034172Z ╰──── 2026-10-24T11:42:05.6034231Z 2026-10-24T11:42:05.6034501Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6034899Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T11:42:05.6035112Z 3754 │ 2026-10-24T11:42:05.6035387Z 3755 │ const layer: Layer.Layer = 2026-10-24T11:42:05.6035671Z ·  ──┬── 2026-10-24T11:42:05.6035900Z · ╰── 'layer' is declared here 2026-10-24T11:42:05.6036108Z 3756 │ Layer.effect( 2026-10-24T11:42:05.6036250Z ╰──── 2026-10-24T11:42:05.6036420Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6036546Z 2026-10-24T11:42:05.6036710Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6037033Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T11:42:05.6037306Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T11:42:05.6037520Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T11:42:05.6037718Z ·  ──────┬────── 2026-10-24T11:42:05.6037962Z · ╰── `pulseProgress` originates here 2026-10-24T11:42:05.6038169Z 55 │ 2026-10-24T11:42:05.6038298Z 56 │ useEffect(() => { 2026-10-24T11:42:05.6038455Z 57 │ if (pulse) { 2026-10-24T11:42:05.6038635Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T11:42:05.6038824Z ·  ──────┬────── 2026-10-24T11:42:05.6039073Z · ╰── `pulseProgress` cannot be modified 2026-10-24T11:42:05.6039293Z 59 │ withTiming(1, { 2026-10-24T11:42:05.6039439Z ╰──── 2026-10-24T11:42:05.6039772Z  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-24T11:42:05.6040353Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6040655Z 2026-10-24T11:42:05.6041589Z ⚠ 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-24T11:42:05.6042168Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T11:42:05.6042417Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T11:42:05.6042783Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T11:42:05.6043129Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T11:42:05.6043426Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T11:42:05.6043724Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T11:42:05.6043981Z 2619 │ │ flush: () => { 2026-10-24T11:42:05.6044306Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T11:42:05.6044643Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T11:42:05.6044884Z 2622 │ │ }, 2026-10-24T11:42:05.6045071Z 2623 │ │ }; 2026-10-24T11:42:05.6045244Z 2624 │ │ 2026-10-24T11:42:05.6045505Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T11:42:05.6045781Z 2626 │ │ let requestChecks = 0; 2026-10-24T11:42:05.6046041Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T11:42:05.6046300Z 2628 │ │ executionMode: "async", 2026-10-24T11:42:05.6046562Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T11:42:05.6046821Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T11:42:05.6047085Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T11:42:05.6047342Z 2632 │ │ requestChecks += 1; 2026-10-24T11:42:05.6047614Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T11:42:05.6047890Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T11:42:05.6048123Z 2635 │ │ return true; 2026-10-24T11:42:05.6048327Z 2636 │ │ }, 2026-10-24T11:42:05.6048511Z 2637 │ │ }; 2026-10-24T11:42:05.6048686Z 2638 │ │ 2026-10-24T11:42:05.6048908Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T11:42:05.6049148Z 2640 │ │ ...WINDOW, 2026-10-24T11:42:05.6049391Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T11:42:05.6049739Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T11:42:05.6050017Z 2643 │ │ }; 2026-10-24T11:42:05.6050233Z 2644 │ │ const first = yield* service 2026-10-24T11:42:05.6050474Z 2645 │ │ .readSummary(input) 2026-10-24T11:42:05.6050688Z 2646 │ │ .pipe( 2026-10-24T11:42:05.6050899Z 2647 │ │ Effect.exit, 2026-10-24T11:42:05.6051197Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T11:42:05.6051479Z 2649 │ │ Effect.forkChild, 2026-10-24T11:42:05.6051686Z 2650 │ │ ); 2026-10-24T11:42:05.6051897Z 2651 │ │ requestFiber = first; 2026-10-24T11:42:05.6052127Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6052360Z 2653 │ │ dispatcher.flush(); 2026-10-24T11:42:05.6052554Z 2654 │ │ 2026-10-24T11:42:05.6052806Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T11:42:05.6053069Z 2656 │ │ Effect.match({ 2026-10-24T11:42:05.6053318Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T11:42:05.6053585Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T11:42:05.6053878Z 2659 │ │ }), 2026-10-24T11:42:05.6054186Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T11:42:05.6054455Z 2661 │ │ Effect.forkChild, 2026-10-24T11:42:05.6054659Z 2662 │ │ ); 2026-10-24T11:42:05.6054868Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6055100Z 2664 │ │ dispatcher.flush(); 2026-10-24T11:42:05.6055353Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T11:42:05.6055619Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T11:42:05.6055868Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T11:42:05.6056124Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T11:42:05.6056348Z 2669 │ │ break; 2026-10-24T11:42:05.6056539Z 2670 │ │ } 2026-10-24T11:42:05.6056763Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T11:42:05.6057063Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T11:42:05.6057309Z 2673 │ │ } 2026-10-24T11:42:05.6057561Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T11:42:05.6057863Z 2675 │ ╰─▶ } 2026-10-24T11:42:05.6058063Z 2676 │ 2026-10-24T11:42:05.6058191Z ╰──── 2026-10-24T11:42:05.6058252Z 2026-10-24T11:42:05.6058525Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6058927Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2143:5] 2026-10-24T11:42:05.6059137Z 2141 │ ); 2026-10-24T11:42:05.6059277Z 2142 │ useEffect(() => { 2026-10-24T11:42:05.6059442Z ·  ────┬──── 2026-10-24T11:42:05.6059673Z · ╰── This is the containing effect 2026-10-24T11:42:05.6059889Z 2143 │ setExpandedVideo(null); 2026-10-24T11:42:05.6060074Z ·  ────────┬─────── 2026-10-24T11:42:05.6060353Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6060602Z 2144 │ setExpandedFile(null); 2026-10-24T11:42:05.6060751Z ╰──── 2026-10-24T11:42:05.6061515Z  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-24T11:42:05.6062428Z  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-24T11:42:05.6062744Z 2026-10-24T11:42:05.6063012Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6063400Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2644:9] 2026-10-24T11:42:05.6063697Z 2635 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false)); 2026-10-24T11:42:05.6063918Z 2636 │ useEffect(() => { 2026-10-24T11:42:05.6064087Z ·  ────┬──── 2026-10-24T11:42:05.6064316Z · ╰── This is the containing effect 2026-10-24T11:42:05.6064592Z 2637 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return; 2026-10-24T11:42:05.6064834Z 2638 │ const index = presentedFeed.findIndex( 2026-10-24T11:42:05.6065087Z 2639 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId, 2026-10-24T11:42:05.6065298Z 2640 │ ); 2026-10-24T11:42:05.6065438Z 2641 │ if (index === -1) { 2026-10-24T11:42:05.6065666Z 2642 │ const runId = messageFoldRunId(props.feed, jumpToMessageId); 2026-10-24T11:42:05.6065915Z 2643 │ if (runId && !expandedTurnIds.has(runId)) { 2026-10-24T11:42:05.6066135Z 2644 │ setInteractionState((current) => ({ 2026-10-24T11:42:05.6066345Z ·  ─────────┬───────── 2026-10-24T11:42:05.6066642Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6066893Z 2645 │ ...current, 2026-10-24T11:42:05.6067041Z ╰──── 2026-10-24T11:42:05.6067718Z  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-24T11:42:05.6068609Z  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-24T11:42:05.6068924Z 2026-10-24T11:42:05.6069166Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T11:42:05.6069542Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T11:42:05.6069834Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T11:42:05.6070135Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T11:42:05.6070395Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6070682Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T11:42:05.6077162Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T11:42:05.6077394Z ╰──── 2026-10-24T11:42:05.6077551Z  help: Consider removing this import. 2026-10-24T11:42:05.6077668Z 2026-10-24T11:42:05.6077975Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T11:42:05.6078357Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T11:42:05.6078559Z 91 │ import { 2026-10-24T11:42:05.6078693Z 92 │ createContext, 2026-10-24T11:42:05.6078849Z ·  ──────┬────── 2026-10-24T11:42:05.6079079Z · ╰── 'createContext' is imported here 2026-10-24T11:42:05.6079276Z 93 │ memo, 2026-10-24T11:42:05.6079392Z ╰──── 2026-10-24T11:42:05.6079543Z  help: Consider removing this import. 2026-10-24T11:42:05.6079656Z 2026-10-24T11:42:05.6079875Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T11:42:05.6080222Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T11:42:05.6080432Z 107 │ import { 2026-10-24T11:42:05.6080577Z 108 │ ActivityIndicator, 2026-10-24T11:42:05.6080752Z ·  ────────┬──────── 2026-10-24T11:42:05.6081002Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T11:42:05.6081307Z 109 │ Image, 2026-10-24T11:42:05.6081429Z ╰──── 2026-10-24T11:42:05.6081582Z  help: Consider removing this import. 2026-10-24T11:42:05.6081697Z 2026-10-24T11:42:05.6081904Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T11:42:05.6082235Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T11:42:05.6082443Z 114 │ Pressable, 2026-10-24T11:42:05.6082583Z 115 │ ScrollView, 2026-10-24T11:42:05.6082733Z ·  ─────┬──── 2026-10-24T11:42:05.6082962Z · ╰── 'ScrollView' is imported here 2026-10-24T11:42:05.6083174Z 116 │ StyleSheet, 2026-10-24T11:42:05.6083300Z ╰──── 2026-10-24T11:42:05.6083453Z  help: Consider removing this import. 2026-10-24T11:42:05.6083569Z 2026-10-24T11:42:05.6083773Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T11:42:05.6084106Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T11:42:05.6084315Z 116 │ StyleSheet, 2026-10-24T11:42:05.6084456Z 117 │ Text as NativeText, 2026-10-24T11:42:05.6084626Z ·  ─────┬──── 2026-10-24T11:42:05.6084862Z · ╰── 'NativeText' is imported here 2026-10-24T11:42:05.6085073Z 118 │ type ColorValue, 2026-10-24T11:42:05.6085208Z ╰──── 2026-10-24T11:42:05.6085367Z  help: Consider removing this import. 2026-10-24T11:42:05.6085483Z 2026-10-24T11:42:05.6085706Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T11:42:05.6086054Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T11:42:05.6086335Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T11:42:05.6086611Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T11:42:05.6086845Z ·  ─────────┬──────── 2026-10-24T11:42:05.6087102Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T11:42:05.6087407Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T11:42:05.6087618Z ╰──── 2026-10-24T11:42:05.6087774Z  help: Consider removing this import. 2026-10-24T11:42:05.6087975Z 2026-10-24T11:42:05.6088241Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T11:42:05.6088593Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T11:42:05.6088876Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T11:42:05.6089154Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T11:42:05.6089386Z ·  ─────────┬───────── 2026-10-24T11:42:05.6089647Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T11:42:05.6089859Z 144 │ import { 2026-10-24T11:42:05.6089982Z ╰──── 2026-10-24T11:42:05.6090135Z  help: Consider removing this import. 2026-10-24T11:42:05.6090251Z 2026-10-24T11:42:05.6090477Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T11:42:05.6090828Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T11:42:05.6091248Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T11:42:05.6091540Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T11:42:05.6091776Z ·  ────────┬─────── 2026-10-24T11:42:05.6092032Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T11:42:05.6092324Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T11:42:05.6092531Z ╰──── 2026-10-24T11:42:05.6092683Z  help: Consider removing this import. 2026-10-24T11:42:05.6092799Z 2026-10-24T11:42:05.6093037Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T11:42:05.6093392Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T11:42:05.6093620Z 160 │ attachmentVideoPreviewSource, 2026-10-24T11:42:05.6093795Z 161 │ mediaVideoPreviewUri, 2026-10-24T11:42:05.6093973Z ·  ──────────┬───────── 2026-10-24T11:42:05.6094224Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T11:42:05.6094451Z 162 │ mediaVideoThumbnailKey, 2026-10-24T11:42:05.6094595Z ╰──── 2026-10-24T11:42:05.6094746Z  help: Consider removing this import. 2026-10-24T11:42:05.6094861Z 2026-10-24T11:42:05.6095089Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T11:42:05.6095447Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T11:42:05.6095661Z 161 │ mediaVideoPreviewUri, 2026-10-24T11:42:05.6095822Z 162 │ mediaVideoThumbnailKey, 2026-10-24T11:42:05.6096005Z ·  ───────────┬────────── 2026-10-24T11:42:05.6096261Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T11:42:05.6096501Z 163 │ type MediaVideoPreviewSource, 2026-10-24T11:42:05.6096651Z ╰──── 2026-10-24T11:42:05.6096802Z  help: Consider removing this import. 2026-10-24T11:42:05.6096914Z 2026-10-24T11:42:05.6097135Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T11:42:05.6097479Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T11:42:05.6097692Z 162 │ mediaVideoThumbnailKey, 2026-10-24T11:42:05.6097954Z 163 │ type MediaVideoPreviewSource, 2026-10-24T11:42:05.6098188Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6098460Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T11:42:05.6098709Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T11:42:05.6098863Z ╰──── 2026-10-24T11:42:05.6099015Z  help: Consider removing this import. 2026-10-24T11:42:05.6099129Z 2026-10-24T11:42:05.6099332Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T11:42:05.6099663Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T11:42:05.6099987Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T11:42:05.6100318Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T11:42:05.6100567Z ·  ───────┬─────── 2026-10-24T11:42:05.6100824Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T11:42:05.6101059Z 172 │ import { 2026-10-24T11:42:05.6101180Z ╰──── 2026-10-24T11:42:05.6101331Z  help: Consider removing this import. 2026-10-24T11:42:05.6101444Z 2026-10-24T11:42:05.6101678Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T11:42:05.6102036Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T11:42:05.6102243Z 185 │ import { 2026-10-24T11:42:05.6102385Z 186 │ resolveMarkdownFontSizes, 2026-10-24T11:42:05.6102571Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6102840Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T11:42:05.6103090Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T11:42:05.6103250Z ╰──── 2026-10-24T11:42:05.6103401Z  help: Consider removing this import. 2026-10-24T11:42:05.6103515Z 2026-10-24T11:42:05.6103784Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T11:42:05.6104169Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:193:3] 2026-10-24T11:42:05.6104393Z 192 │ normalizeNativeMarkdownUrl, 2026-10-24T11:42:05.6104586Z 193 │ resolveMarkdownInlineCodePresentation, 2026-10-24T11:42:05.6104812Z ·  ──────────────────┬────────────────── 2026-10-24T11:42:05.6105189Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T11:42:05.6105503Z 194 │ resolveMarkdownLinkPresentation, 2026-10-24T11:42:05.6105662Z ╰──── 2026-10-24T11:42:05.6105815Z  help: Consider removing this import. 2026-10-24T11:42:05.6105927Z 2026-10-24T11:42:05.6106163Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T11:42:05.6106524Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:233:10] 2026-10-24T11:42:05.6106775Z 232 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T11:42:05.6107042Z 233 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T11:42:05.6107309Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6107585Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T11:42:05.6107818Z 234 │ import { 2026-10-24T11:42:05.6107943Z ╰──── 2026-10-24T11:42:05.6108097Z  help: Consider removing this import. 2026-10-24T11:42:05.6108288Z 2026-10-24T11:42:05.6108504Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T11:42:05.6108847Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:237:3] 2026-10-24T11:42:05.6109055Z 236 │ useAssetUrl, 2026-10-24T11:42:05.6109201Z 237 │ useAssetUrlState, 2026-10-24T11:42:05.6109367Z ·  ────────┬─────── 2026-10-24T11:42:05.6109609Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T11:42:05.6109822Z 238 │ useRefreshAssetUrl, 2026-10-24T11:42:05.6109961Z ╰──── 2026-10-24T11:42:05.6110114Z  help: Consider removing this import. 2026-10-24T11:42:05.6110235Z 2026-10-24T11:42:05.6110447Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6110791Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2145:7] 2026-10-24T11:42:05.6111011Z 2144 │ setExpandedFile(null); 2026-10-24T11:42:05.6111294Z 2145 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T11:42:05.6111695Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T11:42:05.6112191Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T11:42:05.6112665Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T11:42:05.6113029Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T11:42:05.6113336Z 2146 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T11:42:05.6113539Z ╰──── 2026-10-24T11:42:05.6113896Z  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-24T11:42:05.6114499Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6114796Z 2026-10-24T11:42:05.6115000Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6115401Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2613:7] 2026-10-24T11:42:05.6115680Z 2612 │ reportHeaderMaterialVisibility(false); 2026-10-24T11:42:05.6115912Z 2613 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T11:42:05.6116125Z ·  ──────┬────── 2026-10-24T11:42:05.6116372Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T11:42:05.6116577Z 2614 │ 2026-10-24T11:42:05.6116687Z ╰──── 2026-10-24T11:42:05.6117039Z  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-24T11:42:05.6117626Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6117928Z 2026-10-24T11:42:05.6118139Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6118474Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2629:7] 2026-10-24T11:42:05.6118677Z 2628 │ } 2026-10-24T11:42:05.6118876Z 2629 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T11:42:05.6119099Z ·  ──────┬───── 2026-10-24T11:42:05.6119343Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T11:42:05.6119640Z 2630 │ // Opening at a message: its run unfolds, the list stops following the end 2026-10-24T11:42:05.6119843Z ╰──── 2026-10-24T11:42:05.6120196Z  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-24T11:42:05.6120798Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6121186Z 2026-10-24T11:42:05.6121393Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6121728Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2825:7] 2026-10-24T11:42:05.6121930Z 2824 │ } 2026-10-24T11:42:05.6122179Z 2825 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T11:42:05.6122573Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T11:42:05.6123016Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T11:42:05.6123454Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T11:42:05.6123799Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T11:42:05.6124010Z 2826 │ 2026-10-24T11:42:05.6124121Z ╰──── 2026-10-24T11:42:05.6124472Z  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-24T11:42:05.6125066Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6125366Z 2026-10-24T11:42:05.6125624Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:42:05.6125987Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:617:9] 2026-10-24T11:42:05.6126190Z 616 │ }; 2026-10-24T11:42:05.6126374Z 617 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T11:42:05.6126701Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T11:42:05.6127121Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T11:42:05.6127541Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T11:42:05.6127902Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T11:42:05.6128125Z 618 │ ); 2026-10-24T11:42:05.6128239Z ╰──── 2026-10-24T11:42:05.6128612Z  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-24T11:42:05.6129224Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6129523Z 2026-10-24T11:42:05.6129795Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6130166Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T11:42:05.6130350Z 168 │ 2026-10-24T11:42:05.6130489Z 169 │ const layerTest = Layer.succeed( 2026-10-24T11:42:05.6130672Z ·  ────┬──── 2026-10-24T11:42:05.6130897Z · ╰── 'layerTest' is declared here 2026-10-24T11:42:05.6131120Z 170 │ UsageService, 2026-10-24T11:42:05.6131250Z ╰──── 2026-10-24T11:42:05.6131410Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6131529Z 2026-10-24T11:42:05.6131793Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6132210Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T11:42:05.6132438Z 76 │ 2026-10-24T11:42:05.6132560Z 77 │ useEffect(() => { 2026-10-24T11:42:05.6132715Z ·  ────┬──── 2026-10-24T11:42:05.6132934Z · ╰── This is the containing effect 2026-10-24T11:42:05.6133207Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T11:42:05.6133490Z 79 │ setHostInput(host); 2026-10-24T11:42:05.6133653Z ·  ──────┬───── 2026-10-24T11:42:05.6133918Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6134152Z 80 │ setCodeInput(code); 2026-10-24T11:42:05.6134288Z ╰──── 2026-10-24T11:42:05.6134957Z  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-24T11:42:05.6135897Z  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-24T11:42:05.6136238Z 2026-10-24T11:42:05.6136500Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6136917Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T11:42:05.6137146Z 82 │ 2026-10-24T11:42:05.6137267Z 83 │ useEffect(() => { 2026-10-24T11:42:05.6137418Z ·  ────┬──── 2026-10-24T11:42:05.6137632Z · ╰── This is the containing effect 2026-10-24T11:42:05.6137855Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T11:42:05.6138020Z 85 │ return; 2026-10-24T11:42:05.6138147Z 86 │ } 2026-10-24T11:42:05.6138260Z 87 │ 2026-10-24T11:42:05.6138440Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T11:42:05.6138644Z 89 │ setHostInput(host); 2026-10-24T11:42:05.6138804Z ·  ──────┬───── 2026-10-24T11:42:05.6139061Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6139292Z 90 │ setCodeInput(code); 2026-10-24T11:42:05.6139426Z ╰──── 2026-10-24T11:42:05.6140094Z  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-24T11:42:05.6140958Z  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-24T11:42:05.6141300Z 2026-10-24T11:42:05.6141564Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6141980Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T11:42:05.6142206Z 92 │ 2026-10-24T11:42:05.6142326Z 93 │ useEffect(() => { 2026-10-24T11:42:05.6142477Z ·  ────┬──── 2026-10-24T11:42:05.6142689Z · ╰── This is the containing effect 2026-10-24T11:42:05.6142905Z 94 │ if (pairingConnectionError) { 2026-10-24T11:42:05.6143077Z 95 │ setIsSubmitting(false); 2026-10-24T11:42:05.6143251Z ·  ───────┬─────── 2026-10-24T11:42:05.6143520Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6143806Z 96 │ } 2026-10-24T11:42:05.6144024Z ╰──── 2026-10-24T11:42:05.6144682Z  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-24T11:42:05.6145546Z  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-24T11:42:05.6145853Z 2026-10-24T11:42:05.6146113Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6146518Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T11:42:05.6146824Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T11:42:05.6147037Z 356 │ useEffect(() => { 2026-10-24T11:42:05.6147193Z ·  ────┬──── 2026-10-24T11:42:05.6147409Z · ╰── This is the containing effect 2026-10-24T11:42:05.6147634Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T11:42:05.6147802Z 358 │ return; 2026-10-24T11:42:05.6147859Z 359 │ } 2026-10-24T11:42:05.6147960Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T11:42:05.6148054Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T11:42:05.6148162Z ·  ──────────────┬────────────── 2026-10-24T11:42:05.6148344Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6148414Z 362 │ return; 2026-10-24T11:42:05.6148470Z ╰──── 2026-10-24T11:42:05.6149071Z  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-24T11:42:05.6149398Z  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-24T11:42:05.6149400Z 2026-10-24T11:42:05.6149663Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6149821Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T11:42:05.6149877Z 447 │ 2026-10-24T11:42:05.6149945Z 448 │ useEffect(() => { 2026-10-24T11:42:05.6150017Z ·  ────┬──── 2026-10-24T11:42:05.6150148Z · ╰── This is the containing effect 2026-10-24T11:42:05.6150251Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T11:42:05.6150311Z 450 │ return; 2026-10-24T11:42:05.6150366Z 451 │ } 2026-10-24T11:42:05.6150508Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T11:42:05.6150644Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T11:42:05.6150752Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T11:42:05.6150806Z 455 │ } 2026-10-24T11:42:05.6150946Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T11:42:05.6151155Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T11:42:05.6151292Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T11:42:05.6151364Z 459 │ const directProject = 2026-10-24T11:42:05.6151431Z 460 │ projects.find( 2026-10-24T11:42:05.6151497Z 461 │ (project) => 2026-10-24T11:42:05.6151673Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T11:42:05.6151736Z 463 │ ) ?? null; 2026-10-24T11:42:05.6151786Z 464 │ 2026-10-24T11:42:05.6151855Z 465 │ if (directProject) { 2026-10-24T11:42:05.6151996Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T11:42:05.6152136Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T11:42:05.6152305Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T11:42:05.6152445Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T11:42:05.6152509Z 470 │ return; 2026-10-24T11:42:05.6152567Z 471 │ } 2026-10-24T11:42:05.6152664Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T11:42:05.6152726Z 473 │ if ( 2026-10-24T11:42:05.6152869Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T11:42:05.6152970Z 475 │ selectedProject.id !== directProject.id 2026-10-24T11:42:05.6153029Z 476 │ ) { 2026-10-24T11:42:05.6153114Z 477 │ setProject(directProject); 2026-10-24T11:42:05.6153178Z 478 │ return; 2026-10-24T11:42:05.6153237Z 479 │ } 2026-10-24T11:42:05.6153319Z 480 │ if (!flow.draftKey) return; 2026-10-24T11:42:05.6153468Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T11:42:05.6153621Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T11:42:05.6153734Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T11:42:05.6153812Z 484 │ workspaceSelection: { 2026-10-24T11:42:05.6153882Z 485 │ mode: "local", 2026-10-24T11:42:05.6153988Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T11:42:05.6154125Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T11:42:05.6154207Z 488 │ startFromOrigin: false, 2026-10-24T11:42:05.6154269Z 489 │ }, 2026-10-24T11:42:05.6154329Z 490 │ }); 2026-10-24T11:42:05.6154385Z 491 │ } 2026-10-24T11:42:05.6154512Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T11:42:05.6154576Z 493 │ if ( 2026-10-24T11:42:05.6154724Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T11:42:05.6154823Z 495 │ selectedProject.id === directProject.id 2026-10-24T11:42:05.6154883Z 496 │ ) { 2026-10-24T11:42:05.6154947Z 497 │ return; 2026-10-24T11:42:05.6155005Z 498 │ } 2026-10-24T11:42:05.6155085Z 499 │ setProject(directProject); 2026-10-24T11:42:05.6155147Z 500 │ return; 2026-10-24T11:42:05.6155203Z 501 │ } 2026-10-24T11:42:05.6155257Z 502 │ 2026-10-24T11:42:05.6155334Z 503 │ if (projects.length > 0) { 2026-10-24T11:42:05.6155433Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T11:42:05.6155544Z ·  ──────────────┬────────────── 2026-10-24T11:42:05.6155793Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6155884Z 505 │ } 2026-10-24T11:42:05.6155938Z ╰──── 2026-10-24T11:42:05.6156549Z  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-24T11:42:05.6156880Z  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-24T11:42:05.6156883Z 2026-10-24T11:42:05.6157148Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6157307Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T11:42:05.6157365Z 545 │ 2026-10-24T11:42:05.6157430Z 546 │ useEffect(() => { 2026-10-24T11:42:05.6157501Z ·  ────┬──── 2026-10-24T11:42:05.6157632Z · ╰── This is the containing effect 2026-10-24T11:42:05.6157727Z 547 │ const shareId = props.incomingShareId; 2026-10-24T11:42:05.6157809Z 548 │ const draftKey = flow.draftKey; 2026-10-24T11:42:05.6157911Z 549 │ const destinationProject = selectedProject; 2026-10-24T11:42:05.6158052Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T11:42:05.6158183Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T11:42:05.6158274Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T11:42:05.6158356Z 553 │ !initialEnvironmentId || 2026-10-24T11:42:05.6158432Z 554 │ !initialProjectId || 2026-10-24T11:42:05.6158565Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T11:42:05.6158673Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T11:42:05.6158732Z 557 │ if ( 2026-10-24T11:42:05.6158794Z 558 │ !shareId || 2026-10-24T11:42:05.6158858Z 559 │ !draftKey || 2026-10-24T11:42:05.6158932Z 560 │ !destinationProject || 2026-10-24T11:42:05.6159021Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T11:42:05.6159110Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T11:42:05.6159168Z 563 │ ) { 2026-10-24T11:42:05.6159229Z 564 │ return; 2026-10-24T11:42:05.6159284Z 565 │ } 2026-10-24T11:42:05.6159381Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T11:42:05.6159438Z 567 │ if ( 2026-10-24T11:42:05.6159556Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T11:42:05.6159672Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T11:42:05.6159729Z 570 │ ) { 2026-10-24T11:42:05.6159790Z 571 │ return; 2026-10-24T11:42:05.6159845Z 572 │ } 2026-10-24T11:42:05.6159897Z 573 │ 2026-10-24T11:42:05.6159967Z 574 │ if (!incomingShare) { 2026-10-24T11:42:05.6160166Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T11:42:05.6160295Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T11:42:05.6160360Z 577 │ Dialog.alert( 2026-10-24T11:42:05.6160447Z 578 │ "Shared content unavailable", 2026-10-24T11:42:05.6160625Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T11:42:05.6160747Z 580 │ ); 2026-10-24T11:42:05.6160836Z 581 │ } 2026-10-24T11:42:05.6160896Z 582 │ return; 2026-10-24T11:42:05.6160951Z 583 │ } 2026-10-24T11:42:05.6161002Z 584 │ 2026-10-24T11:42:05.6161084Z 585 │ if ( 2026-10-24T11:42:05.6161331Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T11:42:05.6161433Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T11:42:05.6161488Z 588 │ ) { 2026-10-24T11:42:05.6161548Z 589 │ return; 2026-10-24T11:42:05.6161604Z 590 │ } 2026-10-24T11:42:05.6161656Z 591 │ 2026-10-24T11:42:05.6161793Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T11:42:05.6161916Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T11:42:05.6161971Z 594 │ } 2026-10-24T11:42:05.6162083Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T11:42:05.6162158Z 596 │ const draftBackup = 2026-10-24T11:42:05.6162345Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T11:42:05.6162482Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T11:42:05.6162572Z 599 │ const importToken = Symbol(importKey); 2026-10-24T11:42:05.6162650Z 600 │ let didReserveShare = false; 2026-10-24T11:42:05.6162727Z 601 │ let didConsumeShare = false; 2026-10-24T11:42:05.6162808Z 602 │ let needsDraftRestore = false; 2026-10-24T11:42:05.6162918Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T11:42:05.6163000Z 604 │ setImportingShareKey(importKey); 2026-10-24T11:42:05.6163089Z ·  ──────────┬───────── 2026-10-24T11:42:05.6163273Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6163345Z 605 │ void (async () => { 2026-10-24T11:42:05.6163397Z ╰──── 2026-10-24T11:42:05.6164009Z  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-24T11:42:05.6164339Z  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-24T11:42:05.6164342Z 2026-10-24T11:42:05.6164550Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6164709Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T11:42:05.6164786Z 523 │ props.initialProjectRef, 2026-10-24T11:42:05.6164860Z 524 │ props.incomingShareId, 2026-10-24T11:42:05.6164951Z ·  ──────────┬────────── 2026-10-24T11:42:05.6165121Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T11:42:05.6165191Z 525 │ props.pendingTaskId, 2026-10-24T11:42:05.6165243Z ╰──── 2026-10-24T11:42:05.6165540Z  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-24T11:42:05.6165856Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6165859Z 2026-10-24T11:42:05.6166151Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6166356Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T11:42:05.6166474Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T11:42:05.6166543Z 543 │ flow.loadBranches(); 2026-10-24T11:42:05.6166612Z ·  ──┬─ 2026-10-24T11:42:05.6166740Z · ╰── Missing dependency `flow` 2026-10-24T11:42:05.6166834Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T11:42:05.6166921Z ·  ────────┬──────── 2026-10-24T11:42:05.6167124Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T11:42:05.6167178Z 545 │ 2026-10-24T11:42:05.6167238Z ╰──── 2026-10-24T11:42:05.6167671Z  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-24T11:42:05.6167987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6167990Z 2026-10-24T11:42:05.6168193Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6168349Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T11:42:05.6168414Z 765 │ flow.draftKey, 2026-10-24T11:42:05.6168492Z 766 │ hasImportedIncomingShare, 2026-10-24T11:42:05.6168589Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6168771Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T11:42:05.6168836Z 767 │ incomingShare, 2026-10-24T11:42:05.6168918Z 768 │ isIncomingShareInboxLoading, 2026-10-24T11:42:05.6169016Z ·  ─────────────┬───────────── 2026-10-24T11:42:05.6169203Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T11:42:05.6169283Z 769 │ isIncomingShareUnavailable, 2026-10-24T11:42:05.6169356Z 770 │ props.incomingShareId, 2026-10-24T11:42:05.6169449Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T11:42:05.6169538Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T11:42:05.6169613Z 773 │ releaseShareReservation, 2026-10-24T11:42:05.6169685Z 774 │ reserveShare, 2026-10-24T11:42:05.6169772Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T11:42:05.6169841Z 776 │ selectedProject, 2026-10-24T11:42:05.6169912Z 777 │ shareImportAttempt, 2026-10-24T11:42:05.6169998Z ·  ─────────┬──────── 2026-10-24T11:42:05.6170164Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T11:42:05.6170220Z 778 │ ]); 2026-10-24T11:42:05.6170272Z ╰──── 2026-10-24T11:42:05.6170568Z  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-24T11:42:05.6170879Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6170882Z 2026-10-24T11:42:05.6171219Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T11:42:05.6171381Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:517:11] 2026-10-24T11:42:05.6171483Z 516 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T11:42:05.6171622Z 517 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T11:42:05.6171709Z ·  ─────────────── 2026-10-24T11:42:05.6171764Z 518 │ ) 2026-10-24T11:42:05.6171816Z ╰──── 2026-10-24T11:42:05.6171969Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T11:42:05.6171972Z 2026-10-24T11:42:05.6172448Z ⚠ 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-24T11:42:05.6172592Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T11:42:05.6172729Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T11:42:05.6172915Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T11:42:05.6173025Z ·  ──────────────────────── 2026-10-24T11:42:05.6173090Z 182 │ version: 1, 2026-10-24T11:42:05.6173142Z ╰──── 2026-10-24T11:42:05.6173145Z 2026-10-24T11:42:05.6173369Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:42:05.6173505Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T11:42:05.6173580Z 1021 │ instanceId, 2026-10-24T11:42:05.6173729Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T11:42:05.6173875Z ·  ────────────────────────────────────────────────── 2026-10-24T11:42:05.6173936Z 1023 │ ]), 2026-10-24T11:42:05.6173991Z ╰──── 2026-10-24T11:42:05.6174264Z  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-24T11:42:05.6174267Z 2026-10-24T11:42:05.6174626Z ⚠ 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-24T11:42:05.6174762Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T11:42:05.6174955Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T11:42:05.6175143Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T11:42:05.6175261Z ·  ─────────────────── 2026-10-24T11:42:05.6175325Z 1787 │ cwd, 2026-10-24T11:42:05.6175377Z ╰──── 2026-10-24T11:42:05.6175380Z 2026-10-24T11:42:05.6175584Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6175701Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T11:42:05.6175777Z 28 │ getPendingThreadOrder(); 2026-10-24T11:42:05.6175856Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T11:42:05.6175980Z ·  ────┬──── ───────┬────── 2026-10-24T11:42:05.6176186Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T11:42:05.6176334Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T11:42:05.6176399Z 30 │ return pending; 2026-10-24T11:42:05.6176452Z ╰──── 2026-10-24T11:42:05.6176751Z  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-24T11:42:05.6177065Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6177067Z 2026-10-24T11:42:05.6177282Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6177462Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T11:42:05.6177545Z 248 │ mountedRef.current = false; 2026-10-24T11:42:05.6177623Z 249 │ flow.setBranchQuery(""); 2026-10-24T11:42:05.6177692Z ·  ──┬─ 2026-10-24T11:42:05.6177821Z · ╰── Missing dependency `flow` 2026-10-24T11:42:05.6177878Z 250 │ }; 2026-10-24T11:42:05.6177952Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T11:42:05.6178039Z ·  ─────────┬───────── 2026-10-24T11:42:05.6178246Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T11:42:05.6178301Z 252 │ 2026-10-24T11:42:05.6178354Z ╰──── 2026-10-24T11:42:05.6178783Z  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-24T11:42:05.6179103Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6179105Z 2026-10-24T11:42:05.6179367Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6179527Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T11:42:05.6179591Z 259 │ .join("|"); 2026-10-24T11:42:05.6179655Z 260 │ useEffect(() => { 2026-10-24T11:42:05.6179728Z ·  ────┬──── 2026-10-24T11:42:05.6179863Z · ╰── This is the containing effect 2026-10-24T11:42:05.6179925Z 261 │ stop(); 2026-10-24T11:42:05.6180052Z ·  ──┬─ 2026-10-24T11:42:05.6180252Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6180319Z 262 │ }, [orderVersion]); 2026-10-24T11:42:05.6180372Z ╰──── 2026-10-24T11:42:05.6180981Z  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-24T11:42:05.6181327Z  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-24T11:42:05.6181329Z 2026-10-24T11:42:05.6181552Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6181715Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T11:42:05.6181781Z 260 │ useEffect(() => { 2026-10-24T11:42:05.6181839Z 261 │ stop(); 2026-10-24T11:42:05.6181910Z ·  ──┬─ 2026-10-24T11:42:05.6182038Z · ╰── Missing dependency `stop` 2026-10-24T11:42:05.6182103Z 262 │ }, [orderVersion]); 2026-10-24T11:42:05.6182182Z ·  ──────┬───── 2026-10-24T11:42:05.6182333Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T11:42:05.6182395Z 263 │ useEffect( 2026-10-24T11:42:05.6182447Z ╰──── 2026-10-24T11:42:05.6182874Z  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-24T11:42:05.6183191Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6183194Z 2026-10-24T11:42:05.6183341Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6183501Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T11:42:05.6183577Z 95 │ const latest = useRef(props); 2026-10-24T11:42:05.6183646Z 96 │ latest.current = props; 2026-10-24T11:42:05.6183754Z ·  ───┬──────┬─── 2026-10-24T11:42:05.6183944Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6184061Z · ╰── This value is a ref 2026-10-24T11:42:05.6184132Z 97 │ const gesture = useMemo( 2026-10-24T11:42:05.6184185Z ╰──── 2026-10-24T11:42:05.6184657Z  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-24T11:42:05.6184951Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6184954Z 2026-10-24T11:42:05.6185099Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6185317Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T11:42:05.6185418Z 103 │ .runOnJS(true) 2026-10-24T11:42:05.6185520Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T11:42:05.6185639Z ·  ───────────────┬────────────── 2026-10-24T11:42:05.6185845Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6185980Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6186032Z ╰──── 2026-10-24T11:42:05.6186499Z  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-24T11:42:05.6186796Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6186803Z 2026-10-24T11:42:05.6186950Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6187110Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T11:42:05.6187208Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T11:42:05.6187339Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6187484Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T11:42:05.6187699Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6187832Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6187887Z ╰──── 2026-10-24T11:42:05.6188359Z  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-24T11:42:05.6188651Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6188654Z 2026-10-24T11:42:05.6188799Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6188960Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T11:42:05.6189089Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6189216Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6189364Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T11:42:05.6189572Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6189698Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T11:42:05.6189749Z ╰──── 2026-10-24T11:42:05.6190216Z  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-24T11:42:05.6190561Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6190596Z 2026-10-24T11:42:05.6190742Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6190901Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T11:42:05.6191045Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6191169Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T11:42:05.6191310Z ·  ───────────────────────┬────────────────────── 2026-10-24T11:42:05.6191521Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6191589Z 108 │ [props.disabled], 2026-10-24T11:42:05.6191641Z ╰──── 2026-10-24T11:42:05.6192121Z  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-24T11:42:05.6192416Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6192418Z 2026-10-24T11:42:05.6192561Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6192722Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T11:42:05.6192838Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T11:42:05.6192945Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T11:42:05.6193053Z ·  ───┬──────┬─── 2026-10-24T11:42:05.6193238Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6193354Z · ╰── This value is a ref 2026-10-24T11:42:05.6193409Z 250 │ 2026-10-24T11:42:05.6193460Z ╰──── 2026-10-24T11:42:05.6193927Z  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-24T11:42:05.6194220Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6194222Z 2026-10-24T11:42:05.6194430Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6194625Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T11:42:05.6194745Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T11:42:05.6194860Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T11:42:05.6194987Z ·  ──────────────────┬────────────────── 2026-10-24T11:42:05.6195157Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6195267Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T11:42:05.6195319Z ╰──── 2026-10-24T11:42:05.6195790Z  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-24T11:42:05.6196084Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6196087Z 2026-10-24T11:42:05.6196261Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6196419Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T11:42:05.6196484Z 323 │ update(0); 2026-10-24T11:42:05.6196565Z 324 │ let last = performance.now(); 2026-10-24T11:42:05.6196666Z ·  ────────┬──────── 2026-10-24T11:42:05.6196807Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6196878Z 325 │ const tick = () => { 2026-10-24T11:42:05.6196937Z ╰──── 2026-10-24T11:42:05.6197246Z  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-24T11:42:05.6197546Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6197551Z 2026-10-24T11:42:05.6197741Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T11:42:05.6197905Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T11:42:05.6197965Z  98 │ () => 2026-10-24T11:42:05.6198033Z  99 │ Gesture.Pan() 2026-10-24T11:42:05.6198109Z ·  ─┬─ 2026-10-24T11:42:05.6198247Z · ╰── `Pan` may be a component 2026-10-24T11:42:05.6198330Z 100 │ .enabled(!props.disabled) 2026-10-24T11:42:05.6198383Z ╰──── 2026-10-24T11:42:05.6198662Z  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-24T11:42:05.6199117Z  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-24T11:42:05.6199120Z 2026-10-24T11:42:05.6199312Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:42:05.6199475Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T11:42:05.6199596Z 103 │ .runOnJS(true) 2026-10-24T11:42:05.6199729Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T11:42:05.6199818Z ·  ───┬── 2026-10-24T11:42:05.6200256Z · ╰── 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-24T11:42:05.6200394Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6200518Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:42:05.6200644Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T11:42:05.6200715Z 108 │ [props.disabled], 2026-10-24T11:42:05.6200798Z ·  ────────┬─────── 2026-10-24T11:42:05.6200996Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6201078Z 109 │ ); 2026-10-24T11:42:05.6201215Z ╰──── 2026-10-24T11:42:05.6201425Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:42:05.6201743Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6201745Z 2026-10-24T11:42:05.6201943Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T11:42:05.6202093Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T11:42:05.6202150Z  80 │ 2026-10-24T11:42:05.6202430Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T11:42:05.6202557Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T11:42:05.6202680Z  83 │ │ ): Effect.fn.Return { 2026-10-24T11:42:05.6202849Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T11:42:05.6202987Z  85 │ │ const connections = new Map(); 2026-10-24T11:42:05.6203057Z  86 │ │ 2026-10-24T11:42:05.6203275Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T11:42:05.6203377Z  88 │ │ Effect.suspend(() => { 2026-10-24T11:42:05.6203523Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T11:42:05.6203637Z  90 │ │ return connection === undefined 2026-10-24T11:42:05.6203857Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T11:42:05.6203970Z  92 │ │ : Effect.succeed(connection); 2026-10-24T11:42:05.6204049Z  93 │ │ }); 2026-10-24T11:42:05.6204120Z  94 │ │ 2026-10-24T11:42:05.6204211Z  95 │ │ const send = ( 2026-10-24T11:42:05.6204317Z  96 │ │ connection: Connection, 2026-10-24T11:42:05.6204412Z  97 │ │ message: unknown, 2026-10-24T11:42:05.6204570Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T11:42:05.6204763Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T11:42:05.6204917Z 100 │ │ Effect.gen(function* () { 2026-10-24T11:42:05.6205043Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T11:42:05.6205187Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T11:42:05.6205406Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T11:42:05.6205489Z 104 │ │ } 2026-10-24T11:42:05.6205624Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T11:42:05.6205724Z 106 │ │ try: (signal) => 2026-10-24T11:42:05.6205860Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T11:42:05.6205971Z 108 │ │ method: "POST", 2026-10-24T11:42:05.6206068Z 109 │ │ signal, 2026-10-24T11:42:05.6206165Z 110 │ │ headers: { 2026-10-24T11:42:05.6206296Z 111 │ │ "content-type": "application/json", 2026-10-24T11:42:05.6206443Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T11:42:05.6206577Z 113 │ │ authorization: options.authorization, 2026-10-24T11:42:05.6206704Z 114 │ │ ...(connection.sessionId === null 2026-10-24T11:42:05.6206799Z 115 │ │ ? {} 2026-10-24T11:42:05.6206948Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T11:42:05.6207090Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T11:42:05.6207185Z 118 │ │ ? {} 2026-10-24T11:42:05.6207354Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T11:42:05.6207441Z 120 │ │ }, 2026-10-24T11:42:05.6207535Z 121 │ │ body, 2026-10-24T11:42:05.6207622Z 122 │ │ }), 2026-10-24T11:42:05.6207726Z 123 │ │ catch: bridgeError, 2026-10-24T11:42:05.6207809Z 124 │ │ }); 2026-10-24T11:42:05.6208025Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T11:42:05.6208135Z 126 │ │ if (!response.ok) { 2026-10-24T11:42:05.6208245Z 127 │ │ yield* Effect.promise( 2026-10-24T11:42:05.6208429Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T11:42:05.6208512Z 129 │ │ ); 2026-10-24T11:42:05.6208626Z 130 │ │ return yield* Effect.fail( 2026-10-24T11:42:05.6208840Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T11:42:05.6208922Z 132 │ │ ); 2026-10-24T11:42:05.6209002Z 133 │ │ } 2026-10-24T11:42:05.6209215Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T11:42:05.6209394Z 135 │ │ for (const payload of payloads) { 2026-10-24T11:42:05.6209652Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T11:42:05.6209732Z 137 │ │ } 2026-10-24T11:42:05.6209835Z 138 │ │ return payloads; 2026-10-24T11:42:05.6209958Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T11:42:05.6210036Z 140 │ │ ); 2026-10-24T11:42:05.6210106Z 141 │ │ 2026-10-24T11:42:05.6210284Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T11:42:05.6210410Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T11:42:05.6210603Z 144 │ │ ): Effect.fn.Return { 2026-10-24T11:42:05.6210770Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T11:42:05.6210899Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T11:42:05.6211021Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T11:42:05.6211142Z 148 │ │ if (sessionId !== null) { 2026-10-24T11:42:05.6211274Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T11:42:05.6211373Z 150 │ │ try: (signal) => 2026-10-24T11:42:05.6211503Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T11:42:05.6211605Z 152 │ │ method: "DELETE", 2026-10-24T11:42:05.6211703Z 153 │ │ signal, 2026-10-24T11:42:05.6211804Z 154 │ │ headers: { 2026-10-24T11:42:05.6211935Z 155 │ │ authorization: options.authorization, 2026-10-24T11:42:05.6212056Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T11:42:05.6212191Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T11:42:05.6212284Z 158 │ │ ? {} 2026-10-24T11:42:05.6212450Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T11:42:05.6212534Z 160 │ │ }, 2026-10-24T11:42:05.6212618Z 161 │ │ }), 2026-10-24T11:42:05.6212721Z 162 │ │ catch: bridgeError, 2026-10-24T11:42:05.6212806Z 163 │ │ }); 2026-10-24T11:42:05.6212945Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T11:42:05.6213058Z 165 │ │ return yield* Effect.fail( 2026-10-24T11:42:05.6213169Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T11:42:05.6213356Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T11:42:05.6213437Z 168 │ │ ), 2026-10-24T11:42:05.6213518Z 169 │ │ ); 2026-10-24T11:42:05.6213595Z 170 │ │ } 2026-10-24T11:42:05.6213701Z 171 │ │ yield* Effect.promise( 2026-10-24T11:42:05.6213881Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T11:42:05.6214032Z 173 │ │ ); 2026-10-24T11:42:05.6214144Z 174 │ │ } 2026-10-24T11:42:05.6214230Z 175 │ │ return {}; 2026-10-24T11:42:05.6214304Z 176 │ │ }); 2026-10-24T11:42:05.6214374Z 177 │ │ 2026-10-24T11:42:05.6214456Z 178 │ │ return { 2026-10-24T11:42:05.6214632Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T11:42:05.6214754Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T11:42:05.6214866Z 181 │ │ return yield* Effect.fail( 2026-10-24T11:42:05.6215055Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T11:42:05.6215143Z 183 │ │ ); 2026-10-24T11:42:05.6215222Z 184 │ │ } 2026-10-24T11:42:05.6215350Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T11:42:05.6215565Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T11:42:05.6215643Z 187 │ │ } 2026-10-24T11:42:05.6215799Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T11:42:05.6215917Z 189 │ │ connections.set(connectionId, { 2026-10-24T11:42:05.6216039Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T11:42:05.6216140Z 191 │ │ sessionId: null, 2026-10-24T11:42:05.6216246Z 192 │ │ protocolVersion: null, 2026-10-24T11:42:05.6216356Z 193 │ │ nextRequestId: 0, 2026-10-24T11:42:05.6216436Z 194 │ │ }); 2026-10-24T11:42:05.6216541Z 195 │ │ return { connectionId }; 2026-10-24T11:42:05.6216616Z 196 │ │ }), 2026-10-24T11:42:05.6216790Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T11:42:05.6216957Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T11:42:05.6217083Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T11:42:05.6217210Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T11:42:05.6217310Z 201 │ │ jsonrpc: "2.0", 2026-10-24T11:42:05.6217456Z 202 │ │ id, 2026-10-24T11:42:05.6217595Z 203 │ │ method: request.method, 2026-10-24T11:42:05.6217756Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T11:42:05.6217835Z 205 │ │ }); 2026-10-24T11:42:05.6218025Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T11:42:05.6218149Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T11:42:05.6218250Z 208 │ │ if (envelope === null) { 2026-10-24T11:42:05.6218361Z 209 │ │ return yield* Effect.fail( 2026-10-24T11:42:05.6218552Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T11:42:05.6218640Z 211 │ │ ); 2026-10-24T11:42:05.6218717Z 212 │ │ } 2026-10-24T11:42:05.6218838Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T11:42:05.6219037Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T11:42:05.6219113Z 215 │ │ } 2026-10-24T11:42:05.6219286Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T11:42:05.6219362Z 217 │ │ }), 2026-10-24T11:42:05.6219557Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T11:42:05.6219722Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T11:42:05.6219833Z 220 │ │ yield* send(connection, { 2026-10-24T11:42:05.6219933Z 221 │ │ jsonrpc: "2.0", 2026-10-24T11:42:05.6220037Z 222 │ │ method: request.method, 2026-10-24T11:42:05.6220197Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T11:42:05.6220277Z 224 │ │ }); 2026-10-24T11:42:05.6220351Z 225 │ │ }), 2026-10-24T11:42:05.6220438Z 226 │ │ disconnect, 2026-10-24T11:42:05.6220547Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T11:42:05.6220644Z 228 │ │ Effect.forEach( 2026-10-24T11:42:05.6220749Z 229 │ │ [...connections.keys()], 2026-10-24T11:42:05.6220926Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T11:42:05.6221053Z 231 │ │ { discard: true }, 2026-10-24T11:42:05.6221134Z 232 │ │ ), 2026-10-24T11:42:05.6221208Z 233 │ │ ), 2026-10-24T11:42:05.6221284Z 234 │ │ }; 2026-10-24T11:42:05.6221413Z 235 │ ╰─▶ }); 2026-10-24T11:42:05.6221469Z ╰──── 2026-10-24T11:42:05.6221725Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T11:42:05.6221728Z 2026-10-24T11:42:05.6221903Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:42:05.6222029Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T11:42:05.6222086Z 265 │ 2026-10-24T11:42:05.6222247Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T11:42:05.6222454Z ·  ── 2026-10-24T11:42:05.6222511Z 267 │ } 2026-10-24T11:42:05.6222565Z ╰──── 2026-10-24T11:42:05.6222797Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:42:05.6222800Z 2026-10-24T11:42:05.6223288Z ⚠ 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-24T11:42:05.6223471Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T11:42:05.6223545Z 222 │ let idlePasses = 0; 2026-10-24T11:42:05.6223696Z 223 │ ╭─▶ for (;;) { 2026-10-24T11:42:05.6223837Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T11:42:05.6223984Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T11:42:05.6224081Z 226 │ │ if (!pending) { 2026-10-24T11:42:05.6224177Z 227 │ │ idlePasses++; 2026-10-24T11:42:05.6224281Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T11:42:05.6224370Z 229 │ │ return; 2026-10-24T11:42:05.6224449Z 230 │ │ } 2026-10-24T11:42:05.6224536Z 231 │ │ continue; 2026-10-24T11:42:05.6224614Z 232 │ │ } 2026-10-24T11:42:05.6224715Z 233 │ │ idlePasses = 0; 2026-10-24T11:42:05.6224838Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T11:42:05.6225052Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T11:42:05.6225131Z 236 │ │ ); 2026-10-24T11:42:05.6225239Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T11:42:05.6225344Z 238 │ │ pending.resolve(exit); 2026-10-24T11:42:05.6225423Z 239 │ │ }); 2026-10-24T11:42:05.6225552Z 240 │ ╰─▶ } 2026-10-24T11:42:05.6225612Z 241 │ }, 2026-10-24T11:42:05.6225666Z ╰──── 2026-10-24T11:42:05.6225668Z 2026-10-24T11:42:05.6225902Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:42:05.6226040Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T11:42:05.6226109Z 20 │ [instanceId]: { 2026-10-24T11:42:05.6226189Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T11:42:05.6226293Z ·  ──────────────────────────── 2026-10-24T11:42:05.6226360Z 22 │ [model]: options, 2026-10-24T11:42:05.6226414Z ╰──── 2026-10-24T11:42:05.6226688Z  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-24T11:42:05.6226690Z 2026-10-24T11:42:05.6226903Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T11:42:05.6227041Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T11:42:05.6227151Z 21 │ 2026-10-24T11:42:05.6227351Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T11:42:05.6227439Z ·  ────────┬─────── 2026-10-24T11:42:05.6227591Z · ╰── 'summarizePayload' is declared here 2026-10-24T11:42:05.6227698Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T11:42:05.6227752Z ╰──── 2026-10-24T11:42:05.6227860Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6227862Z 2026-10-24T11:42:05.6228070Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T11:42:05.6228234Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T11:42:05.6228323Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T11:42:05.6228448Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T11:42:05.6228533Z ·  ─────┬───── 2026-10-24T11:42:05.6228677Z · ╰── 'HostProcess' is imported here 2026-10-24T11:42:05.6228732Z 26 │ 2026-10-24T11:42:05.6228785Z ╰──── 2026-10-24T11:42:05.6228883Z  help: Consider removing this import. 2026-10-24T11:42:05.6228886Z 2026-10-24T11:42:05.6229164Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6229333Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T11:42:05.6229417Z 123 │ const path = yield* Path.Path; 2026-10-24T11:42:05.6229535Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T11:42:05.6229624Z ·  ──────┬───── 2026-10-24T11:42:05.6229771Z · ╰── 'serverConfig' is declared here 2026-10-24T11:42:05.6229916Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T11:42:05.6229968Z ╰──── 2026-10-24T11:42:05.6230073Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6230076Z 2026-10-24T11:42:05.6230355Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6230520Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T11:42:05.6230638Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T11:42:05.6230782Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T11:42:05.6230871Z ·  ───────┬────── 2026-10-24T11:42:05.6231019Z · ╰── 'serverSettings' is declared here 2026-10-24T11:42:05.6231179Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T11:42:05.6231231Z ╰──── 2026-10-24T11:42:05.6231335Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6231338Z 2026-10-24T11:42:05.6231499Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6231648Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T11:42:05.6231792Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T11:42:05.6231931Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T11:42:05.6232062Z ·  ────┬─── 2026-10-24T11:42:05.6232227Z · ╰── `rotation` originates here 2026-10-24T11:42:05.6232280Z 172 │ 2026-10-24T11:42:05.6232352Z 173 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6232487Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T11:42:05.6232559Z ·  ────┬─── 2026-10-24T11:42:05.6232694Z · ╰── `rotation` cannot be modified 2026-10-24T11:42:05.6232796Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T11:42:05.6232850Z ╰──── 2026-10-24T11:42:05.6233119Z  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-24T11:42:05.6233435Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6233441Z 2026-10-24T11:42:05.6233643Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6233797Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T11:42:05.6233866Z 1245 │ { 2026-10-24T11:42:05.6235463Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T11:42:05.6273686Z ·  ─────────┬──────── 2026-10-24T11:42:05.6273987Z · ╰── `separationProgress` cannot be modified 2026-10-24T11:42:05.6274110Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T11:42:05.6274167Z ╰──── 2026-10-24T11:42:05.6274443Z  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-24T11:42:05.6274767Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6274771Z 2026-10-24T11:42:05.6274940Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6275112Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T11:42:05.6275228Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T11:42:05.6275481Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T11:42:05.6275612Z ·  ──────┬───── 2026-10-24T11:42:05.6275758Z · ╰── `capsuleWidth` originates here 2026-10-24T11:42:05.6275869Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T11:42:05.6275983Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.6276090Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T11:42:05.6276189Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T11:42:05.6276255Z 134 │ return; 2026-10-24T11:42:05.6276311Z 135 │ } 2026-10-24T11:42:05.6276420Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T11:42:05.6276507Z 137 │ measuredWidthRef.current = width; 2026-10-24T11:42:05.6276661Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T11:42:05.6276743Z ·  ──────┬───── 2026-10-24T11:42:05.6276887Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T11:42:05.6276943Z 139 │ }; 2026-10-24T11:42:05.6276996Z ╰──── 2026-10-24T11:42:05.6277263Z  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-24T11:42:05.6277575Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6277578Z 2026-10-24T11:42:05.6277740Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6277907Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T11:42:05.6278023Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T11:42:05.6278141Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T11:42:05.6278223Z ·  ──────┬───── 2026-10-24T11:42:05.6278363Z · ╰── `capsuleWidth` originates here 2026-10-24T11:42:05.6278472Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T11:42:05.6278589Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.6278694Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T11:42:05.6278791Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T11:42:05.6278852Z 134 │ return; 2026-10-24T11:42:05.6278907Z 135 │ } 2026-10-24T11:42:05.6279013Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T11:42:05.6279105Z 137 │ measuredWidthRef.current = width; 2026-10-24T11:42:05.6279250Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T11:42:05.6279306Z 139 │ }; 2026-10-24T11:42:05.6279398Z 140 │ const hasStatus = props.status !== null; 2026-10-24T11:42:05.6279534Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T11:42:05.6279600Z 142 │ useEffect(() => { 2026-10-24T11:42:05.6279667Z 143 │ if (!hasStatus) { 2026-10-24T11:42:05.6279756Z 144 │ measuredWidthRef.current = null; 2026-10-24T11:42:05.6279836Z 145 │ capsuleWidth.value = null; 2026-10-24T11:42:05.6279913Z ·  ──────┬───── 2026-10-24T11:42:05.6280059Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T11:42:05.6280115Z 146 │ } 2026-10-24T11:42:05.6280168Z ╰──── 2026-10-24T11:42:05.6280496Z  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-24T11:42:05.6280835Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6280837Z 2026-10-24T11:42:05.6281068Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:42:05.6281321Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T11:42:05.6281460Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T11:42:05.6281525Z 142 │ useEffect(() => { 2026-10-24T11:42:05.6281604Z ·  ───┬─── 2026-10-24T11:42:05.6281834Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T11:42:05.6281905Z 143 │ if (!hasStatus) { 2026-10-24T11:42:05.6281992Z 144 │ measuredWidthRef.current = null; 2026-10-24T11:42:05.6282071Z 145 │ capsuleWidth.value = null; 2026-10-24T11:42:05.6282148Z ·  ──────┬───── 2026-10-24T11:42:05.6282285Z · ╰── This modifies `capsuleWidth` 2026-10-24T11:42:05.6282340Z 146 │ } 2026-10-24T11:42:05.6282392Z ╰──── 2026-10-24T11:42:05.6282739Z  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-24T11:42:05.6283052Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6283058Z 2026-10-24T11:42:05.6283261Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:42:05.6283426Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T11:42:05.6283540Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T11:42:05.6283657Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T11:42:05.6283785Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.6284032Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T11:42:05.6284140Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T11:42:05.6284309Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T11:42:05.6284412Z 134 │ return; 2026-10-24T11:42:05.6284467Z 135 │ } 2026-10-24T11:42:05.6284573Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T11:42:05.6284659Z 137 │ measuredWidthRef.current = width; 2026-10-24T11:42:05.6284801Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T11:42:05.6284879Z ·  ──────┬───── 2026-10-24T11:42:05.6285013Z · ╰── This modifies `capsuleWidth` 2026-10-24T11:42:05.6285068Z 139 │ }; 2026-10-24T11:42:05.6285121Z ╰──── 2026-10-24T11:42:05.6285463Z  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-24T11:42:05.6285776Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6285782Z 2026-10-24T11:42:05.6286042Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T11:42:05.6286227Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T11:42:05.6286280Z 959 │ 2026-10-24T11:42:05.6286392Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T11:42:05.6286509Z ·  ──────────────────┬───────────────── 2026-10-24T11:42:05.6286710Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T11:42:05.6286820Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T11:42:05.6286877Z ╰──── 2026-10-24T11:42:05.6286982Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6286985Z 2026-10-24T11:42:05.6287219Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T11:42:05.6287347Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T11:42:05.6287532Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T11:42:05.6287627Z 35 │ instanceId === configured ? true : false, 2026-10-24T11:42:05.6287745Z ·  ──────────────────────────────────────── 2026-10-24T11:42:05.6287799Z 36 │ ); 2026-10-24T11:42:05.6287852Z ╰──── 2026-10-24T11:42:05.6287947Z  help: Remove this ternary operator 2026-10-24T11:42:05.6287950Z 2026-10-24T11:42:05.6288218Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6288352Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T11:42:05.6288406Z 407 │ 2026-10-24T11:42:05.6288478Z 408 │ const layer: Layer.Layer< 2026-10-24T11:42:05.6288549Z ·  ──┬── 2026-10-24T11:42:05.6288675Z · ╰── 'layer' is declared here 2026-10-24T11:42:05.6288766Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T11:42:05.6288818Z ╰──── 2026-10-24T11:42:05.6288923Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6288925Z 2026-10-24T11:42:05.6289309Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6289510Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T11:42:05.6289566Z 1443 │ 2026-10-24T11:42:05.6289682Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T11:42:05.6289801Z ·  ───────────────────┬─────────────────── 2026-10-24T11:42:05.6290009Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T11:42:05.6290130Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T11:42:05.6290183Z ╰──── 2026-10-24T11:42:05.6290286Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6290290Z 2026-10-24T11:42:05.6290553Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6290721Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T11:42:05.6290775Z 1679 │ 2026-10-24T11:42:05.6290848Z 1680 │ const layer: Layer.Layer< 2026-10-24T11:42:05.6290917Z ·  ──┬── 2026-10-24T11:42:05.6291064Z · ╰── 'layer' is declared here 2026-10-24T11:42:05.6291157Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T11:42:05.6291211Z ╰──── 2026-10-24T11:42:05.6291313Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6291315Z 2026-10-24T11:42:05.6291570Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T11:42:05.6291724Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T11:42:05.6291784Z 1619 │ 2026-10-24T11:42:05.6291997Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T11:42:05.6292117Z ·  ──────────────────┬────────────────── 2026-10-24T11:42:05.6292319Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T11:42:05.6292397Z 1621 │ const meta = response._meta; 2026-10-24T11:42:05.6292449Z ╰──── 2026-10-24T11:42:05.6292552Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6292555Z 2026-10-24T11:42:05.6292816Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6292981Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7] 2026-10-24T11:42:05.6293041Z 213 │ }; 2026-10-24T11:42:05.6293113Z 214 │ useEffect(() => { 2026-10-24T11:42:05.6293185Z ·  ────┬──── 2026-10-24T11:42:05.6293318Z · ╰── This is the containing effect 2026-10-24T11:42:05.6293492Z 215 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T11:42:05.6293557Z 216 │ if (inserted) { 2026-10-24T11:42:05.6293635Z 217 │ setSelection((current) => 2026-10-24T11:42:05.6293715Z ·  ──────┬───── 2026-10-24T11:42:05.6293886Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6294059Z 218 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T11:42:05.6294111Z ╰──── 2026-10-24T11:42:05.6294783Z  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-24T11:42:05.6295145Z  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-24T11:42:05.6295148Z 2026-10-24T11:42:05.6295405Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6295572Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7] 2026-10-24T11:42:05.6295650Z 286 │ }, [hasWorkspaceSnapshot]); 2026-10-24T11:42:05.6295721Z 287 │ useEffect(() => { 2026-10-24T11:42:05.6295794Z ·  ────┬──── 2026-10-24T11:42:05.6295927Z · ╰── This is the containing effect 2026-10-24T11:42:05.6296075Z 288 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T11:42:05.6296224Z 289 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T11:42:05.6296294Z 290 │ const now = Date.now(); 2026-10-24T11:42:05.6296410Z 291 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T11:42:05.6296470Z 292 │ if ( 2026-10-24T11:42:05.6296548Z 293 │ lastRequest?.key === key && 2026-10-24T11:42:05.6296688Z 294 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T11:42:05.6296743Z 295 │ ) 2026-10-24T11:42:05.6296806Z 296 │ return; 2026-10-24T11:42:05.6296987Z 297 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T11:42:05.6297077Z 298 │ setWorkspaceRefreshRetry(null); 2026-10-24T11:42:05.6297174Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6297355Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6297417Z 299 │ return; 2026-10-24T11:42:05.6297468Z ╰──── 2026-10-24T11:42:05.6298072Z  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-24T11:42:05.6298401Z  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-24T11:42:05.6298408Z 2026-10-24T11:42:05.6298613Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6298778Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5] 2026-10-24T11:42:05.6298834Z 327 │ }, [ 2026-10-24T11:42:05.6298900Z 328 │ draftMessage, 2026-10-24T11:42:05.6298979Z ·  ──────┬───── 2026-10-24T11:42:05.6299127Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T11:42:05.6299191Z 329 │ environmentId, 2026-10-24T11:42:05.6299244Z ╰──── 2026-10-24T11:42:05.6299599Z  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-24T11:42:05.6299950Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6299953Z 2026-10-24T11:42:05.6300151Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6300302Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25] 2026-10-24T11:42:05.6300413Z 271 │ {record.elements?.map((element, index) => ( 2026-10-24T11:42:05.6300582Z 272 │ 2026-10-24T11:42:05.6300739Z ·  ─────────────────────────────────────────────────────── 2026-10-24T11:42:05.6300815Z 273 │ { 2026-10-24T11:42:05.6301690Z ·  ────┬──── 2026-10-24T11:42:05.6301820Z · ╰── This is the containing effect 2026-10-24T11:42:05.6301901Z 60 │ setMountedModes((current) => { 2026-10-24T11:42:05.6301981Z ·  ───────┬─────── 2026-10-24T11:42:05.6302158Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6302243Z 61 │ if (current.has(props.mode)) { 2026-10-24T11:42:05.6302297Z ╰──── 2026-10-24T11:42:05.6302899Z  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-24T11:42:05.6303222Z  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-24T11:42:05.6303224Z 2026-10-24T11:42:05.6303481Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6303673Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T11:42:05.6303810Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T11:42:05.6303875Z 67 │ useEffect(() => { 2026-10-24T11:42:05.6303946Z ·  ────┬──── 2026-10-24T11:42:05.6304074Z · ╰── This is the containing effect 2026-10-24T11:42:05.6304139Z 68 │ setUri(null); 2026-10-24T11:42:05.6304210Z ·  ───┬── 2026-10-24T11:42:05.6304375Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6304438Z 69 │ setError(null); 2026-10-24T11:42:05.6304490Z ╰──── 2026-10-24T11:42:05.6305097Z  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-24T11:42:05.6305422Z  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-24T11:42:05.6305424Z 2026-10-24T11:42:05.6305628Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6305763Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T11:42:05.6305819Z 90 │ }; 2026-10-24T11:42:05.6305894Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T11:42:05.6306014Z ·  ──────┬───── ───┬─── 2026-10-24T11:42:05.6306202Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T11:42:05.6306355Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T11:42:05.6306492Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T11:42:05.6306545Z ╰──── 2026-10-24T11:42:05.6306839Z  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-24T11:42:05.6307151Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6307154Z 2026-10-24T11:42:05.6307371Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6307516Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T11:42:05.6307584Z 212 │ useEffect(() => { 2026-10-24T11:42:05.6307698Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T11:42:05.6307799Z ·  ──┬── 2026-10-24T11:42:05.6307952Z · ╰── Missing dependency `props` 2026-10-24T11:42:05.6308058Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T11:42:05.6308173Z ·  ──────────┬───────── 2026-10-24T11:42:05.6308403Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T11:42:05.6308477Z 215 │ const { source } = props; 2026-10-24T11:42:05.6308529Z ╰──── 2026-10-24T11:42:05.6309014Z  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-24T11:42:05.6309361Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6309363Z 2026-10-24T11:42:05.6309622Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6309756Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5] 2026-10-24T11:42:05.6309948Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T11:42:05.6310017Z 168 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6310100Z ·  ───────┬─────── 2026-10-24T11:42:05.6310238Z · ╰── This is the containing effect 2026-10-24T11:42:05.6310327Z 169 │ if (faviconRequest === null) return; 2026-10-24T11:42:05.6310380Z 170 │ 2026-10-24T11:42:05.6310515Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T11:42:05.6310612Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T11:42:05.6310705Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6310879Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6310948Z 173 │ return endRequest; 2026-10-24T11:42:05.6311001Z ╰──── 2026-10-24T11:42:05.6311634Z  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-24T11:42:05.6311962Z  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-24T11:42:05.6311964Z 2026-10-24T11:42:05.6312192Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T11:42:05.6312367Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T11:42:05.6312434Z 1997 │ assert.equal( 2026-10-24T11:42:05.6312586Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T11:42:05.6312673Z ·  ────── 2026-10-24T11:42:05.6312754Z 1999 │ "authoritative answer", 2026-10-24T11:42:05.6312807Z ╰──── 2026-10-24T11:42:05.6312978Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T11:42:05.6312982Z 2026-10-24T11:42:05.6313461Z ⚠ 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-24T11:42:05.6313633Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T11:42:05.6313814Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T11:42:05.6314074Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T11:42:05.6314238Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6314375Z 3953 │ ╰─▶ } 2026-10-24T11:42:05.6314496Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T11:42:05.6314550Z ╰──── 2026-10-24T11:42:05.6314552Z 2026-10-24T11:42:05.6315025Z ⚠ 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-24T11:42:05.6315193Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T11:42:05.6315283Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T11:42:05.6315477Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T11:42:05.6315593Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6315728Z 6064 │ ╰─▶ } 2026-10-24T11:42:05.6315900Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T11:42:05.6315952Z ╰──── 2026-10-24T11:42:05.6315954Z 2026-10-24T11:42:05.6316418Z ⚠ 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-24T11:42:05.6316598Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T11:42:05.6316689Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T11:42:05.6316878Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T11:42:05.6316990Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6317126Z 6199 │ ╰─▶ } 2026-10-24T11:42:05.6317292Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T11:42:05.6317345Z ╰──── 2026-10-24T11:42:05.6317347Z 2026-10-24T11:42:05.6317566Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6317712Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T11:42:05.6317813Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T11:42:05.6317950Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T11:42:05.6318051Z ·  ────────────┬──────────── 2026-10-24T11:42:05.6318227Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T11:42:05.6318282Z 774 │ } 2026-10-24T11:42:05.6318487Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T11:42:05.6318599Z ·  ────────────────┬──────────────── 2026-10-24T11:42:05.6318884Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T11:42:05.6318937Z 776 │ 2026-10-24T11:42:05.6318990Z ╰──── 2026-10-24T11:42:05.6319477Z  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-24T11:42:05.6319820Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6319823Z 2026-10-24T11:42:05.6319981Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6320123Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T11:42:05.6320285Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T11:42:05.6320424Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T11:42:05.6320517Z ·  ──────────┬───────── 2026-10-24T11:42:05.6320678Z · ╰── `animatedBorderRadius` originates here 2026-10-24T11:42:05.6320840Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T11:42:05.6320911Z 390 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6321013Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T11:42:05.6321177Z ·  ──────────┬───────── 2026-10-24T11:42:05.6321338Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T11:42:05.6321428Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T11:42:05.6321482Z ╰──── 2026-10-24T11:42:05.6321749Z  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-24T11:42:05.6322061Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6322067Z 2026-10-24T11:42:05.6322330Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6322500Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10694:7] 2026-10-24T11:42:05.6322557Z 10693 │ 2026-10-24T11:42:05.6322630Z 10694 │ const layer: Layer.Layer< 2026-10-24T11:42:05.6322704Z ·  ──┬── 2026-10-24T11:42:05.6322835Z · ╰── 'layer' is declared here 2026-10-24T11:42:05.6322931Z 10695 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T11:42:05.6322984Z ╰──── 2026-10-24T11:42:05.6323157Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6323199Z 2026-10-24T11:42:05.6323405Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6323537Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T11:42:05.6323592Z 81 │ }, 2026-10-24T11:42:05.6323657Z 82 │ [draftKey], 2026-10-24T11:42:05.6323729Z ·  ────┬─── 2026-10-24T11:42:05.6323870Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T11:42:05.6323924Z 83 │ ); 2026-10-24T11:42:05.6323976Z ╰──── 2026-10-24T11:42:05.6324274Z  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-24T11:42:05.6324593Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6324600Z 2026-10-24T11:42:05.6324870Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6324982Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T11:42:05.6325036Z 35 │ 2026-10-24T11:42:05.6325168Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T11:42:05.6325243Z ·  ─────┬──── 2026-10-24T11:42:05.6325380Z · ╰── 'claudeCaps' is declared here 2026-10-24T11:42:05.6325449Z 37 │ optionDescriptors: [ 2026-10-24T11:42:05.6325502Z ╰──── 2026-10-24T11:42:05.6325606Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6325609Z 2026-10-24T11:42:05.6325875Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6326052Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T11:42:05.6326105Z 118 │ 2026-10-24T11:42:05.6326171Z 119 │ useEffect(() => { 2026-10-24T11:42:05.6326244Z ·  ────┬──── 2026-10-24T11:42:05.6326375Z · ╰── This is the containing effect 2026-10-24T11:42:05.6326460Z 120 │ if (orientationSettled) return; 2026-10-24T11:42:05.6326574Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T11:42:05.6326650Z 122 │ if (orientation === null) { 2026-10-24T11:42:05.6326732Z 123 │ setOrientationSettled(true); 2026-10-24T11:42:05.6326824Z ·  ──────────┬────────── 2026-10-24T11:42:05.6327005Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6327073Z 124 │ return; 2026-10-24T11:42:05.6327125Z ╰──── 2026-10-24T11:42:05.6327737Z  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-24T11:42:05.6328062Z  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-24T11:42:05.6328064Z 2026-10-24T11:42:05.6328379Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6328579Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T11:42:05.6328633Z 292 │ 2026-10-24T11:42:05.6328700Z 293 │ useEffect(() => { 2026-10-24T11:42:05.6328771Z ·  ────┬──── 2026-10-24T11:42:05.6328904Z · ╰── This is the containing effect 2026-10-24T11:42:05.6328963Z 294 │ if ( 2026-10-24T11:42:05.6329032Z 295 │ scene === null || 2026-10-24T11:42:05.6329108Z 296 │ requestedScene === null || 2026-10-24T11:42:05.6329186Z 297 │ scene !== requestedScene || 2026-10-24T11:42:05.6329252Z 298 │ !hasFixture || 2026-10-24T11:42:05.6329325Z 299 │ !orientationSettled || 2026-10-24T11:42:05.6329394Z 300 │ !themeApplied || 2026-10-24T11:42:05.6329519Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T11:42:05.6329659Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T11:42:05.6329716Z 303 │ ) { 2026-10-24T11:42:05.6329785Z 304 │ setReadyScene(null); 2026-10-24T11:42:05.6329866Z ·  ──────┬────── 2026-10-24T11:42:05.6330039Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6330101Z 305 │ return; 2026-10-24T11:42:05.6330153Z ╰──── 2026-10-24T11:42:05.6330756Z  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-24T11:42:05.6331104Z  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-24T11:42:05.6331110Z 2026-10-24T11:42:05.6331384Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6331559Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T11:42:05.6331628Z 127 │ let cancelled = false; 2026-10-24T11:42:05.6331720Z 128 │ let lastOutcome: string | null = null; 2026-10-24T11:42:05.6331801Z ·  ─────┬───── 2026-10-24T11:42:05.6331938Z · ╰── 'lastOutcome' is declared here 2026-10-24T11:42:05.6332123Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T11:42:05.6332180Z ╰──── 2026-10-24T11:42:05.6332287Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6332289Z 2026-10-24T11:42:05.6332549Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6332702Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T11:42:05.6332757Z 55 │ 2026-10-24T11:42:05.6332824Z 56 │ useEffect(() => { 2026-10-24T11:42:05.6332896Z ·  ────┬──── 2026-10-24T11:42:05.6333026Z · ╰── This is the containing effect 2026-10-24T11:42:05.6333095Z 57 │ setDecodedSize(null); 2026-10-24T11:42:05.6333174Z ·  ───────┬────── 2026-10-24T11:42:05.6333400Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6333503Z 58 │ }, [props.sourceKey]); 2026-10-24T11:42:05.6333555Z ╰──── 2026-10-24T11:42:05.6334162Z  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-24T11:42:05.6334487Z  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-24T11:42:05.6334490Z 2026-10-24T11:42:05.6334747Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6334901Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T11:42:05.6334956Z 59 │ 2026-10-24T11:42:05.6335021Z 60 │ useEffect(() => { 2026-10-24T11:42:05.6335091Z ·  ────┬──── 2026-10-24T11:42:05.6335219Z · ╰── This is the containing effect 2026-10-24T11:42:05.6335289Z 61 │ setFailedUri(null); 2026-10-24T11:42:05.6335366Z ·  ──────┬───── 2026-10-24T11:42:05.6335533Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6335598Z 62 │ }, [props.uri]); 2026-10-24T11:42:05.6335651Z ╰──── 2026-10-24T11:42:05.6336260Z  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-24T11:42:05.6336586Z  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-24T11:42:05.6336588Z 2026-10-24T11:42:05.6336806Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T11:42:05.6336958Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T11:42:05.6337085Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T11:42:05.6337264Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T11:42:05.6337353Z ·  ────────┬──────── 2026-10-24T11:42:05.6337509Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T11:42:05.6337565Z 8 │ 2026-10-24T11:42:05.6337617Z ╰──── 2026-10-24T11:42:05.6337718Z  help: Consider removing this import. 2026-10-24T11:42:05.6337720Z 2026-10-24T11:42:05.6337922Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6338073Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T11:42:05.6338141Z 57 │ setDecodedSize(null); 2026-10-24T11:42:05.6338209Z 58 │ }, [props.sourceKey]); 2026-10-24T11:42:05.6338291Z ·  ───────┬─────── 2026-10-24T11:42:05.6338449Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T11:42:05.6338502Z 59 │ 2026-10-24T11:42:05.6338607Z ╰──── 2026-10-24T11:42:05.6338934Z  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-24T11:42:05.6339246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6339248Z 2026-10-24T11:42:05.6339450Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6339600Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T11:42:05.6339666Z 61 │ setFailedUri(null); 2026-10-24T11:42:05.6339733Z 62 │ }, [props.uri]); 2026-10-24T11:42:05.6339806Z ·  ────┬──── 2026-10-24T11:42:05.6339953Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T11:42:05.6340007Z 63 │ 2026-10-24T11:42:05.6340060Z ╰──── 2026-10-24T11:42:05.6340355Z  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-24T11:42:05.6340667Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6340669Z 2026-10-24T11:42:05.6340856Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.6341046Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T11:42:05.6341129Z 554 │ assert.deepStrictEqual( 2026-10-24T11:42:05.6341300Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T11:42:05.6341427Z ·  ┬ 2026-10-24T11:42:05.6341593Z · ╰── '_' is declared here 2026-10-24T11:42:05.6341656Z 556 │ [ 2026-10-24T11:42:05.6341709Z ╰──── 2026-10-24T11:42:05.6341813Z  help: Consider removing this parameter. 2026-10-24T11:42:05.6341815Z 2026-10-24T11:42:05.6341999Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.6342175Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T11:42:05.6342259Z 1154 │ assert.deepStrictEqual( 2026-10-24T11:42:05.6342431Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T11:42:05.6342556Z ·  ┬ 2026-10-24T11:42:05.6342722Z · ╰── '_' is declared here 2026-10-24T11:42:05.6342784Z 1156 │ [ 2026-10-24T11:42:05.6342838Z ╰──── 2026-10-24T11:42:05.6342939Z  help: Consider removing this parameter. 2026-10-24T11:42:05.6342944Z 2026-10-24T11:42:05.6343187Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:42:05.6343344Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T11:42:05.6343406Z 289 │ return ( 2026-10-24T11:42:05.6343596Z 290 │ 2026-10-24T11:42:05.6343754Z ·  ───────────── 2026-10-24T11:42:05.6343823Z 291 │ {props.children} 2026-10-24T11:42:05.6343876Z ╰──── 2026-10-24T11:42:05.6344101Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:42:05.6344240Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:42:05.6344242Z 2026-10-24T11:42:05.6344485Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:42:05.6344642Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T11:42:05.6344702Z 653 │ return ( 2026-10-24T11:42:05.6344827Z 654 │ 2026-10-24T11:42:05.6344948Z ·  ───────────── 2026-10-24T11:42:05.6345016Z 655 │ {props.children} 2026-10-24T11:42:05.6345068Z ╰──── 2026-10-24T11:42:05.6345289Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:42:05.6345425Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:42:05.6345427Z 2026-10-24T11:42:05.6345668Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:42:05.6345828Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T11:42:05.6345889Z 1461 │ return ( 2026-10-24T11:42:05.6346056Z 1462 │ 2026-10-24T11:42:05.6346192Z ·  ──────────────────── 2026-10-24T11:42:05.6346291Z 1463 │ = Layer.succeed( 2026-10-24T11:42:05.6347427Z ·  ────────┬─────── 2026-10-24T11:42:05.6347577Z · ╰── 'layerUnavailable' is declared here 2026-10-24T11:42:05.6347644Z 12381 │ OrchestratorV2, 2026-10-24T11:42:05.6347698Z ╰──── 2026-10-24T11:42:05.6347804Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6347807Z 2026-10-24T11:42:05.6347994Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:42:05.6348101Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T11:42:05.6348167Z 457 │ ): Array { 2026-10-24T11:42:05.6348275Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T11:42:05.6348432Z ·  ┬ 2026-10-24T11:42:05.6348608Z · ╰── '_' is declared here 2026-10-24T11:42:05.6348681Z 459 │ for (const b of data) { 2026-10-24T11:42:05.6348733Z ╰──── 2026-10-24T11:42:05.6348835Z  help: Consider removing this parameter. 2026-10-24T11:42:05.6348838Z 2026-10-24T11:42:05.6349051Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:42:05.6349177Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T11:42:05.6349279Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T11:42:05.6349365Z 259 │ for (const edit of edits.reverse()) 2026-10-24T11:42:05.6349460Z ·  ─────── 2026-10-24T11:42:05.6349635Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T11:42:05.6349690Z ╰──── 2026-10-24T11:42:05.6349955Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:42:05.6349957Z 2026-10-24T11:42:05.6350170Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:42:05.6350292Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T11:42:05.6350372Z 289 │ visit(parser.parse(markdown)); 2026-10-24T11:42:05.6350457Z 290 │ for (const edit of edits.reverse()) 2026-10-24T11:42:05.6350553Z ·  ─────── 2026-10-24T11:42:05.6350715Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T11:42:05.6350773Z ╰──── 2026-10-24T11:42:05.6351059Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:42:05.6351062Z 2026-10-24T11:42:05.6351272Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:42:05.6351392Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T11:42:05.6351472Z 343 │ visit(parser.parse(markdown)); 2026-10-24T11:42:05.6351579Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T11:42:05.6351683Z ·  ─────── 2026-10-24T11:42:05.6351847Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T11:42:05.6351900Z ╰──── 2026-10-24T11:42:05.6352228Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:42:05.6352260Z 2026-10-24T11:42:05.6352475Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T11:42:05.6352579Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T11:42:05.6352644Z 1078 │ } 2026-10-24T11:42:05.6352922Z ·  ───────────────────────────────────────────── 2026-10-24T11:42:05.6353006Z 1080 │ screenOptions={({ route }) => 2026-10-24T11:42:05.6353060Z ╰──── 2026-10-24T11:42:05.6353431Z  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-24T11:42:05.6353438Z 2026-10-24T11:42:05.6353727Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T11:42:05.6353882Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T11:42:05.6353939Z 162 │ keys, 2026-10-24T11:42:05.6354013Z 163 │ overridingProjects = [], 2026-10-24T11:42:05.6354097Z ·  ── 2026-10-24T11:42:05.6354166Z 164 │ onClearOverrides, 2026-10-24T11:42:05.6354217Z ╰──── 2026-10-24T11:42:05.6354537Z  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-24T11:42:05.6354539Z 2026-10-24T11:42:05.6354804Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6354956Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T11:42:05.6355014Z 61 │ }, []); 2026-10-24T11:42:05.6355080Z 62 │ useEffect(() => { 2026-10-24T11:42:05.6355153Z ·  ────┬──── 2026-10-24T11:42:05.6355284Z · ╰── This is the containing effect 2026-10-24T11:42:05.6355435Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T11:42:05.6355560Z ·  ───────┬────── 2026-10-24T11:42:05.6355776Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6355858Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T11:42:05.6355909Z ╰──── 2026-10-24T11:42:05.6356513Z  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-24T11:42:05.6356840Z  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-24T11:42:05.6356843Z 2026-10-24T11:42:05.6357031Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T11:42:05.6357149Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T11:42:05.6357259Z 7 │ () => 2026-10-24T11:42:05.6357354Z 8 │ Gesture.Hover() 2026-10-24T11:42:05.6357432Z ·  ──┬── 2026-10-24T11:42:05.6357565Z · ╰── `Hover` may be a component 2026-10-24T11:42:05.6357638Z 9 │ .manualActivation(true) 2026-10-24T11:42:05.6357692Z ╰──── 2026-10-24T11:42:05.6357976Z  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-24T11:42:05.6358433Z  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-24T11:42:05.6358436Z 2026-10-24T11:42:05.6358703Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6358840Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T11:42:05.6358894Z 57 │ 2026-10-24T11:42:05.6358960Z 58 │ useEffect(() => { 2026-10-24T11:42:05.6359031Z ·  ────┬──── 2026-10-24T11:42:05.6359160Z · ╰── This is the containing effect 2026-10-24T11:42:05.6359256Z 59 │ const controller = new AbortController(); 2026-10-24T11:42:05.6359330Z 60 │ setLoadState("pending"); 2026-10-24T11:42:05.6359406Z ·  ──────┬───── 2026-10-24T11:42:05.6359573Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6359739Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T11:42:05.6359796Z ╰──── 2026-10-24T11:42:05.6360395Z  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-24T11:42:05.6360715Z  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-24T11:42:05.6360719Z 2026-10-24T11:42:05.6360922Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6361075Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T11:42:05.6361226Z 70 │ return () => controller.abort(); 2026-10-24T11:42:05.6361327Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T11:42:05.6361502Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T11:42:05.6361733Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T11:42:05.6361935Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T11:42:05.6362075Z · ╰── Unnecessary dependency `player_0` 2026-10-24T11:42:05.6362128Z 72 │ 2026-10-24T11:42:05.6362182Z ╰──── 2026-10-24T11:42:05.6362547Z  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-24T11:42:05.6362903Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6362905Z 2026-10-24T11:42:05.6363112Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:42:05.6363251Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T11:42:05.6363418Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T11:42:05.6363509Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6363603Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6364077Z · ╰── 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-24T11:42:05.6364155Z 229 │ mostRecentEventCount, 2026-10-24T11:42:05.6364212Z 230 │ ); 2026-10-24T11:42:05.6364337Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T11:42:05.6364473Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T11:42:05.6364676Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6364761Z 232 │ const assumedValue = props.value; 2026-10-24T11:42:05.6364813Z ╰──── 2026-10-24T11:42:05.6364982Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:42:05.6365304Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6365310Z 2026-10-24T11:42:05.6365526Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6365662Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T11:42:05.6365808Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T11:42:05.6365897Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6365990Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6366450Z · ╰── 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-24T11:42:05.6366529Z 240 │ controlledEventCount, 2026-10-24T11:42:05.6366596Z 241 │ assumedValue, 2026-10-24T11:42:05.6366655Z 242 │ ); 2026-10-24T11:42:05.6366811Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T11:42:05.6366951Z ·  ───────────┬────────── 2026-10-24T11:42:05.6367161Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T11:42:05.6367253Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T11:42:05.6367306Z ╰──── 2026-10-24T11:42:05.6367786Z  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-24T11:42:05.6368134Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6368137Z 2026-10-24T11:42:05.6368283Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6368424Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T11:42:05.6368550Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:42:05.6368663Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:42:05.6368782Z ·  ─────────────┬──────────── 2026-10-24T11:42:05.6368953Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6369018Z 165 │ }); 2026-10-24T11:42:05.6369072Z ╰──── 2026-10-24T11:42:05.6369546Z  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-24T11:42:05.6369836Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6369839Z 2026-10-24T11:42:05.6369986Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6370124Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T11:42:05.6370248Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:42:05.6370363Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:42:05.6370486Z ·  ─────────────┬──────────── 2026-10-24T11:42:05.6370698Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6370756Z 165 │ }); 2026-10-24T11:42:05.6370807Z ╰──── 2026-10-24T11:42:05.6371296Z  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-24T11:42:05.6371587Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6371589Z 2026-10-24T11:42:05.6371784Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6371953Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T11:42:05.6372008Z 165 │ }); 2026-10-24T11:42:05.6372100Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T11:42:05.6372226Z ·  ─────────┬────────────┬─── 2026-10-24T11:42:05.6372419Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6372536Z · ╰── This value is a ref 2026-10-24T11:42:05.6372608Z 167 │ return JSON.stringify( 2026-10-24T11:42:05.6372661Z ╰──── 2026-10-24T11:42:05.6373131Z  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-24T11:42:05.6373428Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6373432Z 2026-10-24T11:42:05.6373578Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6373714Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T11:42:05.6373786Z 207 │ mostRecentEventCount, 2026-10-24T11:42:05.6373873Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6373979Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.6374171Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6374233Z 209 │ ); 2026-10-24T11:42:05.6374289Z ╰──── 2026-10-24T11:42:05.6374754Z  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-24T11:42:05.6375044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6375046Z 2026-10-24T11:42:05.6375192Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6375329Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T11:42:05.6375399Z 213 │ mostRecentEventCount, 2026-10-24T11:42:05.6375486Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6375595Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.6375786Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6375840Z 215 │ ); 2026-10-24T11:42:05.6375891Z ╰──── 2026-10-24T11:42:05.6376353Z  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-24T11:42:05.6376642Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6376645Z 2026-10-24T11:42:05.6376889Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:42:05.6377054Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T11:42:05.6377177Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:42:05.6377289Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:42:05.6377402Z ·  ─────────┬──────── 2026-10-24T11:42:05.6377874Z · ╰── 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-24T11:42:05.6377932Z 165 │ }); 2026-10-24T11:42:05.6378022Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T11:42:05.6378093Z 167 │ return JSON.stringify( 2026-10-24T11:42:05.6378263Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T11:42:05.6378335Z 169 │ const record = 2026-10-24T11:42:05.6378414Z 170 │ token.type === "context" 2026-10-24T11:42:05.6378582Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T11:42:05.6378649Z 172 │ : undefined; 2026-10-24T11:42:05.6378756Z 173 │ const presentation = contextChipPresentation( 2026-10-24T11:42:05.6378869Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T11:42:05.6378932Z 175 │ record, 2026-10-24T11:42:05.6378990Z 176 │ ); 2026-10-24T11:42:05.6379075Z 177 │ const icon = contextChipIcon( 2026-10-24T11:42:05.6379143Z 178 │ presentation, 2026-10-24T11:42:05.6379294Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T11:42:05.6379356Z 180 │ ); 2026-10-24T11:42:05.6379419Z 181 │ return { 2026-10-24T11:42:05.6379490Z 182 │ type: token.type, 2026-10-24T11:42:05.6379566Z 183 │ source: token.source, 2026-10-24T11:42:05.6379638Z 184 │ start: token.start, 2026-10-24T11:42:05.6379706Z 185 │ end: token.end, 2026-10-24T11:42:05.6379856Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T11:42:05.6379918Z 187 │ label: 2026-10-24T11:42:05.6379996Z 188 │ token.type === "skill" 2026-10-24T11:42:05.6380105Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T11:42:05.6380188Z 190 │ : token.type === "context" 2026-10-24T11:42:05.6380432Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T11:42:05.6380518Z 192 │ : basename(token.value), 2026-10-24T11:42:05.6380663Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T11:42:05.6380758Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T11:42:05.6380846Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T11:42:05.6380904Z 196 │ }; 2026-10-24T11:42:05.6380961Z 197 │ }), 2026-10-24T11:42:05.6381017Z 198 │ ); 2026-10-24T11:42:05.6381176Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T11:42:05.6381333Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T11:42:05.6381544Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6381751Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T11:42:05.6381839Z ╰──── 2026-10-24T11:42:05.6382046Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:42:05.6382363Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6382365Z 2026-10-24T11:42:05.6382554Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:42:05.6382690Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T11:42:05.6382821Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T11:42:05.6382922Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T11:42:05.6383020Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6383481Z · ╰── 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-24T11:42:05.6383574Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T11:42:05.6383635Z 256 │ value, 2026-10-24T11:42:05.6383714Z 257 │ selection: nextSelection, 2026-10-24T11:42:05.6383773Z 258 │ }); 2026-10-24T11:42:05.6383859Z 259 │ return acknowledgedEventCount; 2026-10-24T11:42:05.6383913Z 260 │ }, 2026-10-24T11:42:05.6383970Z 261 │ [], 2026-10-24T11:42:05.6384038Z ·  ─┬ 2026-10-24T11:42:05.6384227Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6384284Z 262 │ ); 2026-10-24T11:42:05.6384337Z ╰──── 2026-10-24T11:42:05.6384542Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:42:05.6384855Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6384858Z 2026-10-24T11:42:05.6385331Z ⚠ 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-24T11:42:05.6385503Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T11:42:05.6385613Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T11:42:05.6385819Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T11:42:05.6385922Z 567 │ │ const nextEvent = { 2026-10-24T11:42:05.6386084Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T11:42:05.6386221Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T11:42:05.6386313Z 570 │ │ threadId, 2026-10-24T11:42:05.6386418Z 571 │ │ providerInstanceId, 2026-10-24T11:42:05.6386517Z 572 │ │ occurredAt: now, 2026-10-24T11:42:05.6386668Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T11:42:05.6386868Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T11:42:05.6387022Z 575 │ │ const reader = yield* eventSink 2026-10-24T11:42:05.6387142Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T11:42:05.6387276Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T11:42:05.6387384Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6387549Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T11:42:05.6387678Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T11:42:05.6387796Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T11:42:05.6388006Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T11:42:05.6388088Z 583 │ │ } 2026-10-24T11:42:05.6388249Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T11:42:05.6388397Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T11:42:05.6388527Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T11:42:05.6388659Z 587 │ ╰─▶ } 2026-10-24T11:42:05.6388719Z 588 │ }), 2026-10-24T11:42:05.6388772Z ╰──── 2026-10-24T11:42:05.6388775Z 2026-10-24T11:42:05.6389249Z ⚠ 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-24T11:42:05.6389426Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T11:42:05.6389505Z 2326 │ let settled = false; 2026-10-24T11:42:05.6389666Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T11:42:05.6389828Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T11:42:05.6389960Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T11:42:05.6390045Z 2330 │ │ ); 2026-10-24T11:42:05.6390171Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T11:42:05.6390308Z 2332 │ ╰─▶ } 2026-10-24T11:42:05.6390433Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T11:42:05.6390490Z ╰──── 2026-10-24T11:42:05.6390493Z 2026-10-24T11:42:05.6390870Z ⚠ 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-24T11:42:05.6390992Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T11:42:05.6391076Z 145 │ name, 2026-10-24T11:42:05.6391216Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T11:42:05.6391325Z ·  ────────────────────────── 2026-10-24T11:42:05.6391446Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T11:42:05.6391499Z ╰──── 2026-10-24T11:42:05.6391502Z 2026-10-24T11:42:05.6391708Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6391863Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T11:42:05.6391927Z 184 │ "options", 2026-10-24T11:42:05.6392023Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T11:42:05.6392136Z ·  ────────────────┬─────────────── 2026-10-24T11:42:05.6392334Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6392430Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T11:42:05.6392483Z ╰──── 2026-10-24T11:42:05.6392962Z  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-24T11:42:05.6393261Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6393263Z 2026-10-24T11:42:05.6393409Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6393528Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T11:42:05.6393621Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T11:42:05.6393717Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T11:42:05.6393826Z ·  ────────────────┬──────────────── 2026-10-24T11:42:05.6394023Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6394115Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T11:42:05.6394174Z ╰──── 2026-10-24T11:42:05.6394651Z  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-24T11:42:05.6394942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6394945Z 2026-10-24T11:42:05.6395249Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6395413Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T11:42:05.6395467Z 345 │ 2026-10-24T11:42:05.6395625Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T11:42:05.6395758Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6395926Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T11:42:05.6396005Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T11:42:05.6396057Z ╰──── 2026-10-24T11:42:05.6396164Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6396166Z 2026-10-24T11:42:05.6396364Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T11:42:05.6396507Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T11:42:05.6396643Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T11:42:05.6396757Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T11:42:05.6396838Z ·  ──┬── 2026-10-24T11:42:05.6396969Z · ╰── 'Image' is imported here 2026-10-24T11:42:05.6397023Z 18 │ 2026-10-24T11:42:05.6397074Z ╰──── 2026-10-24T11:42:05.6397173Z  help: Consider removing this import. 2026-10-24T11:42:05.6397176Z 2026-10-24T11:42:05.6397383Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:42:05.6397527Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T11:42:05.6397690Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T11:42:05.6397780Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6397873Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6398341Z · ╰── 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-24T11:42:05.6398416Z 227 │ mostRecentEventCount, 2026-10-24T11:42:05.6398473Z 228 │ ); 2026-10-24T11:42:05.6398596Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T11:42:05.6398733Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T11:42:05.6398933Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6399018Z 230 │ const assumedValue = props.value; 2026-10-24T11:42:05.6399072Z ╰──── 2026-10-24T11:42:05.6399243Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:42:05.6399561Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6399569Z 2026-10-24T11:42:05.6399784Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:42:05.6399927Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T11:42:05.6400073Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T11:42:05.6400163Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6400254Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6400777Z · ╰── 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-24T11:42:05.6400883Z 238 │ controlledEventCount, 2026-10-24T11:42:05.6400949Z 239 │ assumedValue, 2026-10-24T11:42:05.6401004Z 240 │ ); 2026-10-24T11:42:05.6401236Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T11:42:05.6401376Z ·  ───────────┬────────── 2026-10-24T11:42:05.6401588Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T11:42:05.6401676Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T11:42:05.6401730Z ╰──── 2026-10-24T11:42:05.6402161Z  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-24T11:42:05.6402480Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6402483Z 2026-10-24T11:42:05.6402630Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6402777Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T11:42:05.6402902Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:42:05.6403017Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:42:05.6403137Z ·  ─────────────┬──────────── 2026-10-24T11:42:05.6403311Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6403372Z 163 │ }); 2026-10-24T11:42:05.6403428Z ╰──── 2026-10-24T11:42:05.6403903Z  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-24T11:42:05.6404194Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6404200Z 2026-10-24T11:42:05.6404347Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6404497Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T11:42:05.6404625Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:42:05.6404743Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:42:05.6404861Z ·  ─────────────┬──────────── 2026-10-24T11:42:05.6405078Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6405139Z 163 │ }); 2026-10-24T11:42:05.6405194Z ╰──── 2026-10-24T11:42:05.6405661Z  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-24T11:42:05.6406036Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6406080Z 2026-10-24T11:42:05.6406230Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6406377Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T11:42:05.6406441Z 163 │ }); 2026-10-24T11:42:05.6406534Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T11:42:05.6406663Z ·  ─────────┬────────────┬─── 2026-10-24T11:42:05.6406860Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6406984Z · ╰── This value is a ref 2026-10-24T11:42:05.6407058Z 165 │ return JSON.stringify( 2026-10-24T11:42:05.6407113Z ╰──── 2026-10-24T11:42:05.6407591Z  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-24T11:42:05.6407890Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6407893Z 2026-10-24T11:42:05.6408042Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6408189Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T11:42:05.6408266Z 205 │ mostRecentEventCount, 2026-10-24T11:42:05.6408358Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6408465Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.6408667Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6408729Z 207 │ ); 2026-10-24T11:42:05.6408789Z ╰──── 2026-10-24T11:42:05.6409288Z  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-24T11:42:05.6409596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6409599Z 2026-10-24T11:42:05.6409787Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6409967Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T11:42:05.6410205Z 211 │ mostRecentEventCount, 2026-10-24T11:42:05.6410313Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T11:42:05.6410457Z ·  ───────────────┬─────────────── 2026-10-24T11:42:05.6410681Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6410777Z 213 │ ); 2026-10-24T11:42:05.6410854Z ╰──── 2026-10-24T11:42:05.6411387Z  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-24T11:42:05.6411716Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6411718Z 2026-10-24T11:42:05.6411994Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:42:05.6412226Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T11:42:05.6412366Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:42:05.6412512Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:42:05.6412658Z ·  ─────────┬──────── 2026-10-24T11:42:05.6413175Z · ╰── 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-24T11:42:05.6413260Z 163 │ }); 2026-10-24T11:42:05.6413393Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T11:42:05.6413573Z 165 │ return JSON.stringify( 2026-10-24T11:42:05.6413764Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T11:42:05.6413858Z 167 │ const record = 2026-10-24T11:42:05.6413985Z 168 │ token.type === "context" 2026-10-24T11:42:05.6414186Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T11:42:05.6414288Z 170 │ : undefined; 2026-10-24T11:42:05.6414404Z 171 │ const presentation = contextChipPresentation( 2026-10-24T11:42:05.6414570Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T11:42:05.6414670Z 173 │ record, 2026-10-24T11:42:05.6414767Z 174 │ ); 2026-10-24T11:42:05.6414868Z 175 │ const icon = contextChipIcon( 2026-10-24T11:42:05.6414991Z 176 │ presentation, 2026-10-24T11:42:05.6415182Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T11:42:05.6415278Z 178 │ ); 2026-10-24T11:42:05.6415357Z 179 │ return { 2026-10-24T11:42:05.6415460Z 180 │ type: token.type, 2026-10-24T11:42:05.6415591Z 181 │ source: token.source, 2026-10-24T11:42:05.6415699Z 182 │ start: token.start, 2026-10-24T11:42:05.6415782Z 183 │ end: token.end, 2026-10-24T11:42:05.6416047Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T11:42:05.6416148Z 185 │ label: 2026-10-24T11:42:05.6416269Z 186 │ token.type === "skill" 2026-10-24T11:42:05.6416392Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T11:42:05.6416512Z 188 │ : token.type === "context" 2026-10-24T11:42:05.6416840Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T11:42:05.6417019Z 190 │ : basename(token.value), 2026-10-24T11:42:05.6417181Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T11:42:05.6417316Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T11:42:05.6417439Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T11:42:05.6417534Z 194 │ }; 2026-10-24T11:42:05.6417615Z 195 │ }), 2026-10-24T11:42:05.6417711Z 196 │ ); 2026-10-24T11:42:05.6417880Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T11:42:05.6418063Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T11:42:05.6418306Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6418561Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T11:42:05.6418648Z ╰──── 2026-10-24T11:42:05.6418891Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:42:05.6419239Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6419242Z 2026-10-24T11:42:05.6419456Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:42:05.6419639Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T11:42:05.6419810Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T11:42:05.6419941Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T11:42:05.6420062Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6420572Z · ╰── 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-24T11:42:05.6420696Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T11:42:05.6420795Z 254 │ value, 2026-10-24T11:42:05.6420906Z 255 │ selection: nextSelection, 2026-10-24T11:42:05.6420995Z 256 │ }); 2026-10-24T11:42:05.6421139Z 257 │ return acknowledgedEventCount; 2026-10-24T11:42:05.6421229Z 258 │ }, 2026-10-24T11:42:05.6421310Z 259 │ [], 2026-10-24T11:42:05.6421410Z ·  ─┬ 2026-10-24T11:42:05.6421706Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:42:05.6421794Z 260 │ ); 2026-10-24T11:42:05.6421883Z ╰──── 2026-10-24T11:42:05.6422101Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:42:05.6422474Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6422476Z 2026-10-24T11:42:05.6422772Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6422970Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T11:42:05.6423112Z 434 │ : null; 2026-10-24T11:42:05.6423247Z 435 │ useEffect(() => { 2026-10-24T11:42:05.6423362Z ·  ────┬──── 2026-10-24T11:42:05.6423530Z · ╰── This is the containing effect 2026-10-24T11:42:05.6423609Z 436 │ if ( 2026-10-24T11:42:05.6423715Z 437 │ props.active === false || 2026-10-24T11:42:05.6423848Z 438 │ activeDraftKey !== null || 2026-10-24T11:42:05.6423965Z 439 │ editingPendingTask !== null || 2026-10-24T11:42:05.6424064Z 440 │ selectedProject === null 2026-10-24T11:42:05.6424153Z 441 │ ) { 2026-10-24T11:42:05.6424312Z 442 │ return; 2026-10-24T11:42:05.6424410Z 443 │ } 2026-10-24T11:42:05.6424495Z 444 │ setActiveDraftKey( 2026-10-24T11:42:05.6424620Z ·  ────────┬──────── 2026-10-24T11:42:05.6424828Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6424954Z 445 │ createNewTaskDraft({ 2026-10-24T11:42:05.6425022Z ╰──── 2026-10-24T11:42:05.6425671Z  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-24T11:42:05.6426033Z  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-24T11:42:05.6426036Z 2026-10-24T11:42:05.6426325Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:42:05.6426543Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T11:42:05.6426674Z 1243 │ 2026-10-24T11:42:05.6426903Z 1244 │ {props.children} 2026-10-24T11:42:05.6427053Z ·  ───────────── 2026-10-24T11:42:05.6427184Z 1245 │ 2026-10-24T11:42:05.6427258Z ╰──── 2026-10-24T11:42:05.6427520Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:42:05.6427694Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:42:05.6427697Z 2026-10-24T11:42:05.6428028Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:42:05.6428198Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T11:42:05.6428319Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T11:42:05.6428488Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T11:42:05.6428668Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T11:42:05.6428784Z 347 │ }; 2026-10-24T11:42:05.6428853Z ╰──── 2026-10-24T11:42:05.6429157Z  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-24T11:42:05.6429160Z 2026-10-24T11:42:05.6429415Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T11:42:05.6429643Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T11:42:05.6429787Z 447 │ const favorites = 2026-10-24T11:42:05.6429912Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T11:42:05.6430037Z ·  ───┬── 2026-10-24T11:42:05.6430195Z · ╰── For this reduce 2026-10-24T11:42:05.6430328Z 449 │ const exists = current.some( 2026-10-24T11:42:05.6430519Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T11:42:05.6430670Z 451 │ ); 2026-10-24T11:42:05.6430781Z 452 │ return change.favorite 2026-10-24T11:42:05.6430882Z 453 │ ? exists 2026-10-24T11:42:05.6430971Z 454 │ ? current 2026-10-24T11:42:05.6431167Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T11:42:05.6431298Z ·  ─────┬──── 2026-10-24T11:42:05.6431449Z · ╰── From this spread 2026-10-24T11:42:05.6431546Z 456 │ : current.filter( 2026-10-24T11:42:05.6431641Z ╰──── 2026-10-24T11:42:05.6431881Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T11:42:05.6432084Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T11:42:05.6432087Z 2026-10-24T11:42:05.6432285Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T11:42:05.6432455Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T11:42:05.6432549Z 464 │ null; 2026-10-24T11:42:05.6432706Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T11:42:05.6432816Z ·  ──────────┬───────── 2026-10-24T11:42:05.6432983Z · ╰── From this accumulator 2026-10-24T11:42:05.6433129Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T11:42:05.6433306Z ·  ─┬─ 2026-10-24T11:42:05.6433430Z · ╰── For this loop 2026-10-24T11:42:05.6433592Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T11:42:05.6433714Z 468 │ hiddenModels: [], 2026-10-24T11:42:05.6433823Z 469 │ modelOrder: [], 2026-10-24T11:42:05.6433894Z 470 │ }; 2026-10-24T11:42:05.6434111Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T11:42:05.6434257Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T11:42:05.6434380Z 473 │ nextModelPreferences = { 2026-10-24T11:42:05.6434481Z 474 │ ...nextModelPreferences, 2026-10-24T11:42:05.6434614Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6434766Z · ╰── From this spread 2026-10-24T11:42:05.6434930Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T11:42:05.6435004Z ╰──── 2026-10-24T11:42:05.6435197Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T11:42:05.6435386Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T11:42:05.6435389Z 2026-10-24T11:42:05.6435594Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6435799Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:698:76] 2026-10-24T11:42:05.6436117Z 697 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T11:42:05.6436362Z 698 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T11:42:05.6436528Z ·  ─────┬──── 2026-10-24T11:42:05.6436778Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6436929Z 699 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T11:42:05.6437019Z ╰──── 2026-10-24T11:42:05.6437342Z  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-24T11:42:05.6437700Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6437707Z 2026-10-24T11:42:05.6437914Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6438089Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71] 2026-10-24T11:42:05.6438208Z 718 │ const snoozePresets = useMemo( 2026-10-24T11:42:05.6438416Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T11:42:05.6438602Z ·  ─────┬──── 2026-10-24T11:42:05.6438821Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6438958Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T11:42:05.6439055Z ╰──── 2026-10-24T11:42:05.6439371Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6439775Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6439779Z 2026-10-24T11:42:05.6439977Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:42:05.6440172Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6] 2026-10-24T11:42:05.6440375Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T11:42:05.6440598Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T11:42:05.6440769Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6440965Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T11:42:05.6441073Z 721 │ ); 2026-10-24T11:42:05.6441376Z ╰──── 2026-10-24T11:42:05.6441747Z  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-24T11:42:05.6442078Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6442081Z 2026-10-24T11:42:05.6442300Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:42:05.6442493Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7] 2026-10-24T11:42:05.6442621Z 765 │ thread.pinnedAt, 2026-10-24T11:42:05.6442704Z 766 │ variant, 2026-10-24T11:42:05.6442815Z ·  ───┬─── 2026-10-24T11:42:05.6443048Z · ╰── Unnecessary dependency `variant` 2026-10-24T11:42:05.6443140Z 767 │ ], 2026-10-24T11:42:05.6443223Z ╰──── 2026-10-24T11:42:05.6443571Z  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-24T11:42:05.6443921Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6443924Z 2026-10-24T11:42:05.6444154Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6444374Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21] 2026-10-24T11:42:05.6444522Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T11:42:05.6444691Z 1216 │ 2026-10-24T11:42:05.6444841Z ·  ────────────────────────── 2026-10-24T11:42:05.6444986Z 1217 │ 2026-10-24T11:42:05.6445070Z ╰──── 2026-10-24T11:42:05.6445255Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T11:42:05.6445258Z 2026-10-24T11:42:05.6445563Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6445750Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:568:5] 2026-10-24T11:42:05.6445867Z 566 │ }, []); 2026-10-24T11:42:05.6445951Z 567 │ useEffect(() => { 2026-10-24T11:42:05.6446057Z ·  ────┬──── 2026-10-24T11:42:05.6446282Z · ╰── This is the containing effect 2026-10-24T11:42:05.6446408Z 568 │ setKeyboardStateSuspect(false); 2026-10-24T11:42:05.6446524Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6446736Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6446870Z 569 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T11:42:05.6446954Z ╰──── 2026-10-24T11:42:05.6447661Z  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-24T11:42:05.6448070Z  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-24T11:42:05.6448073Z 2026-10-24T11:42:05.6448370Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6448559Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7] 2026-10-24T11:42:05.6448753Z 963 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T11:42:05.6448846Z 964 │ useEffect(() => { 2026-10-24T11:42:05.6448959Z ·  ────┬──── 2026-10-24T11:42:05.6449134Z · ╰── This is the containing effect 2026-10-24T11:42:05.6449320Z 965 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T11:42:05.6449459Z 966 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T11:42:05.6449605Z ·  ─────────────┬──────────── 2026-10-24T11:42:05.6449883Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6449973Z 967 │ } 2026-10-24T11:42:05.6450033Z ╰──── 2026-10-24T11:42:05.6450698Z  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-24T11:42:05.6451082Z  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-24T11:42:05.6451086Z 2026-10-24T11:42:05.6451380Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6451562Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1213:5] 2026-10-24T11:42:05.6451665Z 1211 │ 2026-10-24T11:42:05.6451753Z 1212 │ useEffect(() => { 2026-10-24T11:42:05.6451861Z ·  ────┬──── 2026-10-24T11:42:05.6452030Z · ╰── This is the containing effect 2026-10-24T11:42:05.6452149Z 1213 │ setAnchorMessageId(null); 2026-10-24T11:42:05.6452262Z ·  ─────────┬──────── 2026-10-24T11:42:05.6452473Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6452591Z 1214 │ setSubmittedMessageId(null); 2026-10-24T11:42:05.6452671Z ╰──── 2026-10-24T11:42:05.6453300Z  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-24T11:42:05.6453670Z  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-24T11:42:05.6453673Z 2026-10-24T11:42:05.6454040Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6454260Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:569:7] 2026-10-24T11:42:05.6458390Z 568 │ setKeyboardStateSuspect(false); 2026-10-24T11:42:05.6458511Z 569 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T11:42:05.6458659Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T11:42:05.6458872Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T11:42:05.6459032Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T11:42:05.6459160Z 570 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T11:42:05.6459225Z ╰──── 2026-10-24T11:42:05.6459531Z  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-24T11:42:05.6459845Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6459848Z 2026-10-24T11:42:05.6460055Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6460214Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1161:7] 2026-10-24T11:42:05.6460305Z 1160 │ userInputInsetProgress.set(1); 2026-10-24T11:42:05.6460467Z 1161 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T11:42:05.6460573Z ·  ────────────┬─────────── 2026-10-24T11:42:05.6460760Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T11:42:05.6460868Z 1162 │ const showContent = props.showContent ?? true; 2026-10-24T11:42:05.6460921Z ╰──── 2026-10-24T11:42:05.6461264Z  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-24T11:42:05.6461577Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6461580Z 2026-10-24T11:42:05.6461784Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6461945Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1219:15] 2026-10-24T11:42:05.6462021Z 1218 │ freeze.set(false); 2026-10-24T11:42:05.6462104Z 1219 │ }, [freeze, selectedThreadKey]); 2026-10-24T11:42:05.6462202Z ·  ────────┬──────── 2026-10-24T11:42:05.6462367Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T11:42:05.6462424Z 1220 │ 2026-10-24T11:42:05.6462478Z ╰──── 2026-10-24T11:42:05.6462771Z  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-24T11:42:05.6463084Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6463086Z 2026-10-24T11:42:05.6463328Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6463516Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1049:5] 2026-10-24T11:42:05.6463630Z 1044 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T11:42:05.6463740Z 1045 │ const floatingControlCoverage = useSharedValue( 2026-10-24T11:42:05.6463836Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6464002Z · ╰── `floatingControlCoverage` originates here 2026-10-24T11:42:05.6464134Z 1046 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T11:42:05.6464192Z 1047 │ ); 2026-10-24T11:42:05.6464258Z 1048 │ useEffect(() => { 2026-10-24T11:42:05.6464365Z 1049 │ floatingControlCoverage.value = withTiming( 2026-10-24T11:42:05.6464458Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6464633Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T11:42:05.6464767Z 1050 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T11:42:05.6464821Z ╰──── 2026-10-24T11:42:05.6465093Z  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-24T11:42:05.6465401Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6465403Z 2026-10-24T11:42:05.6465563Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6465715Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T11:42:05.6465909Z 1057 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T11:42:05.6466040Z 1058 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T11:42:05.6466157Z ·  ────────────────┬──────────────── 2026-10-24T11:42:05.6466348Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T11:42:05.6466481Z 1059 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T11:42:05.6466538Z 1060 │ ); 2026-10-24T11:42:05.6466613Z 1061 │ useAnimatedReaction( 2026-10-24T11:42:05.6466674Z 1062 │ () => 2026-10-24T11:42:05.6466769Z 1063 │ contentInsetEndAdjustment.value + 2026-10-24T11:42:05.6466859Z 1064 │ floatingControlCoverage.value + 2026-10-24T11:42:05.6467065Z 1065 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T11:42:05.6467134Z 1066 │ (value) => { 2026-10-24T11:42:05.6467251Z 1067 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T11:42:05.6467364Z ·  ────────────────┬──────────────── 2026-10-24T11:42:05.6467558Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T11:42:05.6467615Z 1068 │ }, 2026-10-24T11:42:05.6467669Z ╰──── 2026-10-24T11:42:05.6467938Z  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-24T11:42:05.6468247Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6468250Z 2026-10-24T11:42:05.6468789Z ⚠ 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-24T11:42:05.6468953Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T11:42:05.6469032Z 138 │ Effect.gen(function* () { 2026-10-24T11:42:05.6469230Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T11:42:05.6469360Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T11:42:05.6469685Z 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-24T11:42:05.6469880Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T11:42:05.6470018Z 143 │ ╰─▶ } 2026-10-24T11:42:05.6470106Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T11:42:05.6470159Z ╰──── 2026-10-24T11:42:05.6470161Z 2026-10-24T11:42:05.6470372Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T11:42:05.6470524Z ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10] 2026-10-24T11:42:05.6470579Z 236 │ 2026-10-24T11:42:05.6470694Z 237 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T11:42:05.6470781Z ·  ───────┬────── 2026-10-24T11:42:05.6470929Z · ╰── 'nonEmptyString' is declared here 2026-10-24T11:42:05.6471098Z 238 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T11:42:05.6471153Z ╰──── 2026-10-24T11:42:05.6471262Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6471265Z 2026-10-24T11:42:05.6471527Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6471693Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7] 2026-10-24T11:42:05.6471747Z 409 │ 2026-10-24T11:42:05.6471874Z 410 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T11:42:05.6471948Z ·  ──┬── 2026-10-24T11:42:05.6472078Z · ╰── 'layer' is declared here 2026-10-24T11:42:05.6472129Z ╰──── 2026-10-24T11:42:05.6472295Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6472328Z 2026-10-24T11:42:05.6472590Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6472752Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5] 2026-10-24T11:42:05.6472875Z 277 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T11:42:05.6472941Z 278 │ useEffect(() => { 2026-10-24T11:42:05.6473015Z ·  ────┬──── 2026-10-24T11:42:05.6473149Z · ╰── This is the containing effect 2026-10-24T11:42:05.6473236Z 279 │ setNow(new Date().toISOString()); 2026-10-24T11:42:05.6473306Z ·  ───┬── 2026-10-24T11:42:05.6473484Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6473627Z 280 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T11:42:05.6473681Z ╰──── 2026-10-24T11:42:05.6474288Z  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-24T11:42:05.6474615Z  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-24T11:42:05.6474617Z 2026-10-24T11:42:05.6474848Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T11:42:05.6475015Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8] 2026-10-24T11:42:05.6475089Z 12 │ threadSearchMatchKey, 2026-10-24T11:42:05.6475175Z 13 │ type EnvironmentThreadSearchMatch, 2026-10-24T11:42:05.6475280Z ·  ──────────────┬───────────── 2026-10-24T11:42:05.6475458Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T11:42:05.6475571Z 14 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T11:42:05.6475623Z ╰──── 2026-10-24T11:42:05.6475723Z  help: Consider removing this import. 2026-10-24T11:42:05.6475726Z 2026-10-24T11:42:05.6475928Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6476099Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25] 2026-10-24T11:42:05.6476236Z 358 │ // range) the boundary string is identical and the chain would die. 2026-10-24T11:42:05.6476328Z 359 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T11:42:05.6476432Z ·  ───────┬────── 2026-10-24T11:42:05.6476599Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T11:42:05.6476713Z 360 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T11:42:05.6476766Z ╰──── 2026-10-24T11:42:05.6477065Z  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-24T11:42:05.6477379Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6477437Z 2026-10-24T11:42:05.6477644Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6477808Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53] 2026-10-24T11:42:05.6477896Z 349 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T11:42:05.6478056Z 350 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T11:42:05.6478178Z ·  ─────┬──── 2026-10-24T11:42:05.6478344Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6478425Z 351 │ const id = setTimeout(() => { 2026-10-24T11:42:05.6478478Z ╰──── 2026-10-24T11:42:05.6478770Z  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-24T11:42:05.6479071Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6479074Z 2026-10-24T11:42:05.6479304Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T11:42:05.6479423Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T11:42:05.6479477Z 11 │ 2026-10-24T11:42:05.6479575Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T11:42:05.6479677Z ·  ────────────┬──────────── 2026-10-24T11:42:05.6479846Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T11:42:05.6479920Z 13 │ readonly thread: { 2026-10-24T11:42:05.6479975Z ╰──── 2026-10-24T11:42:05.6480080Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6480083Z 2026-10-24T11:42:05.6480355Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6480495Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T11:42:05.6480550Z 913 │ 2026-10-24T11:42:05.6480739Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T11:42:05.6480818Z ·  ─────┬───── 2026-10-24T11:42:05.6480958Z · ╰── 'layerDaemon' is declared here 2026-10-24T11:42:05.6481063Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T11:42:05.6481171Z ╰──── 2026-10-24T11:42:05.6481286Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6481293Z 2026-10-24T11:42:05.6481557Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6481710Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T11:42:05.6481872Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T11:42:05.6481940Z 29 │ useEffect(() => { 2026-10-24T11:42:05.6482013Z ·  ────┬──── 2026-10-24T11:42:05.6482144Z · ╰── This is the containing effect 2026-10-24T11:42:05.6482269Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T11:42:05.6482459Z ·  ───┬─── 2026-10-24T11:42:05.6482697Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6482773Z 31 │ }, [key, live, snapshot]); 2026-10-24T11:42:05.6482825Z ╰──── 2026-10-24T11:42:05.6483431Z  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-24T11:42:05.6483761Z  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-24T11:42:05.6483763Z 2026-10-24T11:42:05.6483975Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T11:42:05.6484148Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T11:42:05.6484214Z 1782 │ assert.equal( 2026-10-24T11:42:05.6484363Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T11:42:05.6484468Z ·  ────────────────────────── 2026-10-24T11:42:05.6484550Z 1784 │ stored.attachments[0]?.id, 2026-10-24T11:42:05.6484603Z ╰──── 2026-10-24T11:42:05.6484778Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T11:42:05.6484781Z 2026-10-24T11:42:05.6485010Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T11:42:05.6485163Z ╭─[packages/client-runtime/src/operations/projects.ts:238:51] 2026-10-24T11:42:05.6485229Z 237 │ ): string { 2026-10-24T11:42:05.6485387Z 238 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T11:42:05.6485502Z ·  ────── 2026-10-24T11:42:05.6485635Z 239 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T11:42:05.6485687Z ╰──── 2026-10-24T11:42:05.6485860Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T11:42:05.6485863Z 2026-10-24T11:42:05.6486123Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6486288Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T11:42:05.6486408Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T11:42:05.6486482Z 38 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6486561Z ·  ───────┬─────── 2026-10-24T11:42:05.6486694Z · ╰── This is the containing effect 2026-10-24T11:42:05.6486756Z 39 │ reset(); 2026-10-24T11:42:05.6486824Z 40 │ setInitialized(true); 2026-10-24T11:42:05.6486904Z ·  ───────┬────── 2026-10-24T11:42:05.6487075Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6487138Z 41 │ }, [reset]); 2026-10-24T11:42:05.6487190Z ╰──── 2026-10-24T11:42:05.6487851Z  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-24T11:42:05.6488209Z  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-24T11:42:05.6488211Z 2026-10-24T11:42:05.6488471Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6488633Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T11:42:05.6488685Z 88 │ 2026-10-24T11:42:05.6488750Z 89 │ useEffect(() => { 2026-10-24T11:42:05.6488821Z ·  ────┬──── 2026-10-24T11:42:05.6488951Z · ╰── This is the containing effect 2026-10-24T11:42:05.6489116Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T11:42:05.6489223Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T11:42:05.6489291Z 92 │ let active = true; 2026-10-24T11:42:05.6489387Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T11:42:05.6489473Z ·  ─────────┬───────── 2026-10-24T11:42:05.6489646Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6489800Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T11:42:05.6489851Z ╰──── 2026-10-24T11:42:05.6490464Z  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-24T11:42:05.6490792Z  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-24T11:42:05.6490794Z 2026-10-24T11:42:05.6490992Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6491160Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T11:42:05.6491248Z 35 │ { 2026-10-24T11:42:05.6496594Z ╰──── 2026-10-24T11:42:05.6496914Z  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-24T11:42:05.6497210Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6497212Z 2026-10-24T11:42:05.6497360Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6497514Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T11:42:05.6497575Z 493 │ > 2026-10-24T11:42:05.6497653Z 494 │ {props.children(close)} 2026-10-24T11:42:05.6497743Z ·  ──┬── 2026-10-24T11:42:05.6497910Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6497990Z 495 │ 2026-10-24T11:42:05.6498043Z ╰──── 2026-10-24T11:42:05.6498521Z  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-24T11:42:05.6498816Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6498818Z 2026-10-24T11:42:05.6498964Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6499082Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T11:42:05.6499268Z 53 │ const child = children as ReactElement>; 2026-10-24T11:42:05.6499445Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T11:42:05.6499553Z 55 │ │ onTouchStart: (event) => { 2026-10-24T11:42:05.6499712Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T11:42:05.6499872Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T11:42:05.6500001Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T11:42:05.6500169Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T11:42:05.6500281Z 60 │ │ pendingPress.current = null; 2026-10-24T11:42:05.6500410Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T11:42:05.6500490Z 62 │ │ }, 2026-10-24T11:42:05.6500591Z 63 │ │ onPress: (event) => { 2026-10-24T11:42:05.6500763Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T11:42:05.6500899Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T11:42:05.6501089Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T11:42:05.6501281Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T11:42:05.6501368Z 68 │ │ return; 2026-10-24T11:42:05.6501446Z 69 │ │ } 2026-10-24T11:42:05.6501640Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T11:42:05.6501842Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T11:42:05.6502013Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T11:42:05.6502113Z 73 │ │ event.persist(); 2026-10-24T11:42:05.6502274Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T11:42:05.6502360Z 75 │ │ return; 2026-10-24T11:42:05.6502438Z 76 │ │ } 2026-10-24T11:42:05.6502553Z 77 │ │ child.props.onPress?.(event); 2026-10-24T11:42:05.6502629Z 78 │ │ }, 2026-10-24T11:42:05.6502765Z 79 │ ├─▶ }); 2026-10-24T11:42:05.6503007Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6503110Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T11:42:05.6503163Z ╰──── 2026-10-24T11:42:05.6503634Z  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-24T11:42:05.6503926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6503928Z 2026-10-24T11:42:05.6504205Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6504339Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T11:42:05.6504393Z 339 │ 2026-10-24T11:42:05.6504497Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T11:42:05.6504574Z ·  ────┬──── 2026-10-24T11:42:05.6504707Z · ╰── 'layerTest' is declared here 2026-10-24T11:42:05.6504760Z ╰──── 2026-10-24T11:42:05.6504865Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6504867Z 2026-10-24T11:42:05.6505153Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T11:42:05.6505329Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T11:42:05.6505396Z 472 │ onFilters, 2026-10-24T11:42:05.6505465Z 473 │ authorOptions = [], 2026-10-24T11:42:05.6505543Z ·  ── 2026-10-24T11:42:05.6505609Z 474 │ labelOptions = [], 2026-10-24T11:42:05.6505662Z ╰──── 2026-10-24T11:42:05.6505981Z  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-24T11:42:05.6505984Z 2026-10-24T11:42:05.6506264Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T11:42:05.6506433Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T11:42:05.6506500Z 473 │ authorOptions = [], 2026-10-24T11:42:05.6506622Z 474 │ labelOptions = [], 2026-10-24T11:42:05.6506733Z ·  ── 2026-10-24T11:42:05.6506799Z 475 │ optionScope, 2026-10-24T11:42:05.6506850Z ╰──── 2026-10-24T11:42:05.6507166Z  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-24T11:42:05.6507169Z 2026-10-24T11:42:05.6507599Z ⚠ 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-24T11:42:05.6507748Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T11:42:05.6507830Z 262 │ ...(update._meta !== undefined 2026-10-24T11:42:05.6508004Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T11:42:05.6508095Z ·  ───────── 2026-10-24T11:42:05.6508157Z 264 │ : {}), 2026-10-24T11:42:05.6508208Z ╰──── 2026-10-24T11:42:05.6508211Z 2026-10-24T11:42:05.6508399Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T11:42:05.6508537Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T11:42:05.6508622Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T11:42:05.6508714Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T11:42:05.6508794Z ·  ──┬── 2026-10-24T11:42:05.6508930Z · ╰── 'Scope' is imported here 2026-10-24T11:42:05.6509019Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T11:42:05.6509078Z ╰──── 2026-10-24T11:42:05.6509181Z  help: Consider removing this import. 2026-10-24T11:42:05.6509184Z 2026-10-24T11:42:05.6509444Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6509586Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T11:42:05.6509641Z 150 │ 2026-10-24T11:42:05.6509707Z 151 │ useEffect(() => { 2026-10-24T11:42:05.6509780Z ·  ────┬──── 2026-10-24T11:42:05.6509912Z · ╰── This is the containing effect 2026-10-24T11:42:05.6509996Z 152 │ if (!controlledSelectedPath) { 2026-10-24T11:42:05.6510057Z 153 │ return; 2026-10-24T11:42:05.6510114Z 154 │ } 2026-10-24T11:42:05.6510197Z 155 │ setExpandedPaths((current) => { 2026-10-24T11:42:05.6510282Z ·  ────────┬─────── 2026-10-24T11:42:05.6510459Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6510584Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T11:42:05.6510636Z ╰──── 2026-10-24T11:42:05.6511268Z  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-24T11:42:05.6511595Z  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-24T11:42:05.6511597Z 2026-10-24T11:42:05.6511859Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6512040Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T11:42:05.6512138Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T11:42:05.6512217Z 257 │ }, [props.path, targetIndex]); 2026-10-24T11:42:05.6512293Z ·  ─────┬──── 2026-10-24T11:42:05.6512440Z · ╰── Unnecessary dependency `props.path` 2026-10-24T11:42:05.6512495Z 258 │ 2026-10-24T11:42:05.6512545Z ╰──── 2026-10-24T11:42:05.6512842Z  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-24T11:42:05.6513159Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6513166Z 2026-10-24T11:42:05.6513362Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6513511Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T11:42:05.6513584Z 292 │ 2026-10-24T11:42:05.6514684Z ·  ─────────── 2026-10-24T11:42:05.6514752Z 310 │ {body} 2026-10-24T11:42:05.6514802Z ╰──── 2026-10-24T11:42:05.6514949Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T11:42:05.6514952Z 2026-10-24T11:42:05.6515229Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6515382Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T11:42:05.6515439Z 60 │ ) { 2026-10-24T11:42:05.6515610Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T11:42:05.6515692Z ·  ──────┬────── 2026-10-24T11:42:05.6515834Z · ╰── 'useDragRegion' is declared here 2026-10-24T11:42:05.6515925Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T11:42:05.6515978Z ╰──── 2026-10-24T11:42:05.6516083Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6516085Z 2026-10-24T11:42:05.6516367Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T11:42:05.6516497Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T11:42:05.6516620Z 284 │ }, 2026-10-24T11:42:05.6516736Z 285 │ (effect, flow, stopSessions) => 2026-10-24T11:42:05.6516829Z ·  ──────┬───── 2026-10-24T11:42:05.6516978Z · ╰── 'stopSessions' is declared here 2026-10-24T11:42:05.6517044Z 286 │ effect.pipe( 2026-10-24T11:42:05.6517096Z ╰──── 2026-10-24T11:42:05.6517199Z  help: Consider removing this parameter. 2026-10-24T11:42:05.6517201Z 2026-10-24T11:42:05.6517403Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6517564Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T11:42:05.6517660Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T11:42:05.6517758Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T11:42:05.6517872Z ·  ──────┬───── 2026-10-24T11:42:05.6518045Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T11:42:05.6518150Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T11:42:05.6518203Z ╰──── 2026-10-24T11:42:05.6518501Z  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-24T11:42:05.6518815Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6518817Z 2026-10-24T11:42:05.6519030Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T11:42:05.6519161Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T11:42:05.6519217Z 78 │ 2026-10-24T11:42:05.6519354Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T11:42:05.6519442Z ·  ────────┬─────── 2026-10-24T11:42:05.6519594Z · ╰── 'describeSchedule' is declared here 2026-10-24T11:42:05.6519702Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T11:42:05.6519754Z ╰──── 2026-10-24T11:42:05.6519857Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6519859Z 2026-10-24T11:42:05.6520385Z ⚠ 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-24T11:42:05.6520675Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T11:42:05.6520748Z 520 │ })).delivery; 2026-10-24T11:42:05.6520948Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T11:42:05.6521086Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6521285Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T11:42:05.6521388Z 524 │ │ id: task.id, 2026-10-24T11:42:05.6521505Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T11:42:05.6521605Z 526 │ │ })).delivery; 2026-10-24T11:42:05.6521753Z 527 │ ╰─▶ } 2026-10-24T11:42:05.6521877Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T11:42:05.6521929Z ╰──── 2026-10-24T11:42:05.6521931Z 2026-10-24T11:42:05.6522115Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T11:42:05.6522236Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T11:42:05.6522359Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T11:42:05.6522449Z 194 │ const codes = new Array(count); 2026-10-24T11:42:05.6522560Z ·  ──────────────────────── 2026-10-24T11:42:05.6522664Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T11:42:05.6522716Z ╰──── 2026-10-24T11:42:05.6523150Z  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-24T11:42:05.6523159Z 2026-10-24T11:42:05.6523329Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:42:05.6523471Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T11:42:05.6523527Z 185 │ 2026-10-24T11:42:05.6523628Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T11:42:05.6523699Z ·  ── 2026-10-24T11:42:05.6523754Z 187 │ } 2026-10-24T11:42:05.6523806Z ╰──── 2026-10-24T11:42:05.6524040Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:42:05.6524043Z 2026-10-24T11:42:05.6524213Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:42:05.6524357Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T11:42:05.6524410Z 188 │ 2026-10-24T11:42:05.6524476Z 189 │ for (const {} of [ 2026-10-24T11:42:05.6524546Z ·  ── 2026-10-24T11:42:05.6524638Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T11:42:05.6524691Z ╰──── 2026-10-24T11:42:05.6524919Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:42:05.6524922Z 2026-10-24T11:42:05.6525087Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:42:05.6525226Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T11:42:05.6525279Z 310 │ 2026-10-24T11:42:05.6525482Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T11:42:05.6525590Z ·  ── 2026-10-24T11:42:05.6525643Z 312 │ } 2026-10-24T11:42:05.6525695Z ╰──── 2026-10-24T11:42:05.6525923Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:42:05.6525926Z 2026-10-24T11:42:05.6526090Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:42:05.6526228Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T11:42:05.6526281Z 313 │ 2026-10-24T11:42:05.6526345Z 314 │ for (const {} of [ 2026-10-24T11:42:05.6526414Z ·  ── 2026-10-24T11:42:05.6526469Z 315 │ { 2026-10-24T11:42:05.6526522Z ╰──── 2026-10-24T11:42:05.6526755Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:42:05.6526762Z 2026-10-24T11:42:05.6526927Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T11:42:05.6527084Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12] 2026-10-24T11:42:05.6527138Z 1436 │ 2026-10-24T11:42:05.6527204Z 1437 │ for (const [] of [ 2026-10-24T11:42:05.6527277Z ·  ── 2026-10-24T11:42:05.6527350Z 1438 │ ["github", "github.com"], 2026-10-24T11:42:05.6527404Z ╰──── 2026-10-24T11:42:05.6527687Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T11:42:05.6527689Z 2026-10-24T11:42:05.6527890Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6528044Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T11:42:05.6528152Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T11:42:05.6528247Z 223 │ 2026-10-24T11:42:05.6528354Z ·  ─────────────── 2026-10-24T11:42:05.6528449Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T11:42:05.6528501Z ╰──── 2026-10-24T11:42:05.6528649Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T11:42:05.6528651Z 2026-10-24T11:42:05.6528846Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6529001Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T11:42:05.6529081Z 226 │ { 2026-10-24T11:42:05.6532276Z ·  ────┬──── 2026-10-24T11:42:05.6532408Z · ╰── This is the containing effect 2026-10-24T11:42:05.6532511Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T11:42:05.6532595Z 103 │ setHighlightedLinesById({}); 2026-10-24T11:42:05.6532695Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6532873Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6532937Z 104 │ return; 2026-10-24T11:42:05.6532989Z ╰──── 2026-10-24T11:42:05.6533599Z  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-24T11:42:05.6533925Z  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-24T11:42:05.6533929Z 2026-10-24T11:42:05.6534193Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6534386Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T11:42:05.6534439Z 104 │ 2026-10-24T11:42:05.6534506Z 105 │ useEffect(() => { 2026-10-24T11:42:05.6534577Z ·  ────┬──── 2026-10-24T11:42:05.6534710Z · ╰── This is the containing effect 2026-10-24T11:42:05.6534790Z 106 │ clearReviewCommentTarget(); 2026-10-24T11:42:05.6534888Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T11:42:05.6534993Z ·  ────────────────┬─────────────── 2026-10-24T11:42:05.6535171Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6535244Z 108 │ }, [selectedSection?.id]); 2026-10-24T11:42:05.6535366Z ╰──── 2026-10-24T11:42:05.6535996Z  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-24T11:42:05.6536319Z  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-24T11:42:05.6536321Z 2026-10-24T11:42:05.6536580Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6536767Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T11:42:05.6536820Z 109 │ 2026-10-24T11:42:05.6536888Z 110 │ useEffect(() => { 2026-10-24T11:42:05.6536961Z ·  ────┬──── 2026-10-24T11:42:05.6537091Z · ╰── This is the containing effect 2026-10-24T11:42:05.6537180Z 111 │ if (activeCommentTarget === null) { 2026-10-24T11:42:05.6537280Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T11:42:05.6537388Z ·  ────────────────┬─────────────── 2026-10-24T11:42:05.6537568Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6537625Z 113 │ } 2026-10-24T11:42:05.6537677Z ╰──── 2026-10-24T11:42:05.6538284Z  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-24T11:42:05.6538611Z  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-24T11:42:05.6538613Z 2026-10-24T11:42:05.6538815Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6539000Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T11:42:05.6539097Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T11:42:05.6539170Z 108 │ }, [selectedSection?.id]); 2026-10-24T11:42:05.6539258Z ·  ─────────┬───────── 2026-10-24T11:42:05.6539429Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T11:42:05.6539484Z 109 │ 2026-10-24T11:42:05.6539536Z ╰──── 2026-10-24T11:42:05.6539831Z  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-24T11:42:05.6540145Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6540147Z 2026-10-24T11:42:05.6540524Z ⚠ 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-24T11:42:05.6540654Z ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35] 2026-10-24T11:42:05.6540860Z 974 │ // Every client and server release spells the resource this way on the wire. 2026-10-24T11:42:05.6541071Z 975 │ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({ 2026-10-24T11:42:05.6541194Z ·  ────────────────────────── 2026-10-24T11:42:05.6541310Z 976 │ resource: { _tag: "github-media", cwd: "/repo", url }, 2026-10-24T11:42:05.6541363Z ╰──── 2026-10-24T11:42:05.6541365Z 2026-10-24T11:42:05.6541823Z ⚠ 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-24T11:42:05.6541955Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32] 2026-10-24T11:42:05.6542093Z 1011 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T11:42:05.6542292Z 1012 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T11:42:05.6542411Z ·  ─────────────────── 2026-10-24T11:42:05.6542506Z 1013 │ expect(encoded).not.toContain(url); 2026-10-24T11:42:05.6542558Z ╰──── 2026-10-24T11:42:05.6542561Z 2026-10-24T11:42:05.6542792Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T11:42:05.6542917Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T11:42:05.6542977Z 730 │ ); 2026-10-24T11:42:05.6543153Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T11:42:05.6543250Z ·  ────── 2026-10-24T11:42:05.6543373Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T11:42:05.6543430Z ╰──── 2026-10-24T11:42:05.6543603Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T11:42:05.6543607Z 2026-10-24T11:42:05.6543815Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6543952Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T11:42:05.6544040Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T11:42:05.6544150Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T11:42:05.6544294Z ·  ──────┬────── ────┬─── 2026-10-24T11:42:05.6544498Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T11:42:05.6544708Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T11:42:05.6544802Z 455 │ const { 2026-10-24T11:42:05.6544853Z ╰──── 2026-10-24T11:42:05.6545153Z  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-24T11:42:05.6545468Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6545471Z 2026-10-24T11:42:05.6545661Z ⚠ react(static-components): Cannot create components during render 2026-10-24T11:42:05.6545797Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T11:42:05.6545861Z 492 │ // same check. 2026-10-24T11:42:05.6545994Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T11:42:05.6546119Z ·  ─────────────┬───────────── 2026-10-24T11:42:05.6546304Z · ╰── The component is created during render here 2026-10-24T11:42:05.6546454Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T11:42:05.6546577Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T11:42:05.6546708Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T11:42:05.6546802Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T11:42:05.6546879Z 498 │ setIsPullRefreshing(true); 2026-10-24T11:42:05.6546964Z 499 │ await refreshSelectedSection(); 2026-10-24T11:42:05.6547043Z 500 │ setIsPullRefreshing(false); 2026-10-24T11:42:05.6547106Z 501 │ }; 2026-10-24T11:42:05.6547250Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T11:42:05.6547394Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T11:42:05.6547501Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T11:42:05.6547588Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T11:42:05.6547678Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T11:42:05.6547749Z 507 │ files: reviewFiles, 2026-10-24T11:42:05.6547848Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T11:42:05.6547981Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T11:42:05.6548045Z 510 │ : undefined, 2026-10-24T11:42:05.6548141Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T11:42:05.6548272Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T11:42:05.6548336Z 513 │ : undefined, 2026-10-24T11:42:05.6548392Z 514 │ }); 2026-10-24T11:42:05.6548584Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T11:42:05.6548717Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T11:42:05.6548781Z 517 │ environmentId, 2026-10-24T11:42:05.6548844Z 518 │ threadId, 2026-10-24T11:42:05.6548909Z 519 │ selectedSection, 2026-10-24T11:42:05.6548979Z 520 │ nativeReviewDiffData, 2026-10-24T11:42:05.6549033Z 521 │ }); 2026-10-24T11:42:05.6549139Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T11:42:05.6549225Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T11:42:05.6549315Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T11:42:05.6549452Z 525 │ diff: selectedSection?.diff, 2026-10-24T11:42:05.6549567Z 526 │ data: nativeReviewDiffData, 2026-10-24T11:42:05.6549636Z 527 │ collapsedFileIds, 2026-10-24T11:42:05.6549700Z 528 │ viewedFileIds, 2026-10-24T11:42:05.6549809Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T11:42:05.6549907Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T11:42:05.6549962Z 531 │ }); 2026-10-24T11:42:05.6550035Z 532 │ const showcaseReviewKey = 2026-10-24T11:42:05.6550166Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T11:42:05.6550376Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T11:42:05.6550437Z 535 │ : null; 2026-10-24T11:42:05.6550605Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T11:42:05.6550689Z 537 │ nativeBridge.onDebug(event); 2026-10-24T11:42:05.6550750Z 538 │ if ( 2026-10-24T11:42:05.6550830Z 539 │ showcaseReviewKey === null || 2026-10-24T11:42:05.6550953Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T11:42:05.6551086Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T11:42:05.6551144Z 542 │ ) { 2026-10-24T11:42:05.6551204Z 543 │ return; 2026-10-24T11:42:05.6551258Z 544 │ } 2026-10-24T11:42:05.6551370Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T11:42:05.6551533Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T11:42:05.6551588Z 547 │ }; 2026-10-24T11:42:05.6551639Z 548 │ 2026-10-24T11:42:05.6551759Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T11:42:05.6551845Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T11:42:05.6551939Z 551 │ commentSelection.clearSelection(); 2026-10-24T11:42:05.6552058Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T11:42:05.6552139Z 553 │ toggleExpandedFile(fileId); 2026-10-24T11:42:05.6552194Z 554 │ } 2026-10-24T11:42:05.6552306Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T11:42:05.6552379Z 556 │ if (!nativeView) return; 2026-10-24T11:42:05.6552475Z 557 │ const result = await settlePromise(() => 2026-10-24T11:42:05.6552650Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T11:42:05.6552706Z 559 │ ); 2026-10-24T11:42:05.6552793Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T11:42:05.6552980Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T11:42:05.6553037Z 562 │ } 2026-10-24T11:42:05.6553092Z 563 │ }; 2026-10-24T11:42:05.6553174Z 564 │ const handleVisibleFileChange = ( 2026-10-24T11:42:05.6553306Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T11:42:05.6553364Z 566 │ ) => { 2026-10-24T11:42:05.6553473Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T11:42:05.6553641Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T11:42:05.6553696Z 569 │ }; 2026-10-24T11:42:05.6553775Z 570 │ const renderInspector = () => ( 2026-10-24T11:42:05.6553845Z 571 │ void handleSelectFile(fileId)} 2026-10-24T11:42:05.6554448Z 577 │ /> 2026-10-24T11:42:05.6554502Z 578 │ ); 2026-10-24T11:42:05.6554554Z 579 │ 2026-10-24T11:42:05.6554740Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T11:42:05.6554828Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T11:42:05.6554891Z 582 │ if (fileId) { 2026-10-24T11:42:05.6554971Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T11:42:05.6555050Z 584 │ toggleExpandedFile(fileId); 2026-10-24T11:42:05.6555105Z 585 │ } 2026-10-24T11:42:05.6555159Z 586 │ }; 2026-10-24T11:42:05.6555210Z 587 │ 2026-10-24T11:42:05.6555300Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T11:42:05.6555426Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T11:42:05.6555487Z 590 │ ) => { 2026-10-24T11:42:05.6555573Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T11:42:05.6555636Z 592 │ if (fileId) { 2026-10-24T11:42:05.6555714Z 593 │ toggleViewedFile(fileId); 2026-10-24T11:42:05.6555769Z 594 │ } 2026-10-24T11:42:05.6555821Z 595 │ }; 2026-10-24T11:42:05.6555874Z 596 │ 2026-10-24T11:42:05.6555946Z 597 │ const parsedDiffNotice = 2026-10-24T11:42:05.6556107Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T11:42:05.6556228Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T11:42:05.6556386Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T11:42:05.6556513Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T11:42:05.6556674Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T11:42:05.6556785Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T11:42:05.6556887Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T11:42:05.6556959Z 605 │ hasCachedSelectedDiff, 2026-10-24T11:42:05.6557026Z 606 │ hasAnyCachedDiff, 2026-10-24T11:42:05.6557080Z 607 │ }); 2026-10-24T11:42:05.6557167Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T11:42:05.6557255Z 609 │ void retryEnvironment(environmentId); 2026-10-24T11:42:05.6557308Z 610 │ }; 2026-10-24T11:42:05.6557394Z 611 │ const handleReturnToThread = () => { 2026-10-24T11:42:05.6557473Z 612 │ if (navigation.canGoBack()) { 2026-10-24T11:42:05.6557544Z 613 │ navigation.goBack(); 2026-10-24T11:42:05.6557610Z 614 │ return; 2026-10-24T11:42:05.6557668Z 615 │ } 2026-10-24T11:42:05.6557749Z 616 │ navigation.navigate("Thread", { 2026-10-24T11:42:05.6557840Z 617 │ environmentId: String(environmentId), 2026-10-24T11:42:05.6557915Z 618 │ threadId: String(threadId), 2026-10-24T11:42:05.6557971Z 619 │ }); 2026-10-24T11:42:05.6558025Z 620 │ }; 2026-10-24T11:42:05.6558104Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T11:42:05.6558177Z 622 │ selectedSection?.title, 2026-10-24T11:42:05.6558257Z 623 │ headerDiffSummary.additions, 2026-10-24T11:42:05.6558336Z 624 │ headerDiffSummary.deletions, 2026-10-24T11:42:05.6558388Z 625 │ ] 2026-10-24T11:42:05.6558494Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T11:42:05.6558558Z 627 │ .join(" · "); 2026-10-24T11:42:05.6558611Z 628 │ 2026-10-24T11:42:05.6558746Z 629 │ const showChangedFilesPane = 2026-10-24T11:42:05.6558853Z 630 │ !showConnectionNotice && 2026-10-24T11:42:05.6558929Z 631 │ selectedSection !== null && 2026-10-24T11:42:05.6559008Z 632 │ parsedDiff.kind === "files" && 2026-10-24T11:42:05.6559087Z 633 │ NativeReviewDiffView !== null; 2026-10-24T11:42:05.6559256Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T11:42:05.6559427Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T11:42:05.6559478Z 636 │ 2026-10-24T11:42:05.6559550Z 637 │ const listHeader = (() => { 2026-10-24T11:42:05.6559635Z 638 │ const children: ReactElement[] = []; 2026-10-24T11:42:05.6559687Z 639 │ 2026-10-24T11:42:05.6559750Z 640 │ if (error) { 2026-10-24T11:42:05.6559815Z 641 │ children.push( 2026-10-24T11:42:05.6559883Z 642 │ 2026-10-24T11:42:05.6560542Z 649 │ Review unavailable 2026-10-24T11:42:05.6560702Z 650 │ {error} 2026-10-24T11:42:05.6560764Z 651 │ , 2026-10-24T11:42:05.6560819Z 652 │ ); 2026-10-24T11:42:05.6560874Z 653 │ } 2026-10-24T11:42:05.6560927Z 654 │ 2026-10-24T11:42:05.6561000Z 655 │ if (parsedDiffNotice) { 2026-10-24T11:42:05.6561420Z 656 │ children.push(); 2026-10-24T11:42:05.6561482Z 657 │ } 2026-10-24T11:42:05.6561535Z 658 │ 2026-10-24T11:42:05.6561614Z 659 │ if (children.length === 0) { 2026-10-24T11:42:05.6561677Z 660 │ return null; 2026-10-24T11:42:05.6561731Z 661 │ } 2026-10-24T11:42:05.6561784Z 662 │ 2026-10-24T11:42:05.6561855Z 663 │ return <>{children}; 2026-10-24T11:42:05.6561910Z 664 │ })(); 2026-10-24T11:42:05.6561979Z 665 │ const headerSubtitle = [ 2026-10-24T11:42:05.6562058Z 666 │ headerDiffSummary.additions, 2026-10-24T11:42:05.6562135Z 667 │ headerDiffSummary.deletions, 2026-10-24T11:42:05.6562218Z 668 │ pendingReviewCommentCount > 0 2026-10-24T11:42:05.6562391Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T11:42:05.6562458Z 670 │ : null, 2026-10-24T11:42:05.6562514Z 671 │ ] 2026-10-24T11:42:05.6562580Z 672 │ .filter(Boolean) 2026-10-24T11:42:05.6562643Z 673 │ .join(" · "); 2026-10-24T11:42:05.6562779Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T11:42:05.6562831Z 675 │ 2026-10-24T11:42:05.6562890Z 676 │ return ( 2026-10-24T11:42:05.6562946Z 677 │ <> 2026-10-24T11:42:05.6563011Z 678 │ 2026-10-24T11:42:05.6564450Z 694 │ 2026-10-24T11:42:05.6564518Z 695 │ 2026-10-24T11:42:05.6564640Z 696 │ 2026-10-24T11:42:05.6564727Z 697 │ {showConnectionNotice ? ( 2026-10-24T11:42:05.6564869Z 698 │ 2026-10-24T11:42:05.6564960Z 699 │ 2026-10-24T11:42:05.6565976Z 711 │ 2026-10-24T11:42:05.6566134Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T11:42:05.6566196Z 713 │ 2026-10-24T11:42:05.6566633Z 719 │ 2026-10-24T11:42:05.6567000Z 723 │ {listHeader} 2026-10-24T11:42:05.6567121Z 724 │ 2026-10-24T11:42:05.6567202Z 725 │ label.name.trim().toLowerCase()); 2026-10-24T11:42:05.6569090Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T11:42:05.6569239Z 263 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T11:42:05.6569291Z ╰──── 2026-10-24T11:42:05.6569369Z  help: Switch to `Set` 2026-10-24T11:42:05.6569381Z 2026-10-24T11:42:05.6569649Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6569825Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T11:42:05.6569878Z 55 │ 2026-10-24T11:42:05.6569944Z 56 │ useEffect(() => { 2026-10-24T11:42:05.6570016Z ·  ────┬──── 2026-10-24T11:42:05.6570149Z · ╰── This is the containing effect 2026-10-24T11:42:05.6570216Z 57 │ scheduler.reset(); 2026-10-24T11:42:05.6570315Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T11:42:05.6570403Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T11:42:05.6570520Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T11:42:05.6570606Z ·  ───────┬─────── 2026-10-24T11:42:05.6570783Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6570897Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T11:42:05.6570950Z ╰──── 2026-10-24T11:42:05.6571581Z  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-24T11:42:05.6571907Z  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-24T11:42:05.6571909Z 2026-10-24T11:42:05.6572165Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6572373Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T11:42:05.6572455Z 62 │ return () => scheduler.cancel(); 2026-10-24T11:42:05.6572556Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T11:42:05.6572684Z ·  ───┬─── ─────┬───── 2026-10-24T11:42:05.6572882Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T11:42:05.6573042Z · ╰── Unnecessary dependency `enabled` 2026-10-24T11:42:05.6573095Z 64 │ 2026-10-24T11:42:05.6573149Z ╰──── 2026-10-24T11:42:05.6573453Z  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-24T11:42:05.6573773Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6573775Z 2026-10-24T11:42:05.6573986Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T11:42:05.6574151Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T11:42:05.6574229Z 3 │ AuthProvidersManageScope, 2026-10-24T11:42:05.6574299Z 4 │ type AuthSessionState, 2026-10-24T11:42:05.6574383Z ·  ────────┬─────── 2026-10-24T11:42:05.6574527Z · ╰── 'AuthSessionState' is imported here 2026-10-24T11:42:05.6574594Z 5 │ type EnvironmentId, 2026-10-24T11:42:05.6574652Z ╰──── 2026-10-24T11:42:05.6574755Z  help: Consider removing this import. 2026-10-24T11:42:05.6574758Z 2026-10-24T11:42:05.6575211Z ⚠ 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-24T11:42:05.6575340Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T11:42:05.6575515Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T11:42:05.6575703Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T11:42:05.6575817Z ·  ─────────────────── 2026-10-24T11:42:05.6575934Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T11:42:05.6575991Z ╰──── 2026-10-24T11:42:05.6575994Z 2026-10-24T11:42:05.6576443Z ⚠ 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-24T11:42:05.6576565Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T11:42:05.6576748Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T11:42:05.6576857Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T11:42:05.6576974Z ·  ─────────────────── 2026-10-24T11:42:05.6577094Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T11:42:05.6577147Z ╰──── 2026-10-24T11:42:05.6577203Z 2026-10-24T11:42:05.6577454Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:42:05.6577589Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T11:42:05.6577667Z 89 │ let cursor = prompt.length; 2026-10-24T11:42:05.6577775Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T11:42:05.6577881Z ·  ─────── 2026-10-24T11:42:05.6577962Z 91 │ let { start, end } = occurrence; 2026-10-24T11:42:05.6578014Z ╰──── 2026-10-24T11:42:05.6578279Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:42:05.6578283Z 2026-10-24T11:42:05.6578536Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T11:42:05.6578655Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T11:42:05.6578708Z 55 │ 2026-10-24T11:42:05.6578810Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T11:42:05.6578919Z ·  ────────────────┬──────────────── 2026-10-24T11:42:05.6579111Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T11:42:05.6579201Z 57 │ selection: TerminalContextSelection, 2026-10-24T11:42:05.6579254Z ╰──── 2026-10-24T11:42:05.6579359Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6579363Z 2026-10-24T11:42:05.6579568Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T11:42:05.6579699Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T11:42:05.6579772Z 37 │ get isConnected() { 2026-10-24T11:42:05.6579861Z 38 │ let current: FakeElement | null = this; 2026-10-24T11:42:05.6579938Z ·  ─────── 2026-10-24T11:42:05.6580012Z 39 │ while (current?.parent) { 2026-10-24T11:42:05.6580063Z ╰──── 2026-10-24T11:42:05.6580340Z  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-24T11:42:05.6580343Z 2026-10-24T11:42:05.6580539Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6580708Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17] 2026-10-24T11:42:05.6580772Z 817 │
{ 2026-10-24T11:42:05.6590657Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T11:42:05.6590771Z ·  ──────────────────────── 2026-10-24T11:42:05.6590914Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T11:42:05.6590967Z ╰──── 2026-10-24T11:42:05.6590969Z 2026-10-24T11:42:05.6591355Z ⚠ 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-24T11:42:05.6591479Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T11:42:05.6591579Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T11:42:05.6591735Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T11:42:05.6591852Z ·  ──────────────────────── 2026-10-24T11:42:05.6591915Z 257 │ return [ 2026-10-24T11:42:05.6592026Z ╰──── 2026-10-24T11:42:05.6592061Z 2026-10-24T11:42:05.6592231Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6592386Z ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58] 2026-10-24T11:42:05.6592569Z 151 │ if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) { 2026-10-24T11:42:05.6592702Z 152 │ claimThreadOpen(thread.environmentId, thread.id, Date.now()); 2026-10-24T11:42:05.6592826Z ·  ─────┬──── 2026-10-24T11:42:05.6592999Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6593059Z 153 │ } 2026-10-24T11:42:05.6593112Z ╰──── 2026-10-24T11:42:05.6593409Z  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-24T11:42:05.6593711Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6593714Z 2026-10-24T11:42:05.6594184Z ⚠ 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-24T11:42:05.6594340Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T11:42:05.6594453Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T11:42:05.6594671Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T11:42:05.6594808Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T11:42:05.6594918Z 137 │ │ if (predicate(lastState)) { 2026-10-24T11:42:05.6595019Z 138 │ │ return lastState; 2026-10-24T11:42:05.6595095Z 139 │ │ } 2026-10-24T11:42:05.6595196Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6595324Z 141 │ ╰─▶ } 2026-10-24T11:42:05.6595403Z 142 │ return yield* Effect.die( 2026-10-24T11:42:05.6595458Z ╰──── 2026-10-24T11:42:05.6595461Z 2026-10-24T11:42:05.6595629Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6595816Z ╭─[apps/web/src/components/CommandPalette.tsx:2037:20] 2026-10-24T11:42:05.6596040Z 2036 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T11:42:05.6596135Z 2037 │ createdAt: new Date().toISOString(), 2026-10-24T11:42:05.6596228Z ·  ─────┬──── 2026-10-24T11:42:05.6596372Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6596479Z 2038 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T11:42:05.6596534Z ╰──── 2026-10-24T11:42:05.6596816Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6597119Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6597127Z 2026-10-24T11:42:05.6597594Z ⚠ 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-24T11:42:05.6597729Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T11:42:05.6597792Z 130 │ ) { 2026-10-24T11:42:05.6598004Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:42:05.6598130Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T11:42:05.6598223Z 133 │ │ return; 2026-10-24T11:42:05.6598306Z 134 │ │ } 2026-10-24T11:42:05.6598419Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6598559Z 136 │ ╰─▶ } 2026-10-24T11:42:05.6598723Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T11:42:05.6598777Z ╰──── 2026-10-24T11:42:05.6598780Z 2026-10-24T11:42:05.6599241Z ⚠ 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-24T11:42:05.6599374Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T11:42:05.6599540Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T11:42:05.6599798Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T11:42:05.6599908Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6600040Z 254 │ ╰─▶ } 2026-10-24T11:42:05.6600165Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T11:42:05.6600219Z ╰──── 2026-10-24T11:42:05.6600222Z 2026-10-24T11:42:05.6600685Z ⚠ 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-24T11:42:05.6600819Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T11:42:05.6600874Z 257 │ 2026-10-24T11:42:05.6601272Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T11:42:05.6601423Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6601555Z 260 │ ╰─▶ } 2026-10-24T11:42:05.6601660Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T11:42:05.6601714Z ╰──── 2026-10-24T11:42:05.6601716Z 2026-10-24T11:42:05.6602178Z ⚠ 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-24T11:42:05.6602310Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T11:42:05.6602374Z 321 │ ); 2026-10-24T11:42:05.6602634Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T11:42:05.6602741Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6602875Z 324 │ ╰─▶ } 2026-10-24T11:42:05.6602930Z 325 │ 2026-10-24T11:42:05.6602984Z ╰──── 2026-10-24T11:42:05.6602987Z 2026-10-24T11:42:05.6603449Z ⚠ 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-24T11:42:05.6603586Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T11:42:05.6603755Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T11:42:05.6604004Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T11:42:05.6604109Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6604240Z 332 │ ╰─▶ } 2026-10-24T11:42:05.6604344Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T11:42:05.6604396Z ╰──── 2026-10-24T11:42:05.6604398Z 2026-10-24T11:42:05.6604864Z ⚠ 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-24T11:42:05.6605003Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T11:42:05.6605061Z 225 │ ) { 2026-10-24T11:42:05.6605266Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:42:05.6605378Z 227 │ │ const socket = sockets[index]; 2026-10-24T11:42:05.6605467Z 228 │ │ if (socket) { 2026-10-24T11:42:05.6605562Z 229 │ │ return socket; 2026-10-24T11:42:05.6605638Z 230 │ │ } 2026-10-24T11:42:05.6605740Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6605866Z 232 │ ╰─▶ } 2026-10-24T11:42:05.6606105Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T11:42:05.6606192Z ╰──── 2026-10-24T11:42:05.6606194Z 2026-10-24T11:42:05.6606657Z ⚠ 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-24T11:42:05.6606791Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T11:42:05.6606848Z 239 │ ) { 2026-10-24T11:42:05.6607050Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:42:05.6607267Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T11:42:05.6607361Z 242 │ │ if (request) { 2026-10-24T11:42:05.6607462Z 243 │ │ return request; 2026-10-24T11:42:05.6607539Z 244 │ │ } 2026-10-24T11:42:05.6607639Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6607765Z 246 │ ╰─▶ } 2026-10-24T11:42:05.6607931Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T11:42:05.6607984Z ╰──── 2026-10-24T11:42:05.6607987Z 2026-10-24T11:42:05.6608156Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6608277Z ╭─[apps/web/src/components/Sidebar.tsx:1136:11] 2026-10-24T11:42:05.6608376Z 1135 │ foldSearchQuery(threadSearchQuery), 2026-10-24T11:42:05.6608445Z 1136 │ Date.now(), 2026-10-24T11:42:05.6608534Z ·  ─────┬──── 2026-10-24T11:42:05.6608674Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6608814Z 1137 │ // A list filter, as on mobile: a pick would move rows unexplained. 2026-10-24T11:42:05.6608869Z ╰──── 2026-10-24T11:42:05.6609159Z  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-24T11:42:05.6609459Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6609461Z 2026-10-24T11:42:05.6609656Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T11:42:05.6609797Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T11:42:05.6609919Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T11:42:05.6610000Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T11:42:05.6610074Z ·  ─┬─ 2026-10-24T11:42:05.6610201Z · ╰── 'Arr' is imported here 2026-10-24T11:42:05.6610285Z 5 │ import * as Order from "effect/Order"; 2026-10-24T11:42:05.6610338Z ╰──── 2026-10-24T11:42:05.6610436Z  help: Consider removing this import. 2026-10-24T11:42:05.6610439Z 2026-10-24T11:42:05.6610635Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T11:42:05.6610768Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T11:42:05.6610848Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T11:42:05.6610988Z 5 │ import * as Order from "effect/Order"; 2026-10-24T11:42:05.6611125Z ·  ──┬── 2026-10-24T11:42:05.6611256Z · ╰── 'Order' is imported here 2026-10-24T11:42:05.6611309Z 6 │ 2026-10-24T11:42:05.6611362Z ╰──── 2026-10-24T11:42:05.6611460Z  help: Consider removing this import. 2026-10-24T11:42:05.6611463Z 2026-10-24T11:42:05.6611648Z ⚠ react(static-components): Cannot create components during render 2026-10-24T11:42:05.6611810Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T11:42:05.6611899Z 196 │ const { onInput, onResize } = props; 2026-10-24T11:42:05.6612046Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T11:42:05.6612188Z ·  ────────────────┬─────────────── 2026-10-24T11:42:05.6612384Z · ╰── The component is created during render here 2026-10-24T11:42:05.6612512Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T11:42:05.6612567Z 199 │ 2026-10-24T11:42:05.6612635Z 200 │ useEffect(() => { 2026-10-24T11:42:05.6612724Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T11:42:05.6612812Z 202 │ terminalKey: props.terminalKey, 2026-10-24T11:42:05.6612889Z 203 │ native: hasNativeSurface, 2026-10-24T11:42:05.6613024Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T11:42:05.6613107Z 205 │ bufferLen: props.buffer.length, 2026-10-24T11:42:05.6613188Z 206 │ isRunning: props.isRunning, 2026-10-24T11:42:05.6613245Z 207 │ }); 2026-10-24T11:42:05.6613412Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T11:42:05.6613502Z 209 │ const handleNativeInput = useCallback( 2026-10-24T11:42:05.6613619Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T11:42:05.6613717Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T11:42:05.6613781Z 212 │ return; 2026-10-24T11:42:05.6613837Z 213 │ } 2026-10-24T11:42:05.6613929Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T11:42:05.6615470Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T11:42:05.6615537Z 216 │ }); 2026-10-24T11:42:05.6615625Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T11:42:05.6615683Z 218 │ }, 2026-10-24T11:42:05.6615782Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T11:42:05.6615837Z 220 │ ); 2026-10-24T11:42:05.6615934Z 221 │ const handleNativeResize = useCallback( 2026-10-24T11:42:05.6616054Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T11:42:05.6616117Z 223 │ onResize({ 2026-10-24T11:42:05.6616201Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T11:42:05.6616283Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T11:42:05.6616341Z 226 │ }); 2026-10-24T11:42:05.6616396Z 227 │ }, 2026-10-24T11:42:05.6616457Z 228 │ [onResize], 2026-10-24T11:42:05.6616511Z 229 │ ); 2026-10-24T11:42:05.6616565Z 230 │ 2026-10-24T11:42:05.6616648Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T11:42:05.6616706Z 232 │ return ( 2026-10-24T11:42:05.6616785Z 233 │ 2026-10-24T11:42:05.6616866Z 234 │ void) { 2026-10-24T11:42:05.6618626Z 12 │ this.onmessage = listener; 2026-10-24T11:42:05.6618706Z ·  ───────── 2026-10-24T11:42:05.6618762Z 13 │ } 2026-10-24T11:42:05.6618815Z ╰──── 2026-10-24T11:42:05.6619137Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T11:42:05.6619140Z 2026-10-24T11:42:05.6619347Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T11:42:05.6619491Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T11:42:05.6619558Z 15 │ constructor() { 2026-10-24T11:42:05.6619632Z 16 │ source = this; 2026-10-24T11:42:05.6619709Z ·  ────── 2026-10-24T11:42:05.6619764Z 17 │ } 2026-10-24T11:42:05.6619816Z ╰──── 2026-10-24T11:42:05.6620092Z  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-24T11:42:05.6620095Z 2026-10-24T11:42:05.6620289Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:42:05.6620448Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T11:42:05.6620514Z 71 │ = 2) { 2026-10-24T11:42:05.6622258Z 1682 │ │ break; 2026-10-24T11:42:05.6622340Z 1683 │ │ } 2026-10-24T11:42:05.6622449Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6622583Z 1685 │ ╰─▶ } 2026-10-24T11:42:05.6622657Z 1686 │ yield* Queue.offer( 2026-10-24T11:42:05.6622710Z ╰──── 2026-10-24T11:42:05.6622712Z 2026-10-24T11:42:05.6623184Z ⚠ 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-24T11:42:05.6623340Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T11:42:05.6623434Z 1788 │ yield* harness.replaceSession; 2026-10-24T11:42:05.6623647Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:42:05.6623809Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T11:42:05.6623918Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6624049Z 1792 │ ╰─▶ } 2026-10-24T11:42:05.6624179Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T11:42:05.6624233Z ╰──── 2026-10-24T11:42:05.6624236Z 2026-10-24T11:42:05.6624500Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6624664Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T11:42:05.6624835Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T11:42:05.6624902Z 113 │ useEffect(() => { 2026-10-24T11:42:05.6624976Z ·  ────┬──── 2026-10-24T11:42:05.6625111Z · ╰── This is the containing effect 2026-10-24T11:42:05.6625275Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T11:42:05.6625339Z 115 │ return; 2026-10-24T11:42:05.6625395Z 116 │ } 2026-10-24T11:42:05.6625513Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T11:42:05.6625585Z ·  ────┬─── 2026-10-24T11:42:05.6625758Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6625953Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T11:42:05.6626036Z ╰──── 2026-10-24T11:42:05.6626644Z  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-24T11:42:05.6626973Z  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-24T11:42:05.6626976Z 2026-10-24T11:42:05.6627182Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T11:42:05.6627276Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T11:42:05.6627353Z 21 │ EnvironmentThreadShell, 2026-10-24T11:42:05.6627420Z 22 │ ThreadRunSummary, 2026-10-24T11:42:05.6627498Z ·  ────────┬─────── 2026-10-24T11:42:05.6627641Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T11:42:05.6627712Z 23 │ ThreadRuntimeSummary, 2026-10-24T11:42:05.6627763Z ╰──── 2026-10-24T11:42:05.6627860Z  help: Consider removing this import. 2026-10-24T11:42:05.6627863Z 2026-10-24T11:42:05.6628121Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6628291Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T11:42:05.6628343Z 638 │ 2026-10-24T11:42:05.6628409Z 639 │ useEffect(() => { 2026-10-24T11:42:05.6628487Z ·  ────┬──── 2026-10-24T11:42:05.6628622Z · ╰── This is the containing effect 2026-10-24T11:42:05.6628731Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T11:42:05.6628793Z 641 │ return; 2026-10-24T11:42:05.6628848Z 642 │ } 2026-10-24T11:42:05.6628923Z 643 │ setPendingLaunchEntry({ 2026-10-24T11:42:05.6629010Z ·  ──────────┬────────── 2026-10-24T11:42:05.6629184Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6629256Z 644 │ key: launchTargetKey, 2026-10-24T11:42:05.6629307Z ╰──── 2026-10-24T11:42:05.6629919Z  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-24T11:42:05.6630246Z  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-24T11:42:05.6630248Z 2026-10-24T11:42:05.6630506Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6630675Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T11:42:05.6630729Z 648 │ 2026-10-24T11:42:05.6630793Z 649 │ useEffect(() => { 2026-10-24T11:42:05.6630864Z ·  ────┬──── 2026-10-24T11:42:05.6630995Z · ╰── This is the containing effect 2026-10-24T11:42:05.6631181Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T11:42:05.6631274Z 651 │ return; 2026-10-24T11:42:05.6631329Z 652 │ } 2026-10-24T11:42:05.6631411Z 653 │ setInitialAttachGridEntry({ 2026-10-24T11:42:05.6631503Z ·  ────────────┬──────────── 2026-10-24T11:42:05.6631677Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6631748Z 654 │ key: launchTargetKey, 2026-10-24T11:42:05.6631801Z ╰──── 2026-10-24T11:42:05.6632402Z  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-24T11:42:05.6632731Z  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-24T11:42:05.6632737Z 2026-10-24T11:42:05.6632995Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:42:05.6633163Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T11:42:05.6633217Z 743 │ 2026-10-24T11:42:05.6633281Z 744 │ useEffect(() => { 2026-10-24T11:42:05.6633352Z ·  ────┬──── 2026-10-24T11:42:05.6633481Z · ╰── This is the containing effect 2026-10-24T11:42:05.6633584Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T11:42:05.6633653Z 746 │ setLastGridSize({ 2026-10-24T11:42:05.6633740Z ·  ───────┬─────── 2026-10-24T11:42:05.6633914Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:42:05.6633998Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T11:42:05.6634048Z ╰──── 2026-10-24T11:42:05.6634644Z  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-24T11:42:05.6634965Z  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-24T11:42:05.6634967Z 2026-10-24T11:42:05.6635176Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6635351Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T11:42:05.6635406Z 537 │ }); 2026-10-24T11:42:05.6635531Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T11:42:05.6635641Z ·  ───────────┬────────── 2026-10-24T11:42:05.6635890Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T11:42:05.6636054Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T11:42:05.6636105Z ╰──── 2026-10-24T11:42:05.6636459Z  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-24T11:42:05.6636814Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6636816Z 2026-10-24T11:42:05.6637019Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6637186Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T11:42:05.6637283Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T11:42:05.6637349Z 709 │ }, [terminalKey]); 2026-10-24T11:42:05.6637427Z ·  ─────┬───── 2026-10-24T11:42:05.6637571Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T11:42:05.6637624Z 710 │ 2026-10-24T11:42:05.6637675Z ╰──── 2026-10-24T11:42:05.6637975Z  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-24T11:42:05.6638287Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6638290Z 2026-10-24T11:42:05.6638491Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:42:05.6638661Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T11:42:05.6638717Z 799 │ }; 2026-10-24T11:42:05.6638896Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T11:42:05.6639079Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T11:42:05.6639316Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T11:42:05.6639528Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T11:42:05.6639580Z 801 │ 2026-10-24T11:42:05.6639631Z ╰──── 2026-10-24T11:42:05.6639925Z  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-24T11:42:05.6640233Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:42:05.6640241Z 2026-10-24T11:42:05.6640391Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6640562Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T11:42:05.6640618Z 792 │ } 2026-10-24T11:42:05.6640724Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T11:42:05.6640838Z ·  ───────────┬─────────── 2026-10-24T11:42:05.6641004Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6641074Z 794 │ 2026-10-24T11:42:05.6641246Z ╰──── 2026-10-24T11:42:05.6641808Z  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-24T11:42:05.6642145Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6642148Z 2026-10-24T11:42:05.6642352Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T11:42:05.6642488Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T11:42:05.6642562Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T11:42:05.6642632Z 3 │ type AuthSessionState, 2026-10-24T11:42:05.6642716Z ·  ────────┬─────── 2026-10-24T11:42:05.6642861Z · ╰── 'AuthSessionState' is imported here 2026-10-24T11:42:05.6642929Z 4 │ sessionGrantsScope, 2026-10-24T11:42:05.6642981Z ╰──── 2026-10-24T11:42:05.6643086Z  help: Consider removing this import. 2026-10-24T11:42:05.6643091Z 2026-10-24T11:42:05.6643237Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6643407Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T11:42:05.6643490Z 26 │ const latestInput = useRef(input); 2026-10-24T11:42:05.6643566Z 27 │ latestInput.current = input; 2026-10-24T11:42:05.6643679Z ·  ─────┬─────────┬─── 2026-10-24T11:42:05.6643864Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6643980Z · ╰── This value is a ref 2026-10-24T11:42:05.6644056Z 28 │ const mounted = useRef(true); 2026-10-24T11:42:05.6644108Z ╰──── 2026-10-24T11:42:05.6644587Z  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-24T11:42:05.6644883Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6644886Z 2026-10-24T11:42:05.6645359Z ⚠ 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-24T11:42:05.6645510Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T11:42:05.6645571Z 168 │ }); 2026-10-24T11:42:05.6645827Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T11:42:05.6646057Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T11:42:05.6646163Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6646295Z 172 │ ╰─▶ } 2026-10-24T11:42:05.6646351Z 173 │ 2026-10-24T11:42:05.6646404Z ╰──── 2026-10-24T11:42:05.6646406Z 2026-10-24T11:42:05.6646872Z ⚠ 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-24T11:42:05.6647024Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T11:42:05.6647138Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T11:42:05.6647331Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T11:42:05.6647465Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T11:42:05.6647568Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6647699Z 181 │ ╰─▶ } 2026-10-24T11:42:05.6647755Z 182 │ 2026-10-24T11:42:05.6647807Z ╰──── 2026-10-24T11:42:05.6647809Z 2026-10-24T11:42:05.6648278Z ⚠ 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-24T11:42:05.6648425Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T11:42:05.6648554Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T11:42:05.6648747Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T11:42:05.6648869Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T11:42:05.6649065Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T11:42:05.6649152Z 310 │ │ break; 2026-10-24T11:42:05.6649230Z 311 │ │ } 2026-10-24T11:42:05.6649341Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T11:42:05.6649475Z 313 │ ╰─▶ } 2026-10-24T11:42:05.6649530Z 314 │ 2026-10-24T11:42:05.6649582Z ╰──── 2026-10-24T11:42:05.6649585Z 2026-10-24T11:42:05.6649745Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6649914Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T11:42:05.6650019Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T11:42:05.6650103Z 66 │ const progress = useSharedValue(0); 2026-10-24T11:42:05.6650179Z ·  ────┬─── 2026-10-24T11:42:05.6650311Z · ╰── `progress` originates here 2026-10-24T11:42:05.6650377Z 67 │ useEffect(() => { 2026-10-24T11:42:05.6650557Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T11:42:05.6650659Z ·  ────┬─── 2026-10-24T11:42:05.6650793Z · ╰── `progress` cannot be modified 2026-10-24T11:42:05.6650865Z 69 │ }, [expanded, progress]); 2026-10-24T11:42:05.6650917Z ╰──── 2026-10-24T11:42:05.6651214Z  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-24T11:42:05.6651525Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6651529Z 2026-10-24T11:42:05.6651687Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6651864Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T11:42:05.6651922Z 90 │ }) { 2026-10-24T11:42:05.6652035Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T11:42:05.6652109Z ·  ────┬─── 2026-10-24T11:42:05.6652238Z · ╰── `rotation` originates here 2026-10-24T11:42:05.6652308Z 92 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6652450Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T11:42:05.6652522Z ·  ────┬─── 2026-10-24T11:42:05.6652653Z · ╰── `rotation` cannot be modified 2026-10-24T11:42:05.6652729Z 94 │ }, [props.hidden, rotation]); 2026-10-24T11:42:05.6652781Z ╰──── 2026-10-24T11:42:05.6653048Z  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-24T11:42:05.6653359Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6653361Z 2026-10-24T11:42:05.6653519Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6653691Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T11:42:05.6653784Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T11:42:05.6653918Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T11:42:05.6654006Z ·  ────────┬──────── 2026-10-24T11:42:05.6654157Z · ╰── `loadingVisibility` originates here 2026-10-24T11:42:05.6654233Z 268 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6654397Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T11:42:05.6654480Z ·  ────────┬──────── 2026-10-24T11:42:05.6654633Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T11:42:05.6654723Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T11:42:05.6654776Z ╰──── 2026-10-24T11:42:05.6655039Z  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-24T11:42:05.6655343Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6655346Z 2026-10-24T11:42:05.6655556Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6655757Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T11:42:05.6655811Z 325 │ }) { 2026-10-24T11:42:05.6655971Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T11:42:05.6656061Z ·  ─────────┬───────── 2026-10-24T11:42:05.6656215Z · ╰── `recordingVisibility` originates here 2026-10-24T11:42:05.6656284Z 327 │ useLayoutEffect(() => { 2026-10-24T11:42:05.6656471Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T11:42:05.6656558Z ·  ─────────┬───────── 2026-10-24T11:42:05.6656712Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T11:42:05.6656809Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T11:42:05.6656864Z ╰──── 2026-10-24T11:42:05.6657127Z  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-24T11:42:05.6657432Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6657434Z 2026-10-24T11:42:05.6657581Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6657743Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T11:42:05.6657903Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T11:42:05.6658027Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T11:42:05.6658153Z ·  ───────────┬────────── 2026-10-24T11:42:05.6658332Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6658450Z 123 │ const sessionRef = useRef(null); 2026-10-24T11:42:05.6658505Z ╰──── 2026-10-24T11:42:05.6658980Z  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-24T11:42:05.6659273Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6659275Z 2026-10-24T11:42:05.6659428Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6659590Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T11:42:05.6659643Z 125 │ 2026-10-24T11:42:05.6659752Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:42:05.6659841Z ·  ─────────┬──────── 2026-10-24T11:42:05.6659992Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6660094Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:42:05.6660145Z ╰──── 2026-10-24T11:42:05.6660618Z  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-24T11:42:05.6660971Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6661000Z 2026-10-24T11:42:05.6661165Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6661322Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T11:42:05.6661375Z 125 │ 2026-10-24T11:42:05.6661481Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:42:05.6661569Z ·  ─────────┬───────── 2026-10-24T11:42:05.6661716Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6661820Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:42:05.6661872Z ╰──── 2026-10-24T11:42:05.6662345Z  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-24T11:42:05.6662639Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6662641Z 2026-10-24T11:42:05.6662785Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6662943Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T11:42:05.6662998Z 125 │ 2026-10-24T11:42:05.6663104Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:42:05.6663220Z ·  ─────────┬───────── 2026-10-24T11:42:05.6663397Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6663500Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:42:05.6663552Z ╰──── 2026-10-24T11:42:05.6664016Z  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-24T11:42:05.6664306Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6664309Z 2026-10-24T11:42:05.6664453Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6664615Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T11:42:05.6664670Z 125 │ 2026-10-24T11:42:05.6664775Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:42:05.6664889Z ·  ──────────┬───────── 2026-10-24T11:42:05.6665056Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6665156Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:42:05.6665208Z ╰──── 2026-10-24T11:42:05.6665673Z  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-24T11:42:05.6666016Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6666050Z 2026-10-24T11:42:05.6666196Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6666354Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T11:42:05.6666465Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:42:05.6666660Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:42:05.6666836Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T11:42:05.6666961Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T11:42:05.6667120Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T11:42:05.6667243Z 131 │ │ isFinished: status.isFinished, 2026-10-24T11:42:05.6667422Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T11:42:05.6667526Z 133 │ │ error: status.error, 2026-10-24T11:42:05.6667624Z 134 │ │ url: status.url, 2026-10-24T11:42:05.6667706Z 135 │ │ }); 2026-10-24T11:42:05.6667784Z 136 │ │ }, 2026-10-24T11:42:05.6667982Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T11:42:05.6668089Z 138 │ │ selectInput: (inputs) => { 2026-10-24T11:42:05.6668251Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T11:42:05.6668398Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T11:42:05.6668564Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T11:42:05.6668704Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T11:42:05.6668807Z 143 │ │ if (order !== known) { 2026-10-24T11:42:05.6668946Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T11:42:05.6669060Z 145 │ │ transform: (current) => ({ 2026-10-24T11:42:05.6669269Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T11:42:05.6669354Z 147 │ │ }), 2026-10-24T11:42:05.6669441Z 148 │ │ }); 2026-10-24T11:42:05.6669524Z 149 │ │ } 2026-10-24T11:42:05.6669664Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T11:42:05.6669741Z 151 │ │ }, 2026-10-24T11:42:05.6669872Z 152 │ ├─▶ }); 2026-10-24T11:42:05.6670111Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T11:42:05.6670197Z 153 │ recorderRef.current = recorder; 2026-10-24T11:42:05.6670249Z ╰──── 2026-10-24T11:42:05.6670768Z  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-24T11:42:05.6671111Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6671114Z 2026-10-24T11:42:05.6671260Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6671420Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T11:42:05.6671476Z 152 │ }); 2026-10-24T11:42:05.6671559Z 153 │ recorderRef.current = recorder; 2026-10-24T11:42:05.6671673Z ·  ─────┬─────────┬─── 2026-10-24T11:42:05.6671860Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6671982Z · ╰── This value is a ref 2026-10-24T11:42:05.6672089Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:42:05.6672141Z ╰──── 2026-10-24T11:42:05.6672607Z  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-24T11:42:05.6672896Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6672900Z 2026-10-24T11:42:05.6673043Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6673201Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T11:42:05.6673290Z 153 │ recorderRef.current = recorder; 2026-10-24T11:42:05.6673486Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:42:05.6673570Z 155 │ │ recorder, 2026-10-24T11:42:05.6673699Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T11:42:05.6673817Z 157 │ │ requestPermission: async () => { 2026-10-24T11:42:05.6673982Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T11:42:05.6674173Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T11:42:05.6674251Z 160 │ │ }, 2026-10-24T11:42:05.6674538Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T11:42:05.6674709Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T11:42:05.6674842Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T11:42:05.6674956Z 164 │ │ onStateChange: (nextState) => 2026-10-24T11:42:05.6675046Z 165 │ │ setState({ 2026-10-24T11:42:05.6675149Z 166 │ │ state: nextState, 2026-10-24T11:42:05.6675288Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T11:42:05.6675418Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T11:42:05.6675499Z 169 │ │ }), 2026-10-24T11:42:05.6675628Z 170 │ ├─▶ }); 2026-10-24T11:42:05.6675833Z · ╰──── Cannot access ref value during render 2026-10-24T11:42:05.6675894Z 171 │ } 2026-10-24T11:42:05.6675946Z ╰──── 2026-10-24T11:42:05.6676414Z  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-24T11:42:05.6676703Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6676705Z 2026-10-24T11:42:05.6676850Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6677014Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T11:42:05.6677100Z 153 │ recorderRef.current = recorder; 2026-10-24T11:42:05.6677202Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:42:05.6677313Z ·  ─────┬────────┬─── 2026-10-24T11:42:05.6677497Z · │ ╰── Cannot update ref value during render 2026-10-24T11:42:05.6677614Z · ╰── This value is a ref 2026-10-24T11:42:05.6677679Z 155 │ recorder, 2026-10-24T11:42:05.6677731Z ╰──── 2026-10-24T11:42:05.6678202Z  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-24T11:42:05.6678500Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6678506Z 2026-10-24T11:42:05.6678652Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6678812Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T11:42:05.6678898Z 184 │ return () => subscription.remove(); 2026-10-24T11:42:05.6678965Z 185 │ }, [controller]); 2026-10-24T11:42:05.6679042Z ·  ─────┬──── 2026-10-24T11:42:05.6679190Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6679242Z 186 │ 2026-10-24T11:42:05.6679294Z ╰──── 2026-10-24T11:42:05.6679810Z  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-24T11:42:05.6680133Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6680136Z 2026-10-24T11:42:05.6680279Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6680438Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T11:42:05.6680524Z 184 │ return () => subscription.remove(); 2026-10-24T11:42:05.6680589Z 185 │ }, [controller]); 2026-10-24T11:42:05.6680666Z ·  ──────┬───── 2026-10-24T11:42:05.6680816Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6680872Z 186 │ 2026-10-24T11:42:05.6680923Z ╰──── 2026-10-24T11:42:05.6681464Z  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-24T11:42:05.6681753Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6681756Z 2026-10-24T11:42:05.6681899Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6682056Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T11:42:05.6682113Z 191 │ }, 2026-10-24T11:42:05.6682184Z 192 │ [controller, recorder], 2026-10-24T11:42:05.6682267Z ·  ─────┬──── 2026-10-24T11:42:05.6682413Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6682468Z 193 │ ); 2026-10-24T11:42:05.6682518Z ╰──── 2026-10-24T11:42:05.6682985Z  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-24T11:42:05.6683277Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6683279Z 2026-10-24T11:42:05.6683422Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6683585Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T11:42:05.6683678Z 174 │ const controller = session.controller; 2026-10-24T11:42:05.6683766Z 175 │ const recorder = recorderRef.current; 2026-10-24T11:42:05.6683871Z ·  ─────────┬───────── 2026-10-24T11:42:05.6684030Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6684081Z 176 │ 2026-10-24T11:42:05.6684132Z ╰──── 2026-10-24T11:42:05.6684601Z  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-24T11:42:05.6684961Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6685001Z 2026-10-24T11:42:05.6685144Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6685302Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T11:42:05.6685359Z 191 │ }, 2026-10-24T11:42:05.6685431Z 192 │ [controller, recorder], 2026-10-24T11:42:05.6685520Z ·  ───────────┬────────── 2026-10-24T11:42:05.6685667Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6685722Z 193 │ ); 2026-10-24T11:42:05.6685774Z ╰──── 2026-10-24T11:42:05.6686245Z  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-24T11:42:05.6686539Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6686541Z 2026-10-24T11:42:05.6686685Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6686843Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T11:42:05.6686936Z 245 │ return () => clearInterval(intervalId); 2026-10-24T11:42:05.6687046Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T11:42:05.6687136Z ·  ─────┬──── 2026-10-24T11:42:05.6687293Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6687351Z 247 │ 2026-10-24T11:42:05.6687405Z ╰──── 2026-10-24T11:42:05.6687870Z  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-24T11:42:05.6688160Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6688163Z 2026-10-24T11:42:05.6688307Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6688463Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T11:42:05.6688553Z 245 │ return () => clearInterval(intervalId); 2026-10-24T11:42:05.6688665Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T11:42:05.6688799Z ·  ────────────────────────┬─────────────────────── 2026-10-24T11:42:05.6688959Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6689011Z 247 │ 2026-10-24T11:42:05.6689064Z ╰──── 2026-10-24T11:42:05.6689529Z  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-24T11:42:05.6689818Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6689821Z 2026-10-24T11:42:05.6690018Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6690206Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T11:42:05.6690274Z 260 │ setOwnerFocused, 2026-10-24T11:42:05.6690336Z 261 │ session, 2026-10-24T11:42:05.6690407Z ·  ───┬─── 2026-10-24T11:42:05.6690547Z · ╰── Cannot access ref value during render 2026-10-24T11:42:05.6690607Z 262 │ stop, 2026-10-24T11:42:05.6690659Z ╰──── 2026-10-24T11:42:05.6691148Z  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-24T11:42:05.6691441Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6691446Z 2026-10-24T11:42:05.6691589Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:42:05.6691746Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T11:42:05.6691801Z 250 │ 2026-10-24T11:42:05.6691939Z 251 │ ╭─▶ return { 2026-10-24T11:42:05.6692150Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T11:42:05.6692230Z 253 │ │ state, 2026-10-24T11:42:05.6692319Z 254 │ │ audioLevels, 2026-10-24T11:42:05.6692412Z 255 │ │ elapsedSeconds, 2026-10-24T11:42:05.6692549Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T11:42:05.6692633Z 257 │ │ ownerKey, 2026-10-24T11:42:05.6692712Z 258 │ │ label, 2026-10-24T11:42:05.6692802Z 259 │ │ focusedOwners, 2026-10-24T11:42:05.6692896Z 260 │ │ setOwnerFocused, 2026-10-24T11:42:05.6692978Z 261 │ │ session, 2026-10-24T11:42:05.6693056Z 262 │ │ stop, 2026-10-24T11:42:05.6693135Z 263 │ │ cancel, 2026-10-24T11:42:05.6693265Z 264 │ ├─▶ }; 2026-10-24T11:42:05.6693466Z · ╰──── Cannot access ref value during render 2026-10-24T11:42:05.6693523Z 265 │ } 2026-10-24T11:42:05.6693574Z ╰──── 2026-10-24T11:42:05.6694052Z  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-24T11:42:05.6694347Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:42:05.6694350Z 2026-10-24T11:42:05.6694508Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:42:05.6694667Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T11:42:05.6694826Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T11:42:05.6695007Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T11:42:05.6695124Z ·  ─────┬───── 2026-10-24T11:42:05.6695262Z · ╰── `audioLevels` originates here 2026-10-24T11:42:05.6695380Z 123 │ const sessionRef = useRef(null); 2026-10-24T11:42:05.6695528Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T11:42:05.6695580Z 125 │ 2026-10-24T11:42:05.6695687Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:42:05.6695786Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:42:05.6695925Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T11:42:05.6696020Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T11:42:05.6696142Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T11:42:05.6696234Z 131 │ isFinished: status.isFinished, 2026-10-24T11:42:05.6696382Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T11:42:05.6696456Z 133 │ error: status.error, 2026-10-24T11:42:05.6696526Z 134 │ url: status.url, 2026-10-24T11:42:05.6696585Z 135 │ }); 2026-10-24T11:42:05.6696642Z 136 │ }, 2026-10-24T11:42:05.6696808Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T11:42:05.6696886Z 138 │ selectInput: (inputs) => { 2026-10-24T11:42:05.6697009Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T11:42:05.6697121Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T11:42:05.6697253Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T11:42:05.6697367Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T11:42:05.6697442Z 143 │ if (order !== known) { 2026-10-24T11:42:05.6697549Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T11:42:05.6697633Z 145 │ transform: (current) => ({ 2026-10-24T11:42:05.6697807Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T11:42:05.6697869Z 147 │ }), 2026-10-24T11:42:05.6697930Z 148 │ }); 2026-10-24T11:42:05.6697987Z 149 │ } 2026-10-24T11:42:05.6698097Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T11:42:05.6698153Z 151 │ }, 2026-10-24T11:42:05.6698210Z 152 │ }); 2026-10-24T11:42:05.6698292Z 153 │ recorderRef.current = recorder; 2026-10-24T11:42:05.6698393Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:42:05.6698461Z 155 │ recorder, 2026-10-24T11:42:05.6698565Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T11:42:05.6698650Z 157 │ requestPermission: async () => { 2026-10-24T11:42:05.6698780Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T11:42:05.6698937Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T11:42:05.6698993Z 160 │ }, 2026-10-24T11:42:05.6699104Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T11:42:05.6699209Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T11:42:05.6699312Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T11:42:05.6699393Z 164 │ onStateChange: (nextState) => 2026-10-24T11:42:05.6699456Z 165 │ setState({ 2026-10-24T11:42:05.6699526Z 166 │ state: nextState, 2026-10-24T11:42:05.6699689Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T11:42:05.6699819Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T11:42:05.6699878Z 169 │ }), 2026-10-24T11:42:05.6699933Z 170 │ }); 2026-10-24T11:42:05.6699987Z 171 │ } 2026-10-24T11:42:05.6700038Z 172 │ 2026-10-24T11:42:05.6700123Z 173 │ const session = sessionRef.current; 2026-10-24T11:42:05.6700211Z 174 │ const controller = session.controller; 2026-10-24T11:42:05.6700297Z 175 │ const recorder = recorderRef.current; 2026-10-24T11:42:05.6700349Z 176 │ 2026-10-24T11:42:05.6700415Z 177 │ useEffect(() => { 2026-10-24T11:42:05.6700564Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T11:42:05.6700706Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T11:42:05.6700850Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T11:42:05.6700956Z 181 │ // calls and route interruptions during capture. 2026-10-24T11:42:05.6701109Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T11:42:05.6701166Z 183 │ }); 2026-10-24T11:42:05.6701250Z 184 │ return () => subscription.remove(); 2026-10-24T11:42:05.6701316Z 185 │ }, [controller]); 2026-10-24T11:42:05.6701367Z 186 │ 2026-10-24T11:42:05.6701427Z 187 │ useEffect( 2026-10-24T11:42:05.6701490Z 188 │ () => () => { 2026-10-24T11:42:05.6701561Z 189 │ controller.dispose(); 2026-10-24T11:42:05.6701630Z 190 │ recorder.release(); 2026-10-24T11:42:05.6701687Z 191 │ }, 2026-10-24T11:42:05.6701757Z 192 │ [controller, recorder], 2026-10-24T11:42:05.6701810Z 193 │ ); 2026-10-24T11:42:05.6701862Z 194 │ 2026-10-24T11:42:05.6701931Z 195 │ useEffect(() => { 2026-10-24T11:42:05.6702029Z 196 │ if (state.phase !== "recording") return; 2026-10-24T11:42:05.6702082Z 197 │ 2026-10-24T11:42:05.6702231Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T11:42:05.6702336Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T11:42:05.6702417Z 200 │ void activation.catch(() => {}); 2026-10-24T11:42:05.6702480Z 201 │ return () => { 2026-10-24T11:42:05.6702632Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T11:42:05.6702770Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T11:42:05.6702825Z 204 │ }; 2026-10-24T11:42:05.6702903Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T11:42:05.6702955Z 206 │ 2026-10-24T11:42:05.6703078Z 207 │ useEffect(() => { 2026-10-24T11:42:05.6703243Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T11:42:05.6703296Z 209 │ 2026-10-24T11:42:05.6703418Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T11:42:05.6703573Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T11:42:05.6703676Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T11:42:05.6703755Z ·  ─────┬───── 2026-10-24T11:42:05.6703898Z · ╰── `audioLevels` cannot be modified 2026-10-24T11:42:05.6703954Z 213 │ } 2026-10-24T11:42:05.6704006Z ╰──── 2026-10-24T11:42:05.6704276Z  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-24T11:42:05.6704594Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6704599Z 2026-10-24T11:42:05.6704802Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:42:05.6704962Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T11:42:05.6705014Z 206 │ 2026-10-24T11:42:05.6705078Z 207 │ useEffect(() => { 2026-10-24T11:42:05.6705158Z ·  ───┬─── 2026-10-24T11:42:05.6705379Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T11:42:05.6705516Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T11:42:05.6705575Z 209 │ 2026-10-24T11:42:05.6705699Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T11:42:05.6705855Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T11:42:05.6705956Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T11:42:05.6706033Z ·  ─────┬───── 2026-10-24T11:42:05.6706167Z · ╰── This modifies `audioLevels` 2026-10-24T11:42:05.6706222Z 213 │ } 2026-10-24T11:42:05.6706273Z ╰──── 2026-10-24T11:42:05.6706616Z  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-24T11:42:05.6706926Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:42:05.6706931Z 2026-10-24T11:42:05.6707130Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T11:42:05.6707272Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T11:42:05.6707334Z 1 │ import type { 2026-10-24T11:42:05.6707398Z 2 │ EnvironmentId, 2026-10-24T11:42:05.6707474Z ·  ──────┬────── 2026-10-24T11:42:05.6707609Z · ╰── 'EnvironmentId' is imported here 2026-10-24T11:42:05.6707696Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T11:42:05.6707749Z ╰──── 2026-10-24T11:42:05.6707848Z  help: Consider removing this import. 2026-10-24T11:42:05.6707850Z 2026-10-24T11:42:05.6708074Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6708255Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T11:42:05.6708389Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T11:42:05.6708544Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T11:42:05.6708663Z ·  ─────┬──── 2026-10-24T11:42:05.6708826Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6708887Z 373 │ return ( 2026-10-24T11:42:05.6708940Z ╰──── 2026-10-24T11:42:05.6709221Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6709522Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6709528Z 2026-10-24T11:42:05.6709698Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6709846Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T11:42:05.6709941Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T11:42:05.6710070Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T11:42:05.6710181Z ·  ─────┬──── 2026-10-24T11:42:05.6710338Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6710393Z 854 │ } 2026-10-24T11:42:05.6710444Z ╰──── 2026-10-24T11:42:05.6710729Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6711048Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6711050Z 2026-10-24T11:42:05.6711219Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6711342Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T11:42:05.6711445Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T11:42:05.6711603Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T11:42:05.6711726Z ·  ─────┬──── 2026-10-24T11:42:05.6711901Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6711983Z 822 │ return AsyncResult.failure( 2026-10-24T11:42:05.6712037Z ╰──── 2026-10-24T11:42:05.6712312Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6712605Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6712608Z 2026-10-24T11:42:05.6712774Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6712894Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T11:42:05.6712968Z 708 │ const wokeAt = resolved 2026-10-24T11:42:05.6713165Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T11:42:05.6713313Z ·  ─────┬──── 2026-10-24T11:42:05.6713474Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6713538Z 710 │ : null; 2026-10-24T11:42:05.6713590Z ╰──── 2026-10-24T11:42:05.6713866Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6714159Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6714161Z 2026-10-24T11:42:05.6714431Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6714566Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T11:42:05.6714621Z 3404 │ 2026-10-24T11:42:05.6714808Z 3405 │ const layer: Layer.Layer = 2026-10-24T11:42:05.6714882Z ·  ──┬── 2026-10-24T11:42:05.6715009Z · ╰── 'layer' is declared here 2026-10-24T11:42:05.6715074Z 3406 │ Layer.effect( 2026-10-24T11:42:05.6715126Z ╰──── 2026-10-24T11:42:05.6715233Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6715235Z 2026-10-24T11:42:05.6715708Z ⚠ 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-24T11:42:05.6715831Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T11:42:05.6715925Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T11:42:05.6716036Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T11:42:05.6716156Z ·  ────────────────────────── 2026-10-24T11:42:05.6716225Z 130 │ Schema.Struct({ 2026-10-24T11:42:05.6716277Z ╰──── 2026-10-24T11:42:05.6716280Z 2026-10-24T11:42:05.6716654Z ⚠ 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-24T11:42:05.6716772Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T11:42:05.6716931Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T11:42:05.6717108Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T11:42:05.6717214Z ·  ────────────────────────── 2026-10-24T11:42:05.6717360Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T11:42:05.6717414Z ╰──── 2026-10-24T11:42:05.6717416Z 2026-10-24T11:42:05.6717618Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T11:42:05.6717752Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T11:42:05.6717847Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T11:42:05.6717940Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T11:42:05.6718020Z ·  ────┬─── 2026-10-24T11:42:05.6718216Z · ╰── 'Duration' is imported here 2026-10-24T11:42:05.6718340Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T11:42:05.6718392Z ╰──── 2026-10-24T11:42:05.6718491Z  help: Consider removing this import. 2026-10-24T11:42:05.6718493Z 2026-10-24T11:42:05.6718958Z ⚠ 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-24T11:42:05.6719084Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T11:42:05.6719140Z 499 │ 2026-10-24T11:42:05.6719254Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T11:42:05.6719378Z ·  ────────────────────────── 2026-10-24T11:42:05.6719490Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T11:42:05.6719543Z ╰──── 2026-10-24T11:42:05.6719546Z 2026-10-24T11:42:05.6719883Z ⚠ 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-24T11:42:05.6720002Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T11:42:05.6720165Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T11:42:05.6720288Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T11:42:05.6720367Z ·  ───────── 2026-10-24T11:42:05.6720428Z 19 │ expect( 2026-10-24T11:42:05.6720479Z ╰──── 2026-10-24T11:42:05.6720481Z 2026-10-24T11:42:05.6720821Z ⚠ 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-24T11:42:05.6720942Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T11:42:05.6721001Z 19 │ expect( 2026-10-24T11:42:05.6721252Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T11:42:05.6721328Z ·  ───────── 2026-10-24T11:42:05.6721391Z 21 │ ).toBe(true); 2026-10-24T11:42:05.6721443Z ╰──── 2026-10-24T11:42:05.6721446Z 2026-10-24T11:42:05.6721780Z ⚠ 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-24T11:42:05.6721931Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T11:42:05.6722097Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T11:42:05.6722270Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T11:42:05.6722356Z ·  ───────── 2026-10-24T11:42:05.6722534Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T11:42:05.6722587Z ╰──── 2026-10-24T11:42:05.6722590Z 2026-10-24T11:42:05.6722921Z ⚠ 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-24T11:42:05.6723065Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T11:42:05.6723306Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T11:42:05.6723522Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T11:42:05.6723607Z ·  ───────── 2026-10-24T11:42:05.6723660Z 52 │ } 2026-10-24T11:42:05.6723711Z ╰──── 2026-10-24T11:42:05.6723714Z 2026-10-24T11:42:05.6724047Z ⚠ 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-24T11:42:05.6724188Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T11:42:05.6724253Z 54 │ assert.equal( 2026-10-24T11:42:05.6724425Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T11:42:05.6724497Z ·  ───────── 2026-10-24T11:42:05.6724561Z 56 │ true, 2026-10-24T11:42:05.6724618Z ╰──── 2026-10-24T11:42:05.6724620Z 2026-10-24T11:42:05.6724952Z ⚠ 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-24T11:42:05.6725090Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T11:42:05.6725152Z 58 │ assert.equal( 2026-10-24T11:42:05.6725333Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T11:42:05.6725404Z ·  ───────── 2026-10-24T11:42:05.6725461Z 60 │ true, 2026-10-24T11:42:05.6725513Z ╰──── 2026-10-24T11:42:05.6725515Z 2026-10-24T11:42:05.6725849Z ⚠ 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-24T11:42:05.6726001Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T11:42:05.6726054Z 102 │ 2026-10-24T11:42:05.6726223Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T11:42:05.6726308Z ·  ───────── 2026-10-24T11:42:05.6726365Z 104 │ }); 2026-10-24T11:42:05.6726416Z ╰──── 2026-10-24T11:42:05.6726418Z 2026-10-24T11:42:05.6726607Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T11:42:05.6726733Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T11:42:05.6726844Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T11:42:05.6726911Z 187 │ let next = initial; 2026-10-24T11:42:05.6727033Z ·  ──┬─ 2026-10-24T11:42:05.6727192Z · ╰── From this accumulator 2026-10-24T11:42:05.6727274Z 188 │ let receivedSnapshot = false; 2026-10-24T11:42:05.6727349Z 189 │ for (const item of items) { 2026-10-24T11:42:05.6727418Z ·  ─┬─ 2026-10-24T11:42:05.6727524Z · ╰── For this loop 2026-10-24T11:42:05.6727613Z 190 │ if (item.kind === "synchronized") { 2026-10-24T11:42:05.6727682Z 191 │ waiting = false; 2026-10-24T11:42:05.6727773Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T11:42:05.6727894Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T11:42:05.6727979Z ·  ───┬─── 2026-10-24T11:42:05.6728108Z · ╰── From this spread 2026-10-24T11:42:05.6728174Z 194 │ } 2026-10-24T11:42:05.6728230Z ╰──── 2026-10-24T11:42:05.6728387Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T11:42:05.6728543Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T11:42:05.6728546Z 2026-10-24T11:42:05.6728834Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:42:05.6728992Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T11:42:05.6729045Z 14 │ 2026-10-24T11:42:05.6729116Z 15 │ const legacyCredentials = { 2026-10-24T11:42:05.6729201Z ·  ────────┬──────── 2026-10-24T11:42:05.6729357Z · ╰── 'legacyCredentials' is declared here 2026-10-24T11:42:05.6729428Z 16 │ version: 1 as const, 2026-10-24T11:42:05.6729478Z ╰──── 2026-10-24T11:42:05.6729584Z  help: Consider removing this declaration. 2026-10-24T11:42:05.6729586Z 2026-10-24T11:42:05.6729791Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T11:42:05.6729922Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T11:42:05.6729994Z 2 │ AuthFilesystemReadScope, 2026-10-24T11:42:05.6730065Z 3 │ type AuthSessionState, 2026-10-24T11:42:05.6730150Z ·  ────────┬─────── 2026-10-24T11:42:05.6730296Z · ╰── 'AuthSessionState' is imported here 2026-10-24T11:42:05.6730370Z 4 │ type FilesystemBrowseEntry, 2026-10-24T11:42:05.6730421Z ╰──── 2026-10-24T11:42:05.6730527Z  help: Consider removing this import. 2026-10-24T11:42:05.6730533Z 2026-10-24T11:42:05.6730757Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:42:05.6730886Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T11:42:05.6730955Z 113 │ const declared = { 2026-10-24T11:42:05.6731068Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T11:42:05.6731181Z ·  ──────────────────────────────── 2026-10-24T11:42:05.6731285Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T11:42:05.6731339Z ╰──── 2026-10-24T11:42:05.6731609Z  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-24T11:42:05.6731612Z 2026-10-24T11:42:05.6731908Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:42:05.6732073Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T11:42:05.6732163Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T11:42:05.6732266Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T11:42:05.6732389Z ·  ──────────────────────────────────────── 2026-10-24T11:42:05.6732487Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T11:42:05.6732539Z ╰──── 2026-10-24T11:42:05.6732804Z  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-24T11:42:05.6732807Z 2026-10-24T11:42:05.6733033Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:42:05.6733163Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T11:42:05.6733263Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T11:42:05.6733360Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T11:42:05.6733476Z ·  ──────────────────────────────────── 2026-10-24T11:42:05.6733536Z 117 │ }; 2026-10-24T11:42:05.6733587Z ╰──── 2026-10-24T11:42:05.6733852Z  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-24T11:42:05.6733855Z 2026-10-24T11:42:05.6734136Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T11:42:05.6734272Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T11:42:05.6734333Z 248 │ }, 2026-10-24T11:42:05.6734417Z 249 │ (effect, flow, stopSessions) => 2026-10-24T11:42:05.6734509Z ·  ──────┬───── 2026-10-24T11:42:05.6734662Z · ╰── 'stopSessions' is declared here 2026-10-24T11:42:05.6734727Z 250 │ effect.pipe( 2026-10-24T11:42:05.6734778Z ╰──── 2026-10-24T11:42:05.6734883Z  help: Consider removing this parameter. 2026-10-24T11:42:05.6734888Z 2026-10-24T11:42:05.6735124Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T11:42:05.6735261Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T11:42:05.6735385Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T11:42:05.6735633Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T11:42:05.6735761Z 986 │ │ (approval) => approval.requestId, 2026-10-24T11:42:05.6735898Z 987 │ ╰─▶ ); 2026-10-24T11:42:05.6736036Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T11:42:05.6736089Z ╰──── 2026-10-24T11:42:05.6736167Z  help: Switch to `Set` 2026-10-24T11:42:05.6736170Z 2026-10-24T11:42:05.6736342Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6736487Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T11:42:05.6736664Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T11:42:05.6736857Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T11:42:05.6736982Z ·  ─────┬──── 2026-10-24T11:42:05.6737154Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6737209Z 179 │ } 2026-10-24T11:42:05.6737261Z ╰──── 2026-10-24T11:42:05.6737542Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6737839Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6737843Z 2026-10-24T11:42:05.6738016Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:42:05.6738156Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T11:42:05.6738290Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T11:42:05.6738438Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T11:42:05.6738561Z ·  ─────┬──── 2026-10-24T11:42:05.6738733Z · ╰── Cannot call impure function 2026-10-24T11:42:05.6738832Z 141 │ onSelect={(selected) => { 2026-10-24T11:42:05.6738884Z ╰──── 2026-10-24T11:42:05.6739166Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:42:05.6739464Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:42:05.6739468Z 2026-10-24T11:42:05.6739552Z Found 0 errors and 366 warnings in 5469 files (5.5s, 8 threads) 2026-10-24T11:42:05.7189764Z Post job cleanup. 2026-10-24T11:42:05.7859740Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T11:42:05.7943492Z Post job cleanup. 2026-10-24T11:42:05.7956968Z ##[start-action display=Cache full pnpm store;id=__8399704c-948f-4b80-826d-96992f2a20a9.__actions_cache] 2026-10-24T11:42:05.8281955Z Post job cleanup. 2026-10-24T11:42:05.8935150Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-fa50cf9b003d547cd32552f61b874eb4abe5dace3fdb4b1abd9610da2da24074, not saving cache. 2026-10-24T11:42:05.8976096Z ##[end-action id=__8399704c-948f-4b80-826d-96992f2a20a9.__actions_cache;outcome=success;conclusion=success;duration_ms=101] 2026-10-24T11:42:05.8977969Z ##[start-action display=Cache Vite+;id=__8399704c-948f-4b80-826d-96992f2a20a9.vp_cache] 2026-10-24T11:42:05.8999502Z Post job cleanup. 2026-10-24T11:42:05.9758326Z 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-24T11:42:05.9794137Z ##[end-action id=__8399704c-948f-4b80-826d-96992f2a20a9.vp_cache;outcome=success;conclusion=success;duration_ms=81] 2026-10-24T11:42:05.9831275Z Post job cleanup. 2026-10-24T11:42:06.0251536Z [command]/usr/local/bin/git version 2026-10-24T11:42:06.0282132Z git version 2.55.0 2026-10-24T11:42:06.0300111Z Temporarily overriding HOME='/home/runner/_work/_temp/04f936ec-ee9c-4112-b6a2-118838589c2c' before making global git config changes 2026-10-24T11:42:06.0300484Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T11:42:06.0303297Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T11:42:06.0324779Z Removing SSH command configuration 2026-10-24T11:42:06.0327778Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T11:42:06.0350538Z [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-24T11:42:06.0478268Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T11:42:06.0498781Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T11:42:06.0542604Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T11:42:06.0558516Z ##[group]Run '/job_completed.sh' 2026-10-24T11:42:06.0564573Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:42:06.0564768Z env: 2026-10-24T11:42:06.0564884Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 162 2026-10-24T11:42:06.0565038Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 412 2026-10-24T11:42:06.0565182Z BLACKSMITH_CHECK_RUN_ID: 120863167874 2026-10-24T11:42:06.0565326Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T11:42:06.0565467Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T11:42:06.0565607Z ##[endgroup] 2026-10-24T11:42:06.0644327Z Docker container cache not activated, skipping hash computation. 2026-10-24T11:42:06.0966520Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T11:42:06.1565897Z Cleaning up orphan processes