2026-10-24T03:18:04.4723449Z Current runner version: '2.338.1' 2026-10-24T03:18:04.4727002Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-mvq7evki6sav3z2v' 2026-10-24T03:18:04.4727736Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T03:18:04.4728475Z Machine name: 'ip-172-31-73-130' 2026-10-24T03:18:04.4730129Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T03:18:04.4731515Z Contents: read 2026-10-24T03:18:04.4731907Z Metadata: read 2026-10-24T03:18:04.4732279Z ##[endgroup] 2026-10-24T03:18:04.4733885Z Secret source: Actions 2026-10-24T03:18:04.4734568Z Cache mode: write 2026-10-24T03:18:04.4735153Z Prepare workflow directory 2026-10-24T03:18:04.4920250Z Prepare all required actions 2026-10-24T03:18:04.4947089Z Getting action download info 2026-10-24T03:18:04.6014455Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T03:18:04.6433649Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T03:18:04.7541458Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T03:18:04.7580991Z Complete job name: Lint 2026-10-24T03:18:04.7958225Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T03:18:04.8053604Z ##[group]Run '/setup.sh' 2026-10-24T03:18:04.8063229Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:18:04.8063647Z env: 2026-10-24T03:18:04.8063875Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:04.8064172Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:04.8064460Z BLACKSMITH_CHECK_RUN_ID: 120764327339 2026-10-24T03:18:04.8064749Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T03:18:04.8065028Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T03:18:04.8065298Z ##[endgroup] 2026-10-24T03:18:04.8310143Z Logging daemon started (blacksmithd for logs) 2026-10-24T03:18:04.8409130Z Results daemon started (blacksmithd for results) 2026-10-24T03:18:04.8545802Z Background adoption and SSH setup started (PID: 3069) 2026-10-24T03:18:04.8546183Z 2026-10-24T03:18:04.8546639Z ---------------------------------------- 2026-10-24T03:18:04.8547193Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40057731761/jobs/120764327339 2026-10-24T03:18:04.8547957Z SSH Access (using your GitHub SSH key): 2026-10-24T03:18:04.8548625Z ssh -p 64001 runner@blacksmith-8vcpu-ubuntu-2404-mvq7evki6sav3z2v.vm.blacksmith.sh 2026-10-24T03:18:04.8549130Z 2026-10-24T03:18:04.8549299Z No GitHub SSH key? Add one at: 2026-10-24T03:18:04.8550139Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T03:18:04.8550822Z 2026-10-24T03:18:04.8550980Z ---------------------------------------- 2026-10-24T03:18:04.8551259Z 2026-10-24T03:18:04.8551484Z VM ID: blacksmith-8vcpu-ubuntu-2404-mvq7evki6sav3z2v 2026-10-24T03:18:04.8551999Z Host: production-152.236.41.174-x8664 2026-10-24T03:18:04.8552419Z Host Agent PID: 1601186 2026-10-24T03:18:04.8552719Z Host Agent Git SHA: 1637818df 2026-10-24T03:18:04.8553002Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T03:18:04.8553344Z Blacksmith Host Generation: gen 2 2026-10-24T03:18:04.8553782Z Petname: production-actual-python-21756ac7 2026-10-24T03:18:04.8554191Z Region: us-east 2026-10-24T03:18:04.8554429Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T03:18:04.8558015Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T03:18:04.8558445Z 2026-10-24T03:18:04.8558614Z Enabling Blacksmith transparent cache 2026-10-24T03:18:04.8825328Z ##[group]Run actions/checkout@v6 2026-10-24T03:18:04.8825632Z with: 2026-10-24T03:18:04.8825966Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T03:18:04.8826374Z sparse-checkout-cone-mode: false 2026-10-24T03:18:04.8826660Z repository: pingdotgg/t3code 2026-10-24T03:18:04.8828592Z token: *** 2026-10-24T03:18:04.8828814Z ssh-strict: true 2026-10-24T03:18:04.8829037Z ssh-user: git 2026-10-24T03:18:04.8829268Z persist-credentials: true 2026-10-24T03:18:04.8829809Z clean: true 2026-10-24T03:18:04.8830026Z fetch-depth: 1 2026-10-24T03:18:04.8830249Z fetch-tags: false 2026-10-24T03:18:04.8830477Z show-progress: true 2026-10-24T03:18:04.8830706Z lfs: false 2026-10-24T03:18:04.8830916Z submodules: false 2026-10-24T03:18:04.8831147Z set-safe-directory: true 2026-10-24T03:18:04.8831406Z allow-unsafe-pr-checkout: false 2026-10-24T03:18:04.8831685Z env: 2026-10-24T03:18:04.8831927Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:04.8832222Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:04.8832505Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:04.8832772Z ##[endgroup] 2026-10-24T03:18:05.0107454Z Syncing repository: pingdotgg/t3code 2026-10-24T03:18:05.0108410Z ##[group]Getting Git version info 2026-10-24T03:18:05.0108742Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T03:18:05.0109230Z [command]/usr/local/bin/git version 2026-10-24T03:18:05.0187233Z git version 2.55.0 2026-10-24T03:18:05.0198606Z ##[endgroup] 2026-10-24T03:18:05.0206173Z Temporarily overriding HOME='/home/runner/_work/_temp/6dbae942-6e41-4b63-8b34-b88719e12507' before making global git config changes 2026-10-24T03:18:05.0206842Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T03:18:05.0210542Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T03:18:05.0240579Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T03:18:05.0242664Z ##[group]Determining repository object format 2026-10-24T03:18:05.0243855Z ##[endgroup] 2026-10-24T03:18:05.0244445Z ##[group]Initializing the repository 2026-10-24T03:18:05.0247237Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T03:18:05.0282601Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T03:18:05.0283378Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T03:18:05.0284152Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T03:18:05.0284733Z hint: call: 2026-10-24T03:18:05.0285047Z hint: 2026-10-24T03:18:05.0285457Z hint: git config --global init.defaultBranch 2026-10-24T03:18:05.0287017Z hint: 2026-10-24T03:18:05.0287481Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T03:18:05.0288233Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T03:18:05.0288839Z hint: 2026-10-24T03:18:05.0289174Z hint: git branch -m 2026-10-24T03:18:05.0289601Z hint: 2026-10-24T03:18:05.0290111Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T03:18:05.0290889Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T03:18:05.0292149Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T03:18:05.0315779Z ##[endgroup] 2026-10-24T03:18:05.0316173Z ##[group]Disabling automatic garbage collection 2026-10-24T03:18:05.0318173Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T03:18:05.0338320Z ##[endgroup] 2026-10-24T03:18:05.0338691Z ##[group]Setting up auth 2026-10-24T03:18:05.0338978Z Removing SSH command configuration 2026-10-24T03:18:05.0342476Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T03:18:05.0365555Z [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-24T03:18:05.0499926Z Removing HTTP extra header 2026-10-24T03:18:05.0502643Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T03:18:05.0524198Z [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-24T03:18:05.0624652Z Removing includeIf entries pointing to credentials config files 2026-10-24T03:18:05.0627614Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T03:18:05.0651320Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T03:18:05.0762087Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-8ed3a6de-a1aa-45e7-a7ab-011518507f83.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T03:18:05.0792344Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-8ed3a6de-a1aa-45e7-a7ab-011518507f83.config 2026-10-24T03:18:05.0814166Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-8ed3a6de-a1aa-45e7-a7ab-011518507f83.config 2026-10-24T03:18:05.0834141Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-8ed3a6de-a1aa-45e7-a7ab-011518507f83.config 2026-10-24T03:18:05.0853843Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-8ed3a6de-a1aa-45e7-a7ab-011518507f83.config 2026-10-24T03:18:05.0872907Z ##[endgroup] 2026-10-24T03:18:05.0873489Z ##[group]Fetching the repository 2026-10-24T03:18:05.0878246Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +b4cbb3056ff4a0098443389199c6c569b935ae92:refs/remotes/pull/24263/merge 2026-10-24T03:18:05.3657818Z From https://github.com/pingdotgg/t3code 2026-10-24T03:18:05.3658747Z * [new ref] b4cbb3056ff4a0098443389199c6c569b935ae92 -> pull/24263/merge 2026-10-24T03:18:05.3690264Z ##[endgroup] 2026-10-24T03:18:05.3690945Z ##[group]Determining the checkout info 2026-10-24T03:18:05.3691598Z ##[endgroup] 2026-10-24T03:18:05.3692185Z ##[group]Setting up sparse checkout 2026-10-24T03:18:05.3696148Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T03:18:05.3726865Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T03:18:05.3749527Z .git/info/sparse-checkout 2026-10-24T03:18:05.3754400Z ##[endgroup] 2026-10-24T03:18:05.3755076Z ##[group]Checking out the ref 2026-10-24T03:18:05.3757806Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/24263/merge 2026-10-24T03:18:12.0670783Z Updating files: 0% (1/6326) 2026-10-24T03:18:12.0700192Z Updating files: 1% (64/6326) 2026-10-24T03:18:12.0719428Z Updating files: 2% (127/6326) 2026-10-24T03:18:12.0741772Z Updating files: 3% (190/6326) 2026-10-24T03:18:12.0762921Z Updating files: 4% (254/6326) 2026-10-24T03:18:12.0795143Z Updating files: 5% (317/6326) 2026-10-24T03:18:12.0817306Z Updating files: 6% (380/6326) 2026-10-24T03:18:12.0876848Z Updating files: 7% (443/6326) 2026-10-24T03:18:12.0910600Z Updating files: 8% (507/6326) 2026-10-24T03:18:12.0938016Z Updating files: 9% (570/6326) 2026-10-24T03:18:12.1253397Z Updating files: 10% (633/6326) 2026-10-24T03:18:12.1270940Z Updating files: 11% (696/6326) 2026-10-24T03:18:12.1282520Z Updating files: 12% (760/6326) 2026-10-24T03:18:12.1296823Z Updating files: 13% (823/6326) 2026-10-24T03:18:12.1314152Z Updating files: 14% (886/6326) 2026-10-24T03:18:12.1333386Z Updating files: 15% (949/6326) 2026-10-24T03:18:12.1352700Z Updating files: 16% (1013/6326) 2026-10-24T03:18:12.1368772Z Updating files: 17% (1076/6326) 2026-10-24T03:18:12.1388338Z Updating files: 18% (1139/6326) 2026-10-24T03:18:12.1404245Z Updating files: 19% (1202/6326) 2026-10-24T03:18:12.1428178Z Updating files: 20% (1266/6326) 2026-10-24T03:18:12.1448082Z Updating files: 21% (1329/6326) 2026-10-24T03:18:12.1467142Z Updating files: 22% (1392/6326) 2026-10-24T03:18:12.1482110Z Updating files: 23% (1455/6326) 2026-10-24T03:18:12.1497259Z Updating files: 24% (1519/6326) 2026-10-24T03:18:12.1515084Z Updating files: 25% (1582/6326) 2026-10-24T03:18:12.1529912Z Updating files: 26% (1645/6326) 2026-10-24T03:18:12.1544157Z Updating files: 27% (1709/6326) 2026-10-24T03:18:12.1564515Z Updating files: 28% (1772/6326) 2026-10-24T03:18:12.1599100Z Updating files: 29% (1835/6326) 2026-10-24T03:18:12.1620602Z Updating files: 30% (1898/6326) 2026-10-24T03:18:12.1646123Z Updating files: 31% (1962/6326) 2026-10-24T03:18:12.1677740Z Updating files: 32% (2025/6326) 2026-10-24T03:18:12.1711141Z Updating files: 33% (2088/6326) 2026-10-24T03:18:12.1783287Z Updating files: 34% (2151/6326) 2026-10-24T03:18:12.1850010Z Updating files: 35% (2215/6326) 2026-10-24T03:18:12.1891047Z Updating files: 36% (2278/6326) 2026-10-24T03:18:12.1928267Z Updating files: 37% (2341/6326) 2026-10-24T03:18:12.1977330Z Updating files: 38% (2404/6326) 2026-10-24T03:18:12.2005787Z Updating files: 39% (2468/6326) 2026-10-24T03:18:12.2039064Z Updating files: 40% (2531/6326) 2026-10-24T03:18:12.2071880Z Updating files: 41% (2594/6326) 2026-10-24T03:18:12.2089344Z Updating files: 42% (2657/6326) 2026-10-24T03:18:12.2099599Z Updating files: 43% (2721/6326) 2026-10-24T03:18:12.2127672Z Updating files: 44% (2784/6326) 2026-10-24T03:18:12.2159062Z Updating files: 45% (2847/6326) 2026-10-24T03:18:12.2185994Z Updating files: 46% (2910/6326) 2026-10-24T03:18:12.2214454Z Updating files: 47% (2974/6326) 2026-10-24T03:18:12.2244658Z Updating files: 48% (3037/6326) 2026-10-24T03:18:12.2276579Z Updating files: 49% (3100/6326) 2026-10-24T03:18:12.2315916Z Updating files: 50% (3163/6326) 2026-10-24T03:18:12.2332959Z Updating files: 51% (3227/6326) 2026-10-24T03:18:12.2371574Z Updating files: 52% (3290/6326) 2026-10-24T03:18:12.2397367Z Updating files: 53% (3353/6326) 2026-10-24T03:18:12.2418509Z Updating files: 54% (3417/6326) 2026-10-24T03:18:12.2443238Z Updating files: 55% (3480/6326) 2026-10-24T03:18:12.2463051Z Updating files: 56% (3543/6326) 2026-10-24T03:18:12.2481565Z Updating files: 57% (3606/6326) 2026-10-24T03:18:12.2501360Z Updating files: 58% (3670/6326) 2026-10-24T03:18:12.2892799Z Updating files: 59% (3733/6326) 2026-10-24T03:18:12.2907762Z Updating files: 60% (3796/6326) 2026-10-24T03:18:12.2925003Z Updating files: 61% (3859/6326) 2026-10-24T03:18:12.2945129Z Updating files: 62% (3923/6326) 2026-10-24T03:18:12.2966895Z Updating files: 63% (3986/6326) 2026-10-24T03:18:12.2995545Z Updating files: 64% (4049/6326) 2026-10-24T03:18:12.3018642Z Updating files: 65% (4112/6326) 2026-10-24T03:18:12.3035179Z Updating files: 66% (4176/6326) 2026-10-24T03:18:12.3062379Z Updating files: 67% (4239/6326) 2026-10-24T03:18:12.3075853Z Updating files: 68% (4302/6326) 2026-10-24T03:18:12.3096075Z Updating files: 69% (4365/6326) 2026-10-24T03:18:12.3109098Z Updating files: 70% (4429/6326) 2026-10-24T03:18:12.3126610Z Updating files: 71% (4492/6326) 2026-10-24T03:18:12.3143888Z Updating files: 72% (4555/6326) 2026-10-24T03:18:12.3172018Z Updating files: 73% (4618/6326) 2026-10-24T03:18:12.3444390Z Updating files: 74% (4682/6326) 2026-10-24T03:18:12.3643772Z Updating files: 75% (4745/6326) 2026-10-24T03:18:12.3666870Z Updating files: 76% (4808/6326) 2026-10-24T03:18:12.3687914Z Updating files: 77% (4872/6326) 2026-10-24T03:18:12.3714649Z Updating files: 78% (4935/6326) 2026-10-24T03:18:12.3734288Z Updating files: 79% (4998/6326) 2026-10-24T03:18:12.3754657Z Updating files: 80% (5061/6326) 2026-10-24T03:18:12.3773449Z Updating files: 81% (5125/6326) 2026-10-24T03:18:12.3793821Z Updating files: 82% (5188/6326) 2026-10-24T03:18:12.3813481Z Updating files: 83% (5251/6326) 2026-10-24T03:18:12.3836275Z Updating files: 84% (5314/6326) 2026-10-24T03:18:12.3860347Z Updating files: 85% (5378/6326) 2026-10-24T03:18:12.3884712Z Updating files: 86% (5441/6326) 2026-10-24T03:18:12.3957028Z Updating files: 87% (5504/6326) 2026-10-24T03:18:12.3990685Z Updating files: 88% (5567/6326) 2026-10-24T03:18:12.4003032Z Updating files: 89% (5631/6326) 2026-10-24T03:18:12.4013034Z Updating files: 89% (5668/6326) 2026-10-24T03:18:12.4037410Z Updating files: 90% (5694/6326) 2026-10-24T03:18:12.4074506Z Updating files: 91% (5757/6326) 2026-10-24T03:18:12.4091263Z Updating files: 92% (5820/6326) 2026-10-24T03:18:12.4109410Z Updating files: 93% (5884/6326) 2026-10-24T03:18:12.4130593Z Updating files: 94% (5947/6326) 2026-10-24T03:18:12.4156293Z Updating files: 95% (6010/6326) 2026-10-24T03:18:12.4214174Z Updating files: 96% (6073/6326) 2026-10-24T03:18:12.4241168Z Updating files: 97% (6137/6326) 2026-10-24T03:18:12.4289541Z Updating files: 98% (6200/6326) 2026-10-24T03:18:12.4309941Z Updating files: 99% (6263/6326) 2026-10-24T03:18:12.4310205Z Updating files: 100% (6326/6326) 2026-10-24T03:18:12.4310386Z Updating files: 100% (6326/6326), done. 2026-10-24T03:18:12.4472139Z Note: switching to 'refs/remotes/pull/24263/merge'. 2026-10-24T03:18:12.4472378Z 2026-10-24T03:18:12.4472491Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T03:18:12.4472741Z changes and commit them, and you can discard any commits you make in this 2026-10-24T03:18:12.4472979Z state without impacting any branches by switching back to a branch. 2026-10-24T03:18:12.4473121Z 2026-10-24T03:18:12.4473219Z If you want to create a new branch to retain commits you create, you may 2026-10-24T03:18:12.4473451Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T03:18:12.4473580Z 2026-10-24T03:18:12.4473645Z git switch -c 2026-10-24T03:18:12.4473759Z 2026-10-24T03:18:12.4473818Z Or undo this operation with: 2026-10-24T03:18:12.4473906Z 2026-10-24T03:18:12.4474047Z git switch - 2026-10-24T03:18:12.4474125Z 2026-10-24T03:18:12.4474238Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T03:18:12.4474393Z 2026-10-24T03:18:12.4474561Z HEAD is now at b4cbb30 Merge 42a0cf350f568e431e8884b9440a158df21875c9 into f41617580439f33ab55fa1ba100437a5b4c7d516 2026-10-24T03:18:12.4485518Z ##[endgroup] 2026-10-24T03:18:12.4522369Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T03:18:12.4546124Z b4cbb3056ff4a0098443389199c6c569b935ae92 2026-10-24T03:18:12.4634999Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T03:18:12.4635244Z files="$(git ls-files .github/pr-assets)" 2026-10-24T03:18:12.4635428Z if test -n "$files"; then 2026-10-24T03:18:12.4635654Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T03:18:12.4635885Z  exit 1 2026-10-24T03:18:12.4636017Z fi 2026-10-24T03:18:12.4647018Z shell: /usr/bin/bash -e {0} 2026-10-24T03:18:12.4647172Z env: 2026-10-24T03:18:12.4647292Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:12.4647442Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:12.4647583Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:12.4647720Z ##[endgroup] 2026-10-24T03:18:12.4809184Z Prepare all required actions 2026-10-24T03:18:12.4809528Z Getting action download info 2026-10-24T03:18:12.5731227Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T03:18:12.6666622Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T03:18:12.6666792Z env: 2026-10-24T03:18:12.6666914Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:12.6667067Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:12.6667213Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:12.6667354Z ##[endgroup] 2026-10-24T03:18:12.6762371Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T03:18:12.6780815Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T03:18:12.6781302Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T03:18:12.6781604Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T03:18:12.6781847Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T03:18:12.6792732Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:18:12.6792898Z env: 2026-10-24T03:18:12.6793016Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:12.6793163Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:12.6793311Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:12.6793449Z ##[endgroup] 2026-10-24T03:18:12.6869828Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T03:18:12.6871693Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T03:18:12.6919845Z ##[group]Run actions/cache@v6 2026-10-24T03:18:12.6919983Z with: 2026-10-24T03:18:12.6920091Z path: ~/.vite-plus 2026-10-24T03:18:12.6920302Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T03:18:12.6920516Z enableCrossOsArchive: false 2026-10-24T03:18:12.6920652Z fail-on-cache-miss: false 2026-10-24T03:18:12.6920780Z lookup-only: false 2026-10-24T03:18:12.6920893Z save-always: false 2026-10-24T03:18:12.6921004Z env: 2026-10-24T03:18:12.6921113Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:12.6921267Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:12.6921409Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:12.6921542Z ##[endgroup] 2026-10-24T03:18:12.8883249Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T03:18:13.3066006Z Received 170349591 of 170349591 (100.0%), 409.2 MBs/sec 2026-10-24T03:18:13.3066414Z Cache Size: ~162 MB (170349591 B) 2026-10-24T03:18:13.3089858Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/24ad8a17-e130-4a2b-b73b-4caab9f1b78f/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T03:18:14.0954780Z Cache restored successfully 2026-10-24T03:18:14.1100295Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T03:18:14.1189576Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1431] 2026-10-24T03:18:14.1192087Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T03:18:14.1216880Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T03:18:14.1217100Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T03:18:14.1217275Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T03:18:14.1228609Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:18:14.1228784Z env: 2026-10-24T03:18:14.1228903Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:14.1229050Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:14.1229210Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:14.1229346Z ##[endgroup] 2026-10-24T03:18:14.1269898Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T03:18:14.1281289Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T03:18:14.1283567Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T03:18:14.1302918Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T03:18:14.1304298Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T03:18:14.1347550Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T03:18:14.1347745Z store_path="$(vp pm cache dir)" 2026-10-24T03:18:14.1347912Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T03:18:14.1361315Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:18:14.1361488Z env: 2026-10-24T03:18:14.1361598Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:14.1361906Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:14.1362047Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:14.1362182Z ##[endgroup] 2026-10-24T03:18:14.1513259Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=20] 2026-10-24T03:18:14.1514440Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T03:18:14.1880266Z ##[group]Run actions/cache@v6 2026-10-24T03:18:14.1880419Z with: 2026-10-24T03:18:14.1880548Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T03:18:14.1880806Z key: pnpm-full-v1-Linux-X64-045caa51c4b226597018f0d0c699ccc3936ad58bb7e4b01dc2f26bb9d6fd8aef 2026-10-24T03:18:14.1881063Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T03:18:14.1881210Z enableCrossOsArchive: false 2026-10-24T03:18:14.1881342Z fail-on-cache-miss: false 2026-10-24T03:18:14.1881463Z lookup-only: false 2026-10-24T03:18:14.1881579Z save-always: false 2026-10-24T03:18:14.1881699Z env: 2026-10-24T03:18:14.1881807Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:14.1881959Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:14.1882096Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:14.1882228Z ##[endgroup] 2026-10-24T03:18:14.3846289Z Cache hit for: pnpm-full-v1-Linux-X64-045caa51c4b226597018f0d0c699ccc3936ad58bb7e4b01dc2f26bb9d6fd8aef 2026-10-24T03:18:15.4344220Z Received 603979776 of 994795588 (60.7%), 576.0 MBs/sec 2026-10-24T03:18:16.0866740Z Received 994795588 of 994795588 (100.0%), 574.3 MBs/sec 2026-10-24T03:18:16.0868087Z Cache Size: ~949 MB (994795588 B) 2026-10-24T03:18:16.0887796Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/2d6e5499-5ff2-4c7a-b46b-f3050277f3d0/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T03:18:22.0816842Z Cache restored successfully 2026-10-24T03:18:22.1291967Z Cache restored from key: pnpm-full-v1-Linux-X64-045caa51c4b226597018f0d0c699ccc3936ad58bb7e4b01dc2f26bb9d6fd8aef 2026-10-24T03:18:22.1379632Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7986] 2026-10-24T03:18:22.1381908Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T03:18:22.1394167Z ##[group]Run vp install 2026-10-24T03:18:22.1394313Z vp install 2026-10-24T03:18:22.1405847Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:18:22.1406012Z env: 2026-10-24T03:18:22.1406131Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:22.1406282Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:22.1406432Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:22.1406570Z ##[endgroup] 2026-10-24T03:18:22.2073972Z Scope: all 33 workspace projects 2026-10-24T03:18:22.3247236Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T03:18:22.6105668Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T03:18:22.6106008Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T03:18:22.6106231Z Virtual store is at: node_modules/.pnpm 2026-10-24T03:18:24.8565622Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.5s) 2026-10-24T03:18:24.8566215Z Lockfile is up to date, resolution step is skipped 2026-10-24T03:18:24.8754469Z Packages: +1721 2026-10-24T03:18:24.8754702Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T03:18:24.9342905Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T03:18:25.9981195Z . prepare$ vp config --no-agent 2026-10-24T03:18:26.1079931Z . prepare: Done 2026-10-24T03:18:26.1100167Z 2026-10-24T03:18:26.1100365Z devDependencies: 2026-10-24T03:18:26.1100520Z + @coderabbitai/config 1.1.0 2026-10-24T03:18:26.1100661Z + @shadcn/lint 0.1.5 2026-10-24T03:18:26.1100801Z + @types/node 24.12.4 2026-10-24T03:18:26.1100932Z + knip 6.34.0 2026-10-24T03:18:26.1101066Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T03:18:26.1101211Z + vite-plus 1.3.0 2026-10-24T03:18:26.1101283Z 2026-10-24T03:18:26.1135041Z Done in 4s using pnpm v12.14.0 2026-10-24T03:18:26.1307905Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3992] 2026-10-24T03:18:26.1813625Z ##[group]Run actions/cache@v6 2026-10-24T03:18:26.1813781Z with: 2026-10-24T03:18:26.1813909Z path: ~/.cache/electron 2026-10-24T03:18:26.1814151Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T03:18:26.1814417Z enableCrossOsArchive: false 2026-10-24T03:18:26.1814598Z fail-on-cache-miss: false 2026-10-24T03:18:26.1814757Z lookup-only: false 2026-10-24T03:18:26.1814883Z save-always: false 2026-10-24T03:18:26.1815000Z env: 2026-10-24T03:18:26.1815128Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:26.1815282Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:26.1815458Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:26.1815596Z ##[endgroup] 2026-10-24T03:18:26.4304300Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T03:18:26.5837269Z Received 122906203 of 122906203 (100.0%), 861.9 MBs/sec 2026-10-24T03:18:26.5840228Z Cache Size: ~117 MB (122906203 B) 2026-10-24T03:18:26.5863470Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/14f0ea69-f849-4358-8181-0721b789b58f/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T03:18:26.6703715Z Cache restored successfully 2026-10-24T03:18:26.6824230Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T03:18:26.6904944Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T03:18:26.6905210Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T03:18:26.6916429Z shell: /usr/bin/bash -e {0} 2026-10-24T03:18:26.6916561Z env: 2026-10-24T03:18:26.6916863Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:26.6917017Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:26.6917160Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:26.6917299Z ##[endgroup] 2026-10-24T03:18:26.8609037Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T03:18:27.4760195Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T03:18:27.4770852Z 2026-10-24T03:18:27.4865024Z ##[group]Run vp run knip:check 2026-10-24T03:18:27.4865222Z vp run knip:check 2026-10-24T03:18:27.4876371Z shell: /usr/bin/bash -e {0} 2026-10-24T03:18:27.4876507Z env: 2026-10-24T03:18:27.4876619Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:27.4876771Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:27.4876915Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:27.4877060Z ##[endgroup] 2026-10-24T03:18:27.6408790Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T03:18:31.6662085Z 2026-10-24T03:18:31.6665455Z $ 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-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-24T03:18:40.5398174Z 2026-10-24T03:18:40.5398911Z --- 2026-10-24T03:18:40.5399239Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T03:18:40.5485157Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T03:18:40.5485456Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T03:18:40.5496327Z shell: /usr/bin/bash -e {0} 2026-10-24T03:18:40.5496453Z env: 2026-10-24T03:18:40.5496568Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:40.5496720Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:40.5496862Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:40.5497002Z ##[endgroup] 2026-10-24T03:18:40.7033687Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T03:18:40.9126507Z 2026-10-24T03:18:40.9203165Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T03:18:40.9203389Z vp run --filter t3 generate --check 2026-10-24T03:18:40.9214876Z shell: /usr/bin/bash -e {0} 2026-10-24T03:18:40.9215008Z env: 2026-10-24T03:18:40.9215139Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:40.9215290Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:40.9215432Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:40.9215572Z ##[endgroup] 2026-10-24T03:18:41.0754626Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T03:18:41.2408764Z 2026-10-24T03:18:41.2492888Z ##[group]Run vp check 2026-10-24T03:18:41.2493058Z vp check 2026-10-24T03:18:41.2504177Z shell: /usr/bin/bash -e {0} 2026-10-24T03:18:41.2504310Z env: 2026-10-24T03:18:41.2504424Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:41.2504578Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:41.2504722Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:18:41.2504859Z ##[endgroup] 2026-10-24T03:18:41.8565952Z pass: All 5679 files are correctly formatted (450ms, 8 threads) 2026-10-24T03:18:47.1465467Z warn: Lint warnings found 2026-10-24T03:18:47.1466407Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.1466982Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T03:18:47.1467402Z 248 │ mountedRef.current = false; 2026-10-24T03:18:47.1467711Z 249 │ flow.setBranchQuery(""); 2026-10-24T03:18:47.1467979Z ·  ──┬─ 2026-10-24T03:18:47.1468219Z · ╰── Missing dependency `flow` 2026-10-24T03:18:47.1468419Z 250 │ }; 2026-10-24T03:18:47.1468565Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T03:18:47.1468790Z ·  ─────────┬───────── 2026-10-24T03:18:47.1469279Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T03:18:47.1469699Z 252 │ 2026-10-24T03:18:47.1469883Z ╰──── 2026-10-24T03:18:47.1470683Z  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-24T03:18:47.1471920Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1472434Z 2026-10-24T03:18:47.1473195Z ⚠ 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-24T03:18:47.1474107Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T03:18:47.1474576Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T03:18:47.1475117Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T03:18:47.1475581Z ·  ──────────────────────── 2026-10-24T03:18:47.1475869Z 182 │ version: 1, 2026-10-24T03:18:47.1476067Z ╰──── 2026-10-24T03:18:47.1476152Z 2026-10-24T03:18:47.1476952Z ⚠ 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-24T03:18:47.1477810Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T03:18:47.1478251Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T03:18:47.1478790Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T03:18:47.1479278Z ·  ─────────────────── 2026-10-24T03:18:47.1479607Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T03:18:47.1479861Z ╰──── 2026-10-24T03:18:47.1479946Z 2026-10-24T03:18:47.1480354Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1480989Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T03:18:47.1481456Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T03:18:47.1481789Z 356 │ useEffect(() => { 2026-10-24T03:18:47.1482020Z ·  ────┬──── 2026-10-24T03:18:47.1482607Z · ╰── This is the containing effect 2026-10-24T03:18:47.1483020Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T03:18:47.1483278Z 358 │ return; 2026-10-24T03:18:47.1483476Z 359 │ } 2026-10-24T03:18:47.1483723Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T03:18:47.1484052Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T03:18:47.1484379Z ·  ──────────────┬────────────── 2026-10-24T03:18:47.1484833Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1485195Z 362 │ return; 2026-10-24T03:18:47.1485386Z ╰──── 2026-10-24T03:18:47.1486582Z  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-24T03:18:47.1488036Z  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-24T03:18:47.1488530Z 2026-10-24T03:18:47.1488940Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1489568Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T03:18:47.1489899Z 447 │ 2026-10-24T03:18:47.1490080Z 448 │ useEffect(() => { 2026-10-24T03:18:47.1490314Z ·  ────┬──── 2026-10-24T03:18:47.1490645Z · ╰── This is the containing effect 2026-10-24T03:18:47.1491017Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T03:18:47.1491295Z 450 │ return; 2026-10-24T03:18:47.1491487Z 451 │ } 2026-10-24T03:18:47.1491810Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T03:18:47.1492268Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T03:18:47.1492710Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T03:18:47.1492984Z 455 │ } 2026-10-24T03:18:47.1493308Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T03:18:47.1493748Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T03:18:47.1494137Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T03:18:47.1494425Z 459 │ const directProject = 2026-10-24T03:18:47.1494671Z 460 │ projects.find( 2026-10-24T03:18:47.1494919Z 461 │ (project) => 2026-10-24T03:18:47.1495334Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T03:18:47.1495707Z 463 │ ) ?? null; 2026-10-24T03:18:47.1495912Z 464 │ 2026-10-24T03:18:47.1496115Z 465 │ if (directProject) { 2026-10-24T03:18:47.1496463Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T03:18:47.1496961Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T03:18:47.1497450Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T03:18:47.1497933Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T03:18:47.1498259Z 470 │ return; 2026-10-24T03:18:47.1498465Z 471 │ } 2026-10-24T03:18:47.1498990Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T03:18:47.1499329Z 473 │ if ( 2026-10-24T03:18:47.1499679Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T03:18:47.1500085Z 475 │ selectedProject.id !== directProject.id 2026-10-24T03:18:47.1500361Z 476 │ ) { 2026-10-24T03:18:47.1500607Z 477 │ setProject(directProject); 2026-10-24T03:18:47.1500869Z 478 │ return; 2026-10-24T03:18:47.1501082Z 479 │ } 2026-10-24T03:18:47.1501314Z 480 │ if (!flow.draftKey) return; 2026-10-24T03:18:47.1501698Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T03:18:47.1502168Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T03:18:47.1502599Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T03:18:47.1502923Z 484 │ workspaceSelection: { 2026-10-24T03:18:47.1503192Z 485 │ mode: "local", 2026-10-24T03:18:47.1503493Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T03:18:47.1503902Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T03:18:47.1504271Z 488 │ startFromOrigin: false, 2026-10-24T03:18:47.1504524Z 489 │ }, 2026-10-24T03:18:47.1504727Z 490 │ }); 2026-10-24T03:18:47.1504928Z 491 │ } 2026-10-24T03:18:47.1505234Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T03:18:47.1505550Z 493 │ if ( 2026-10-24T03:18:47.1505890Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T03:18:47.1506291Z 495 │ selectedProject.id === directProject.id 2026-10-24T03:18:47.1506572Z 496 │ ) { 2026-10-24T03:18:47.1506825Z 497 │ return; 2026-10-24T03:18:47.1507033Z 498 │ } 2026-10-24T03:18:47.1507263Z 499 │ setProject(directProject); 2026-10-24T03:18:47.1507517Z 500 │ return; 2026-10-24T03:18:47.1507717Z 501 │ } 2026-10-24T03:18:47.1507899Z 502 │ 2026-10-24T03:18:47.1508109Z 503 │ if (projects.length > 0) { 2026-10-24T03:18:47.1508412Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T03:18:47.1508761Z ·  ──────────────┬────────────── 2026-10-24T03:18:47.1509230Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1510203Z 505 │ } 2026-10-24T03:18:47.1510382Z ╰──── 2026-10-24T03:18:47.1511503Z  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-24T03:18:47.1512968Z  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-24T03:18:47.1513486Z 2026-10-24T03:18:47.1513920Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1514572Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T03:18:47.1514909Z 545 │ 2026-10-24T03:18:47.1515087Z 546 │ useEffect(() => { 2026-10-24T03:18:47.1515322Z ·  ────┬──── 2026-10-24T03:18:47.1515748Z · ╰── This is the containing effect 2026-10-24T03:18:47.1516186Z 547 │ const shareId = props.incomingShareId; 2026-10-24T03:18:47.1516487Z 548 │ const draftKey = flow.draftKey; 2026-10-24T03:18:47.1516841Z 549 │ const destinationProject = selectedProject; 2026-10-24T03:18:47.1517257Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T03:18:47.1517706Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T03:18:47.1518078Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T03:18:47.1518371Z 553 │ !initialEnvironmentId || 2026-10-24T03:18:47.1518642Z 554 │ !initialProjectId || 2026-10-24T03:18:47.1518991Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T03:18:47.1519551Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T03:18:47.1519855Z 557 │ if ( 2026-10-24T03:18:47.1520060Z 558 │ !shareId || 2026-10-24T03:18:47.1520284Z 559 │ !draftKey || 2026-10-24T03:18:47.1520521Z 560 │ !destinationProject || 2026-10-24T03:18:47.1520827Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T03:18:47.1521138Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T03:18:47.1521393Z 563 │ ) { 2026-10-24T03:18:47.1521592Z 564 │ return; 2026-10-24T03:18:47.1521788Z 565 │ } 2026-10-24T03:18:47.1522043Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T03:18:47.1522308Z 567 │ if ( 2026-10-24T03:18:47.1522589Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T03:18:47.1522966Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T03:18:47.1545080Z 570 │ ) { 2026-10-24T03:18:47.1545324Z 571 │ return; 2026-10-24T03:18:47.1545548Z 572 │ } 2026-10-24T03:18:47.1545731Z 573 │ 2026-10-24T03:18:47.1545929Z 574 │ if (!incomingShare) { 2026-10-24T03:18:47.1546385Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T03:18:47.1546943Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T03:18:47.1547179Z 577 │ Dialog.alert( 2026-10-24T03:18:47.1547357Z 578 │ "Shared content unavailable", 2026-10-24T03:18:47.1547651Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T03:18:47.1547891Z 580 │ ); 2026-10-24T03:18:47.1548029Z 581 │ } 2026-10-24T03:18:47.1548158Z 582 │ return; 2026-10-24T03:18:47.1548293Z 583 │ } 2026-10-24T03:18:47.1548414Z 584 │ 2026-10-24T03:18:47.1548538Z 585 │ if ( 2026-10-24T03:18:47.1548783Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T03:18:47.1549063Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T03:18:47.1549238Z 588 │ ) { 2026-10-24T03:18:47.1549363Z 589 │ return; 2026-10-24T03:18:47.1549496Z 590 │ } 2026-10-24T03:18:47.1549614Z 591 │ 2026-10-24T03:18:47.1549823Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T03:18:47.1550098Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T03:18:47.1550297Z 594 │ } 2026-10-24T03:18:47.1550472Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T03:18:47.1550673Z 596 │ const draftBackup = 2026-10-24T03:18:47.1550961Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T03:18:47.1551527Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T03:18:47.1551920Z 599 │ const importToken = Symbol(importKey); 2026-10-24T03:18:47.1552115Z 600 │ let didReserveShare = false; 2026-10-24T03:18:47.1552304Z 601 │ let didConsumeShare = false; 2026-10-24T03:18:47.1552523Z 602 │ let needsDraftRestore = false; 2026-10-24T03:18:47.1552792Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T03:18:47.1553006Z 604 │ setImportingShareKey(importKey); 2026-10-24T03:18:47.1553216Z ·  ──────────┬───────── 2026-10-24T03:18:47.1553508Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1553753Z 605 │ void (async () => { 2026-10-24T03:18:47.1553897Z ╰──── 2026-10-24T03:18:47.1554583Z  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-24T03:18:47.1555494Z  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-24T03:18:47.1555817Z 2026-10-24T03:18:47.1556042Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1556425Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T03:18:47.1556713Z 523 │ props.initialProjectRef, 2026-10-24T03:18:47.1556890Z 524 │ props.incomingShareId, 2026-10-24T03:18:47.1557096Z ·  ──────────┬────────── 2026-10-24T03:18:47.1557380Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T03:18:47.1557625Z 525 │ props.pendingTaskId, 2026-10-24T03:18:47.1557771Z ╰──── 2026-10-24T03:18:47.1558133Z  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-24T03:18:47.1558737Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1559039Z 2026-10-24T03:18:47.1559264Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.1559630Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T03:18:47.1559921Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T03:18:47.1560131Z 543 │ flow.loadBranches(); 2026-10-24T03:18:47.1560295Z ·  ──┬─ 2026-10-24T03:18:47.1560517Z · ╰── Missing dependency `flow` 2026-10-24T03:18:47.1560749Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T03:18:47.1560959Z ·  ────────┬──────── 2026-10-24T03:18:47.1561269Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T03:18:47.1561531Z 545 │ 2026-10-24T03:18:47.1561648Z ╰──── 2026-10-24T03:18:47.1562257Z  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-24T03:18:47.1563077Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1563464Z 2026-10-24T03:18:47.1563683Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1564043Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T03:18:47.1564276Z 765 │ flow.draftKey, 2026-10-24T03:18:47.1564449Z 766 │ hasImportedIncomingShare, 2026-10-24T03:18:47.1564740Z ·  ────────────┬─────────── 2026-10-24T03:18:47.1565182Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T03:18:47.1565566Z 767 │ incomingShare, 2026-10-24T03:18:47.1565915Z 768 │ isIncomingShareInboxLoading, 2026-10-24T03:18:47.1566166Z ·  ─────────────┬───────────── 2026-10-24T03:18:47.1566470Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T03:18:47.1566802Z 769 │ isIncomingShareUnavailable, 2026-10-24T03:18:47.1567062Z 770 │ props.incomingShareId, 2026-10-24T03:18:47.1567252Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T03:18:47.1567454Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T03:18:47.1567629Z 773 │ releaseShareReservation, 2026-10-24T03:18:47.1567783Z 774 │ reserveShare, 2026-10-24T03:18:47.1567944Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T03:18:47.1568114Z 776 │ selectedProject, 2026-10-24T03:18:47.1568264Z 777 │ shareImportAttempt, 2026-10-24T03:18:47.1568434Z ·  ─────────┬──────── 2026-10-24T03:18:47.1568697Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T03:18:47.1568913Z 778 │ ]); 2026-10-24T03:18:47.1569026Z ╰──── 2026-10-24T03:18:47.1569371Z  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-24T03:18:47.1569963Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1570260Z 2026-10-24T03:18:47.1570635Z ⚠ 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-24T03:18:47.1571214Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T03:18:47.1571663Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T03:18:47.1571998Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T03:18:47.1572355Z ·  ──────────────────────── 2026-10-24T03:18:47.1572531Z 18 │ "review:write", 2026-10-24T03:18:47.1572664Z ╰──── 2026-10-24T03:18:47.1572721Z 2026-10-24T03:18:47.1573086Z ⚠ 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-24T03:18:47.1573531Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T03:18:47.1573718Z 19 │ ]); 2026-10-24T03:18:47.1573954Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T03:18:47.1574236Z ·  ──────────────────────── 2026-10-24T03:18:47.1574482Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T03:18:47.1574681Z ╰──── 2026-10-24T03:18:47.1574736Z 2026-10-24T03:18:47.1575103Z ⚠ 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-24T03:18:47.1575547Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T03:18:47.1575840Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T03:18:47.1576143Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T03:18:47.1576389Z ·  ──────────────────────── 2026-10-24T03:18:47.1576585Z 59 │ authenticated: true, 2026-10-24T03:18:47.1576792Z ╰──── 2026-10-24T03:18:47.1576879Z 2026-10-24T03:18:47.1577179Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1577579Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-24T03:18:47.1577803Z 510 │ }, []); 2026-10-24T03:18:47.1577941Z 511 │ useEffect(() => { 2026-10-24T03:18:47.1578098Z ·  ────┬──── 2026-10-24T03:18:47.1578322Z · ╰── This is the containing effect 2026-10-24T03:18:47.1578546Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T03:18:47.1578747Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1579031Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1579310Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T03:18:47.1579479Z ╰──── 2026-10-24T03:18:47.1580148Z  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-24T03:18:47.1581019Z  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-24T03:18:47.1581330Z 2026-10-24T03:18:47.1581600Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1582098Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-24T03:18:47.1582528Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T03:18:47.1582760Z 870 │ useEffect(() => { 2026-10-24T03:18:47.1582924Z ·  ────┬──── 2026-10-24T03:18:47.1583212Z · ╰── This is the containing effect 2026-10-24T03:18:47.1583512Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T03:18:47.1583792Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T03:18:47.1584026Z ·  ─────────────┬──────────── 2026-10-24T03:18:47.1584310Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1584541Z 873 │ } 2026-10-24T03:18:47.1584662Z ╰──── 2026-10-24T03:18:47.1585333Z  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-24T03:18:47.1586225Z  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-24T03:18:47.1586543Z 2026-10-24T03:18:47.1586922Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1587348Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-24T03:18:47.1587570Z 1117 │ 2026-10-24T03:18:47.1587705Z 1118 │ useEffect(() => { 2026-10-24T03:18:47.1587873Z ·  ────┬──── 2026-10-24T03:18:47.1588093Z · ╰── This is the containing effect 2026-10-24T03:18:47.1588311Z 1119 │ setAnchorMessageId(null); 2026-10-24T03:18:47.1588496Z ·  ─────────┬──────── 2026-10-24T03:18:47.1588770Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1589022Z 1120 │ setSubmittedMessageId(null); 2026-10-24T03:18:47.1589178Z ╰──── 2026-10-24T03:18:47.1589849Z  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-24T03:18:47.1590719Z  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-24T03:18:47.1591020Z 2026-10-24T03:18:47.1591227Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1591585Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-24T03:18:47.1591829Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T03:18:47.1592042Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T03:18:47.1592301Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T03:18:47.1592649Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T03:18:47.1593081Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T03:18:47.1593468Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T03:18:47.1593662Z ╰──── 2026-10-24T03:18:47.1594080Z  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-24T03:18:47.1594698Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1594996Z 2026-10-24T03:18:47.1595202Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1595558Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T03:18:47.1595820Z 1066 │ userInputInsetProgress.set(1); 2026-10-24T03:18:47.1596094Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T03:18:47.1596365Z ·  ────────────┬─────────── 2026-10-24T03:18:47.1596656Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T03:18:47.1597134Z 1068 │ const showContent = props.showContent ?? true; 2026-10-24T03:18:47.1597373Z ╰──── 2026-10-24T03:18:47.1597728Z  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-24T03:18:47.1598322Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1598625Z 2026-10-24T03:18:47.1598828Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1599187Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-24T03:18:47.1599420Z 1124 │ freeze.set(false); 2026-10-24T03:18:47.1599598Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-24T03:18:47.1599796Z ·  ────────┬──────── 2026-10-24T03:18:47.1600071Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T03:18:47.1600289Z 1126 │ 2026-10-24T03:18:47.1600406Z ╰──── 2026-10-24T03:18:47.1600754Z  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-24T03:18:47.1601354Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1601654Z 2026-10-24T03:18:47.1601815Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.1602130Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-24T03:18:47.1602401Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T03:18:47.1602635Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-24T03:18:47.1602851Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1603123Z · ╰── `floatingControlCoverage` originates here 2026-10-24T03:18:47.1603413Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T03:18:47.1603688Z 953 │ ); 2026-10-24T03:18:47.1603897Z 954 │ useEffect(() => { 2026-10-24T03:18:47.1604100Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-24T03:18:47.1604321Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1604610Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T03:18:47.1604953Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T03:18:47.1605146Z ╰──── 2026-10-24T03:18:47.1605486Z  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-24T03:18:47.1606262Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1606558Z 2026-10-24T03:18:47.1606777Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.1607200Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-24T03:18:47.1607554Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T03:18:47.1607872Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T03:18:47.1608127Z ·  ────────────────┬──────────────── 2026-10-24T03:18:47.1608434Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T03:18:47.1608754Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T03:18:47.1608950Z 966 │ ); 2026-10-24T03:18:47.1609094Z 967 │ useAnimatedReaction( 2026-10-24T03:18:47.1609247Z 968 │ () => 2026-10-24T03:18:47.1609418Z 969 │ contentInsetEndAdjustment.value + 2026-10-24T03:18:47.1609620Z 970 │ floatingControlCoverage.value + 2026-10-24T03:18:47.1609924Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T03:18:47.1610196Z 972 │ (value) => { 2026-10-24T03:18:47.1610393Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T03:18:47.1610636Z ·  ────────────────┬──────────────── 2026-10-24T03:18:47.1610948Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T03:18:47.1611360Z 974 │ }, 2026-10-24T03:18:47.1611484Z ╰──── 2026-10-24T03:18:47.1611885Z  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-24T03:18:47.1612625Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1613115Z 2026-10-24T03:18:47.1613421Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1614033Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T03:18:47.1614248Z 12365 │ 2026-10-24T03:18:47.1614459Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T03:18:47.1614711Z ·  ────────┬─────── 2026-10-24T03:18:47.1614968Z · ╰── 'layerUnavailable' is declared here 2026-10-24T03:18:47.1615192Z 12367 │ OrchestratorV2, 2026-10-24T03:18:47.1615333Z ╰──── 2026-10-24T03:18:47.1615511Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1615632Z 2026-10-24T03:18:47.1615795Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.1616117Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T03:18:47.1616336Z  86 │ 2026-10-24T03:18:47.1616493Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T03:18:47.1616742Z ·  ──────┬───── 2026-10-24T03:18:47.1617079Z · ╰── `cardCoverage` originates here 2026-10-24T03:18:47.1617312Z  88 │ const barHeightRef = useRef(0); 2026-10-24T03:18:47.1617496Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T03:18:47.1617692Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T03:18:47.1617900Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T03:18:47.1618090Z  92 │ if (!cardCoverage) { 2026-10-24T03:18:47.1618242Z  93 │ return; 2026-10-24T03:18:47.1618380Z  94 │ } 2026-10-24T03:18:47.1618603Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T03:18:47.1618853Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T03:18:47.1619072Z  97 │ return; 2026-10-24T03:18:47.1619204Z  98 │ } 2026-10-24T03:18:47.1619355Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:18:47.1619542Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:18:47.1619731Z ·  ──────┬───── 2026-10-24T03:18:47.1619977Z · ╰── `cardCoverage` cannot be modified 2026-10-24T03:18:47.1620187Z 101 │ return; 2026-10-24T03:18:47.1620315Z ╰──── 2026-10-24T03:18:47.1620681Z  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-24T03:18:47.1621281Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1621574Z 2026-10-24T03:18:47.1621740Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.1622064Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T03:18:47.1622315Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T03:18:47.1622505Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T03:18:47.1622691Z ·  ─────┬──── 2026-10-24T03:18:47.1623051Z · ╰── `cardHeight` originates here 2026-10-24T03:18:47.1623391Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T03:18:47.1623578Z  92 │ if (!cardCoverage) { 2026-10-24T03:18:47.1623725Z  93 │ return; 2026-10-24T03:18:47.1623857Z  94 │ } 2026-10-24T03:18:47.1624145Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T03:18:47.1624395Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T03:18:47.1624562Z  97 │ return; 2026-10-24T03:18:47.1624696Z  98 │ } 2026-10-24T03:18:47.1624841Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:18:47.1625025Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:18:47.1625189Z 101 │ return; 2026-10-24T03:18:47.1625317Z 102 │ } 2026-10-24T03:18:47.1625486Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T03:18:47.1625704Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T03:18:47.1625906Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T03:18:47.1626064Z 106 │ }); 2026-10-24T03:18:47.1626196Z 107 │ }, [cardCoverage]); 2026-10-24T03:18:47.1626371Z 108 │ const handleBarLayout = useCallback( 2026-10-24T03:18:47.1626557Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.1626888Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:18:47.1627209Z 111 │ notifyCoverage(); 2026-10-24T03:18:47.1627377Z 112 │ }, 2026-10-24T03:18:47.1627510Z 113 │ [notifyCoverage], 2026-10-24T03:18:47.1627653Z 114 │ ); 2026-10-24T03:18:47.1627804Z 115 │ const handleCardLayout = useCallback( 2026-10-24T03:18:47.1627989Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.1628221Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:18:47.1628478Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T03:18:47.1628691Z ·  ─────┬──── 2026-10-24T03:18:47.1628924Z · ╰── `cardHeight` cannot be modified 2026-10-24T03:18:47.1629138Z 119 │ notifyCoverage(); 2026-10-24T03:18:47.1629278Z ╰──── 2026-10-24T03:18:47.1629620Z  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-24T03:18:47.1630193Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1630494Z 2026-10-24T03:18:47.1630704Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:18:47.1631068Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T03:18:47.1631324Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T03:18:47.1631522Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T03:18:47.1631741Z ·  ───┬─── 2026-10-24T03:18:47.1632109Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T03:18:47.1632405Z  92 │ if (!cardCoverage) { 2026-10-24T03:18:47.1632555Z  93 │ return; 2026-10-24T03:18:47.1632681Z  94 │ } 2026-10-24T03:18:47.1632901Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T03:18:47.1633147Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T03:18:47.1633316Z  97 │ return; 2026-10-24T03:18:47.1633523Z  98 │ } 2026-10-24T03:18:47.1633762Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:18:47.1633943Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:18:47.1634127Z ·  ──────┬───── 2026-10-24T03:18:47.1634359Z · ╰── This modifies `cardCoverage` 2026-10-24T03:18:47.1634634Z 101 │ return; 2026-10-24T03:18:47.1634761Z ╰──── 2026-10-24T03:18:47.1635168Z  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-24T03:18:47.1635801Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1636093Z 2026-10-24T03:18:47.1636302Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:18:47.1636700Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T03:18:47.1637101Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:18:47.1637367Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:18:47.1637548Z ·  ──────┬───── 2026-10-24T03:18:47.1637780Z · ╰── This modifies `cardCoverage` 2026-10-24T03:18:47.1637979Z 101 │ return; 2026-10-24T03:18:47.1638111Z 102 │ } 2026-10-24T03:18:47.1638276Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T03:18:47.1638490Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T03:18:47.1638687Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T03:18:47.1638847Z 106 │ }); 2026-10-24T03:18:47.1638985Z 107 │ }, [cardCoverage]); 2026-10-24T03:18:47.1639158Z 108 │ const handleBarLayout = useCallback( 2026-10-24T03:18:47.1639344Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.1639553Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.1639900Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T03:18:47.1640240Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:18:47.1640433Z ╰──── 2026-10-24T03:18:47.1640827Z  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-24T03:18:47.1641458Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1641753Z 2026-10-24T03:18:47.1641956Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:18:47.1642317Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T03:18:47.1642568Z 115 │ const handleCardLayout = useCallback( 2026-10-24T03:18:47.1642755Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.1642962Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.1643304Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T03:18:47.1643643Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:18:47.1643982Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T03:18:47.1644245Z ·  ─────┬──── 2026-10-24T03:18:47.1644510Z · ╰── This modifies `cardHeight` 2026-10-24T03:18:47.1644719Z 119 │ notifyCoverage(); 2026-10-24T03:18:47.1644859Z ╰──── 2026-10-24T03:18:47.1645341Z  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-24T03:18:47.1646148Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1646439Z 2026-10-24T03:18:47.1646750Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1647311Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:327:7] 2026-10-24T03:18:47.1647546Z 322 │ }; 2026-10-24T03:18:47.1647680Z 323 │ useEffect(() => { 2026-10-24T03:18:47.1647838Z ·  ────┬──── 2026-10-24T03:18:47.1648056Z · ╰── This is the containing effect 2026-10-24T03:18:47.1648294Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T03:18:47.1648505Z 325 │ requestedSection.current = "overview"; 2026-10-24T03:18:47.1648811Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T03:18:47.1649056Z 327 │ setSection("overview"); 2026-10-24T03:18:47.1649228Z ·  ─────┬──── 2026-10-24T03:18:47.1649494Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1649729Z 328 │ } 2026-10-24T03:18:47.1649850Z ╰──── 2026-10-24T03:18:47.1650515Z  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-24T03:18:47.1651399Z  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-24T03:18:47.1651715Z 2026-10-24T03:18:47.1651930Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:18:47.1652314Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:6] 2026-10-24T03:18:47.1652602Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T03:18:47.1652817Z 325 │ requestedSection.current = "overview"; 2026-10-24T03:18:47.1653018Z ·  ────────┬─────── 2026-10-24T03:18:47.1653571Z · ╰── 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-24T03:18:47.1654139Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T03:18:47.1654468Z ·  ─────────┬───────── ──────┬────── 2026-10-24T03:18:47.1655236Z · │ ╰── 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-24T03:18:47.1656355Z · ╰── 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-24T03:18:47.1656981Z 327 │ setSection("overview"); 2026-10-24T03:18:47.1657133Z 328 │ } 2026-10-24T03:18:47.1657294Z 329 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T03:18:47.1657525Z ·  ──────────────────┬───────────────── 2026-10-24T03:18:47.1657849Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1658126Z 330 │ const tabContent = activityContent; 2026-10-24T03:18:47.1658294Z ╰──── 2026-10-24T03:18:47.1658524Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:18:47.1659022Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1659323Z 2026-10-24T03:18:47.1659531Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:18:47.1659916Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:864:6] 2026-10-24T03:18:47.1660149Z 847 │ if ( 2026-10-24T03:18:47.1660339Z 848 │ lastSelection.current.path === route.params.path && 2026-10-24T03:18:47.1660549Z ·  ──────┬────── 2026-10-24T03:18:47.1661104Z · ╰── 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-24T03:18:47.1661648Z 849 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T03:18:47.1661849Z 850 │ ) 2026-10-24T03:18:47.1661976Z 851 │ return; 2026-10-24T03:18:47.1662236Z 852 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T03:18:47.1662560Z 853 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T03:18:47.1662796Z 854 │ setJumpPath(route.params.path); 2026-10-24T03:18:47.1662979Z 855 │ setSelectedRowId(null); 2026-10-24T03:18:47.1663152Z 856 │ jumpStarted.current = false; 2026-10-24T03:18:47.1663403Z 857 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T03:18:47.1663732Z 858 │ if (!file || !nativeView.current) return; 2026-10-24T03:18:47.1664037Z ·  ─────┬──── 2026-10-24T03:18:47.1664587Z · ╰── 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-24T03:18:47.1665189Z 859 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T03:18:47.1665408Z 860 │ jumpStarted.current = true; 2026-10-24T03:18:47.1665650Z 861 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T03:18:47.1665885Z 862 │ jumpStarted.current = false; 2026-10-24T03:18:47.1666049Z 863 │ }); 2026-10-24T03:18:47.1666326Z 864 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T03:18:47.1666850Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T03:18:47.1667330Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1667656Z 865 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T03:18:47.1667836Z ╰──── 2026-10-24T03:18:47.1668066Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:18:47.1668557Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1668856Z 2026-10-24T03:18:47.1669053Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T03:18:47.1669382Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T03:18:47.1669621Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T03:18:47.1669820Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T03:18:47.1670013Z ·  ──┬── 2026-10-24T03:18:47.1670250Z · ╰── 'Scope' is imported here 2026-10-24T03:18:47.1670477Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T03:18:47.1670638Z ╰──── 2026-10-24T03:18:47.1670792Z  help: Consider removing this import. 2026-10-24T03:18:47.1670908Z 2026-10-24T03:18:47.1671395Z ⚠ 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-24T03:18:47.1671998Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T03:18:47.1672280Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T03:18:47.1672602Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T03:18:47.1672897Z 567 │ │ const nextEvent = { 2026-10-24T03:18:47.1673173Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T03:18:47.1673473Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T03:18:47.1673710Z 570 │ │ threadId, 2026-10-24T03:18:47.1673924Z 571 │ │ providerInstanceId, 2026-10-24T03:18:47.1674227Z 572 │ │ occurredAt: now, 2026-10-24T03:18:47.1674654Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T03:18:47.1674948Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T03:18:47.1675278Z 575 │ │ const reader = yield* eventSink 2026-10-24T03:18:47.1675532Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T03:18:47.1675807Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T03:18:47.1676062Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1676352Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T03:18:47.1676659Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T03:18:47.1677100Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T03:18:47.1677549Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T03:18:47.1677827Z 583 │ │ } 2026-10-24T03:18:47.1678093Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T03:18:47.1678409Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T03:18:47.1678698Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T03:18:47.1678972Z 587 │ ╰─▶ } 2026-10-24T03:18:47.1679173Z 588 │ }), 2026-10-24T03:18:47.1679302Z ╰──── 2026-10-24T03:18:47.1679364Z 2026-10-24T03:18:47.1679865Z ⚠ 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-24T03:18:47.1680482Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T03:18:47.1680746Z 2326 │ let settled = false; 2026-10-24T03:18:47.1681015Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T03:18:47.1681344Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T03:18:47.1681645Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T03:18:47.1681876Z 2330 │ │ ); 2026-10-24T03:18:47.1682108Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T03:18:47.1682392Z 2332 │ ╰─▶ } 2026-10-24T03:18:47.1682656Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T03:18:47.1682849Z ╰──── 2026-10-24T03:18:47.1682906Z 2026-10-24T03:18:47.1683105Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T03:18:47.1683465Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T03:18:47.1683811Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T03:18:47.1684077Z 602 │ const gesture = Gesture.Pan() 2026-10-24T03:18:47.1684269Z ·  ─┬─ 2026-10-24T03:18:47.1684619Z · ╰── `Pan` may be a component 2026-10-24T03:18:47.1684941Z 603 │ .enabled(!props.disabled) 2026-10-24T03:18:47.1685093Z ╰──── 2026-10-24T03:18:47.1685443Z  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-24T03:18:47.1686782Z  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-24T03:18:47.1687309Z 2026-10-24T03:18:47.1687574Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T03:18:47.1688015Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T03:18:47.1688262Z 959 │ 2026-10-24T03:18:47.1688440Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T03:18:47.1688688Z ·  ──────────────────┬───────────────── 2026-10-24T03:18:47.1689016Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T03:18:47.1689318Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T03:18:47.1689491Z ╰──── 2026-10-24T03:18:47.1689659Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1689780Z 2026-10-24T03:18:47.1690062Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T03:18:47.1690464Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T03:18:47.1690673Z 284 │ }, 2026-10-24T03:18:47.1690831Z 285 │ (effect, flow, stopSessions) => 2026-10-24T03:18:47.1691029Z ·  ──────┬───── 2026-10-24T03:18:47.1691288Z · ╰── 'stopSessions' is declared here 2026-10-24T03:18:47.1691506Z 286 │ effect.pipe( 2026-10-24T03:18:47.1691646Z ╰──── 2026-10-24T03:18:47.1691809Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1691927Z 2026-10-24T03:18:47.1692158Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:18:47.1692512Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T03:18:47.1692723Z 113 │ const declared = { 2026-10-24T03:18:47.1692913Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T03:18:47.1693145Z ·  ──────────────────────────────── 2026-10-24T03:18:47.1693373Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T03:18:47.1693544Z ╰──── 2026-10-24T03:18:47.1693880Z  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-24T03:18:47.1694150Z 2026-10-24T03:18:47.1694375Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:18:47.1694728Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T03:18:47.1694962Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T03:18:47.1695180Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T03:18:47.1695427Z ·  ──────────────────────────────────────── 2026-10-24T03:18:47.1695769Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T03:18:47.1696059Z ╰──── 2026-10-24T03:18:47.1696388Z  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-24T03:18:47.1696663Z 2026-10-24T03:18:47.1696991Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:18:47.1697341Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T03:18:47.1697586Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T03:18:47.1697808Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T03:18:47.1698044Z ·  ──────────────────────────────────── 2026-10-24T03:18:47.1698231Z 117 │ }; 2026-10-24T03:18:47.1698358Z ╰──── 2026-10-24T03:18:47.1698687Z  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-24T03:18:47.1698955Z 2026-10-24T03:18:47.1699303Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1699794Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T03:18:47.1700020Z 1443 │ 2026-10-24T03:18:47.1700202Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T03:18:47.1700457Z ·  ───────────────────┬─────────────────── 2026-10-24T03:18:47.1700796Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T03:18:47.1701137Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T03:18:47.1701330Z ╰──── 2026-10-24T03:18:47.1701497Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1701617Z 2026-10-24T03:18:47.1701876Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1702288Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T03:18:47.1702510Z 1679 │ 2026-10-24T03:18:47.1702647Z 1680 │ const layer: Layer.Layer< 2026-10-24T03:18:47.1702811Z ·  ──┬── 2026-10-24T03:18:47.1703030Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.1703259Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T03:18:47.1703424Z ╰──── 2026-10-24T03:18:47.1703666Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1703864Z 2026-10-24T03:18:47.1704146Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1704651Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T03:18:47.1704919Z 104 │ 2026-10-24T03:18:47.1705052Z 105 │ useEffect(() => { 2026-10-24T03:18:47.1705211Z ·  ────┬──── 2026-10-24T03:18:47.1705436Z · ╰── This is the containing effect 2026-10-24T03:18:47.1705657Z 106 │ clearReviewCommentTarget(); 2026-10-24T03:18:47.1705860Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T03:18:47.1706086Z ·  ────────────────┬─────────────── 2026-10-24T03:18:47.1706393Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1706646Z 108 │ }, [selectedSection?.id]); 2026-10-24T03:18:47.1706901Z ╰──── 2026-10-24T03:18:47.1707630Z  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-24T03:18:47.1708525Z  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-24T03:18:47.1708839Z 2026-10-24T03:18:47.1709117Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1709566Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T03:18:47.1709814Z 109 │ 2026-10-24T03:18:47.1709945Z 110 │ useEffect(() => { 2026-10-24T03:18:47.1710102Z ·  ────┬──── 2026-10-24T03:18:47.1710325Z · ╰── This is the containing effect 2026-10-24T03:18:47.1710550Z 111 │ if (activeCommentTarget === null) { 2026-10-24T03:18:47.1710757Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T03:18:47.1710989Z ·  ────────────────┬─────────────── 2026-10-24T03:18:47.1711285Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1711524Z 113 │ } 2026-10-24T03:18:47.1711643Z ╰──── 2026-10-24T03:18:47.1712314Z  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-24T03:18:47.1713179Z  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-24T03:18:47.1713495Z 2026-10-24T03:18:47.1713702Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1714093Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T03:18:47.1714381Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T03:18:47.1714651Z 108 │ }, [selectedSection?.id]); 2026-10-24T03:18:47.1714931Z ·  ─────────┬───────── 2026-10-24T03:18:47.1715198Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T03:18:47.1715420Z 109 │ 2026-10-24T03:18:47.1715561Z ╰──── 2026-10-24T03:18:47.1715965Z  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-24T03:18:47.1716569Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1717040Z 2026-10-24T03:18:47.1717441Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1717875Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T03:18:47.1718111Z 10577 │ 2026-10-24T03:18:47.1718247Z 10578 │ const layer: Layer.Layer< 2026-10-24T03:18:47.1718416Z ·  ──┬── 2026-10-24T03:18:47.1718636Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.1718870Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T03:18:47.1719034Z ╰──── 2026-10-24T03:18:47.1719202Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1719321Z 2026-10-24T03:18:47.1719560Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T03:18:47.1719964Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T03:18:47.1720210Z 1997 │ assert.equal( 2026-10-24T03:18:47.1720461Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T03:18:47.1720710Z ·  ────── 2026-10-24T03:18:47.1720885Z 1999 │ "authoritative answer", 2026-10-24T03:18:47.1721041Z ╰──── 2026-10-24T03:18:47.1729940Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T03:18:47.1730129Z 2026-10-24T03:18:47.1730616Z ⚠ 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-24T03:18:47.1731214Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T03:18:47.1731588Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T03:18:47.1731987Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T03:18:47.1732302Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1732563Z 3953 │ ╰─▶ } 2026-10-24T03:18:47.1732829Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T03:18:47.1733018Z ╰──── 2026-10-24T03:18:47.1733077Z 2026-10-24T03:18:47.1733550Z ⚠ 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-24T03:18:47.1734293Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T03:18:47.1734690Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T03:18:47.1734987Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T03:18:47.1735354Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1735618Z 6064 │ ╰─▶ } 2026-10-24T03:18:47.1735932Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T03:18:47.1736159Z ╰──── 2026-10-24T03:18:47.1736216Z 2026-10-24T03:18:47.1736735Z ⚠ 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-24T03:18:47.1737436Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T03:18:47.1737703Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T03:18:47.1737996Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T03:18:47.1738288Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1738548Z 6199 │ ╰─▶ } 2026-10-24T03:18:47.1738857Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T03:18:47.1739081Z ╰──── 2026-10-24T03:18:47.1739140Z 2026-10-24T03:18:47.1739348Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1739690Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T03:18:47.1739927Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T03:18:47.1740144Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T03:18:47.1740419Z ·  ──────┬────── ────┬─── 2026-10-24T03:18:47.1740776Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T03:18:47.1741125Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T03:18:47.1741337Z 455 │ const { 2026-10-24T03:18:47.1741463Z ╰──── 2026-10-24T03:18:47.1741822Z  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-24T03:18:47.1742434Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1742736Z 2026-10-24T03:18:47.1742927Z ⚠ react(static-components): Cannot create components during render 2026-10-24T03:18:47.1743256Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T03:18:47.1743468Z 492 │ // same check. 2026-10-24T03:18:47.1743678Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T03:18:47.1743946Z ·  ─────────────┬───────────── 2026-10-24T03:18:47.1744259Z · ╰── The component is created during render here 2026-10-24T03:18:47.1744683Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T03:18:47.1745067Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T03:18:47.1745342Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T03:18:47.1745612Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T03:18:47.1745853Z 498 │ setIsPullRefreshing(true); 2026-10-24T03:18:47.1746038Z 499 │ await refreshSelectedSection(); 2026-10-24T03:18:47.1746223Z 500 │ setIsPullRefreshing(false); 2026-10-24T03:18:47.1746380Z 501 │ }; 2026-10-24T03:18:47.1746593Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T03:18:47.1746956Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T03:18:47.1747226Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T03:18:47.1747442Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T03:18:47.1747643Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T03:18:47.1747824Z 507 │ files: reviewFiles, 2026-10-24T03:18:47.1748015Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T03:18:47.1748269Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T03:18:47.1748477Z 510 │ : undefined, 2026-10-24T03:18:47.1748659Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T03:18:47.1748896Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T03:18:47.1749100Z 513 │ : undefined, 2026-10-24T03:18:47.1749237Z 514 │ }); 2026-10-24T03:18:47.1749503Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T03:18:47.1749839Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T03:18:47.1750056Z 517 │ environmentId, 2026-10-24T03:18:47.1750205Z 518 │ threadId, 2026-10-24T03:18:47.1750347Z 519 │ selectedSection, 2026-10-24T03:18:47.1750506Z 520 │ nativeReviewDiffData, 2026-10-24T03:18:47.1750652Z 521 │ }); 2026-10-24T03:18:47.1750826Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T03:18:47.1751033Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T03:18:47.1751232Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T03:18:47.1751418Z 525 │ diff: selectedSection?.diff, 2026-10-24T03:18:47.1751593Z 526 │ data: nativeReviewDiffData, 2026-10-24T03:18:47.1751764Z 527 │ collapsedFileIds, 2026-10-24T03:18:47.1751914Z 528 │ viewedFileIds, 2026-10-24T03:18:47.1752111Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T03:18:47.1752334Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T03:18:47.1752512Z 531 │ }); 2026-10-24T03:18:47.1752654Z 532 │ const showcaseReviewKey = 2026-10-24T03:18:47.1752883Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T03:18:47.1753241Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T03:18:47.1753517Z 535 │ : null; 2026-10-24T03:18:47.1753761Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T03:18:47.1754018Z 537 │ nativeBridge.onDebug(event); 2026-10-24T03:18:47.1754179Z 538 │ if ( 2026-10-24T03:18:47.1754331Z 539 │ showcaseReviewKey === null || 2026-10-24T03:18:47.1754562Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T03:18:47.1754810Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T03:18:47.1755088Z 542 │ ) { 2026-10-24T03:18:47.1755307Z 543 │ return; 2026-10-24T03:18:47.1755446Z 544 │ } 2026-10-24T03:18:47.1755625Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T03:18:47.1755916Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T03:18:47.1756232Z 547 │ }; 2026-10-24T03:18:47.1756352Z 548 │ 2026-10-24T03:18:47.1756537Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T03:18:47.1756828Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T03:18:47.1757137Z 551 │ commentSelection.clearSelection(); 2026-10-24T03:18:47.1757447Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T03:18:47.1757666Z 553 │ toggleExpandedFile(fileId); 2026-10-24T03:18:47.1757823Z 554 │ } 2026-10-24T03:18:47.1758013Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T03:18:47.1758217Z 556 │ if (!nativeView) return; 2026-10-24T03:18:47.1758402Z 557 │ const result = await settlePromise(() => 2026-10-24T03:18:47.1758694Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T03:18:47.1758933Z 559 │ ); 2026-10-24T03:18:47.1759092Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T03:18:47.1759382Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T03:18:47.1759627Z 562 │ } 2026-10-24T03:18:47.1759745Z 563 │ }; 2026-10-24T03:18:47.1759894Z 564 │ const handleVisibleFileChange = ( 2026-10-24T03:18:47.1760131Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T03:18:47.1760336Z 566 │ ) => { 2026-10-24T03:18:47.1760520Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T03:18:47.1760819Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T03:18:47.1761052Z 569 │ }; 2026-10-24T03:18:47.1761194Z 570 │ const renderInspector = () => ( 2026-10-24T03:18:47.1761366Z 571 │ void handleSelectFile(fileId)} 2026-10-24T03:18:47.1762531Z 577 │ /> 2026-10-24T03:18:47.1762655Z 578 │ ); 2026-10-24T03:18:47.1762771Z 579 │ 2026-10-24T03:18:47.1763119Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T03:18:47.1763509Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T03:18:47.1763683Z 582 │ if (fileId) { 2026-10-24T03:18:47.1763847Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T03:18:47.1764077Z 584 │ toggleExpandedFile(fileId); 2026-10-24T03:18:47.1764258Z 585 │ } 2026-10-24T03:18:47.1764377Z 586 │ }; 2026-10-24T03:18:47.1764496Z 587 │ 2026-10-24T03:18:47.1764645Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T03:18:47.1764875Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T03:18:47.1765065Z 590 │ ) => { 2026-10-24T03:18:47.1765223Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T03:18:47.1765393Z 592 │ if (fileId) { 2026-10-24T03:18:47.1765554Z 593 │ toggleViewedFile(fileId); 2026-10-24T03:18:47.1765791Z 594 │ } 2026-10-24T03:18:47.1765979Z 595 │ }; 2026-10-24T03:18:47.1766101Z 596 │ 2026-10-24T03:18:47.1766242Z 597 │ const parsedDiffNotice = 2026-10-24T03:18:47.1766501Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T03:18:47.1766894Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T03:18:47.1767232Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T03:18:47.1767524Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T03:18:47.1767821Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T03:18:47.1768106Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T03:18:47.1768334Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T03:18:47.1768527Z 605 │ hasCachedSelectedDiff, 2026-10-24T03:18:47.1768692Z 606 │ hasAnyCachedDiff, 2026-10-24T03:18:47.1768839Z 607 │ }); 2026-10-24T03:18:47.1768991Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T03:18:47.1769185Z 609 │ void retryEnvironment(environmentId); 2026-10-24T03:18:47.1769347Z 610 │ }; 2026-10-24T03:18:47.1769495Z 611 │ const handleReturnToThread = () => { 2026-10-24T03:18:47.1769680Z 612 │ if (navigation.canGoBack()) { 2026-10-24T03:18:47.1769848Z 613 │ navigation.goBack(); 2026-10-24T03:18:47.1770003Z 614 │ return; 2026-10-24T03:18:47.1770131Z 615 │ } 2026-10-24T03:18:47.1770281Z 616 │ navigation.navigate("Thread", { 2026-10-24T03:18:47.1770472Z 617 │ environmentId: String(environmentId), 2026-10-24T03:18:47.1770658Z 618 │ threadId: String(threadId), 2026-10-24T03:18:47.1770814Z 619 │ }); 2026-10-24T03:18:47.1770934Z 620 │ }; 2026-10-24T03:18:47.1771083Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T03:18:47.1771333Z 622 │ selectedSection?.title, 2026-10-24T03:18:47.1771509Z 623 │ headerDiffSummary.additions, 2026-10-24T03:18:47.1771691Z 624 │ headerDiffSummary.deletions, 2026-10-24T03:18:47.1771848Z 625 │ ] 2026-10-24T03:18:47.1772017Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T03:18:47.1772201Z 627 │ .join(" · "); 2026-10-24T03:18:47.1772338Z 628 │ 2026-10-24T03:18:47.1772476Z 629 │ const showChangedFilesPane = 2026-10-24T03:18:47.1772651Z 630 │ !showConnectionNotice && 2026-10-24T03:18:47.1772820Z 631 │ selectedSection !== null && 2026-10-24T03:18:47.1772999Z 632 │ parsedDiff.kind === "files" && 2026-10-24T03:18:47.1773182Z 633 │ NativeReviewDiffView !== null; 2026-10-24T03:18:47.1773567Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T03:18:47.1774040Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T03:18:47.1774278Z 636 │ 2026-10-24T03:18:47.1774416Z 637 │ const listHeader = (() => { 2026-10-24T03:18:47.1774668Z 638 │ const children: ReactElement[] = []; 2026-10-24T03:18:47.1774828Z 639 │ 2026-10-24T03:18:47.1774949Z 640 │ if (error) { 2026-10-24T03:18:47.1775099Z 641 │ children.push( 2026-10-24T03:18:47.1775246Z 642 │ 2026-10-24T03:18:47.1776576Z 649 │ Review unavailable 2026-10-24T03:18:47.1777059Z 650 │ {error} 2026-10-24T03:18:47.1777287Z 651 │ , 2026-10-24T03:18:47.1777423Z 652 │ ); 2026-10-24T03:18:47.1777543Z 653 │ } 2026-10-24T03:18:47.1777663Z 654 │ 2026-10-24T03:18:47.1777795Z 655 │ if (parsedDiffNotice) { 2026-10-24T03:18:47.1778048Z 656 │ children.push(); 2026-10-24T03:18:47.1778275Z 657 │ } 2026-10-24T03:18:47.1778392Z 658 │ 2026-10-24T03:18:47.1778529Z 659 │ if (children.length === 0) { 2026-10-24T03:18:47.1778694Z 660 │ return null; 2026-10-24T03:18:47.1778835Z 661 │ } 2026-10-24T03:18:47.1778957Z 662 │ 2026-10-24T03:18:47.1779089Z 663 │ return <>{children}; 2026-10-24T03:18:47.1779237Z 664 │ })(); 2026-10-24T03:18:47.1779375Z 665 │ const headerSubtitle = [ 2026-10-24T03:18:47.1779549Z 666 │ headerDiffSummary.additions, 2026-10-24T03:18:47.1779727Z 667 │ headerDiffSummary.deletions, 2026-10-24T03:18:47.1779910Z 668 │ pendingReviewCommentCount > 0 2026-10-24T03:18:47.1780188Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T03:18:47.1780430Z 670 │ : null, 2026-10-24T03:18:47.1780559Z 671 │ ] 2026-10-24T03:18:47.1780687Z 672 │ .filter(Boolean) 2026-10-24T03:18:47.1780839Z 673 │ .join(" · "); 2026-10-24T03:18:47.1781057Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T03:18:47.1781261Z 675 │ 2026-10-24T03:18:47.1781386Z 676 │ return ( 2026-10-24T03:18:47.1781520Z 677 │ <> 2026-10-24T03:18:47.1781652Z 678 │ 2026-10-24T03:18:47.1784923Z 694 │ 2026-10-24T03:18:47.1785054Z 695 │ 2026-10-24T03:18:47.1785263Z 696 │ 2026-10-24T03:18:47.1785480Z 697 │ {showConnectionNotice ? ( 2026-10-24T03:18:47.1785724Z 698 │ 2026-10-24T03:18:47.1785970Z 699 │ 2026-10-24T03:18:47.1788393Z 711 │ 2026-10-24T03:18:47.1788633Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T03:18:47.1788864Z 713 │ 2026-10-24T03:18:47.1789860Z 719 │ 2026-10-24T03:18:47.1790636Z 723 │ {listHeader} 2026-10-24T03:18:47.1790850Z 724 │ 2026-10-24T03:18:47.1791068Z 725 │ ( 2026-10-24T03:18:47.1794402Z 223 │ 2026-10-24T03:18:47.1794626Z ·  ─────────────── 2026-10-24T03:18:47.1794842Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T03:18:47.1795053Z ╰──── 2026-10-24T03:18:47.1795277Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T03:18:47.1795435Z 2026-10-24T03:18:47.1795633Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.1795982Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T03:18:47.1796222Z 226 │ { 2026-10-24T03:18:47.1800757Z ·  ────┬──── 2026-10-24T03:18:47.1800895Z · ╰── This is the containing effect 2026-10-24T03:18:47.1800964Z 57 │ scheduler.reset(); 2026-10-24T03:18:47.1801065Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T03:18:47.1801151Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T03:18:47.1801271Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T03:18:47.1801436Z ·  ───────┬─────── 2026-10-24T03:18:47.1801706Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1801823Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T03:18:47.1801876Z ╰──── 2026-10-24T03:18:47.1802586Z  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-24T03:18:47.1802927Z  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-24T03:18:47.1802930Z 2026-10-24T03:18:47.1803143Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1803321Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T03:18:47.1803405Z 62 │ return () => scheduler.cancel(); 2026-10-24T03:18:47.1803509Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T03:18:47.1803640Z ·  ───┬─── ─────┬───── 2026-10-24T03:18:47.1803841Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T03:18:47.1803984Z · ╰── Unnecessary dependency `enabled` 2026-10-24T03:18:47.1804039Z 64 │ 2026-10-24T03:18:47.1804092Z ╰──── 2026-10-24T03:18:47.1804396Z  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-24T03:18:47.1804719Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1804724Z 2026-10-24T03:18:47.1804897Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.1805049Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T03:18:47.1805105Z 465 │ 2026-10-24T03:18:47.1805214Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T03:18:47.1805289Z ·  ── 2026-10-24T03:18:47.1805345Z 467 │ } 2026-10-24T03:18:47.1805399Z ╰──── 2026-10-24T03:18:47.1805642Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.1805647Z 2026-10-24T03:18:47.1806121Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1806381Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T03:18:47.1806461Z 100 │ 2026-10-24T03:18:47.1806559Z 101 │ useEffect(() => { 2026-10-24T03:18:47.1806699Z ·  ────┬──── 2026-10-24T03:18:47.1806861Z · ╰── This is the containing effect 2026-10-24T03:18:47.1806966Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T03:18:47.1807052Z 103 │ setHighlightedLinesById({}); 2026-10-24T03:18:47.1807148Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1807430Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1807570Z 104 │ return; 2026-10-24T03:18:47.1807648Z ╰──── 2026-10-24T03:18:47.1808346Z  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-24T03:18:47.1808756Z  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-24T03:18:47.1808759Z 2026-10-24T03:18:47.1809039Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1809186Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T03:18:47.1809242Z 913 │ 2026-10-24T03:18:47.1809437Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T03:18:47.1809518Z ·  ─────┬───── 2026-10-24T03:18:47.1809659Z · ╰── 'layerDaemon' is declared here 2026-10-24T03:18:47.1809747Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T03:18:47.1809801Z ╰──── 2026-10-24T03:18:47.1809910Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1809912Z 2026-10-24T03:18:47.1810122Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T03:18:47.1810286Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T03:18:47.1810383Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T03:18:47.1810507Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T03:18:47.1810592Z ·  ─────┬───── 2026-10-24T03:18:47.1810735Z · ╰── 'HostProcess' is imported here 2026-10-24T03:18:47.1810790Z 26 │ 2026-10-24T03:18:47.1810844Z ╰──── 2026-10-24T03:18:47.1810946Z  help: Consider removing this import. 2026-10-24T03:18:47.1810949Z 2026-10-24T03:18:47.1811227Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1811393Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T03:18:47.1811476Z 123 │ const path = yield* Path.Path; 2026-10-24T03:18:47.1811671Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T03:18:47.1811807Z ·  ──────┬───── 2026-10-24T03:18:47.1811977Z · ╰── 'serverConfig' is declared here 2026-10-24T03:18:47.1812121Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T03:18:47.1812175Z ╰──── 2026-10-24T03:18:47.1812279Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1812282Z 2026-10-24T03:18:47.1812605Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1812802Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T03:18:47.1812919Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T03:18:47.1813066Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T03:18:47.1813154Z ·  ───────┬────── 2026-10-24T03:18:47.1813304Z · ╰── 'serverSettings' is declared here 2026-10-24T03:18:47.1813442Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T03:18:47.1813495Z ╰──── 2026-10-24T03:18:47.1813597Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1813599Z 2026-10-24T03:18:47.1813792Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1813968Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T03:18:47.1814052Z 554 │ assert.deepStrictEqual( 2026-10-24T03:18:47.1814225Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T03:18:47.1814353Z ·  ┬ 2026-10-24T03:18:47.1814526Z · ╰── '_' is declared here 2026-10-24T03:18:47.1814590Z 556 │ [ 2026-10-24T03:18:47.1814641Z ╰──── 2026-10-24T03:18:47.1814747Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1814750Z 2026-10-24T03:18:47.1814939Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1815117Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T03:18:47.1815200Z 1154 │ assert.deepStrictEqual( 2026-10-24T03:18:47.1815375Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T03:18:47.1815503Z ·  ┬ 2026-10-24T03:18:47.1815671Z · ╰── '_' is declared here 2026-10-24T03:18:47.1815735Z 1156 │ [ 2026-10-24T03:18:47.1815786Z ╰──── 2026-10-24T03:18:47.1815889Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1815892Z 2026-10-24T03:18:47.1816118Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:18:47.1816256Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T03:18:47.1816324Z 1021 │ instanceId, 2026-10-24T03:18:47.1816553Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T03:18:47.1816821Z ·  ────────────────────────────────────────────────── 2026-10-24T03:18:47.1816885Z 1023 │ ]), 2026-10-24T03:18:47.1816937Z ╰──── 2026-10-24T03:18:47.1817209Z  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-24T03:18:47.1817212Z 2026-10-24T03:18:47.1817455Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T03:18:47.1817688Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T03:18:47.1817743Z 1397 │ 2026-10-24T03:18:47.1817835Z 1398 │ function assertUserMessagesExclude( 2026-10-24T03:18:47.1817940Z ·  ────────────┬──────────── 2026-10-24T03:18:47.1818119Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T03:18:47.1818233Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T03:18:47.1818287Z ╰──── 2026-10-24T03:18:47.1818390Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1818393Z 2026-10-24T03:18:47.1818609Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:18:47.1818735Z ╭─[apps/mobile/src/lib/markdownDocument.ts:278:28] 2026-10-24T03:18:47.1818841Z 277 │ visit(parser.parse(markdown), false, false); 2026-10-24T03:18:47.1818928Z 278 │ for (const edit of edits.reverse()) 2026-10-24T03:18:47.1819027Z ·  ─────── 2026-10-24T03:18:47.1819196Z 279 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T03:18:47.1819253Z ╰──── 2026-10-24T03:18:47.1819529Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:18:47.1819532Z 2026-10-24T03:18:47.1819726Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T03:18:47.1819845Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T03:18:47.1819903Z 7 │ () => 2026-10-24T03:18:47.1819971Z 8 │ Gesture.Hover() 2026-10-24T03:18:47.1820052Z ·  ──┬── 2026-10-24T03:18:47.1820192Z · ╰── `Hover` may be a component 2026-10-24T03:18:47.1820266Z 9 │ .manualActivation(true) 2026-10-24T03:18:47.1820320Z ╰──── 2026-10-24T03:18:47.1820619Z  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-24T03:18:47.1821087Z  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-24T03:18:47.1821090Z 2026-10-24T03:18:47.1821400Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1821567Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T03:18:47.1821622Z 345 │ 2026-10-24T03:18:47.1821728Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T03:18:47.1821895Z ·  ────────────┬─────────── 2026-10-24T03:18:47.1822154Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T03:18:47.1822234Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T03:18:47.1822288Z ╰──── 2026-10-24T03:18:47.1822391Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1822397Z 2026-10-24T03:18:47.1822623Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:18:47.1822790Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T03:18:47.1822892Z 20 │ [instanceId]: { 2026-10-24T03:18:47.1822981Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T03:18:47.1823085Z ·  ──────────────────────────── 2026-10-24T03:18:47.1823156Z 22 │ [model]: options, 2026-10-24T03:18:47.1823216Z ╰──── 2026-10-24T03:18:47.1823490Z  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-24T03:18:47.1823495Z 2026-10-24T03:18:47.1823753Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1823918Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T03:18:47.1823973Z 412 │ 2026-10-24T03:18:47.1824102Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T03:18:47.1824173Z ·  ──┬── 2026-10-24T03:18:47.1824300Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.1824354Z ╰──── 2026-10-24T03:18:47.1824465Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1824470Z 2026-10-24T03:18:47.1824642Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.1824777Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T03:18:47.1824900Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T03:18:47.1824996Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T03:18:47.1825086Z ·  ─────┬──── 2026-10-24T03:18:47.1825234Z · ╰── Cannot call impure function 2026-10-24T03:18:47.1825342Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T03:18:47.1825397Z ╰──── 2026-10-24T03:18:47.1825683Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.1825991Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.1825993Z 2026-10-24T03:18:47.1826164Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T03:18:47.1826325Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T03:18:47.1826382Z 1525 │ 2026-10-24T03:18:47.1826448Z 1526 │ for (const [] of [ 2026-10-24T03:18:47.1826523Z ·  ── 2026-10-24T03:18:47.1826598Z 1527 │ ["github", "github.com"], 2026-10-24T03:18:47.1826651Z ╰──── 2026-10-24T03:18:47.1827059Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T03:18:47.1827110Z 2026-10-24T03:18:47.1827368Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.1827517Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T03:18:47.1827608Z 35 │ 0 ? value : null; 2026-10-24T03:18:47.1829100Z ╰──── 2026-10-24T03:18:47.1829208Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1829210Z 2026-10-24T03:18:47.1829418Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1829536Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T03:18:47.1829616Z 28 │ getPendingThreadOrder(); 2026-10-24T03:18:47.1829703Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T03:18:47.1829833Z ·  ────┬──── ───────┬────── 2026-10-24T03:18:47.1830029Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T03:18:47.1830170Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T03:18:47.1830239Z 30 │ return pending; 2026-10-24T03:18:47.1830293Z ╰──── 2026-10-24T03:18:47.1830601Z  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-24T03:18:47.1830930Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1830938Z 2026-10-24T03:18:47.1831212Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1831334Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T03:18:47.1831390Z 168 │ 2026-10-24T03:18:47.1831471Z 169 │ const layerTest = Layer.succeed( 2026-10-24T03:18:47.1831545Z ·  ────┬──── 2026-10-24T03:18:47.1831681Z · ╰── 'layerTest' is declared here 2026-10-24T03:18:47.1831748Z 170 │ UsageService, 2026-10-24T03:18:47.1831799Z ╰──── 2026-10-24T03:18:47.1831905Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1831908Z 2026-10-24T03:18:47.1832189Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1832407Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T03:18:47.1832543Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T03:18:47.1832634Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T03:18:47.1832740Z ·  ───────┬────── 2026-10-24T03:18:47.1832912Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T03:18:47.1833088Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T03:18:47.1833167Z ╰──── 2026-10-24T03:18:47.1833478Z  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-24T03:18:47.1833804Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1833808Z 2026-10-24T03:18:47.1833981Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.1834111Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T03:18:47.1834201Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T03:18:47.1834364Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T03:18:47.1834489Z ·  ─────┬──── 2026-10-24T03:18:47.1834661Z · ╰── Cannot call impure function 2026-10-24T03:18:47.1834740Z 525 │ const id = setTimeout(() => { 2026-10-24T03:18:47.1834801Z ╰──── 2026-10-24T03:18:47.1835093Z  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-24T03:18:47.1835401Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.1835404Z 2026-10-24T03:18:47.1835607Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1835753Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T03:18:47.1835836Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T03:18:47.1835900Z 1315 │ retryTick, 2026-10-24T03:18:47.1835972Z ·  ────┬──── 2026-10-24T03:18:47.1836191Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T03:18:47.1836310Z 1316 │ restoreQueuedMessage, 2026-10-24T03:18:47.1836391Z ╰──── 2026-10-24T03:18:47.1836808Z  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-24T03:18:47.1837201Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1837204Z 2026-10-24T03:18:47.1837698Z ⚠ 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-24T03:18:47.1837837Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-24T03:18:47.1837942Z 2382 │ let orphanedAt: number | undefined; 2026-10-24T03:18:47.1838185Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T03:18:47.1838315Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-24T03:18:47.1838472Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T03:18:47.1838609Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T03:18:47.1838709Z 2387 │ │ flush: () => { 2026-10-24T03:18:47.1838838Z 2388 │ │ let task: (() => void) | undefined; 2026-10-24T03:18:47.1838991Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T03:18:47.1839083Z 2390 │ │ }, 2026-10-24T03:18:47.1839167Z 2391 │ │ }; 2026-10-24T03:18:47.1839241Z 2392 │ │ 2026-10-24T03:18:47.1839406Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T03:18:47.1839516Z 2394 │ │ let requestChecks = 0; 2026-10-24T03:18:47.1839650Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T03:18:47.1839760Z 2396 │ │ executionMode: "async", 2026-10-24T03:18:47.1839884Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-24T03:18:47.1840002Z 2398 │ │ shouldYield: (fiber) => { 2026-10-24T03:18:47.1840145Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-24T03:18:47.1840255Z 2400 │ │ requestChecks += 1; 2026-10-24T03:18:47.1840402Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T03:18:47.1840521Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-24T03:18:47.1840622Z 2403 │ │ return true; 2026-10-24T03:18:47.1840703Z 2404 │ │ }, 2026-10-24T03:18:47.1840787Z 2405 │ │ }; 2026-10-24T03:18:47.1840859Z 2406 │ │ 2026-10-24T03:18:47.1840986Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-24T03:18:47.1841079Z 2408 │ │ ...WINDOW, 2026-10-24T03:18:47.1841211Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T03:18:47.1841485Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T03:18:47.1841632Z 2411 │ │ }; 2026-10-24T03:18:47.1841770Z 2412 │ │ const first = yield* service 2026-10-24T03:18:47.1841882Z 2413 │ │ .readSummary(input) 2026-10-24T03:18:47.1841974Z 2414 │ │ .pipe( 2026-10-24T03:18:47.1842075Z 2415 │ │ Effect.exit, 2026-10-24T03:18:47.1842235Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T03:18:47.1842361Z 2417 │ │ Effect.forkChild, 2026-10-24T03:18:47.1842490Z 2418 │ │ ); 2026-10-24T03:18:47.1842609Z 2419 │ │ requestFiber = first; 2026-10-24T03:18:47.1842719Z 2420 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1842825Z 2421 │ │ dispatcher.flush(); 2026-10-24T03:18:47.1842898Z 2422 │ │ 2026-10-24T03:18:47.1843057Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T03:18:47.1843154Z 2424 │ │ Effect.match({ 2026-10-24T03:18:47.1843282Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-24T03:18:47.1843410Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-24T03:18:47.1843499Z 2427 │ │ }), 2026-10-24T03:18:47.1843654Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T03:18:47.1843764Z 2429 │ │ Effect.forkChild, 2026-10-24T03:18:47.1843851Z 2430 │ │ ); 2026-10-24T03:18:47.1843960Z 2431 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1844063Z 2432 │ │ dispatcher.flush(); 2026-10-24T03:18:47.1844195Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T03:18:47.1844318Z 2434 │ │ if (secondExit === undefined) { 2026-10-24T03:18:47.1844437Z 2435 │ │ second.interruptUnsafe(); 2026-10-24T03:18:47.1844550Z 2436 │ │ orphanedAt = interruptAt; 2026-10-24T03:18:47.1844642Z 2437 │ │ break; 2026-10-24T03:18:47.1844725Z 2438 │ │ } 2026-10-24T03:18:47.1844855Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T03:18:47.1845017Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T03:18:47.1845100Z 2441 │ │ } 2026-10-24T03:18:47.1845255Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T03:18:47.1845399Z 2443 │ ╰─▶ } 2026-10-24T03:18:47.1845457Z 2444 │ 2026-10-24T03:18:47.1845513Z ╰──── 2026-10-24T03:18:47.1845516Z 2026-10-24T03:18:47.1845668Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1845917Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T03:18:47.1845977Z 493 │ > 2026-10-24T03:18:47.1846162Z 494 │ {props.children(close)} 2026-10-24T03:18:47.1846351Z ·  ──┬── 2026-10-24T03:18:47.1846556Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.1846635Z 495 │ 2026-10-24T03:18:47.1846739Z ╰──── 2026-10-24T03:18:47.1847385Z  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-24T03:18:47.1847686Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1847689Z 2026-10-24T03:18:47.1847992Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1848126Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T03:18:47.1848183Z 217 │ 2026-10-24T03:18:47.1848339Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T03:18:47.1848435Z ·  ──────────┬────────── 2026-10-24T03:18:47.1848597Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T03:18:47.1848793Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T03:18:47.1848848Z ╰──── 2026-10-24T03:18:47.1848956Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1848958Z 2026-10-24T03:18:47.1849278Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1849411Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T03:18:47.1849467Z 220 │ 2026-10-24T03:18:47.1849606Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T03:18:47.1849712Z ·  ──────────────┬────────────── 2026-10-24T03:18:47.1849897Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T03:18:47.1850064Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T03:18:47.1850120Z ╰──── 2026-10-24T03:18:47.1850226Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1850228Z 2026-10-24T03:18:47.1850454Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T03:18:47.1850566Z ╭─[apps/mobile/src/Stack.tsx:1074:21] 2026-10-24T03:18:47.1850632Z 1073 │ } 2026-10-24T03:18:47.1850911Z ·  ───────────────────────────────────────────── 2026-10-24T03:18:47.1850984Z 1075 │ screenListeners={{ 2026-10-24T03:18:47.1851040Z ╰──── 2026-10-24T03:18:47.1851409Z  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-24T03:18:47.1851411Z 2026-10-24T03:18:47.1851568Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T03:18:47.1851788Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T03:18:47.1851983Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T03:18:47.1852088Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T03:18:47.1852186Z ·  ───────────────────────────── 2026-10-24T03:18:47.1852317Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T03:18:47.1852373Z ╰──── 2026-10-24T03:18:47.1852538Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T03:18:47.1852541Z 2026-10-24T03:18:47.1852884Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1853021Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T03:18:47.1853140Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T03:18:47.1853213Z 84 │ useEffect(() => { 2026-10-24T03:18:47.1853285Z ·  ────┬──── 2026-10-24T03:18:47.1853422Z · ╰── This is the containing effect 2026-10-24T03:18:47.1853515Z 85 │ if (!actionState.isRunning) return; 2026-10-24T03:18:47.1853588Z 86 │ setNowMs(Date.now()); 2026-10-24T03:18:47.1853659Z ·  ────┬─── 2026-10-24T03:18:47.1853834Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1853965Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T03:18:47.1854020Z ╰──── 2026-10-24T03:18:47.1854658Z  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-24T03:18:47.1854996Z  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-24T03:18:47.1854999Z 2026-10-24T03:18:47.1855194Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1855339Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T03:18:47.1855511Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T03:18:47.1855602Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T03:18:47.1855692Z ·  ┬ 2026-10-24T03:18:47.1855832Z · ╰── '_' is declared here 2026-10-24T03:18:47.1855940Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T03:18:47.1855994Z ╰──── 2026-10-24T03:18:47.1856100Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1856103Z 2026-10-24T03:18:47.1856293Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1856435Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T03:18:47.1856494Z 133 │ ); 2026-10-24T03:18:47.1856602Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T03:18:47.1856757Z ·  ┬ 2026-10-24T03:18:47.1856988Z · ╰── '_' is declared here 2026-10-24T03:18:47.1857151Z 135 │ Effect.succeed( 2026-10-24T03:18:47.1857244Z ╰──── 2026-10-24T03:18:47.1857393Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1857396Z 2026-10-24T03:18:47.1857586Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1857726Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T03:18:47.1857782Z 177 │ }); 2026-10-24T03:18:47.1857885Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T03:18:47.1857976Z ·  ┬ 2026-10-24T03:18:47.1858189Z · ╰── '_' is declared here 2026-10-24T03:18:47.1858291Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T03:18:47.1858346Z ╰──── 2026-10-24T03:18:47.1858455Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1858460Z 2026-10-24T03:18:47.1858648Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1858783Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T03:18:47.1858841Z 202 │ ); 2026-10-24T03:18:47.1858942Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T03:18:47.1859035Z ·  ┬ 2026-10-24T03:18:47.1859175Z · ╰── '_' is declared here 2026-10-24T03:18:47.1859259Z 204 │ options.removeWorktreeFails 2026-10-24T03:18:47.1859314Z ╰──── 2026-10-24T03:18:47.1859416Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1859419Z 2026-10-24T03:18:47.1859605Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1859745Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T03:18:47.1859802Z 207 │ ); 2026-10-24T03:18:47.1859907Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T03:18:47.1860001Z ·  ┬ 2026-10-24T03:18:47.1860145Z · ╰── '_' is declared here 2026-10-24T03:18:47.1860233Z 209 │ options.deleteLocalBranchFails 2026-10-24T03:18:47.1860287Z ╰──── 2026-10-24T03:18:47.1860385Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1860388Z 2026-10-24T03:18:47.1860575Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1860791Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T03:18:47.1860900Z 212 │ ); 2026-10-24T03:18:47.1861044Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T03:18:47.1861148Z ·  ┬ 2026-10-24T03:18:47.1861295Z · ╰── '_' is declared here 2026-10-24T03:18:47.1861384Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T03:18:47.1861436Z ╰──── 2026-10-24T03:18:47.1861539Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1861542Z 2026-10-24T03:18:47.1861805Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1861946Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T03:18:47.1862000Z 253 │ ); 2026-10-24T03:18:47.1862101Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T03:18:47.1862196Z ·  ┬ 2026-10-24T03:18:47.1862335Z · ╰── '_' is declared here 2026-10-24T03:18:47.1862403Z 255 │ Effect.succeed({ 2026-10-24T03:18:47.1862459Z ╰──── 2026-10-24T03:18:47.1862562Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1862564Z 2026-10-24T03:18:47.1862749Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:18:47.1862883Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T03:18:47.1862941Z 263 │ ); 2026-10-24T03:18:47.1863097Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T03:18:47.1863191Z ·  ┬ 2026-10-24T03:18:47.1863335Z · ╰── '_' is declared here 2026-10-24T03:18:47.1863489Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T03:18:47.1863545Z ╰──── 2026-10-24T03:18:47.1863647Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1863650Z 2026-10-24T03:18:47.1863797Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1863921Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T03:18:47.1863991Z 184 │ "options", 2026-10-24T03:18:47.1864090Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T03:18:47.1864201Z ·  ────────────────┬─────────────── 2026-10-24T03:18:47.1864410Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1864512Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T03:18:47.1864567Z ╰──── 2026-10-24T03:18:47.1865044Z  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-24T03:18:47.1865347Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1865350Z 2026-10-24T03:18:47.1865499Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1865619Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T03:18:47.1865794Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T03:18:47.1865958Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T03:18:47.1866091Z ·  ────────────────┬──────────────── 2026-10-24T03:18:47.1866292Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1866387Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T03:18:47.1866439Z ╰──── 2026-10-24T03:18:47.1867039Z  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-24T03:18:47.1867335Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1867343Z 2026-10-24T03:18:47.1867545Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T03:18:47.1867695Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T03:18:47.1867835Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T03:18:47.1867957Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T03:18:47.1868034Z ·  ──┬── 2026-10-24T03:18:47.1868167Z · ╰── 'Image' is imported here 2026-10-24T03:18:47.1868221Z 18 │ 2026-10-24T03:18:47.1868277Z ╰──── 2026-10-24T03:18:47.1868379Z  help: Consider removing this import. 2026-10-24T03:18:47.1868382Z 2026-10-24T03:18:47.1868600Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:18:47.1868748Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T03:18:47.1868918Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T03:18:47.1869012Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1869109Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1869605Z · ╰── 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-24T03:18:47.1869680Z 227 │ mostRecentEventCount, 2026-10-24T03:18:47.1869740Z 228 │ ); 2026-10-24T03:18:47.1869868Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T03:18:47.1870019Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T03:18:47.1870226Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1870315Z 230 │ const assumedValue = props.value; 2026-10-24T03:18:47.1870371Z ╰──── 2026-10-24T03:18:47.1870545Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:18:47.1870860Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1870863Z 2026-10-24T03:18:47.1871083Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.1871302Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T03:18:47.1871580Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T03:18:47.1871670Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1871767Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1872309Z · ╰── 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-24T03:18:47.1872393Z 238 │ controlledEventCount, 2026-10-24T03:18:47.1872463Z 239 │ assumedValue, 2026-10-24T03:18:47.1872519Z 240 │ ); 2026-10-24T03:18:47.1872678Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T03:18:47.1872827Z ·  ───────────┬────────── 2026-10-24T03:18:47.1873050Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T03:18:47.1873140Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T03:18:47.1873195Z ╰──── 2026-10-24T03:18:47.1873620Z  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-24T03:18:47.1873943Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1873946Z 2026-10-24T03:18:47.1874091Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1874245Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T03:18:47.1874378Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:18:47.1874497Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:18:47.1874621Z ·  ─────────────┬──────────── 2026-10-24T03:18:47.1874792Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.1874852Z 163 │ }); 2026-10-24T03:18:47.1874909Z ╰──── 2026-10-24T03:18:47.1875390Z  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-24T03:18:47.1875688Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1875693Z 2026-10-24T03:18:47.1875842Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1875990Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T03:18:47.1876119Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:18:47.1876234Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:18:47.1876358Z ·  ─────────────┬──────────── 2026-10-24T03:18:47.1876573Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1876761Z 163 │ }); 2026-10-24T03:18:47.1876867Z ╰──── 2026-10-24T03:18:47.1877389Z  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-24T03:18:47.1877761Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1877765Z 2026-10-24T03:18:47.1877913Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1878059Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T03:18:47.1878116Z 163 │ }); 2026-10-24T03:18:47.1878211Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T03:18:47.1878344Z ·  ─────────┬────────────┬─── 2026-10-24T03:18:47.1878544Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.1878663Z · ╰── This value is a ref 2026-10-24T03:18:47.1878739Z 165 │ return JSON.stringify( 2026-10-24T03:18:47.1878793Z ╰──── 2026-10-24T03:18:47.1879261Z  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-24T03:18:47.1879555Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1879557Z 2026-10-24T03:18:47.1879708Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1879857Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T03:18:47.1879932Z 205 │ mostRecentEventCount, 2026-10-24T03:18:47.1880023Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1880131Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.1880325Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1880383Z 207 │ ); 2026-10-24T03:18:47.1880437Z ╰──── 2026-10-24T03:18:47.1880908Z  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-24T03:18:47.1881214Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1881216Z 2026-10-24T03:18:47.1881364Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1881509Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T03:18:47.1881581Z 211 │ mostRecentEventCount, 2026-10-24T03:18:47.1881668Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1881774Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.1881970Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1882027Z 213 │ ); 2026-10-24T03:18:47.1882078Z ╰──── 2026-10-24T03:18:47.1882638Z  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-24T03:18:47.1883034Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1883037Z 2026-10-24T03:18:47.1883233Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:18:47.1883382Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T03:18:47.1883526Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:18:47.1883693Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:18:47.1883813Z ·  ─────────┬──────── 2026-10-24T03:18:47.1888011Z · ╰── 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-24T03:18:47.1888096Z 163 │ }); 2026-10-24T03:18:47.1888192Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T03:18:47.1888265Z 165 │ return JSON.stringify( 2026-10-24T03:18:47.1888434Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T03:18:47.1888503Z 167 │ const record = 2026-10-24T03:18:47.1888582Z 168 │ token.type === "context" 2026-10-24T03:18:47.1888761Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T03:18:47.1888832Z 170 │ : undefined; 2026-10-24T03:18:47.1888942Z 171 │ const presentation = contextChipPresentation( 2026-10-24T03:18:47.1889054Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T03:18:47.1889120Z 173 │ record, 2026-10-24T03:18:47.1889181Z 174 │ ); 2026-10-24T03:18:47.1889267Z 175 │ const icon = contextChipIcon( 2026-10-24T03:18:47.1889334Z 176 │ presentation, 2026-10-24T03:18:47.1889482Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T03:18:47.1889542Z 178 │ ); 2026-10-24T03:18:47.1889604Z 179 │ return { 2026-10-24T03:18:47.1889675Z 180 │ type: token.type, 2026-10-24T03:18:47.1889750Z 181 │ source: token.source, 2026-10-24T03:18:47.1889822Z 182 │ start: token.start, 2026-10-24T03:18:47.1890020Z 183 │ end: token.end, 2026-10-24T03:18:47.1890283Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T03:18:47.1890345Z 185 │ label: 2026-10-24T03:18:47.1890425Z 186 │ token.type === "skill" 2026-10-24T03:18:47.1890535Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T03:18:47.1890619Z 188 │ : token.type === "context" 2026-10-24T03:18:47.1890870Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T03:18:47.1891000Z 190 │ : basename(token.value), 2026-10-24T03:18:47.1891170Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T03:18:47.1891264Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T03:18:47.1891359Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T03:18:47.1891422Z 194 │ }; 2026-10-24T03:18:47.1891482Z 195 │ }), 2026-10-24T03:18:47.1891538Z 196 │ ); 2026-10-24T03:18:47.1891676Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T03:18:47.1891839Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T03:18:47.1892056Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1892197Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T03:18:47.1892254Z ╰──── 2026-10-24T03:18:47.1892468Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:18:47.1892804Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1892812Z 2026-10-24T03:18:47.1893008Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:18:47.1893157Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T03:18:47.1893291Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T03:18:47.1893397Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T03:18:47.1893490Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1893981Z · ╰── 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-24T03:18:47.1894081Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T03:18:47.1894145Z 254 │ value, 2026-10-24T03:18:47.1894226Z 255 │ selection: nextSelection, 2026-10-24T03:18:47.1894284Z 256 │ }); 2026-10-24T03:18:47.1894370Z 257 │ return acknowledgedEventCount; 2026-10-24T03:18:47.1894428Z 258 │ }, 2026-10-24T03:18:47.1894483Z 259 │ [], 2026-10-24T03:18:47.1894556Z ·  ─┬ 2026-10-24T03:18:47.1894743Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1894800Z 260 │ ); 2026-10-24T03:18:47.1894852Z ╰──── 2026-10-24T03:18:47.1895064Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:18:47.1895469Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1895505Z 2026-10-24T03:18:47.1895771Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:18:47.1895914Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T03:18:47.1896076Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T03:18:47.1896170Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1896266Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1896935Z · ╰── 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-24T03:18:47.1897045Z 229 │ mostRecentEventCount, 2026-10-24T03:18:47.1897105Z 230 │ ); 2026-10-24T03:18:47.1897233Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T03:18:47.1897372Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T03:18:47.1897576Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1897663Z 232 │ const assumedValue = props.value; 2026-10-24T03:18:47.1897718Z ╰──── 2026-10-24T03:18:47.1897889Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:18:47.1898216Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1898228Z 2026-10-24T03:18:47.1898453Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.1898594Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T03:18:47.1898743Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T03:18:47.1898835Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1898927Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1899406Z · ╰── 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-24T03:18:47.1899481Z 240 │ controlledEventCount, 2026-10-24T03:18:47.1899554Z 241 │ assumedValue, 2026-10-24T03:18:47.1899613Z 242 │ ); 2026-10-24T03:18:47.1899772Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T03:18:47.1899913Z ·  ───────────┬────────── 2026-10-24T03:18:47.1900129Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T03:18:47.1900219Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T03:18:47.1900273Z ╰──── 2026-10-24T03:18:47.1900714Z  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-24T03:18:47.1901116Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1901154Z 2026-10-24T03:18:47.1901362Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1901502Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T03:18:47.1901629Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:18:47.1901746Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:18:47.1901869Z ·  ─────────────┬──────────── 2026-10-24T03:18:47.1902096Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.1902171Z 165 │ }); 2026-10-24T03:18:47.1902226Z ╰──── 2026-10-24T03:18:47.1902707Z  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-24T03:18:47.1903007Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1903012Z 2026-10-24T03:18:47.1903159Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1903300Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T03:18:47.1903425Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:18:47.1903539Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:18:47.1903661Z ·  ─────────────┬──────────── 2026-10-24T03:18:47.1903875Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1903934Z 165 │ }); 2026-10-24T03:18:47.1903988Z ╰──── 2026-10-24T03:18:47.1904455Z  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-24T03:18:47.1904759Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1904761Z 2026-10-24T03:18:47.1904907Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1905049Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T03:18:47.1905110Z 165 │ }); 2026-10-24T03:18:47.1905200Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T03:18:47.1905328Z ·  ─────────┬────────────┬─── 2026-10-24T03:18:47.1905522Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.1905640Z · ╰── This value is a ref 2026-10-24T03:18:47.1905713Z 167 │ return JSON.stringify( 2026-10-24T03:18:47.1905782Z ╰──── 2026-10-24T03:18:47.1906329Z  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-24T03:18:47.1906788Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1906791Z 2026-10-24T03:18:47.1907018Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1907197Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T03:18:47.1907310Z 207 │ mostRecentEventCount, 2026-10-24T03:18:47.1907410Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1907517Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.1907711Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1907770Z 209 │ ); 2026-10-24T03:18:47.1907825Z ╰──── 2026-10-24T03:18:47.1908311Z  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-24T03:18:47.1908613Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1908615Z 2026-10-24T03:18:47.1908762Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1908900Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T03:18:47.1908972Z 213 │ mostRecentEventCount, 2026-10-24T03:18:47.1909059Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T03:18:47.1909169Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.1909365Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1909423Z 215 │ ); 2026-10-24T03:18:47.1909475Z ╰──── 2026-10-24T03:18:47.1909939Z  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-24T03:18:47.1910233Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1910236Z 2026-10-24T03:18:47.1910431Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:18:47.1910641Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T03:18:47.1910844Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:18:47.1910962Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:18:47.1911077Z ·  ─────────┬──────── 2026-10-24T03:18:47.1911623Z · ╰── 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-24T03:18:47.1911692Z 165 │ }); 2026-10-24T03:18:47.1911786Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T03:18:47.1911857Z 167 │ return JSON.stringify( 2026-10-24T03:18:47.1912031Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T03:18:47.1912101Z 169 │ const record = 2026-10-24T03:18:47.1912184Z 170 │ token.type === "context" 2026-10-24T03:18:47.1912351Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T03:18:47.1912421Z 172 │ : undefined; 2026-10-24T03:18:47.1912530Z 173 │ const presentation = contextChipPresentation( 2026-10-24T03:18:47.1912644Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T03:18:47.1912710Z 175 │ record, 2026-10-24T03:18:47.1912771Z 176 │ ); 2026-10-24T03:18:47.1912855Z 177 │ const icon = contextChipIcon( 2026-10-24T03:18:47.1912927Z 178 │ presentation, 2026-10-24T03:18:47.1913075Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T03:18:47.1913136Z 180 │ ); 2026-10-24T03:18:47.1913203Z 181 │ return { 2026-10-24T03:18:47.1913278Z 182 │ type: token.type, 2026-10-24T03:18:47.1913356Z 183 │ source: token.source, 2026-10-24T03:18:47.1913431Z 184 │ start: token.start, 2026-10-24T03:18:47.1913498Z 185 │ end: token.end, 2026-10-24T03:18:47.1913649Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T03:18:47.1913713Z 187 │ label: 2026-10-24T03:18:47.1913795Z 188 │ token.type === "skill" 2026-10-24T03:18:47.1913901Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T03:18:47.1913988Z 190 │ : token.type === "context" 2026-10-24T03:18:47.1914232Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T03:18:47.1914323Z 192 │ : basename(token.value), 2026-10-24T03:18:47.1914471Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T03:18:47.1914568Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T03:18:47.1914659Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T03:18:47.1914720Z 196 │ }; 2026-10-24T03:18:47.1914777Z 197 │ }), 2026-10-24T03:18:47.1914835Z 198 │ ); 2026-10-24T03:18:47.1914972Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T03:18:47.1915131Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T03:18:47.1915339Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1915559Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T03:18:47.1915663Z ╰──── 2026-10-24T03:18:47.1915913Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:18:47.1916228Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1916231Z 2026-10-24T03:18:47.1916451Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:18:47.1916638Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T03:18:47.1916863Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T03:18:47.1917019Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T03:18:47.1917168Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1917716Z · ╰── 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-24T03:18:47.1917815Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T03:18:47.1917880Z 256 │ value, 2026-10-24T03:18:47.1917959Z 257 │ selection: nextSelection, 2026-10-24T03:18:47.1918018Z 258 │ }); 2026-10-24T03:18:47.1918103Z 259 │ return acknowledgedEventCount; 2026-10-24T03:18:47.1918160Z 260 │ }, 2026-10-24T03:18:47.1918217Z 261 │ [], 2026-10-24T03:18:47.1918287Z ·  ─┬ 2026-10-24T03:18:47.1918476Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.1918536Z 262 │ ); 2026-10-24T03:18:47.1918592Z ╰──── 2026-10-24T03:18:47.1918804Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:18:47.1919132Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1919135Z 2026-10-24T03:18:47.1919622Z ⚠ 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-24T03:18:47.1919786Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T03:18:47.1919844Z 27 │ ) { 2026-10-24T03:18:47.1920063Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.1920215Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T03:18:47.1920343Z 30 │ │ if (predicate(available)) return available; 2026-10-24T03:18:47.1920449Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1920575Z 32 │ ╰─▶ } 2026-10-24T03:18:47.1920759Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T03:18:47.1920811Z ╰──── 2026-10-24T03:18:47.1920816Z 2026-10-24T03:18:47.1921367Z ⚠ 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-24T03:18:47.1921593Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T03:18:47.1921653Z 93 │ ) { 2026-10-24T03:18:47.1921856Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.1922028Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T03:18:47.1922153Z 96 │ │ if (predicate(project)) return project; 2026-10-24T03:18:47.1922283Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1922450Z 98 │ ╰─▶ } 2026-10-24T03:18:47.1922603Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T03:18:47.1922657Z ╰──── 2026-10-24T03:18:47.1922666Z 2026-10-24T03:18:47.1923135Z ⚠ 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-24T03:18:47.1923295Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T03:18:47.1923392Z 1679 │ yield* harness.replaceSession; 2026-10-24T03:18:47.1923607Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.1923766Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T03:18:47.1923857Z 1682 │ │ break; 2026-10-24T03:18:47.1923940Z 1683 │ │ } 2026-10-24T03:18:47.1924056Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1924198Z 1685 │ ╰─▶ } 2026-10-24T03:18:47.1924277Z 1686 │ yield* Queue.offer( 2026-10-24T03:18:47.1924333Z ╰──── 2026-10-24T03:18:47.1924336Z 2026-10-24T03:18:47.1924795Z ⚠ 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-24T03:18:47.1924954Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T03:18:47.1925047Z 1788 │ yield* harness.replaceSession; 2026-10-24T03:18:47.1925266Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.1925433Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T03:18:47.1925540Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1925676Z 1792 │ ╰─▶ } 2026-10-24T03:18:47.1925883Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T03:18:47.1925941Z ╰──── 2026-10-24T03:18:47.1925944Z 2026-10-24T03:18:47.1926412Z ⚠ 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-24T03:18:47.1926565Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T03:18:47.1926868Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T03:18:47.1927165Z 133 │ ╭─▶ for ( 2026-10-24T03:18:47.1927272Z 134 │ │ let attempt = 0; 2026-10-24T03:18:47.1927445Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T03:18:47.1927545Z 136 │ │ attempt += 1 2026-10-24T03:18:47.1927630Z 137 │ │ ) { 2026-10-24T03:18:47.1927775Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.1927985Z 139 │ ╰─▶ } 2026-10-24T03:18:47.1928115Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T03:18:47.1928175Z ╰──── 2026-10-24T03:18:47.1928180Z 2026-10-24T03:18:47.1928451Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T03:18:47.1928605Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T03:18:47.1928663Z 1619 │ 2026-10-24T03:18:47.1928878Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T03:18:47.1928999Z ·  ──────────────────┬────────────────── 2026-10-24T03:18:47.1929206Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T03:18:47.1929286Z 1621 │ const meta = response._meta; 2026-10-24T03:18:47.1929340Z ╰──── 2026-10-24T03:18:47.1929457Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1929462Z 2026-10-24T03:18:47.1929662Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T03:18:47.1929759Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T03:18:47.1929850Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T03:18:47.1929937Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T03:18:47.1930011Z ·  ──┬── 2026-10-24T03:18:47.1930146Z · ╰── 'Fiber' is imported here 2026-10-24T03:18:47.1930251Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T03:18:47.1930304Z ╰──── 2026-10-24T03:18:47.1930405Z  help: Consider removing this import. 2026-10-24T03:18:47.1930408Z 2026-10-24T03:18:47.1930619Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T03:18:47.1930718Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T03:18:47.1930802Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T03:18:47.1930894Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T03:18:47.1930979Z ·  ────┬─── 2026-10-24T03:18:47.1931118Z · ╰── 'Schedule' is imported here 2026-10-24T03:18:47.1931204Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T03:18:47.1931258Z ╰──── 2026-10-24T03:18:47.1931356Z  help: Consider removing this import. 2026-10-24T03:18:47.1931359Z 2026-10-24T03:18:47.1931674Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1931850Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T03:18:47.1932096Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T03:18:47.1932298Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T03:18:47.1932408Z ·  ────────────┬─────────── 2026-10-24T03:18:47.1932584Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T03:18:47.1932814Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T03:18:47.1932883Z ╰──── 2026-10-24T03:18:47.1932991Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1932994Z 2026-10-24T03:18:47.1933262Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1933400Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T03:18:47.1933457Z 407 │ 2026-10-24T03:18:47.1933530Z 408 │ const layer: Layer.Layer< 2026-10-24T03:18:47.1933604Z ·  ──┬── 2026-10-24T03:18:47.1933729Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.1933823Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T03:18:47.1933878Z ╰──── 2026-10-24T03:18:47.1933983Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1933986Z 2026-10-24T03:18:47.1934180Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.1934334Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T03:18:47.1934450Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T03:18:47.1934625Z 267 │ 2026-10-24T03:18:47.1934784Z ·  ─────────────────────────────────────────────────────── 2026-10-24T03:18:47.1934862Z 268 │ = 2026-10-24T03:18:47.1937891Z ·  ──┬── 2026-10-24T03:18:47.1938021Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.1938090Z 3406 │ Layer.effect( 2026-10-24T03:18:47.1938142Z ╰──── 2026-10-24T03:18:47.1938250Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1938252Z 2026-10-24T03:18:47.1938653Z ⚠ 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-24T03:18:47.1938782Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T03:18:47.1938845Z 145 │ name, 2026-10-24T03:18:47.1938986Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T03:18:47.1939097Z ·  ────────────────────────── 2026-10-24T03:18:47.1939224Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T03:18:47.1939279Z ╰──── 2026-10-24T03:18:47.1939281Z 2026-10-24T03:18:47.1939549Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1939748Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T03:18:47.1939807Z 117 │ 2026-10-24T03:18:47.1939877Z 118 │ useEffect(() => { 2026-10-24T03:18:47.1939949Z ·  ────┬──── 2026-10-24T03:18:47.1940085Z · ╰── This is the containing effect 2026-10-24T03:18:47.1940169Z 119 │ void refreshNotifications(); 2026-10-24T03:18:47.1940263Z ·  ──────────┬───────── 2026-10-24T03:18:47.1940441Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1940584Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T03:18:47.1940638Z ╰──── 2026-10-24T03:18:47.1941329Z  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-24T03:18:47.1941758Z  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-24T03:18:47.1941761Z 2026-10-24T03:18:47.1942022Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1942242Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T03:18:47.1942326Z 125 │ 2026-10-24T03:18:47.1942403Z 126 │ useEffect(() => { 2026-10-24T03:18:47.1942475Z ·  ────┬──── 2026-10-24T03:18:47.1942613Z · ╰── This is the containing effect 2026-10-24T03:18:47.1942685Z 127 │ if (!isLoaded) { 2026-10-24T03:18:47.1942779Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T03:18:47.1942871Z ·  ──────────┬────────── 2026-10-24T03:18:47.1943049Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1943116Z 129 │ return; 2026-10-24T03:18:47.1943170Z ╰──── 2026-10-24T03:18:47.1943770Z  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-24T03:18:47.1944112Z  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-24T03:18:47.1944116Z 2026-10-24T03:18:47.1944344Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:18:47.1944465Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T03:18:47.1944573Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T03:18:47.1944704Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T03:18:47.1944862Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T03:18:47.1944924Z 347 │ }; 2026-10-24T03:18:47.1944979Z ╰──── 2026-10-24T03:18:47.1945260Z  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-24T03:18:47.1945266Z 2026-10-24T03:18:47.1945494Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T03:18:47.1945617Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T03:18:47.1945685Z 447 │ const favorites = 2026-10-24T03:18:47.1945796Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T03:18:47.1945886Z ·  ───┬── 2026-10-24T03:18:47.1946017Z · ╰── For this reduce 2026-10-24T03:18:47.1946100Z 449 │ const exists = current.some( 2026-10-24T03:18:47.1946277Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T03:18:47.1946338Z 451 │ ); 2026-10-24T03:18:47.1946493Z 452 │ return change.favorite 2026-10-24T03:18:47.1946652Z 453 │ ? exists 2026-10-24T03:18:47.1946771Z 454 │ ? current 2026-10-24T03:18:47.1946912Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T03:18:47.1947000Z ·  ─────┬──── 2026-10-24T03:18:47.1947123Z · ╰── From this spread 2026-10-24T03:18:47.1947192Z 456 │ : current.filter( 2026-10-24T03:18:47.1947246Z ╰──── 2026-10-24T03:18:47.1947534Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T03:18:47.1947703Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T03:18:47.1947706Z 2026-10-24T03:18:47.1947908Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T03:18:47.1948035Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T03:18:47.1948097Z 464 │ null; 2026-10-24T03:18:47.1948216Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T03:18:47.1948305Z ·  ──────────┬───────── 2026-10-24T03:18:47.1948439Z · ╰── From this accumulator 2026-10-24T03:18:47.1948542Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T03:18:47.1948611Z ·  ─┬─ 2026-10-24T03:18:47.1948716Z · ╰── For this loop 2026-10-24T03:18:47.1948855Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T03:18:47.1948926Z 468 │ hiddenModels: [], 2026-10-24T03:18:47.1949000Z 469 │ modelOrder: [], 2026-10-24T03:18:47.1949059Z 470 │ }; 2026-10-24T03:18:47.1949245Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T03:18:47.1949356Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T03:18:47.1949432Z 473 │ nextModelPreferences = { 2026-10-24T03:18:47.1949509Z 474 │ ...nextModelPreferences, 2026-10-24T03:18:47.1949608Z ·  ───────────┬─────────── 2026-10-24T03:18:47.1949735Z · ╰── From this spread 2026-10-24T03:18:47.1949849Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T03:18:47.1949902Z ╰──── 2026-10-24T03:18:47.1950060Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T03:18:47.1950223Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T03:18:47.1950229Z 2026-10-24T03:18:47.1950699Z ⚠ 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-24T03:18:47.1950830Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T03:18:47.1950897Z 38 │ JSON.stringify( 2026-10-24T03:18:47.1951019Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T03:18:47.1951118Z ·  ──────────────────────── 2026-10-24T03:18:47.1951184Z 40 │ { name: "a" }, 2026-10-24T03:18:47.1951238Z ╰──── 2026-10-24T03:18:47.1951240Z 2026-10-24T03:18:47.1951388Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1951581Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T03:18:47.1951858Z 53 │ const child = children as ReactElement>; 2026-10-24T03:18:47.1952036Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T03:18:47.1952144Z 55 │ │ onTouchStart: (event) => { 2026-10-24T03:18:47.1952306Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T03:18:47.1952503Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T03:18:47.1952665Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T03:18:47.1952838Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T03:18:47.1952958Z 60 │ │ pendingPress.current = null; 2026-10-24T03:18:47.1953086Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T03:18:47.1953163Z 62 │ │ }, 2026-10-24T03:18:47.1953265Z 63 │ │ onPress: (event) => { 2026-10-24T03:18:47.1953440Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T03:18:47.1953582Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T03:18:47.1953751Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T03:18:47.1953948Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T03:18:47.1954045Z 68 │ │ return; 2026-10-24T03:18:47.1954130Z 69 │ │ } 2026-10-24T03:18:47.1954270Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T03:18:47.1954446Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T03:18:47.1954619Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T03:18:47.1954721Z 73 │ │ event.persist(); 2026-10-24T03:18:47.1954887Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T03:18:47.1954973Z 75 │ │ return; 2026-10-24T03:18:47.1955052Z 76 │ │ } 2026-10-24T03:18:47.1955170Z 77 │ │ child.props.onPress?.(event); 2026-10-24T03:18:47.1955345Z 78 │ │ }, 2026-10-24T03:18:47.1955569Z 79 │ ├─▶ }); 2026-10-24T03:18:47.1955810Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.1955917Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T03:18:47.1955972Z ╰──── 2026-10-24T03:18:47.1956527Z  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-24T03:18:47.1956873Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1956878Z 2026-10-24T03:18:47.1957052Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T03:18:47.1957250Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T03:18:47.1957392Z 219 │ 2026-10-24T03:18:47.1957533Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T03:18:47.1957647Z ·  ──┬─ 2026-10-24T03:18:47.1957822Z · ╰── 'U+001B' is a control character. 2026-10-24T03:18:47.1957889Z 221 │ 2026-10-24T03:18:47.1957941Z ╰──── 2026-10-24T03:18:47.1958183Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T03:18:47.1958188Z 2026-10-24T03:18:47.1958443Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T03:18:47.1958573Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T03:18:47.1958674Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T03:18:47.1958813Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T03:18:47.1958903Z ·  ─────────────── 2026-10-24T03:18:47.1958962Z 510 │ ) 2026-10-24T03:18:47.1959013Z ╰──── 2026-10-24T03:18:47.1959170Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T03:18:47.1959173Z 2026-10-24T03:18:47.1959542Z ⚠ 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-24T03:18:47.1959685Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T03:18:47.1959827Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T03:18:47.1959976Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T03:18:47.1960098Z ·  ─────────────────── 2026-10-24T03:18:47.1960165Z 1787 │ cwd, 2026-10-24T03:18:47.1960220Z ╰──── 2026-10-24T03:18:47.1960223Z 2026-10-24T03:18:47.1960410Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:18:47.1960652Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T03:18:47.1960844Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T03:18:47.1961042Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T03:18:47.1961193Z ·  ─────┬───── 2026-10-24T03:18:47.1961405Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T03:18:47.1961494Z 101 │ const readEditor = useCallback( 2026-10-24T03:18:47.1961575Z ╰──── 2026-10-24T03:18:47.1961940Z  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-24T03:18:47.1962276Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1962282Z 2026-10-24T03:18:47.1962470Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:18:47.1962636Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T03:18:47.1962703Z 120 │ setEditor, 2026-10-24T03:18:47.1962767Z 121 │ startEditor, 2026-10-24T03:18:47.1962848Z ·  ─────┬───── 2026-10-24T03:18:47.1962998Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T03:18:47.1963065Z 122 │ hasChanges, 2026-10-24T03:18:47.1963115Z ╰──── 2026-10-24T03:18:47.1963436Z  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-24T03:18:47.1963763Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1963765Z 2026-10-24T03:18:47.1963979Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T03:18:47.1964106Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T03:18:47.1964212Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T03:18:47.1964376Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T03:18:47.1964508Z 159 │ │ constructor(data: Record) { 2026-10-24T03:18:47.1964630Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T03:18:47.1964709Z 161 │ │ } 2026-10-24T03:18:47.1964840Z 162 │ ╰─▶ }, 2026-10-24T03:18:47.1964906Z 163 │ clipboard: { 2026-10-24T03:18:47.1964957Z ╰──── 2026-10-24T03:18:47.1965134Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T03:18:47.1965137Z 2026-10-24T03:18:47.1965311Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.1965463Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T03:18:47.1965598Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T03:18:47.1965827Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T03:18:47.1966035Z ·  ─────┬──── 2026-10-24T03:18:47.1966337Z · ╰── Cannot call impure function 2026-10-24T03:18:47.1966403Z 373 │ return ( 2026-10-24T03:18:47.1966454Z ╰──── 2026-10-24T03:18:47.1966772Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.1967196Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.1967199Z 2026-10-24T03:18:47.1967369Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.1967524Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T03:18:47.1967624Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T03:18:47.1967757Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T03:18:47.1967870Z ·  ─────┬──── 2026-10-24T03:18:47.1968028Z · ╰── Cannot call impure function 2026-10-24T03:18:47.1968085Z 854 │ } 2026-10-24T03:18:47.1968138Z ╰──── 2026-10-24T03:18:47.1968424Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.1968724Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.1968727Z 2026-10-24T03:18:47.1968916Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:18:47.1969107Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T03:18:47.1969178Z 115 │ return [...commands]; 2026-10-24T03:18:47.1969314Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T03:18:47.1969428Z ·  ─────────┬───────── 2026-10-24T03:18:47.1969622Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T03:18:47.1969678Z 117 │ 2026-10-24T03:18:47.1969731Z ╰──── 2026-10-24T03:18:47.1970060Z  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-24T03:18:47.1970381Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1970384Z 2026-10-24T03:18:47.1970682Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T03:18:47.1970841Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T03:18:47.1970900Z 162 │ keys, 2026-10-24T03:18:47.1970973Z 163 │ overridingProjects = [], 2026-10-24T03:18:47.1971060Z ·  ── 2026-10-24T03:18:47.1971129Z 164 │ onClearOverrides, 2026-10-24T03:18:47.1971183Z ╰──── 2026-10-24T03:18:47.1971584Z  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-24T03:18:47.1971636Z 2026-10-24T03:18:47.1971841Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.1971995Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T03:18:47.1972179Z 151 │ 2026-10-24T03:18:47.1972257Z 152 │ {props.children(open)} 2026-10-24T03:18:47.1972347Z ·  ──┬─ 2026-10-24T03:18:47.1972579Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.1972648Z 153 │ 2026-10-24T03:18:47.1972699Z ╰──── 2026-10-24T03:18:47.1973196Z  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-24T03:18:47.1973506Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.1973509Z 2026-10-24T03:18:47.1973711Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T03:18:47.1973863Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T03:18:47.1973946Z 139 │ if (action.id !== undefined) { 2026-10-24T03:18:47.1974027Z 140 │ props.onPressAction?.({ 2026-10-24T03:18:47.1974099Z ·  ──┬── 2026-10-24T03:18:47.1974239Z · ╰── Missing dependency `props` 2026-10-24T03:18:47.1974334Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T03:18:47.1974484Z 142 │ } as Parameters>[0]); 2026-10-24T03:18:47.1974541Z 143 │ } 2026-10-24T03:18:47.1974599Z 144 │ }, 2026-10-24T03:18:47.1974680Z 145 │ [close, props.onPressAction], 2026-10-24T03:18:47.1974778Z ·  ─────────┬───────── 2026-10-24T03:18:47.1975001Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T03:18:47.1975058Z 146 │ ); 2026-10-24T03:18:47.1975109Z ╰──── 2026-10-24T03:18:47.1975611Z  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-24T03:18:47.1975939Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1975941Z 2026-10-24T03:18:47.1976219Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.1976333Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T03:18:47.1976385Z 35 │ 2026-10-24T03:18:47.1976520Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T03:18:47.1976597Z ·  ─────┬──── 2026-10-24T03:18:47.1976776Z · ╰── 'claudeCaps' is declared here 2026-10-24T03:18:47.1976917Z 37 │ optionDescriptors: [ 2026-10-24T03:18:47.1977013Z ╰──── 2026-10-24T03:18:47.1977164Z  help: Consider removing this declaration. 2026-10-24T03:18:47.1977166Z 2026-10-24T03:18:47.1977402Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T03:18:47.1977548Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T03:18:47.1977612Z 227 │ ): string { 2026-10-24T03:18:47.1977786Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T03:18:47.1977954Z ·  ────── 2026-10-24T03:18:47.1978086Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T03:18:47.1978140Z ╰──── 2026-10-24T03:18:47.1978324Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T03:18:47.1978329Z 2026-10-24T03:18:47.1978490Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.1978640Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T03:18:47.1978786Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T03:18:47.1978926Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T03:18:47.1979003Z ·  ────┬─── 2026-10-24T03:18:47.1979135Z · ╰── `rotation` originates here 2026-10-24T03:18:47.1979188Z 172 │ 2026-10-24T03:18:47.1979259Z 173 │ useLayoutEffect(() => { 2026-10-24T03:18:47.1979393Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T03:18:47.1979471Z ·  ────┬─── 2026-10-24T03:18:47.1979607Z · ╰── `rotation` cannot be modified 2026-10-24T03:18:47.1979710Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T03:18:47.1979764Z ╰──── 2026-10-24T03:18:47.1980031Z  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-24T03:18:47.1980341Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1980344Z 2026-10-24T03:18:47.1980541Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.1980698Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T03:18:47.1980768Z 1245 │ new Promise((resolve) => setImmediate(resolve))); 2026-10-24T03:18:47.1984259Z 143 │ ╰─▶ } 2026-10-24T03:18:47.1984345Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T03:18:47.1984399Z ╰──── 2026-10-24T03:18:47.1984402Z 2026-10-24T03:18:47.1984601Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T03:18:47.1984743Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T03:18:47.1984864Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T03:18:47.1984948Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T03:18:47.1985022Z ·  ─┬─ 2026-10-24T03:18:47.1985151Z · ╰── 'Arr' is imported here 2026-10-24T03:18:47.1985234Z 5 │ import * as Order from "effect/Order"; 2026-10-24T03:18:47.1985288Z ╰──── 2026-10-24T03:18:47.1985390Z  help: Consider removing this import. 2026-10-24T03:18:47.1985393Z 2026-10-24T03:18:47.1985592Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T03:18:47.1985724Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T03:18:47.1985891Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T03:18:47.1986036Z 5 │ import * as Order from "effect/Order"; 2026-10-24T03:18:47.1986129Z ·  ──┬── 2026-10-24T03:18:47.1986261Z · ╰── 'Order' is imported here 2026-10-24T03:18:47.1986316Z 6 │ 2026-10-24T03:18:47.1986369Z ╰──── 2026-10-24T03:18:47.1986469Z  help: Consider removing this import. 2026-10-24T03:18:47.1986472Z 2026-10-24T03:18:47.1986754Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T03:18:47.1986936Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T03:18:47.1987122Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T03:18:47.1987217Z 35 │ instanceId === configured ? true : false, 2026-10-24T03:18:47.1987341Z ·  ──────────────────────────────────────── 2026-10-24T03:18:47.1987401Z 36 │ ); 2026-10-24T03:18:47.1987455Z ╰──── 2026-10-24T03:18:47.1987551Z  help: Remove this ternary operator 2026-10-24T03:18:47.1987554Z 2026-10-24T03:18:47.1987769Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.1987915Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T03:18:47.1988018Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T03:18:47.1988150Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T03:18:47.1988246Z ·  ────────────┬──────────── 2026-10-24T03:18:47.1988424Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T03:18:47.1988488Z 774 │ } 2026-10-24T03:18:47.1988697Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T03:18:47.1988806Z ·  ────────────────┬──────────────── 2026-10-24T03:18:47.1989092Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T03:18:47.1989147Z 776 │ 2026-10-24T03:18:47.1989200Z ╰──── 2026-10-24T03:18:47.1989635Z  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-24T03:18:47.1989954Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1989959Z 2026-10-24T03:18:47.1990120Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.1990265Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T03:18:47.1990430Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T03:18:47.1990568Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T03:18:47.1990661Z ·  ──────────┬───────── 2026-10-24T03:18:47.1990821Z · ╰── `animatedBorderRadius` originates here 2026-10-24T03:18:47.1990983Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T03:18:47.1991053Z 390 │ useLayoutEffect(() => { 2026-10-24T03:18:47.1991227Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T03:18:47.1991380Z ·  ──────────┬───────── 2026-10-24T03:18:47.1991560Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T03:18:47.1991649Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T03:18:47.1991702Z ╰──── 2026-10-24T03:18:47.1991970Z  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-24T03:18:47.1992360Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.1992363Z 2026-10-24T03:18:47.1992559Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.1992734Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T03:18:47.1992802Z 87 │
  • { 2026-10-24T03:18:47.1993846Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T03:18:47.1993953Z ·  ┬ 2026-10-24T03:18:47.1994101Z · ╰── '_' is declared here 2026-10-24T03:18:47.1994175Z 459 │ for (const b of data) { 2026-10-24T03:18:47.1994228Z ╰──── 2026-10-24T03:18:47.1994332Z  help: Consider removing this parameter. 2026-10-24T03:18:47.1994335Z 2026-10-24T03:18:47.1994595Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.1994735Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T03:18:47.1994840Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T03:18:47.1994907Z 67 │ useEffect(() => { 2026-10-24T03:18:47.1994984Z ·  ────┬──── 2026-10-24T03:18:47.1995119Z · ╰── This is the containing effect 2026-10-24T03:18:47.1995185Z 68 │ setUri(null); 2026-10-24T03:18:47.1995258Z ·  ───┬── 2026-10-24T03:18:47.1995426Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.1995491Z 69 │ setError(null); 2026-10-24T03:18:47.1995545Z ╰──── 2026-10-24T03:18:47.1996155Z  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-24T03:18:47.1996566Z  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-24T03:18:47.1996602Z 2026-10-24T03:18:47.1996894Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.1997033Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T03:18:47.1997090Z 90 │ }; 2026-10-24T03:18:47.1997166Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T03:18:47.1997286Z ·  ──────┬───── ───┬─── 2026-10-24T03:18:47.1997508Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T03:18:47.1997695Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T03:18:47.1997840Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T03:18:47.1997894Z ╰──── 2026-10-24T03:18:47.1998202Z  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-24T03:18:47.1998532Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.1998535Z 2026-10-24T03:18:47.1998761Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.1998904Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T03:18:47.1998969Z 212 │ useEffect(() => { 2026-10-24T03:18:47.1999085Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T03:18:47.1999191Z ·  ──┬── 2026-10-24T03:18:47.1999350Z · ╰── Missing dependency `props` 2026-10-24T03:18:47.1999456Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T03:18:47.1999572Z ·  ──────────┬───────── 2026-10-24T03:18:47.1999806Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T03:18:47.1999880Z 215 │ const { source } = props; 2026-10-24T03:18:47.1999931Z ╰──── 2026-10-24T03:18:47.2000371Z  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-24T03:18:47.2000776Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2000809Z 2026-10-24T03:18:47.2001126Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2001263Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:159:5] 2026-10-24T03:18:47.2001457Z 154 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T03:18:47.2001529Z 155 │ useLayoutEffect(() => { 2026-10-24T03:18:47.2001623Z ·  ───────┬─────── 2026-10-24T03:18:47.2001818Z · ╰── This is the containing effect 2026-10-24T03:18:47.2001907Z 156 │ if (faviconRequest === null) return; 2026-10-24T03:18:47.2001969Z 157 │ 2026-10-24T03:18:47.2002107Z 158 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T03:18:47.2002206Z 159 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T03:18:47.2002297Z ·  ───────────┬─────────── 2026-10-24T03:18:47.2002475Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2002546Z 160 │ return endRequest; 2026-10-24T03:18:47.2002600Z ╰──── 2026-10-24T03:18:47.2003213Z  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-24T03:18:47.2003542Z  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-24T03:18:47.2003547Z 2026-10-24T03:18:47.2003807Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2003975Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T03:18:47.2004099Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T03:18:47.2004164Z 284 │ useEffect(() => { 2026-10-24T03:18:47.2004237Z ·  ────┬──── 2026-10-24T03:18:47.2004372Z · ╰── This is the containing effect 2026-10-24T03:18:47.2004459Z 285 │ setNow(new Date().toISOString()); 2026-10-24T03:18:47.2004528Z ·  ───┬── 2026-10-24T03:18:47.2004701Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2004842Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T03:18:47.2004896Z ╰──── 2026-10-24T03:18:47.2005500Z  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-24T03:18:47.2005907Z  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-24T03:18:47.2005910Z 2026-10-24T03:18:47.2006200Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2006497Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T03:18:47.2006633Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T03:18:47.2006759Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T03:18:47.2006866Z ·  ───────┬────── 2026-10-24T03:18:47.2007059Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T03:18:47.2007236Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T03:18:47.2007306Z ╰──── 2026-10-24T03:18:47.2007614Z  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-24T03:18:47.2007946Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2007951Z 2026-10-24T03:18:47.2008126Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2008295Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T03:18:47.2008381Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T03:18:47.2008543Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T03:18:47.2008669Z ·  ─────┬──── 2026-10-24T03:18:47.2008842Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2008928Z 357 │ const id = setTimeout(() => { 2026-10-24T03:18:47.2008985Z ╰──── 2026-10-24T03:18:47.2009277Z  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-24T03:18:47.2009580Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2009583Z 2026-10-24T03:18:47.2009790Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2009921Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T03:18:47.2009980Z 81 │ }, 2026-10-24T03:18:47.2010045Z 82 │ [draftKey], 2026-10-24T03:18:47.2010119Z ·  ────┬─── 2026-10-24T03:18:47.2010268Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T03:18:47.2010328Z 83 │ ); 2026-10-24T03:18:47.2010381Z ╰──── 2026-10-24T03:18:47.2010683Z  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-24T03:18:47.2011008Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2011011Z 2026-10-24T03:18:47.2011281Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2011420Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T03:18:47.2011475Z 57 │ 2026-10-24T03:18:47.2011613Z 58 │ useEffect(() => { 2026-10-24T03:18:47.2011734Z ·  ────┬──── 2026-10-24T03:18:47.2011906Z · ╰── This is the containing effect 2026-10-24T03:18:47.2012004Z 59 │ const controller = new AbortController(); 2026-10-24T03:18:47.2012077Z 60 │ setLoadState("pending"); 2026-10-24T03:18:47.2012154Z ·  ──────┬───── 2026-10-24T03:18:47.2012324Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2012507Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T03:18:47.2012586Z ╰──── 2026-10-24T03:18:47.2013242Z  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-24T03:18:47.2013575Z  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-24T03:18:47.2013578Z 2026-10-24T03:18:47.2013786Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2013924Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T03:18:47.2014006Z 70 │ return () => controller.abort(); 2026-10-24T03:18:47.2014105Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T03:18:47.2014282Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T03:18:47.2014520Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T03:18:47.2014730Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T03:18:47.2014873Z · ╰── Unnecessary dependency `player_0` 2026-10-24T03:18:47.2014929Z 72 │ 2026-10-24T03:18:47.2014984Z ╰──── 2026-10-24T03:18:47.2015288Z  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-24T03:18:47.2015613Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2015615Z 2026-10-24T03:18:47.2015840Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:18:47.2015983Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T03:18:47.2016112Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T03:18:47.2016221Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T03:18:47.2016335Z ·  ─────── 2026-10-24T03:18:47.2016447Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T03:18:47.2016500Z ╰──── 2026-10-24T03:18:47.2016805Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:18:47.2016808Z 2026-10-24T03:18:47.2017085Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T03:18:47.2017318Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T03:18:47.2017384Z 1 │ import type { 2026-10-24T03:18:47.2017447Z 2 │ EnvironmentId, 2026-10-24T03:18:47.2017526Z ·  ──────┬────── 2026-10-24T03:18:47.2017667Z · ╰── 'EnvironmentId' is imported here 2026-10-24T03:18:47.2017757Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T03:18:47.2017808Z ╰──── 2026-10-24T03:18:47.2017914Z  help: Consider removing this import. 2026-10-24T03:18:47.2017918Z 2026-10-24T03:18:47.2018283Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T03:18:47.2018455Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T03:18:47.2018523Z 472 │ onFilters, 2026-10-24T03:18:47.2018595Z 473 │ authorOptions = [], 2026-10-24T03:18:47.2018677Z ·  ── 2026-10-24T03:18:47.2018748Z 474 │ labelOptions = [], 2026-10-24T03:18:47.2018800Z ╰──── 2026-10-24T03:18:47.2019119Z  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-24T03:18:47.2019122Z 2026-10-24T03:18:47.2019406Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T03:18:47.2019575Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T03:18:47.2019644Z 473 │ authorOptions = [], 2026-10-24T03:18:47.2019709Z 474 │ labelOptions = [], 2026-10-24T03:18:47.2019793Z ·  ── 2026-10-24T03:18:47.2019861Z 475 │ optionScope, 2026-10-24T03:18:47.2019915Z ╰──── 2026-10-24T03:18:47.2020230Z  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-24T03:18:47.2020233Z 2026-10-24T03:18:47.2020478Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:18:47.2020637Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T03:18:47.2020698Z 289 │ return ( 2026-10-24T03:18:47.2020834Z 290 │ 2026-10-24T03:18:47.2020960Z ·  ───────────── 2026-10-24T03:18:47.2021037Z 291 │ {props.children} 2026-10-24T03:18:47.2021093Z ╰──── 2026-10-24T03:18:47.2021318Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:18:47.2021462Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:18:47.2021465Z 2026-10-24T03:18:47.2021710Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:18:47.2021869Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T03:18:47.2021930Z 653 │ return ( 2026-10-24T03:18:47.2022051Z 654 │ 2026-10-24T03:18:47.2022169Z ·  ───────────── 2026-10-24T03:18:47.2022321Z 655 │ {props.children} 2026-10-24T03:18:47.2022422Z ╰──── 2026-10-24T03:18:47.2022683Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:18:47.2022823Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:18:47.2022826Z 2026-10-24T03:18:47.2023067Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:18:47.2023295Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T03:18:47.2023364Z 1461 │ return ( 2026-10-24T03:18:47.2023530Z 1462 │ 2026-10-24T03:18:47.2023674Z ·  ──────────────────── 2026-10-24T03:18:47.2023780Z 1463 │ { 2026-10-24T03:18:47.2024835Z ·  ────┬──── 2026-10-24T03:18:47.2024971Z · ╰── This is the containing effect 2026-10-24T03:18:47.2025045Z 57 │ setDecodedSize(null); 2026-10-24T03:18:47.2025126Z ·  ───────┬────── 2026-10-24T03:18:47.2025299Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2025368Z 58 │ }, [props.sourceKey]); 2026-10-24T03:18:47.2025422Z ╰──── 2026-10-24T03:18:47.2026025Z  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-24T03:18:47.2026357Z  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-24T03:18:47.2026362Z 2026-10-24T03:18:47.2026621Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2026807Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T03:18:47.2026864Z 59 │ 2026-10-24T03:18:47.2026930Z 60 │ useEffect(() => { 2026-10-24T03:18:47.2027003Z ·  ────┬──── 2026-10-24T03:18:47.2027132Z · ╰── This is the containing effect 2026-10-24T03:18:47.2027202Z 61 │ setFailedUri(null); 2026-10-24T03:18:47.2027279Z ·  ──────┬───── 2026-10-24T03:18:47.2027450Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2027588Z 62 │ }, [props.uri]); 2026-10-24T03:18:47.2027697Z ╰──── 2026-10-24T03:18:47.2028356Z  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-24T03:18:47.2028762Z  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-24T03:18:47.2028765Z 2026-10-24T03:18:47.2028985Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T03:18:47.2029136Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T03:18:47.2029268Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T03:18:47.2029452Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T03:18:47.2029543Z ·  ────────┬──────── 2026-10-24T03:18:47.2029696Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T03:18:47.2029751Z 8 │ 2026-10-24T03:18:47.2029804Z ╰──── 2026-10-24T03:18:47.2029906Z  help: Consider removing this import. 2026-10-24T03:18:47.2029908Z 2026-10-24T03:18:47.2030114Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2030269Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T03:18:47.2030341Z 57 │ setDecodedSize(null); 2026-10-24T03:18:47.2030412Z 58 │ }, [props.sourceKey]); 2026-10-24T03:18:47.2030499Z ·  ───────┬─────── 2026-10-24T03:18:47.2030660Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T03:18:47.2030716Z 59 │ 2026-10-24T03:18:47.2030771Z ╰──── 2026-10-24T03:18:47.2031067Z  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-24T03:18:47.2031380Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2031383Z 2026-10-24T03:18:47.2031588Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2031814Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T03:18:47.2031940Z 61 │ setFailedUri(null); 2026-10-24T03:18:47.2032028Z 62 │ }, [props.uri]); 2026-10-24T03:18:47.2032105Z ·  ────┬──── 2026-10-24T03:18:47.2032248Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T03:18:47.2032303Z 63 │ 2026-10-24T03:18:47.2032354Z ╰──── 2026-10-24T03:18:47.2032660Z  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-24T03:18:47.2033034Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2033037Z 2026-10-24T03:18:47.2033308Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2033459Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T03:18:47.2033519Z 61 │ }, []); 2026-10-24T03:18:47.2033586Z 62 │ useEffect(() => { 2026-10-24T03:18:47.2033658Z ·  ────┬──── 2026-10-24T03:18:47.2033788Z · ╰── This is the containing effect 2026-10-24T03:18:47.2033940Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T03:18:47.2034067Z ·  ───────┬────── 2026-10-24T03:18:47.2034278Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2034358Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T03:18:47.2034418Z ╰──── 2026-10-24T03:18:47.2035041Z  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-24T03:18:47.2035373Z  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-24T03:18:47.2035376Z 2026-10-24T03:18:47.2035589Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T03:18:47.2035713Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T03:18:47.2035768Z 78 │ 2026-10-24T03:18:47.2035912Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T03:18:47.2036004Z ·  ────────┬─────── 2026-10-24T03:18:47.2036152Z · ╰── 'describeSchedule' is declared here 2026-10-24T03:18:47.2036263Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T03:18:47.2036317Z ╰──── 2026-10-24T03:18:47.2036424Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2036427Z 2026-10-24T03:18:47.2036721Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2036871Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T03:18:47.2037039Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T03:18:47.2037210Z 29 │ useEffect(() => { 2026-10-24T03:18:47.2037344Z ·  ────┬──── 2026-10-24T03:18:47.2037502Z · ╰── This is the containing effect 2026-10-24T03:18:47.2037629Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T03:18:47.2037738Z ·  ───┬─── 2026-10-24T03:18:47.2037935Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2038007Z 31 │ }, [key, live, snapshot]); 2026-10-24T03:18:47.2038078Z ╰──── 2026-10-24T03:18:47.2038770Z  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-24T03:18:47.2039109Z  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-24T03:18:47.2039111Z 2026-10-24T03:18:47.2039608Z ⚠ 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-24T03:18:47.2039768Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T03:18:47.2039885Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T03:18:47.2040105Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T03:18:47.2040250Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T03:18:47.2040360Z 137 │ │ if (predicate(lastState)) { 2026-10-24T03:18:47.2040463Z 138 │ │ return lastState; 2026-10-24T03:18:47.2040541Z 139 │ │ } 2026-10-24T03:18:47.2040648Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2040775Z 141 │ ╰─▶ } 2026-10-24T03:18:47.2040853Z 142 │ return yield* Effect.die( 2026-10-24T03:18:47.2040908Z ╰──── 2026-10-24T03:18:47.2040911Z 2026-10-24T03:18:47.2041264Z ⚠ 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-24T03:18:47.2041419Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T03:18:47.2041586Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T03:18:47.2041760Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T03:18:47.2041849Z ·  ───────── 2026-10-24T03:18:47.2042032Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T03:18:47.2042085Z ╰──── 2026-10-24T03:18:47.2042087Z 2026-10-24T03:18:47.2042424Z ⚠ 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-24T03:18:47.2042568Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T03:18:47.2042816Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T03:18:47.2043084Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T03:18:47.2043173Z ·  ───────── 2026-10-24T03:18:47.2043230Z 52 │ } 2026-10-24T03:18:47.2043284Z ╰──── 2026-10-24T03:18:47.2043287Z 2026-10-24T03:18:47.2043619Z ⚠ 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-24T03:18:47.2043835Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T03:18:47.2043902Z 54 │ assert.equal( 2026-10-24T03:18:47.2044076Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T03:18:47.2044156Z ·  ───────── 2026-10-24T03:18:47.2044218Z 56 │ true, 2026-10-24T03:18:47.2044271Z ╰──── 2026-10-24T03:18:47.2044273Z 2026-10-24T03:18:47.2044615Z ⚠ 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-24T03:18:47.2044758Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T03:18:47.2044820Z 58 │ assert.equal( 2026-10-24T03:18:47.2045009Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T03:18:47.2045083Z ·  ───────── 2026-10-24T03:18:47.2045142Z 60 │ true, 2026-10-24T03:18:47.2045193Z ╰──── 2026-10-24T03:18:47.2045195Z 2026-10-24T03:18:47.2045531Z ⚠ 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-24T03:18:47.2045686Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T03:18:47.2045812Z 102 │ 2026-10-24T03:18:47.2045980Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T03:18:47.2046067Z ·  ───────── 2026-10-24T03:18:47.2046125Z 104 │ }); 2026-10-24T03:18:47.2046180Z ╰──── 2026-10-24T03:18:47.2046182Z 2026-10-24T03:18:47.2046339Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2046506Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T03:18:47.2046564Z 107 │ ); 2026-10-24T03:18:47.2046796Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T03:18:47.2046936Z ·  ─────────┬──────── 2026-10-24T03:18:47.2047149Z · ╰── `separationProgress` originates here 2026-10-24T03:18:47.2047206Z 109 │ 2026-10-24T03:18:47.2047275Z 110 │ useEffect(() => { 2026-10-24T03:18:47.2047449Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T03:18:47.2047535Z ·  ─────────┬──────── 2026-10-24T03:18:47.2047692Z · ╰── `separationProgress` cannot be modified 2026-10-24T03:18:47.2047803Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T03:18:47.2047855Z ╰──── 2026-10-24T03:18:47.2048135Z  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-24T03:18:47.2048547Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2048592Z 2026-10-24T03:18:47.2048813Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2048983Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T03:18:47.2049095Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T03:18:47.2049215Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T03:18:47.2049299Z ·  ──────┬───── 2026-10-24T03:18:47.2049457Z · ╰── `capsuleWidth` originates here 2026-10-24T03:18:47.2049623Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T03:18:47.2049752Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.2049864Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T03:18:47.2049963Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T03:18:47.2050025Z 134 │ return; 2026-10-24T03:18:47.2050083Z 135 │ } 2026-10-24T03:18:47.2050194Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T03:18:47.2050279Z 137 │ measuredWidthRef.current = width; 2026-10-24T03:18:47.2050427Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T03:18:47.2050507Z ·  ──────┬───── 2026-10-24T03:18:47.2050652Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T03:18:47.2050707Z 139 │ }; 2026-10-24T03:18:47.2050762Z ╰──── 2026-10-24T03:18:47.2051042Z  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-24T03:18:47.2051364Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2051367Z 2026-10-24T03:18:47.2051530Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2051697Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T03:18:47.2051810Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T03:18:47.2051929Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T03:18:47.2052012Z ·  ──────┬───── 2026-10-24T03:18:47.2052151Z · ╰── `capsuleWidth` originates here 2026-10-24T03:18:47.2052266Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T03:18:47.2052384Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.2052491Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T03:18:47.2052587Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T03:18:47.2052651Z 134 │ return; 2026-10-24T03:18:47.2052708Z 135 │ } 2026-10-24T03:18:47.2052815Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T03:18:47.2052899Z 137 │ measuredWidthRef.current = width; 2026-10-24T03:18:47.2053043Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T03:18:47.2053099Z 139 │ }; 2026-10-24T03:18:47.2053192Z 140 │ const hasStatus = props.status !== null; 2026-10-24T03:18:47.2053404Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T03:18:47.2053529Z 142 │ useEffect(() => { 2026-10-24T03:18:47.2053620Z 143 │ if (!hasStatus) { 2026-10-24T03:18:47.2053710Z 144 │ measuredWidthRef.current = null; 2026-10-24T03:18:47.2053788Z 145 │ capsuleWidth.value = null; 2026-10-24T03:18:47.2053868Z ·  ──────┬───── 2026-10-24T03:18:47.2054013Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T03:18:47.2054068Z 146 │ } 2026-10-24T03:18:47.2054123Z ╰──── 2026-10-24T03:18:47.2054468Z  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-24T03:18:47.2054786Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2054792Z 2026-10-24T03:18:47.2054998Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:18:47.2055161Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T03:18:47.2055299Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T03:18:47.2055366Z 142 │ useEffect(() => { 2026-10-24T03:18:47.2055446Z ·  ───┬─── 2026-10-24T03:18:47.2055671Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T03:18:47.2055739Z 143 │ if (!hasStatus) { 2026-10-24T03:18:47.2055828Z 144 │ measuredWidthRef.current = null; 2026-10-24T03:18:47.2055907Z 145 │ capsuleWidth.value = null; 2026-10-24T03:18:47.2055990Z ·  ──────┬───── 2026-10-24T03:18:47.2056131Z · ╰── This modifies `capsuleWidth` 2026-10-24T03:18:47.2056188Z 146 │ } 2026-10-24T03:18:47.2056242Z ╰──── 2026-10-24T03:18:47.2056585Z  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-24T03:18:47.2057078Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2057082Z 2026-10-24T03:18:47.2057287Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:18:47.2057524Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T03:18:47.2057723Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T03:18:47.2057848Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T03:18:47.2057977Z ·  ───────────────┬─────────────── 2026-10-24T03:18:47.2058223Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T03:18:47.2058331Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T03:18:47.2058469Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T03:18:47.2058558Z 134 │ return; 2026-10-24T03:18:47.2058614Z 135 │ } 2026-10-24T03:18:47.2058723Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T03:18:47.2058808Z 137 │ measuredWidthRef.current = width; 2026-10-24T03:18:47.2058958Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T03:18:47.2059041Z ·  ──────┬───── 2026-10-24T03:18:47.2059178Z · ╰── This modifies `capsuleWidth` 2026-10-24T03:18:47.2059231Z 139 │ }; 2026-10-24T03:18:47.2059287Z ╰──── 2026-10-24T03:18:47.2059630Z  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-24T03:18:47.2059947Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2059950Z 2026-10-24T03:18:47.2060426Z ⚠ 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-24T03:18:47.2060615Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T03:18:47.2060689Z 520 │ })).delivery; 2026-10-24T03:18:47.2060894Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T03:18:47.2061014Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2061162Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T03:18:47.2061266Z 524 │ │ id: task.id, 2026-10-24T03:18:47.2061386Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T03:18:47.2061494Z 526 │ │ })).delivery; 2026-10-24T03:18:47.2061635Z 527 │ ╰─▶ } 2026-10-24T03:18:47.2061756Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T03:18:47.2061811Z ╰──── 2026-10-24T03:18:47.2061813Z 2026-10-24T03:18:47.2061984Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.2062126Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T03:18:47.2062182Z 185 │ 2026-10-24T03:18:47.2062285Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T03:18:47.2062358Z ·  ── 2026-10-24T03:18:47.2062413Z 187 │ } 2026-10-24T03:18:47.2062467Z ╰──── 2026-10-24T03:18:47.2062774Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.2062806Z 2026-10-24T03:18:47.2063031Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.2063170Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T03:18:47.2063225Z 188 │ 2026-10-24T03:18:47.2063292Z 189 │ for (const {} of [ 2026-10-24T03:18:47.2063365Z ·  ── 2026-10-24T03:18:47.2063458Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T03:18:47.2066322Z ╰──── 2026-10-24T03:18:47.2066575Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.2066578Z 2026-10-24T03:18:47.2066844Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.2067035Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T03:18:47.2067092Z 310 │ 2026-10-24T03:18:47.2067221Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T03:18:47.2067293Z ·  ── 2026-10-24T03:18:47.2067346Z 312 │ } 2026-10-24T03:18:47.2067397Z ╰──── 2026-10-24T03:18:47.2067626Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.2067629Z 2026-10-24T03:18:47.2067797Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.2067937Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T03:18:47.2067989Z 313 │ 2026-10-24T03:18:47.2068054Z 314 │ for (const {} of [ 2026-10-24T03:18:47.2068128Z ·  ── 2026-10-24T03:18:47.2068186Z 315 │ { 2026-10-24T03:18:47.2068236Z ╰──── 2026-10-24T03:18:47.2068470Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.2068473Z 2026-10-24T03:18:47.2068947Z ⚠ 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-24T03:18:47.2069125Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T03:18:47.2069194Z 222 │ let idlePasses = 0; 2026-10-24T03:18:47.2069340Z 223 │ ╭─▶ for (;;) { 2026-10-24T03:18:47.2069483Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T03:18:47.2069632Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T03:18:47.2069730Z 226 │ │ if (!pending) { 2026-10-24T03:18:47.2069825Z 227 │ │ idlePasses++; 2026-10-24T03:18:47.2069933Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T03:18:47.2070022Z 229 │ │ return; 2026-10-24T03:18:47.2070100Z 230 │ │ } 2026-10-24T03:18:47.2070185Z 231 │ │ continue; 2026-10-24T03:18:47.2070263Z 232 │ │ } 2026-10-24T03:18:47.2070355Z 233 │ │ idlePasses = 0; 2026-10-24T03:18:47.2070573Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T03:18:47.2070904Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T03:18:47.2070985Z 236 │ │ ); 2026-10-24T03:18:47.2071094Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T03:18:47.2071201Z 238 │ │ pending.resolve(exit); 2026-10-24T03:18:47.2071278Z 239 │ │ }); 2026-10-24T03:18:47.2071413Z 240 │ ╰─▶ } 2026-10-24T03:18:47.2071505Z 241 │ }, 2026-10-24T03:18:47.2071584Z ╰──── 2026-10-24T03:18:47.2071590Z 2026-10-24T03:18:47.2071789Z ⚠ react(static-components): Cannot create components during render 2026-10-24T03:18:47.2071965Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T03:18:47.2072055Z 196 │ const { onInput, onResize } = props; 2026-10-24T03:18:47.2072204Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T03:18:47.2072338Z ·  ────────────────┬─────────────── 2026-10-24T03:18:47.2072532Z · ╰── The component is created during render here 2026-10-24T03:18:47.2072661Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T03:18:47.2072715Z 199 │ 2026-10-24T03:18:47.2072781Z 200 │ useEffect(() => { 2026-10-24T03:18:47.2072873Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T03:18:47.2072961Z 202 │ terminalKey: props.terminalKey, 2026-10-24T03:18:47.2073038Z 203 │ native: hasNativeSurface, 2026-10-24T03:18:47.2073178Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T03:18:47.2073267Z 205 │ bufferLen: props.buffer.length, 2026-10-24T03:18:47.2073347Z 206 │ isRunning: props.isRunning, 2026-10-24T03:18:47.2073404Z 207 │ }); 2026-10-24T03:18:47.2073562Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T03:18:47.2073652Z 209 │ const handleNativeInput = useCallback( 2026-10-24T03:18:47.2073769Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T03:18:47.2073867Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T03:18:47.2073928Z 212 │ return; 2026-10-24T03:18:47.2073985Z 213 │ } 2026-10-24T03:18:47.2074076Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T03:18:47.2074233Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T03:18:47.2074296Z 216 │ }); 2026-10-24T03:18:47.2074383Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T03:18:47.2074440Z 218 │ }, 2026-10-24T03:18:47.2074537Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T03:18:47.2074594Z 220 │ ); 2026-10-24T03:18:47.2074684Z 221 │ const handleNativeResize = useCallback( 2026-10-24T03:18:47.2074800Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T03:18:47.2074863Z 223 │ onResize({ 2026-10-24T03:18:47.2074948Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T03:18:47.2075032Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T03:18:47.2075091Z 226 │ }); 2026-10-24T03:18:47.2075147Z 227 │ }, 2026-10-24T03:18:47.2075210Z 228 │ [onResize], 2026-10-24T03:18:47.2075267Z 229 │ ); 2026-10-24T03:18:47.2075320Z 230 │ 2026-10-24T03:18:47.2075484Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T03:18:47.2075603Z 232 │ return ( 2026-10-24T03:18:47.2075710Z 233 │ 2026-10-24T03:18:47.2075791Z 234 │ { 2026-10-24T03:18:47.2077833Z ·  ────┬──── 2026-10-24T03:18:47.2077969Z · ╰── This is the containing effect 2026-10-24T03:18:47.2078044Z 2139 │ setExpandedVideo(null); 2026-10-24T03:18:47.2078128Z ·  ────────┬─────── 2026-10-24T03:18:47.2078307Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2078391Z 2140 │ setExpandedFile(null); 2026-10-24T03:18:47.2078447Z ╰──── 2026-10-24T03:18:47.2079084Z  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-24T03:18:47.2079427Z  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-24T03:18:47.2079430Z 2026-10-24T03:18:47.2079675Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T03:18:47.2079815Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T03:18:47.2079961Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T03:18:47.2080110Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T03:18:47.2080210Z ·  ───────────┬─────────── 2026-10-24T03:18:47.2080380Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T03:18:47.2080540Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T03:18:47.2080594Z ╰──── 2026-10-24T03:18:47.2080695Z  help: Consider removing this import. 2026-10-24T03:18:47.2080698Z 2026-10-24T03:18:47.2080914Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T03:18:47.2081048Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T03:18:47.2081199Z 91 │ import { 2026-10-24T03:18:47.2081321Z 92 │ createContext, 2026-10-24T03:18:47.2081427Z ·  ──────┬────── 2026-10-24T03:18:47.2081564Z · ╰── 'createContext' is imported here 2026-10-24T03:18:47.2081623Z 93 │ memo, 2026-10-24T03:18:47.2081677Z ╰──── 2026-10-24T03:18:47.2081778Z  help: Consider removing this import. 2026-10-24T03:18:47.2081781Z 2026-10-24T03:18:47.2081998Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T03:18:47.2082208Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T03:18:47.2082269Z 107 │ import { 2026-10-24T03:18:47.2082339Z 108 │ ActivityIndicator, 2026-10-24T03:18:47.2082420Z ·  ────────┬──────── 2026-10-24T03:18:47.2082577Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T03:18:47.2082639Z 109 │ Image, 2026-10-24T03:18:47.2082693Z ╰──── 2026-10-24T03:18:47.2082789Z  help: Consider removing this import. 2026-10-24T03:18:47.2082791Z 2026-10-24T03:18:47.2083000Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T03:18:47.2083135Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T03:18:47.2083198Z 114 │ Pressable, 2026-10-24T03:18:47.2083260Z 115 │ ScrollView, 2026-10-24T03:18:47.2083335Z ·  ─────┬──── 2026-10-24T03:18:47.2083471Z · ╰── 'ScrollView' is imported here 2026-10-24T03:18:47.2083534Z 116 │ StyleSheet, 2026-10-24T03:18:47.2083585Z ╰──── 2026-10-24T03:18:47.2083690Z  help: Consider removing this import. 2026-10-24T03:18:47.2083695Z 2026-10-24T03:18:47.2083903Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T03:18:47.2084038Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T03:18:47.2084098Z 116 │ StyleSheet, 2026-10-24T03:18:47.2084167Z 117 │ Text as NativeText, 2026-10-24T03:18:47.2084249Z ·  ─────┬──── 2026-10-24T03:18:47.2084390Z · ╰── 'NativeText' is imported here 2026-10-24T03:18:47.2084457Z 118 │ type ColorValue, 2026-10-24T03:18:47.2084509Z ╰──── 2026-10-24T03:18:47.2084608Z  help: Consider removing this import. 2026-10-24T03:18:47.2084610Z 2026-10-24T03:18:47.2084909Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T03:18:47.2085130Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T03:18:47.2085270Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T03:18:47.2085399Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T03:18:47.2085490Z ·  ─────────┬──────── 2026-10-24T03:18:47.2085648Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T03:18:47.2085949Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T03:18:47.2086005Z ╰──── 2026-10-24T03:18:47.2086102Z  help: Consider removing this import. 2026-10-24T03:18:47.2086105Z 2026-10-24T03:18:47.2086336Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T03:18:47.2086470Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T03:18:47.2086607Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T03:18:47.2086804Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T03:18:47.2086945Z ·  ─────────┬───────── 2026-10-24T03:18:47.2087156Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T03:18:47.2087217Z 144 │ import { 2026-10-24T03:18:47.2087270Z ╰──── 2026-10-24T03:18:47.2087366Z  help: Consider removing this import. 2026-10-24T03:18:47.2087368Z 2026-10-24T03:18:47.2087582Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T03:18:47.2087723Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T03:18:47.2087878Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T03:18:47.2088018Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T03:18:47.2088106Z ·  ────────┬─────── 2026-10-24T03:18:47.2088259Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T03:18:47.2088399Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T03:18:47.2088452Z ╰──── 2026-10-24T03:18:47.2088548Z  help: Consider removing this import. 2026-10-24T03:18:47.2088550Z 2026-10-24T03:18:47.2088781Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T03:18:47.2088921Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T03:18:47.2089008Z 160 │ attachmentVideoPreviewSource, 2026-10-24T03:18:47.2089080Z 161 │ mediaVideoPreviewUri, 2026-10-24T03:18:47.2089167Z ·  ──────────┬───────── 2026-10-24T03:18:47.2089323Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T03:18:47.2089398Z 162 │ mediaVideoThumbnailKey, 2026-10-24T03:18:47.2089449Z ╰──── 2026-10-24T03:18:47.2089546Z  help: Consider removing this import. 2026-10-24T03:18:47.2089548Z 2026-10-24T03:18:47.2089774Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T03:18:47.2089908Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T03:18:47.2089977Z 161 │ mediaVideoPreviewUri, 2026-10-24T03:18:47.2090146Z 162 │ mediaVideoThumbnailKey, 2026-10-24T03:18:47.2090313Z ·  ───────────┬────────── 2026-10-24T03:18:47.2090499Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T03:18:47.2090579Z 163 │ type MediaVideoPreviewSource, 2026-10-24T03:18:47.2090634Z ╰──── 2026-10-24T03:18:47.2090731Z  help: Consider removing this import. 2026-10-24T03:18:47.2090734Z 2026-10-24T03:18:47.2090954Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T03:18:47.2091151Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T03:18:47.2091231Z 162 │ mediaVideoThumbnailKey, 2026-10-24T03:18:47.2091312Z 163 │ type MediaVideoPreviewSource, 2026-10-24T03:18:47.2091408Z ·  ───────────┬─────────── 2026-10-24T03:18:47.2091581Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T03:18:47.2091673Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T03:18:47.2091726Z ╰──── 2026-10-24T03:18:47.2091822Z  help: Consider removing this import. 2026-10-24T03:18:47.2091824Z 2026-10-24T03:18:47.2092023Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T03:18:47.2092158Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T03:18:47.2092339Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T03:18:47.2092483Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T03:18:47.2092576Z ·  ───────┬─────── 2026-10-24T03:18:47.2092733Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T03:18:47.2092796Z 172 │ import { 2026-10-24T03:18:47.2092850Z ╰──── 2026-10-24T03:18:47.2092945Z  help: Consider removing this import. 2026-10-24T03:18:47.2092948Z 2026-10-24T03:18:47.2093179Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T03:18:47.2093310Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T03:18:47.2093370Z 185 │ import { 2026-10-24T03:18:47.2093447Z 186 │ resolveMarkdownFontSizes, 2026-10-24T03:18:47.2093538Z ·  ────────────┬─────────── 2026-10-24T03:18:47.2093702Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T03:18:47.2093796Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T03:18:47.2093851Z ╰──── 2026-10-24T03:18:47.2093945Z  help: Consider removing this import. 2026-10-24T03:18:47.2093947Z 2026-10-24T03:18:47.2094178Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T03:18:47.2094312Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T03:18:47.2094450Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T03:18:47.2094588Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T03:18:47.2094685Z ·  ───────────┬────────── 2026-10-24T03:18:47.2094850Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T03:18:47.2094910Z 192 │ import { 2026-10-24T03:18:47.2094961Z ╰──── 2026-10-24T03:18:47.2095135Z  help: Consider removing this import. 2026-10-24T03:18:47.2095171Z 2026-10-24T03:18:47.2095498Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T03:18:47.2095633Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T03:18:47.2095710Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T03:18:47.2095807Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T03:18:47.2095921Z ·  ──────────────────┬────────────────── 2026-10-24T03:18:47.2096201Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T03:18:47.2096275Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T03:18:47.2096329Z ╰──── 2026-10-24T03:18:47.2096433Z  help: Consider removing this import. 2026-10-24T03:18:47.2096438Z 2026-10-24T03:18:47.2096720Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T03:18:47.2096925Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T03:18:47.2097048Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T03:18:47.2097122Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T03:18:47.2097213Z ·  ───────────┬─────────── 2026-10-24T03:18:47.2097372Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T03:18:47.2097460Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T03:18:47.2097514Z ╰──── 2026-10-24T03:18:47.2097610Z  help: Consider removing this import. 2026-10-24T03:18:47.2097612Z 2026-10-24T03:18:47.2097847Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T03:18:47.2097984Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T03:18:47.2098089Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T03:18:47.2098238Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T03:18:47.2098340Z ·  ────────────┬─────────── 2026-10-24T03:18:47.2098507Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T03:18:47.2098567Z 235 │ import { 2026-10-24T03:18:47.2098621Z ╰──── 2026-10-24T03:18:47.2098716Z  help: Consider removing this import. 2026-10-24T03:18:47.2098719Z 2026-10-24T03:18:47.2098940Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T03:18:47.2099077Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T03:18:47.2099143Z 237 │ useAssetUrl, 2026-10-24T03:18:47.2099212Z 238 │ useAssetUrlState, 2026-10-24T03:18:47.2099291Z ·  ────────┬─────── 2026-10-24T03:18:47.2099437Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T03:18:47.2099508Z 239 │ useRefreshAssetUrl, 2026-10-24T03:18:47.2099561Z ╰──── 2026-10-24T03:18:47.2099654Z  help: Consider removing this import. 2026-10-24T03:18:47.2099656Z 2026-10-24T03:18:47.2099866Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2100005Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T03:18:47.2100166Z 2140 │ setExpandedFile(null); 2026-10-24T03:18:47.2100417Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T03:18:47.2100649Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T03:18:47.2100953Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T03:18:47.2101237Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T03:18:47.2101409Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T03:18:47.2101552Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T03:18:47.2101616Z ╰──── 2026-10-24T03:18:47.2101921Z  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-24T03:18:47.2102241Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2102244Z 2026-10-24T03:18:47.2102449Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2102587Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T03:18:47.2102687Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T03:18:47.2102804Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T03:18:47.2102885Z ·  ──────┬────── 2026-10-24T03:18:47.2103047Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T03:18:47.2103106Z 2610 │ 2026-10-24T03:18:47.2103160Z ╰──── 2026-10-24T03:18:47.2103457Z  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-24T03:18:47.2103770Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2103773Z 2026-10-24T03:18:47.2103976Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2104116Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T03:18:47.2104173Z 2624 │ } 2026-10-24T03:18:47.2104381Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T03:18:47.2104523Z ·  ──────┬───── 2026-10-24T03:18:47.2104697Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T03:18:47.2104752Z 2626 │ 2026-10-24T03:18:47.2104806Z ╰──── 2026-10-24T03:18:47.2105108Z  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-24T03:18:47.2105509Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2105512Z 2026-10-24T03:18:47.2105714Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2105858Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T03:18:47.2105920Z 2781 │ } 2026-10-24T03:18:47.2106108Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T03:18:47.2106315Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T03:18:47.2106572Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T03:18:47.2106904Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T03:18:47.2107112Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T03:18:47.2107168Z 2783 │ 2026-10-24T03:18:47.2107227Z ╰──── 2026-10-24T03:18:47.2107536Z  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-24T03:18:47.2107859Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2107861Z 2026-10-24T03:18:47.2108046Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:18:47.2108184Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T03:18:47.2108242Z 612 │ }; 2026-10-24T03:18:47.2108362Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T03:18:47.2108564Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T03:18:47.2108818Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T03:18:47.2109020Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T03:18:47.2109192Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T03:18:47.2109249Z 614 │ ); 2026-10-24T03:18:47.2109302Z ╰──── 2026-10-24T03:18:47.2109624Z  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-24T03:18:47.2110023Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2110062Z 2026-10-24T03:18:47.2110294Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2110457Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T03:18:47.2110640Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T03:18:47.2110808Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T03:18:47.2111006Z ·  ─────┬──── 2026-10-24T03:18:47.2111216Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2111362Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T03:18:47.2111416Z ╰──── 2026-10-24T03:18:47.2111710Z  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-24T03:18:47.2112017Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2112019Z 2026-10-24T03:18:47.2112192Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2112353Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T03:18:47.2112433Z 717 │ const snoozePresets = useMemo( 2026-10-24T03:18:47.2112623Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T03:18:47.2112762Z ·  ─────┬──── 2026-10-24T03:18:47.2112946Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2113065Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T03:18:47.2113119Z ╰──── 2026-10-24T03:18:47.2113407Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.2113713Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2113716Z 2026-10-24T03:18:47.2113908Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:18:47.2114068Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T03:18:47.2114249Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T03:18:47.2114368Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T03:18:47.2114466Z ·  ────────────┬─────────── 2026-10-24T03:18:47.2114646Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T03:18:47.2114704Z 720 │ ); 2026-10-24T03:18:47.2114757Z ╰──── 2026-10-24T03:18:47.2115074Z  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-24T03:18:47.2115466Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2115563Z 2026-10-24T03:18:47.2115783Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:18:47.2115940Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T03:18:47.2116011Z 764 │ thread.pinnedAt, 2026-10-24T03:18:47.2116074Z 765 │ variant, 2026-10-24T03:18:47.2116150Z ·  ───┬─── 2026-10-24T03:18:47.2116299Z · ╰── Unnecessary dependency `variant` 2026-10-24T03:18:47.2116386Z 766 │ ], 2026-10-24T03:18:47.2116464Z ╰──── 2026-10-24T03:18:47.2116912Z  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-24T03:18:47.2117423Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2117426Z 2026-10-24T03:18:47.2117625Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.2117788Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T03:18:47.2117923Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T03:18:47.2118063Z 1215 │ 2026-10-24T03:18:47.2118182Z ·  ────────────────────────── 2026-10-24T03:18:47.2118302Z 1216 │ 2026-10-24T03:18:47.2118356Z ╰──── 2026-10-24T03:18:47.2118505Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T03:18:47.2118507Z 2026-10-24T03:18:47.2118771Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2118935Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T03:18:47.2119109Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T03:18:47.2119178Z 113 │ useEffect(() => { 2026-10-24T03:18:47.2119252Z ·  ────┬──── 2026-10-24T03:18:47.2119387Z · ╰── This is the containing effect 2026-10-24T03:18:47.2119556Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T03:18:47.2119621Z 115 │ return; 2026-10-24T03:18:47.2119678Z 116 │ } 2026-10-24T03:18:47.2119798Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T03:18:47.2119869Z ·  ────┬─── 2026-10-24T03:18:47.2120043Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2120166Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T03:18:47.2120218Z ╰──── 2026-10-24T03:18:47.2120850Z  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-24T03:18:47.2121260Z  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-24T03:18:47.2121296Z 2026-10-24T03:18:47.2121572Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T03:18:47.2121715Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T03:18:47.2121770Z 21 │ 2026-10-24T03:18:47.2121929Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T03:18:47.2122021Z ·  ────────┬─────── 2026-10-24T03:18:47.2122218Z · ╰── 'summarizePayload' is declared here 2026-10-24T03:18:47.2122352Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T03:18:47.2122409Z ╰──── 2026-10-24T03:18:47.2122521Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2122523Z 2026-10-24T03:18:47.2122787Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2122951Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T03:18:47.2123013Z 434 │ : null; 2026-10-24T03:18:47.2123079Z 435 │ useEffect(() => { 2026-10-24T03:18:47.2123153Z ·  ────┬──── 2026-10-24T03:18:47.2123285Z · ╰── This is the containing effect 2026-10-24T03:18:47.2123343Z 436 │ if ( 2026-10-24T03:18:47.2123423Z 437 │ props.active === false || 2026-10-24T03:18:47.2123502Z 438 │ activeDraftKey !== null || 2026-10-24T03:18:47.2123591Z 439 │ editingPendingTask !== null || 2026-10-24T03:18:47.2123669Z 440 │ selectedProject === null 2026-10-24T03:18:47.2123727Z 441 │ ) { 2026-10-24T03:18:47.2123789Z 442 │ return; 2026-10-24T03:18:47.2123845Z 443 │ } 2026-10-24T03:18:47.2123914Z 444 │ setActiveDraftKey( 2026-10-24T03:18:47.2124002Z ·  ────────┬──────── 2026-10-24T03:18:47.2124180Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2124254Z 445 │ createNewTaskDraft({ 2026-10-24T03:18:47.2124306Z ╰──── 2026-10-24T03:18:47.2125020Z  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-24T03:18:47.2125432Z  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-24T03:18:47.2125434Z 2026-10-24T03:18:47.2125687Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:18:47.2125973Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T03:18:47.2126081Z 1243 │ 2026-10-24T03:18:47.2126278Z 1244 │ {props.children} 2026-10-24T03:18:47.2126396Z ·  ───────────── 2026-10-24T03:18:47.2126472Z 1245 │ 2026-10-24T03:18:47.2126530Z ╰──── 2026-10-24T03:18:47.2126846Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:18:47.2127070Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:18:47.2127073Z 2026-10-24T03:18:47.2127350Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2127523Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T03:18:47.2127576Z 638 │ 2026-10-24T03:18:47.2127645Z 639 │ useEffect(() => { 2026-10-24T03:18:47.2127717Z ·  ────┬──── 2026-10-24T03:18:47.2127849Z · ╰── This is the containing effect 2026-10-24T03:18:47.2127967Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T03:18:47.2128031Z 641 │ return; 2026-10-24T03:18:47.2128087Z 642 │ } 2026-10-24T03:18:47.2128160Z 643 │ setPendingLaunchEntry({ 2026-10-24T03:18:47.2128252Z ·  ──────────┬────────── 2026-10-24T03:18:47.2128430Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2128502Z 644 │ key: launchTargetKey, 2026-10-24T03:18:47.2128555Z ╰──── 2026-10-24T03:18:47.2129189Z  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-24T03:18:47.2129531Z  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-24T03:18:47.2129536Z 2026-10-24T03:18:47.2129802Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2129977Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T03:18:47.2130029Z 648 │ 2026-10-24T03:18:47.2130096Z 649 │ useEffect(() => { 2026-10-24T03:18:47.2130168Z ·  ────┬──── 2026-10-24T03:18:47.2130300Z · ╰── This is the containing effect 2026-10-24T03:18:47.2130416Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T03:18:47.2130477Z 651 │ return; 2026-10-24T03:18:47.2130622Z 652 │ } 2026-10-24T03:18:47.2130780Z 653 │ setInitialAttachGridEntry({ 2026-10-24T03:18:47.2130899Z ·  ────────────┬──────────── 2026-10-24T03:18:47.2131075Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2131149Z 654 │ key: launchTargetKey, 2026-10-24T03:18:47.2131202Z ╰──── 2026-10-24T03:18:47.2131894Z  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-24T03:18:47.2132234Z  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-24T03:18:47.2132239Z 2026-10-24T03:18:47.2132498Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2132672Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T03:18:47.2132727Z 743 │ 2026-10-24T03:18:47.2132791Z 744 │ useEffect(() => { 2026-10-24T03:18:47.2132863Z ·  ────┬──── 2026-10-24T03:18:47.2132995Z · ╰── This is the containing effect 2026-10-24T03:18:47.2133099Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T03:18:47.2133167Z 746 │ setLastGridSize({ 2026-10-24T03:18:47.2133252Z ·  ───────┬─────── 2026-10-24T03:18:47.2133429Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2133518Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T03:18:47.2133569Z ╰──── 2026-10-24T03:18:47.2134194Z  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-24T03:18:47.2134527Z  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-24T03:18:47.2134530Z 2026-10-24T03:18:47.2134741Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2134921Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T03:18:47.2134980Z 537 │ }); 2026-10-24T03:18:47.2135106Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T03:18:47.2135219Z ·  ───────────┬────────── 2026-10-24T03:18:47.2135471Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T03:18:47.2135635Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T03:18:47.2135689Z ╰──── 2026-10-24T03:18:47.2135997Z  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-24T03:18:47.2136390Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2136430Z 2026-10-24T03:18:47.2136730Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2137001Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T03:18:47.2137117Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T03:18:47.2137187Z 709 │ }, [terminalKey]); 2026-10-24T03:18:47.2137298Z ·  ─────┬───── 2026-10-24T03:18:47.2137483Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T03:18:47.2137539Z 710 │ 2026-10-24T03:18:47.2137593Z ╰──── 2026-10-24T03:18:47.2137901Z  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-24T03:18:47.2138224Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2138226Z 2026-10-24T03:18:47.2138433Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2138605Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T03:18:47.2138663Z 799 │ }; 2026-10-24T03:18:47.2138842Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T03:18:47.2139025Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T03:18:47.2139267Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T03:18:47.2139485Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T03:18:47.2139539Z 801 │ 2026-10-24T03:18:47.2139590Z ╰──── 2026-10-24T03:18:47.2139893Z  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-24T03:18:47.2140217Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2140220Z 2026-10-24T03:18:47.2140367Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2140539Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T03:18:47.2140597Z 792 │ } 2026-10-24T03:18:47.2140707Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T03:18:47.2140824Z ·  ───────────┬─────────── 2026-10-24T03:18:47.2140988Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2141043Z 794 │ 2026-10-24T03:18:47.2141096Z ╰──── 2026-10-24T03:18:47.2141572Z  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-24T03:18:47.2141936Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2141973Z 2026-10-24T03:18:47.2142231Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T03:18:47.2142384Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T03:18:47.2142442Z  80 │ 2026-10-24T03:18:47.2142726Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T03:18:47.2142884Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T03:18:47.2143048Z  83 │ │ ): Effect.fn.Return { 2026-10-24T03:18:47.2143221Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T03:18:47.2143367Z  85 │ │ const connections = new Map(); 2026-10-24T03:18:47.2143439Z  86 │ │ 2026-10-24T03:18:47.2143656Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T03:18:47.2143760Z  88 │ │ Effect.suspend(() => { 2026-10-24T03:18:47.2143902Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T03:18:47.2144016Z  90 │ │ return connection === undefined 2026-10-24T03:18:47.2144235Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T03:18:47.2144348Z  92 │ │ : Effect.succeed(connection); 2026-10-24T03:18:47.2144428Z  93 │ │ }); 2026-10-24T03:18:47.2144504Z  94 │ │ 2026-10-24T03:18:47.2144593Z  95 │ │ const send = ( 2026-10-24T03:18:47.2144696Z  96 │ │ connection: Connection, 2026-10-24T03:18:47.2144791Z  97 │ │ message: unknown, 2026-10-24T03:18:47.2144952Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T03:18:47.2145067Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T03:18:47.2145176Z 100 │ │ Effect.gen(function* () { 2026-10-24T03:18:47.2145303Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T03:18:47.2145448Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T03:18:47.2145667Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T03:18:47.2145750Z 104 │ │ } 2026-10-24T03:18:47.2145886Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T03:18:47.2145987Z 106 │ │ try: (signal) => 2026-10-24T03:18:47.2146119Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T03:18:47.2146224Z 108 │ │ method: "POST", 2026-10-24T03:18:47.2146317Z 109 │ │ signal, 2026-10-24T03:18:47.2146417Z 110 │ │ headers: { 2026-10-24T03:18:47.2146544Z 111 │ │ "content-type": "application/json", 2026-10-24T03:18:47.2146823Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T03:18:47.2147065Z 113 │ │ authorization: options.authorization, 2026-10-24T03:18:47.2147196Z 114 │ │ ...(connection.sessionId === null 2026-10-24T03:18:47.2147291Z 115 │ │ ? {} 2026-10-24T03:18:47.2147439Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T03:18:47.2147577Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T03:18:47.2147686Z 118 │ │ ? {} 2026-10-24T03:18:47.2147914Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T03:18:47.2148003Z 120 │ │ }, 2026-10-24T03:18:47.2148101Z 121 │ │ body, 2026-10-24T03:18:47.2148190Z 122 │ │ }), 2026-10-24T03:18:47.2148293Z 123 │ │ catch: bridgeError, 2026-10-24T03:18:47.2148375Z 124 │ │ }); 2026-10-24T03:18:47.2148593Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T03:18:47.2148696Z 126 │ │ if (!response.ok) { 2026-10-24T03:18:47.2148803Z 127 │ │ yield* Effect.promise( 2026-10-24T03:18:47.2148993Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T03:18:47.2149076Z 129 │ │ ); 2026-10-24T03:18:47.2149190Z 130 │ │ return yield* Effect.fail( 2026-10-24T03:18:47.2149411Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T03:18:47.2149494Z 132 │ │ ); 2026-10-24T03:18:47.2149573Z 133 │ │ } 2026-10-24T03:18:47.2149786Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T03:18:47.2149908Z 135 │ │ for (const payload of payloads) { 2026-10-24T03:18:47.2150125Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T03:18:47.2150203Z 137 │ │ } 2026-10-24T03:18:47.2150304Z 138 │ │ return payloads; 2026-10-24T03:18:47.2150434Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T03:18:47.2150511Z 140 │ │ ); 2026-10-24T03:18:47.2150582Z 141 │ │ 2026-10-24T03:18:47.2150760Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T03:18:47.2150888Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T03:18:47.2151076Z 144 │ │ ): Effect.fn.Return { 2026-10-24T03:18:47.2151245Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T03:18:47.2151373Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T03:18:47.2151495Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T03:18:47.2151670Z 148 │ │ if (sessionId !== null) { 2026-10-24T03:18:47.2151890Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T03:18:47.2151990Z 150 │ │ try: (signal) => 2026-10-24T03:18:47.2152123Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T03:18:47.2152223Z 152 │ │ method: "DELETE", 2026-10-24T03:18:47.2152315Z 153 │ │ signal, 2026-10-24T03:18:47.2152410Z 154 │ │ headers: { 2026-10-24T03:18:47.2152567Z 155 │ │ authorization: options.authorization, 2026-10-24T03:18:47.2152736Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T03:18:47.2152871Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T03:18:47.2152970Z 158 │ │ ? {} 2026-10-24T03:18:47.2153140Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T03:18:47.2153223Z 160 │ │ }, 2026-10-24T03:18:47.2153307Z 161 │ │ }), 2026-10-24T03:18:47.2153407Z 162 │ │ catch: bridgeError, 2026-10-24T03:18:47.2153487Z 163 │ │ }); 2026-10-24T03:18:47.2153621Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T03:18:47.2153733Z 165 │ │ return yield* Effect.fail( 2026-10-24T03:18:47.2153844Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T03:18:47.2154038Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T03:18:47.2154122Z 168 │ │ ), 2026-10-24T03:18:47.2154200Z 169 │ │ ); 2026-10-24T03:18:47.2154277Z 170 │ │ } 2026-10-24T03:18:47.2154381Z 171 │ │ yield* Effect.promise( 2026-10-24T03:18:47.2154561Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T03:18:47.2154638Z 173 │ │ ); 2026-10-24T03:18:47.2154713Z 174 │ │ } 2026-10-24T03:18:47.2154798Z 175 │ │ return {}; 2026-10-24T03:18:47.2154870Z 176 │ │ }); 2026-10-24T03:18:47.2154938Z 177 │ │ 2026-10-24T03:18:47.2155018Z 178 │ │ return { 2026-10-24T03:18:47.2155272Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T03:18:47.2155475Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T03:18:47.2155589Z 181 │ │ return yield* Effect.fail( 2026-10-24T03:18:47.2155781Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T03:18:47.2155860Z 183 │ │ ); 2026-10-24T03:18:47.2155936Z 184 │ │ } 2026-10-24T03:18:47.2156064Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T03:18:47.2156355Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T03:18:47.2156431Z 187 │ │ } 2026-10-24T03:18:47.2156595Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T03:18:47.2156774Z 189 │ │ connections.set(connectionId, { 2026-10-24T03:18:47.2156966Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T03:18:47.2157124Z 191 │ │ sessionId: null, 2026-10-24T03:18:47.2157291Z 192 │ │ protocolVersion: null, 2026-10-24T03:18:47.2157446Z 193 │ │ nextRequestId: 0, 2026-10-24T03:18:47.2157531Z 194 │ │ }); 2026-10-24T03:18:47.2157636Z 195 │ │ return { connectionId }; 2026-10-24T03:18:47.2157712Z 196 │ │ }), 2026-10-24T03:18:47.2157889Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T03:18:47.2158060Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T03:18:47.2158188Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T03:18:47.2158317Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T03:18:47.2158416Z 201 │ │ jsonrpc: "2.0", 2026-10-24T03:18:47.2158498Z 202 │ │ id, 2026-10-24T03:18:47.2158603Z 203 │ │ method: request.method, 2026-10-24T03:18:47.2158766Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T03:18:47.2158843Z 205 │ │ }); 2026-10-24T03:18:47.2159034Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T03:18:47.2159163Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T03:18:47.2159269Z 208 │ │ if (envelope === null) { 2026-10-24T03:18:47.2159376Z 209 │ │ return yield* Effect.fail( 2026-10-24T03:18:47.2159566Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T03:18:47.2159646Z 211 │ │ ); 2026-10-24T03:18:47.2159722Z 212 │ │ } 2026-10-24T03:18:47.2159841Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T03:18:47.2160041Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T03:18:47.2160116Z 215 │ │ } 2026-10-24T03:18:47.2160365Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T03:18:47.2160510Z 217 │ │ }), 2026-10-24T03:18:47.2160740Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T03:18:47.2160906Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T03:18:47.2161011Z 220 │ │ yield* send(connection, { 2026-10-24T03:18:47.2161109Z 221 │ │ jsonrpc: "2.0", 2026-10-24T03:18:47.2161222Z 222 │ │ method: request.method, 2026-10-24T03:18:47.2161449Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T03:18:47.2161528Z 224 │ │ }); 2026-10-24T03:18:47.2161608Z 225 │ │ }), 2026-10-24T03:18:47.2161698Z 226 │ │ disconnect, 2026-10-24T03:18:47.2161808Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T03:18:47.2161905Z 228 │ │ Effect.forEach( 2026-10-24T03:18:47.2162012Z 229 │ │ [...connections.keys()], 2026-10-24T03:18:47.2162185Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T03:18:47.2162287Z 231 │ │ { discard: true }, 2026-10-24T03:18:47.2162364Z 232 │ │ ), 2026-10-24T03:18:47.2162439Z 233 │ │ ), 2026-10-24T03:18:47.2162511Z 234 │ │ }; 2026-10-24T03:18:47.2162641Z 235 │ ╰─▶ }); 2026-10-24T03:18:47.2162701Z ╰──── 2026-10-24T03:18:47.2162959Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T03:18:47.2162964Z 2026-10-24T03:18:47.2163159Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.2163321Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T03:18:47.2163389Z 71 │ { 2026-10-24T03:18:47.2164478Z ·  ────┬──── 2026-10-24T03:18:47.2164610Z · ╰── This is the containing effect 2026-10-24T03:18:47.2164691Z 60 │ setMountedModes((current) => { 2026-10-24T03:18:47.2164772Z ·  ───────┬─────── 2026-10-24T03:18:47.2164943Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2165026Z 61 │ if (current.has(props.mode)) { 2026-10-24T03:18:47.2165172Z ╰──── 2026-10-24T03:18:47.2166005Z  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-24T03:18:47.2166332Z  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-24T03:18:47.2166336Z 2026-10-24T03:18:47.2166599Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2166871Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T03:18:47.2166953Z 118 │ 2026-10-24T03:18:47.2167046Z 119 │ useEffect(() => { 2026-10-24T03:18:47.2167120Z ·  ────┬──── 2026-10-24T03:18:47.2167254Z · ╰── This is the containing effect 2026-10-24T03:18:47.2167337Z 120 │ if (orientationSettled) return; 2026-10-24T03:18:47.2167451Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T03:18:47.2167524Z 122 │ if (orientation === null) { 2026-10-24T03:18:47.2167607Z 123 │ setOrientationSettled(true); 2026-10-24T03:18:47.2167699Z ·  ──────────┬────────── 2026-10-24T03:18:47.2167875Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2167937Z 124 │ return; 2026-10-24T03:18:47.2167991Z ╰──── 2026-10-24T03:18:47.2168597Z  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-24T03:18:47.2168936Z  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-24T03:18:47.2168939Z 2026-10-24T03:18:47.2169196Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2169368Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T03:18:47.2169423Z 292 │ 2026-10-24T03:18:47.2169488Z 293 │ useEffect(() => { 2026-10-24T03:18:47.2169561Z ·  ────┬──── 2026-10-24T03:18:47.2169695Z · ╰── This is the containing effect 2026-10-24T03:18:47.2169757Z 294 │ if ( 2026-10-24T03:18:47.2169823Z 295 │ scene === null || 2026-10-24T03:18:47.2169899Z 296 │ requestedScene === null || 2026-10-24T03:18:47.2169978Z 297 │ scene !== requestedScene || 2026-10-24T03:18:47.2170044Z 298 │ !hasFixture || 2026-10-24T03:18:47.2170117Z 299 │ !orientationSettled || 2026-10-24T03:18:47.2170185Z 300 │ !themeApplied || 2026-10-24T03:18:47.2170304Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T03:18:47.2170444Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T03:18:47.2170501Z 303 │ ) { 2026-10-24T03:18:47.2170569Z 304 │ setReadyScene(null); 2026-10-24T03:18:47.2170651Z ·  ──────┬────── 2026-10-24T03:18:47.2170917Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2171042Z 305 │ return; 2026-10-24T03:18:47.2171120Z ╰──── 2026-10-24T03:18:47.2171768Z  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-24T03:18:47.2172161Z  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-24T03:18:47.2172164Z 2026-10-24T03:18:47.2172450Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.2172625Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T03:18:47.2172694Z 127 │ let cancelled = false; 2026-10-24T03:18:47.2172787Z 128 │ let lastOutcome: string | null = null; 2026-10-24T03:18:47.2172868Z ·  ─────┬───── 2026-10-24T03:18:47.2173007Z · ╰── 'lastOutcome' is declared here 2026-10-24T03:18:47.2173188Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T03:18:47.2173242Z ╰──── 2026-10-24T03:18:47.2173350Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2173353Z 2026-10-24T03:18:47.2173567Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T03:18:47.2173743Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T03:18:47.2173821Z 14 │ } from "@t3tools/contracts"; 2026-10-24T03:18:47.2173913Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T03:18:47.2173984Z ·  ── 2026-10-24T03:18:47.2174168Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T03:18:47.2174222Z ╰──── 2026-10-24T03:18:47.2174306Z  help: Remove empty braces 2026-10-24T03:18:47.2174309Z 2026-10-24T03:18:47.2174587Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.2174735Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T03:18:47.2174788Z 60 │ ) { 2026-10-24T03:18:47.2174963Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T03:18:47.2175047Z ·  ──────┬────── 2026-10-24T03:18:47.2175188Z · ╰── 'useDragRegion' is declared here 2026-10-24T03:18:47.2175279Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T03:18:47.2175331Z ╰──── 2026-10-24T03:18:47.2175439Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2175441Z 2026-10-24T03:18:47.2175597Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2175759Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T03:18:47.2175813Z 35 │ 2026-10-24T03:18:47.2175955Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T03:18:47.2176121Z ·  ────────┬──────── 2026-10-24T03:18:47.2176359Z · ╰── `inspectorProgress` originates here 2026-10-24T03:18:47.2176454Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T03:18:47.2176591Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T03:18:47.2176645Z 39 │ 2026-10-24T03:18:47.2176793Z 40 │ const onClosed = props.onClosed; 2026-10-24T03:18:47.2176896Z 41 │ useEffect(() => { 2026-10-24T03:18:47.2177035Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T03:18:47.2177162Z ·  ────────┬──────── 2026-10-24T03:18:47.2177334Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T03:18:47.2177414Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T03:18:47.2177467Z ╰──── 2026-10-24T03:18:47.2177744Z  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-24T03:18:47.2178065Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2178068Z 2026-10-24T03:18:47.2178229Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2178393Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T03:18:47.2178486Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T03:18:47.2178616Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T03:18:47.2178708Z ·  ──────────┬───────── 2026-10-24T03:18:47.2178872Z · ╰── `renderedContentWidth` originates here 2026-10-24T03:18:47.2178928Z 39 │ 2026-10-24T03:18:47.2179006Z 40 │ const onClosed = props.onClosed; 2026-10-24T03:18:47.2179071Z 41 │ useEffect(() => { 2026-10-24T03:18:47.2179161Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T03:18:47.2179238Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T03:18:47.2179308Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T03:18:47.2179376Z 45 │ (finished) => { 2026-10-24T03:18:47.2179517Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T03:18:47.2179592Z 47 │ runOnJS(onClosed)(); 2026-10-24T03:18:47.2179649Z 48 │ } 2026-10-24T03:18:47.2179707Z 49 │ }, 2026-10-24T03:18:47.2179763Z 50 │ ); 2026-10-24T03:18:47.2179897Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T03:18:47.2180048Z 52 │ renderedInspectorWidth.set( 2026-10-24T03:18:47.2180278Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T03:18:47.2180334Z 54 │ ); 2026-10-24T03:18:47.2180387Z 55 │ }, [ 2026-10-24T03:18:47.2180457Z 56 │ inspectorProgress, 2026-10-24T03:18:47.2180525Z 57 │ inspectorVisible, 2026-10-24T03:18:47.2180590Z 58 │ inspectorWidth, 2026-10-24T03:18:47.2180650Z 59 │ onClosed, 2026-10-24T03:18:47.2180724Z 60 │ renderedInspectorWidth, 2026-10-24T03:18:47.2180785Z 61 │ resizing, 2026-10-24T03:18:47.2180841Z 62 │ ]); 2026-10-24T03:18:47.2180900Z 63 │ 2026-10-24T03:18:47.2181000Z 64 │ useEffect(() => { 2026-10-24T03:18:47.2181121Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T03:18:47.2181208Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T03:18:47.2181312Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T03:18:47.2181405Z ·  ──────────┬───────── 2026-10-24T03:18:47.2181570Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T03:18:47.2181630Z 68 │ return; 2026-10-24T03:18:47.2181681Z ╰──── 2026-10-24T03:18:47.2181954Z  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-24T03:18:47.2182274Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2182276Z 2026-10-24T03:18:47.2182451Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.2182650Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T03:18:47.2182708Z 52 │ 2026-10-24T03:18:47.2182774Z 53 │ for (const {} of [ 2026-10-24T03:18:47.2182848Z ·  ── 2026-10-24T03:18:47.2182913Z 54 │ { healthy: true }, 2026-10-24T03:18:47.2182967Z ╰──── 2026-10-24T03:18:47.2183200Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.2183203Z 2026-10-24T03:18:47.2183470Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.2183614Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T03:18:47.2183671Z 3754 │ 2026-10-24T03:18:47.2183878Z 3755 │ const layer: Layer.Layer = 2026-10-24T03:18:47.2183953Z ·  ──┬── 2026-10-24T03:18:47.2184080Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.2184146Z 3756 │ Layer.effect( 2026-10-24T03:18:47.2184199Z ╰──── 2026-10-24T03:18:47.2184306Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2184308Z 2026-10-24T03:18:47.2184514Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2184681Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-24T03:18:47.2184738Z 214 │ } 2026-10-24T03:18:47.2184808Z 215 │ }, [wrappedRender]); 2026-10-24T03:18:47.2184887Z ·  ──────┬────── 2026-10-24T03:18:47.2185121Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T03:18:47.2185218Z 216 │ 2026-10-24T03:18:47.2185295Z ╰──── 2026-10-24T03:18:47.2185619Z  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-24T03:18:47.2185946Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2185949Z 2026-10-24T03:18:47.2186270Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:18:47.2186434Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-24T03:18:47.2186493Z 816 │ > 2026-10-24T03:18:47.2186607Z 817 │ 2026-10-24T03:18:47.2186790Z ·  ──────────────────── 2026-10-24T03:18:47.2186942Z 818 │ 2026-10-24T03:18:47.2188026Z 832 │ 2026-10-24T03:18:47.2188154Z ·  ──────────────────── 2026-10-24T03:18:47.2188256Z 833 │ 2026-10-24T03:18:47.2188307Z ╰──── 2026-10-24T03:18:47.2188533Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:18:47.2188671Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:18:47.2188674Z 2026-10-24T03:18:47.2188935Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.2189062Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T03:18:47.2189115Z 727 │ 2026-10-24T03:18:47.2189203Z 728 │ const layer = layerWithOptions(); 2026-10-24T03:18:47.2189278Z ·  ──┬── 2026-10-24T03:18:47.2189406Z · ╰── 'layer' is declared here 2026-10-24T03:18:47.2189457Z ╰──── 2026-10-24T03:18:47.2189564Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2189566Z 2026-10-24T03:18:47.2190055Z ⚠ 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-24T03:18:47.2190179Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T03:18:47.2190272Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T03:18:47.2190386Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T03:18:47.2190579Z ·  ────────────────────────── 2026-10-24T03:18:47.2190711Z 130 │ Schema.Struct({ 2026-10-24T03:18:47.2190789Z ╰──── 2026-10-24T03:18:47.2190792Z 2026-10-24T03:18:47.2191148Z ⚠ 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-24T03:18:47.2191272Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T03:18:47.2191455Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T03:18:47.2191639Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T03:18:47.2191718Z ·  ───────── 2026-10-24T03:18:47.2191780Z 19 │ expect( 2026-10-24T03:18:47.2191833Z ╰──── 2026-10-24T03:18:47.2191836Z 2026-10-24T03:18:47.2192182Z ⚠ 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-24T03:18:47.2192304Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T03:18:47.2192365Z 19 │ expect( 2026-10-24T03:18:47.2192540Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T03:18:47.2192616Z ·  ───────── 2026-10-24T03:18:47.2192678Z 21 │ ).toBe(true); 2026-10-24T03:18:47.2192731Z ╰──── 2026-10-24T03:18:47.2192734Z 2026-10-24T03:18:47.2192969Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T03:18:47.2193087Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T03:18:47.2193139Z 11 │ 2026-10-24T03:18:47.2193243Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T03:18:47.2193350Z ·  ────────────┬──────────── 2026-10-24T03:18:47.2193524Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T03:18:47.2193590Z 13 │ readonly thread: { 2026-10-24T03:18:47.2193644Z ╰──── 2026-10-24T03:18:47.2193750Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2193752Z 2026-10-24T03:18:47.2194222Z ⚠ 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-24T03:18:47.2194347Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T03:18:47.2194401Z 499 │ 2026-10-24T03:18:47.2194524Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T03:18:47.2194648Z ·  ────────────────────────── 2026-10-24T03:18:47.2194757Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T03:18:47.2194811Z ╰──── 2026-10-24T03:18:47.2194814Z 2026-10-24T03:18:47.2195272Z ⚠ 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-24T03:18:47.2195398Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T03:18:47.2195572Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T03:18:47.2195836Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T03:18:47.2196083Z ·  ─────────────────── 2026-10-24T03:18:47.2196197Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T03:18:47.2196252Z ╰──── 2026-10-24T03:18:47.2196255Z 2026-10-24T03:18:47.2196780Z ⚠ 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-24T03:18:47.2196944Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T03:18:47.2197132Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T03:18:47.2197242Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T03:18:47.2197363Z ·  ─────────────────── 2026-10-24T03:18:47.2197485Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T03:18:47.2197539Z ╰──── 2026-10-24T03:18:47.2197542Z 2026-10-24T03:18:47.2197770Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T03:18:47.2197892Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T03:18:47.2197950Z 730 │ ); 2026-10-24T03:18:47.2198126Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T03:18:47.2198226Z ·  ────── 2026-10-24T03:18:47.2198348Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T03:18:47.2198400Z ╰──── 2026-10-24T03:18:47.2198590Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T03:18:47.2198596Z 2026-10-24T03:18:47.2198761Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2198928Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T03:18:47.2199027Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T03:18:47.2199123Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T03:18:47.2199208Z ·  ──────┬────── 2026-10-24T03:18:47.2199352Z · ╰── `pulseProgress` originates here 2026-10-24T03:18:47.2199406Z 55 │ 2026-10-24T03:18:47.2199474Z 56 │ useEffect(() => { 2026-10-24T03:18:47.2199540Z 57 │ if (pulse) { 2026-10-24T03:18:47.2199630Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T03:18:47.2199716Z ·  ──────┬────── 2026-10-24T03:18:47.2199867Z · ╰── `pulseProgress` cannot be modified 2026-10-24T03:18:47.2199938Z 59 │ withTiming(1, { 2026-10-24T03:18:47.2199991Z ╰──── 2026-10-24T03:18:47.2200258Z  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-24T03:18:47.2200571Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2200573Z 2026-10-24T03:18:47.2200949Z ⚠ 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-24T03:18:47.2201145Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T03:18:47.2201385Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T03:18:47.2201564Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T03:18:47.2201672Z ·  ────────────────────────── 2026-10-24T03:18:47.2201825Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T03:18:47.2201877Z ╰──── 2026-10-24T03:18:47.2201882Z 2026-10-24T03:18:47.2202169Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:18:47.2202307Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T03:18:47.2202384Z 89 │ let cursor = prompt.length; 2026-10-24T03:18:47.2202493Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T03:18:47.2202603Z ·  ─────── 2026-10-24T03:18:47.2202689Z 91 │ let { start, end } = occurrence; 2026-10-24T03:18:47.2202744Z ╰──── 2026-10-24T03:18:47.2203007Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:18:47.2203010Z 2026-10-24T03:18:47.2203271Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2203445Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T03:18:47.2203500Z 76 │ 2026-10-24T03:18:47.2203567Z 77 │ useEffect(() => { 2026-10-24T03:18:47.2203639Z ·  ────┬──── 2026-10-24T03:18:47.2203778Z · ╰── This is the containing effect 2026-10-24T03:18:47.2203911Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T03:18:47.2203982Z 79 │ setHostInput(host); 2026-10-24T03:18:47.2204058Z ·  ──────┬───── 2026-10-24T03:18:47.2204229Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2204298Z 80 │ setCodeInput(code); 2026-10-24T03:18:47.2204351Z ╰──── 2026-10-24T03:18:47.2204956Z  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-24T03:18:47.2205369Z  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-24T03:18:47.2205404Z 2026-10-24T03:18:47.2205805Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2206009Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T03:18:47.2206064Z 82 │ 2026-10-24T03:18:47.2206128Z 83 │ useEffect(() => { 2026-10-24T03:18:47.2206200Z ·  ────┬──── 2026-10-24T03:18:47.2206333Z · ╰── This is the containing effect 2026-10-24T03:18:47.2206425Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T03:18:47.2206485Z 85 │ return; 2026-10-24T03:18:47.2206541Z 86 │ } 2026-10-24T03:18:47.2206594Z 87 │ 2026-10-24T03:18:47.2206776Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T03:18:47.2206876Z 89 │ setHostInput(host); 2026-10-24T03:18:47.2206990Z ·  ──────┬───── 2026-10-24T03:18:47.2207266Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2207369Z 90 │ setCodeInput(code); 2026-10-24T03:18:47.2207456Z ╰──── 2026-10-24T03:18:47.2208164Z  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-24T03:18:47.2208498Z  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-24T03:18:47.2208503Z 2026-10-24T03:18:47.2208763Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2208933Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T03:18:47.2208984Z 92 │ 2026-10-24T03:18:47.2209049Z 93 │ useEffect(() => { 2026-10-24T03:18:47.2209120Z ·  ────┬──── 2026-10-24T03:18:47.2209249Z · ╰── This is the containing effect 2026-10-24T03:18:47.2209335Z 94 │ if (pairingConnectionError) { 2026-10-24T03:18:47.2209409Z 95 │ setIsSubmitting(false); 2026-10-24T03:18:47.2209491Z ·  ───────┬─────── 2026-10-24T03:18:47.2209667Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2209727Z 96 │ } 2026-10-24T03:18:47.2209780Z ╰──── 2026-10-24T03:18:47.2210380Z  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-24T03:18:47.2210702Z  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-24T03:18:47.2210705Z 2026-10-24T03:18:47.2210998Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T03:18:47.2211224Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T03:18:47.2211366Z 248 │ }, 2026-10-24T03:18:47.2211482Z 249 │ (effect, flow, stopSessions) => 2026-10-24T03:18:47.2211578Z ·  ──────┬───── 2026-10-24T03:18:47.2211732Z · ╰── 'stopSessions' is declared here 2026-10-24T03:18:47.2211798Z 250 │ effect.pipe( 2026-10-24T03:18:47.2211850Z ╰──── 2026-10-24T03:18:47.2211953Z  help: Consider removing this parameter. 2026-10-24T03:18:47.2211956Z 2026-10-24T03:18:47.2212127Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2212337Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T03:18:47.2212394Z 276 │ 2026-10-24T03:18:47.2212587Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T03:18:47.2212688Z 278 │ │ ...nativeProps, 2026-10-24T03:18:47.2212840Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T03:18:47.2212933Z 280 │ │ ref: nativeRef, 2026-10-24T03:18:47.2213065Z 281 │ ├─▶ }); 2026-10-24T03:18:47.2213310Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.2213368Z 282 │ } 2026-10-24T03:18:47.2213422Z ╰──── 2026-10-24T03:18:47.2213908Z  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-24T03:18:47.2214214Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2214217Z 2026-10-24T03:18:47.2214511Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.2214670Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T03:18:47.2214724Z 14 │ 2026-10-24T03:18:47.2214795Z 15 │ const legacyCredentials = { 2026-10-24T03:18:47.2214882Z ·  ────────┬──────── 2026-10-24T03:18:47.2215033Z · ╰── 'legacyCredentials' is declared here 2026-10-24T03:18:47.2215109Z 16 │ version: 1 as const, 2026-10-24T03:18:47.2215162Z ╰──── 2026-10-24T03:18:47.2215271Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2215273Z 2026-10-24T03:18:47.2215531Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T03:18:47.2215648Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T03:18:47.2215700Z 55 │ 2026-10-24T03:18:47.2215801Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T03:18:47.2215915Z ·  ────────────────┬──────────────── 2026-10-24T03:18:47.2216109Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T03:18:47.2216198Z 57 │ selection: TerminalContextSelection, 2026-10-24T03:18:47.2216249Z ╰──── 2026-10-24T03:18:47.2216429Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2216464Z 2026-10-24T03:18:47.2216888Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2217082Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T03:18:47.2217137Z 211 │ }; 2026-10-24T03:18:47.2217206Z 212 │ useEffect(() => { 2026-10-24T03:18:47.2217297Z ·  ────┬──── 2026-10-24T03:18:47.2217489Z · ╰── This is the containing effect 2026-10-24T03:18:47.2217668Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T03:18:47.2217737Z 214 │ if (inserted) { 2026-10-24T03:18:47.2217816Z 215 │ setSelection((current) => 2026-10-24T03:18:47.2217904Z ·  ──────┬───── 2026-10-24T03:18:47.2218078Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2218250Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T03:18:47.2218304Z ╰──── 2026-10-24T03:18:47.2218909Z  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-24T03:18:47.2219236Z  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-24T03:18:47.2219242Z 2026-10-24T03:18:47.2219504Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2219674Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T03:18:47.2219752Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T03:18:47.2219817Z 285 │ useEffect(() => { 2026-10-24T03:18:47.2219888Z ·  ────┬──── 2026-10-24T03:18:47.2220021Z · ╰── This is the containing effect 2026-10-24T03:18:47.2220172Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T03:18:47.2220324Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T03:18:47.2220395Z 288 │ const now = Date.now(); 2026-10-24T03:18:47.2220513Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T03:18:47.2220578Z 290 │ if ( 2026-10-24T03:18:47.2220660Z 291 │ lastRequest?.key === key && 2026-10-24T03:18:47.2220800Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T03:18:47.2220858Z 293 │ ) 2026-10-24T03:18:47.2220922Z 294 │ return; 2026-10-24T03:18:47.2221100Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T03:18:47.2221186Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T03:18:47.2221285Z ·  ────────────┬─────────── 2026-10-24T03:18:47.2221466Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2221529Z 297 │ return; 2026-10-24T03:18:47.2221582Z ╰──── 2026-10-24T03:18:47.2222283Z  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-24T03:18:47.2222698Z  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-24T03:18:47.2222701Z 2026-10-24T03:18:47.2222907Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2223074Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T03:18:47.2223147Z 325 │ }, [ 2026-10-24T03:18:47.2223248Z 326 │ draftMessage, 2026-10-24T03:18:47.2223344Z ·  ──────┬───── 2026-10-24T03:18:47.2223497Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T03:18:47.2223567Z 327 │ environmentId, 2026-10-24T03:18:47.2223622Z ╰──── 2026-10-24T03:18:47.2223929Z  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-24T03:18:47.2224258Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2224261Z 2026-10-24T03:18:47.2224517Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2224676Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T03:18:47.2224744Z 259 │ .join("|"); 2026-10-24T03:18:47.2224812Z 260 │ useEffect(() => { 2026-10-24T03:18:47.2224882Z ·  ────┬──── 2026-10-24T03:18:47.2225014Z · ╰── This is the containing effect 2026-10-24T03:18:47.2225077Z 261 │ stop(); 2026-10-24T03:18:47.2225148Z ·  ──┬─ 2026-10-24T03:18:47.2225314Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2225381Z 262 │ }, [orderVersion]); 2026-10-24T03:18:47.2225435Z ╰──── 2026-10-24T03:18:47.2226067Z  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-24T03:18:47.2226400Z  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-24T03:18:47.2226405Z 2026-10-24T03:18:47.2226627Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:18:47.2226898Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T03:18:47.2226982Z 260 │ useEffect(() => { 2026-10-24T03:18:47.2227043Z 261 │ stop(); 2026-10-24T03:18:47.2227112Z ·  ──┬─ 2026-10-24T03:18:47.2227241Z · ╰── Missing dependency `stop` 2026-10-24T03:18:47.2227309Z 262 │ }, [orderVersion]); 2026-10-24T03:18:47.2227389Z ·  ──────┬───── 2026-10-24T03:18:47.2227612Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T03:18:47.2227722Z 263 │ useEffect( 2026-10-24T03:18:47.2227803Z ╰──── 2026-10-24T03:18:47.2228255Z  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-24T03:18:47.2228654Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2228657Z 2026-10-24T03:18:47.2228805Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2228967Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T03:18:47.2229049Z 95 │ const latest = useRef(props); 2026-10-24T03:18:47.2229119Z 96 │ latest.current = props; 2026-10-24T03:18:47.2229225Z ·  ───┬──────┬─── 2026-10-24T03:18:47.2229407Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.2229524Z · ╰── This value is a ref 2026-10-24T03:18:47.2229591Z 97 │ const gesture = useMemo( 2026-10-24T03:18:47.2229644Z ╰──── 2026-10-24T03:18:47.2230133Z  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-24T03:18:47.2230441Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2230446Z 2026-10-24T03:18:47.2230592Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2230750Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T03:18:47.2230817Z 103 │ .runOnJS(true) 2026-10-24T03:18:47.2230920Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T03:18:47.2231038Z ·  ───────────────┬────────────── 2026-10-24T03:18:47.2231241Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.2231379Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2231432Z ╰──── 2026-10-24T03:18:47.2231997Z  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-24T03:18:47.2232376Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2232379Z 2026-10-24T03:18:47.2232521Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2232681Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T03:18:47.2232777Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T03:18:47.2232968Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2233130Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T03:18:47.2233350Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.2233477Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2233529Z ╰──── 2026-10-24T03:18:47.2233992Z  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-24T03:18:47.2234293Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2234295Z 2026-10-24T03:18:47.2234444Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2234607Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T03:18:47.2234738Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2234860Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2235008Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T03:18:47.2235220Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.2235348Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T03:18:47.2235399Z ╰──── 2026-10-24T03:18:47.2235892Z  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-24T03:18:47.2236193Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2236195Z 2026-10-24T03:18:47.2239125Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2239297Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T03:18:47.2239425Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2239548Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T03:18:47.2239687Z ·  ───────────────────────┬────────────────────── 2026-10-24T03:18:47.2240007Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.2240139Z 108 │ [props.disabled], 2026-10-24T03:18:47.2240217Z ╰──── 2026-10-24T03:18:47.2240716Z  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-24T03:18:47.2241101Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2241104Z 2026-10-24T03:18:47.2241253Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2241422Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T03:18:47.2241538Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T03:18:47.2241645Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T03:18:47.2241752Z ·  ───┬──────┬─── 2026-10-24T03:18:47.2241937Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.2242052Z · ╰── This value is a ref 2026-10-24T03:18:47.2242107Z 250 │ 2026-10-24T03:18:47.2242160Z ╰──── 2026-10-24T03:18:47.2242624Z  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-24T03:18:47.2242924Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2242929Z 2026-10-24T03:18:47.2243083Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2243246Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T03:18:47.2243366Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T03:18:47.2243483Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T03:18:47.2243611Z ·  ──────────────────┬────────────────── 2026-10-24T03:18:47.2243787Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2243905Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T03:18:47.2243961Z ╰──── 2026-10-24T03:18:47.2244442Z  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-24T03:18:47.2244742Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2244744Z 2026-10-24T03:18:47.2244919Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2245082Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T03:18:47.2245151Z 323 │ update(0); 2026-10-24T03:18:47.2245309Z 324 │ let last = performance.now(); 2026-10-24T03:18:47.2245466Z ·  ────────┬──────── 2026-10-24T03:18:47.2245633Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2245779Z 325 │ const tick = () => { 2026-10-24T03:18:47.2245858Z ╰──── 2026-10-24T03:18:47.2246190Z  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-24T03:18:47.2246498Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2246500Z 2026-10-24T03:18:47.2246741Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T03:18:47.2247004Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T03:18:47.2247071Z  98 │ () => 2026-10-24T03:18:47.2247139Z  99 │ Gesture.Pan() 2026-10-24T03:18:47.2247217Z ·  ─┬─ 2026-10-24T03:18:47.2247351Z · ╰── `Pan` may be a component 2026-10-24T03:18:47.2247435Z 100 │ .enabled(!props.disabled) 2026-10-24T03:18:47.2247487Z ╰──── 2026-10-24T03:18:47.2247768Z  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-24T03:18:47.2248219Z  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-24T03:18:47.2248222Z 2026-10-24T03:18:47.2248417Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:18:47.2248582Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T03:18:47.2248651Z 103 │ .runOnJS(true) 2026-10-24T03:18:47.2248754Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T03:18:47.2248842Z ·  ───┬── 2026-10-24T03:18:47.2249281Z · ╰── 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-24T03:18:47.2249416Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2249548Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:18:47.2249675Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T03:18:47.2249743Z 108 │ [props.disabled], 2026-10-24T03:18:47.2249827Z ·  ────────┬─────── 2026-10-24T03:18:47.2250020Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:18:47.2250076Z 109 │ ); 2026-10-24T03:18:47.2250129Z ╰──── 2026-10-24T03:18:47.2250335Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:18:47.2250651Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2250654Z 2026-10-24T03:18:47.2251021Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2251286Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T03:18:47.2251342Z 398 │ 2026-10-24T03:18:47.2251409Z 399 │ useEffect(() => { 2026-10-24T03:18:47.2251484Z ·  ────┬──── 2026-10-24T03:18:47.2251615Z · ╰── This is the containing effect 2026-10-24T03:18:47.2251708Z 400 │ setInspectorSelection((current) => { 2026-10-24T03:18:47.2251798Z ·  ──────────┬────────── 2026-10-24T03:18:47.2252032Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2252151Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T03:18:47.2252205Z ╰──── 2026-10-24T03:18:47.2252821Z  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-24T03:18:47.2253159Z  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-24T03:18:47.2253162Z 2026-10-24T03:18:47.2253386Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T03:18:47.2253541Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T03:18:47.2253705Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T03:18:47.2253886Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T03:18:47.2253988Z 529 │ │ 2026-10-24T03:18:47.2254613Z 534 │ ╰─▶ ); 2026-10-24T03:18:47.2254696Z 535 │ const FilesInspector = () => 2026-10-24T03:18:47.2254749Z ╰──── 2026-10-24T03:18:47.2255053Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T03:18:47.2255087Z 2026-10-24T03:18:47.2255358Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T03:18:47.2255514Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T03:18:47.2255574Z 534 │ ); 2026-10-24T03:18:47.2255747Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T03:18:47.2255917Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T03:18:47.2256077Z 537 │ │ 2026-10-24T03:18:47.2257318Z 545 │ ╰─▶ ) : null; 2026-10-24T03:18:47.2257557Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T03:18:47.2257612Z ╰──── 2026-10-24T03:18:47.2257840Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T03:18:47.2257843Z 2026-10-24T03:18:47.2258092Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T03:18:47.2258235Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T03:18:47.2258361Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T03:18:47.2258607Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T03:18:47.2258730Z 986 │ │ (approval) => approval.requestId, 2026-10-24T03:18:47.2258863Z 987 │ ╰─▶ ); 2026-10-24T03:18:47.2259003Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T03:18:47.2259056Z ╰──── 2026-10-24T03:18:47.2259138Z  help: Switch to `Set` 2026-10-24T03:18:47.2259145Z 2026-10-24T03:18:47.2259405Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2259568Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T03:18:47.2259681Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T03:18:47.2259750Z 38 │ useLayoutEffect(() => { 2026-10-24T03:18:47.2259830Z ·  ───────┬─────── 2026-10-24T03:18:47.2259965Z · ╰── This is the containing effect 2026-10-24T03:18:47.2260028Z 39 │ reset(); 2026-10-24T03:18:47.2260098Z 40 │ setInitialized(true); 2026-10-24T03:18:47.2260175Z ·  ───────┬────── 2026-10-24T03:18:47.2260429Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2260541Z 41 │ }, [reset]); 2026-10-24T03:18:47.2260621Z ╰──── 2026-10-24T03:18:47.2261276Z  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-24T03:18:47.2261671Z  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-24T03:18:47.2261674Z 2026-10-24T03:18:47.2261933Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2262101Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T03:18:47.2262158Z 88 │ 2026-10-24T03:18:47.2262222Z 89 │ useEffect(() => { 2026-10-24T03:18:47.2262295Z ·  ────┬──── 2026-10-24T03:18:47.2262426Z · ╰── This is the containing effect 2026-10-24T03:18:47.2262587Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T03:18:47.2262691Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T03:18:47.2262759Z 92 │ let active = true; 2026-10-24T03:18:47.2262858Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T03:18:47.2262943Z ·  ─────────┬───────── 2026-10-24T03:18:47.2263118Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2263280Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T03:18:47.2263336Z ╰──── 2026-10-24T03:18:47.2263963Z  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-24T03:18:47.2264294Z  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-24T03:18:47.2264299Z 2026-10-24T03:18:47.2264557Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:18:47.2264708Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T03:18:47.2264765Z 150 │ 2026-10-24T03:18:47.2264831Z 151 │ useEffect(() => { 2026-10-24T03:18:47.2264903Z ·  ────┬──── 2026-10-24T03:18:47.2265036Z · ╰── This is the containing effect 2026-10-24T03:18:47.2265122Z 152 │ if (!controlledSelectedPath) { 2026-10-24T03:18:47.2265183Z 153 │ return; 2026-10-24T03:18:47.2265239Z 154 │ } 2026-10-24T03:18:47.2265324Z 155 │ setExpandedPaths((current) => { 2026-10-24T03:18:47.2265407Z ·  ────────┬─────── 2026-10-24T03:18:47.2265579Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:18:47.2265706Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T03:18:47.2265759Z ╰──── 2026-10-24T03:18:47.2266471Z  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-24T03:18:47.2267048Z  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-24T03:18:47.2267052Z 2026-10-24T03:18:47.2267280Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T03:18:47.2267471Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T03:18:47.2267547Z 37 │ get isConnected() { 2026-10-24T03:18:47.2267642Z 38 │ let current: FakeElement | null = this; 2026-10-24T03:18:47.2267720Z ·  ─────── 2026-10-24T03:18:47.2267797Z 39 │ while (current?.parent) { 2026-10-24T03:18:47.2267850Z ╰──── 2026-10-24T03:18:47.2268137Z  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-24T03:18:47.2268139Z 2026-10-24T03:18:47.2268322Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T03:18:47.2268446Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T03:18:47.2268574Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T03:18:47.2268668Z 194 │ const codes = new Array(count); 2026-10-24T03:18:47.2268781Z ·  ──────────────────────── 2026-10-24T03:18:47.2268892Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T03:18:47.2268947Z ╰──── 2026-10-24T03:18:47.2269370Z  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-24T03:18:47.2269373Z 2026-10-24T03:18:47.2269577Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:18:47.2269723Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T03:18:47.2269821Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T03:18:47.2269903Z 257 │ }, [props.path, targetIndex]); 2026-10-24T03:18:47.2269979Z ·  ─────┬──── 2026-10-24T03:18:47.2270132Z · ╰── Unnecessary dependency `props.path` 2026-10-24T03:18:47.2270189Z 258 │ 2026-10-24T03:18:47.2270242Z ╰──── 2026-10-24T03:18:47.2270539Z  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-24T03:18:47.2270861Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:18:47.2270866Z 2026-10-24T03:18:47.2271058Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:18:47.2271210Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T03:18:47.2271284Z 292 │ 2026-10-24T03:18:47.2272605Z ·  ─────────── 2026-10-24T03:18:47.2272673Z 310 │ {body} 2026-10-24T03:18:47.2272728Z ╰──── 2026-10-24T03:18:47.2272882Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T03:18:47.2272887Z 2026-10-24T03:18:47.2273095Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T03:18:47.2273189Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T03:18:47.2273262Z 21 │ EnvironmentThreadShell, 2026-10-24T03:18:47.2273329Z 22 │ ThreadRunSummary, 2026-10-24T03:18:47.2273406Z ·  ────────┬─────── 2026-10-24T03:18:47.2273550Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T03:18:47.2273621Z 23 │ ThreadRuntimeSummary, 2026-10-24T03:18:47.2273674Z ╰──── 2026-10-24T03:18:47.2273773Z  help: Consider removing this import. 2026-10-24T03:18:47.2273776Z 2026-10-24T03:18:47.2273941Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2274117Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T03:18:47.2274174Z 90 │ }) { 2026-10-24T03:18:47.2274287Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T03:18:47.2274363Z ·  ────┬─── 2026-10-24T03:18:47.2274497Z · ╰── `rotation` originates here 2026-10-24T03:18:47.2274566Z 92 │ useLayoutEffect(() => { 2026-10-24T03:18:47.2274708Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T03:18:47.2274781Z ·  ────┬─── 2026-10-24T03:18:47.2274916Z · ╰── `rotation` cannot be modified 2026-10-24T03:18:47.2274993Z 94 │ }, [props.hidden, rotation]); 2026-10-24T03:18:47.2275043Z ╰──── 2026-10-24T03:18:47.2275319Z  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-24T03:18:47.2275630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2275633Z 2026-10-24T03:18:47.2275793Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2275963Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T03:18:47.2276058Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T03:18:47.2276192Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T03:18:47.2276280Z ·  ────────┬──────── 2026-10-24T03:18:47.2276509Z · ╰── `loadingVisibility` originates here 2026-10-24T03:18:47.2276642Z 268 │ useLayoutEffect(() => { 2026-10-24T03:18:47.2276866Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T03:18:47.2276951Z ·  ────────┬──────── 2026-10-24T03:18:47.2277101Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T03:18:47.2277194Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T03:18:47.2277247Z ╰──── 2026-10-24T03:18:47.2277597Z  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-24T03:18:47.2277905Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2277913Z 2026-10-24T03:18:47.2278071Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2278244Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T03:18:47.2278302Z 325 │ }) { 2026-10-24T03:18:47.2278468Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T03:18:47.2278556Z ·  ─────────┬───────── 2026-10-24T03:18:47.2278712Z · ╰── `recordingVisibility` originates here 2026-10-24T03:18:47.2278782Z 327 │ useLayoutEffect(() => { 2026-10-24T03:18:47.2278972Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T03:18:47.2279058Z ·  ─────────┬───────── 2026-10-24T03:18:47.2279220Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T03:18:47.2279315Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T03:18:47.2279368Z ╰──── 2026-10-24T03:18:47.2279638Z  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-24T03:18:47.2279958Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2279961Z 2026-10-24T03:18:47.2280109Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2280270Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T03:18:47.2280537Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T03:18:47.2280748Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T03:18:47.2280874Z ·  ───────────┬────────── 2026-10-24T03:18:47.2281054Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2281175Z 123 │ const sessionRef = useRef(null); 2026-10-24T03:18:47.2281226Z ╰──── 2026-10-24T03:18:47.2281786Z  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-24T03:18:47.2282085Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2282090Z 2026-10-24T03:18:47.2282236Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2282396Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T03:18:47.2282449Z 125 │ 2026-10-24T03:18:47.2282560Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:18:47.2282650Z ·  ─────────┬──────── 2026-10-24T03:18:47.2282800Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2282901Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:18:47.2282955Z ╰──── 2026-10-24T03:18:47.2283430Z  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-24T03:18:47.2283730Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2283733Z 2026-10-24T03:18:47.2283877Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2284039Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T03:18:47.2284093Z 125 │ 2026-10-24T03:18:47.2284201Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:18:47.2284287Z ·  ─────────┬───────── 2026-10-24T03:18:47.2284442Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2284550Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:18:47.2284604Z ╰──── 2026-10-24T03:18:47.2285071Z  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-24T03:18:47.2285362Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2285365Z 2026-10-24T03:18:47.2285509Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2285670Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T03:18:47.2285811Z 125 │ 2026-10-24T03:18:47.2286018Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:18:47.2286362Z ·  ─────────┬───────── 2026-10-24T03:18:47.2286533Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2286632Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:18:47.2286730Z ╰──── 2026-10-24T03:18:47.2287411Z  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-24T03:18:47.2287710Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2287712Z 2026-10-24T03:18:47.2287863Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2288023Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T03:18:47.2288077Z 125 │ 2026-10-24T03:18:47.2288184Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:18:47.2288299Z ·  ──────────┬───────── 2026-10-24T03:18:47.2288468Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2288570Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:18:47.2288623Z ╰──── 2026-10-24T03:18:47.2289093Z  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-24T03:18:47.2289395Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2289398Z 2026-10-24T03:18:47.2289539Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2289700Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T03:18:47.2289813Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:18:47.2290014Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:18:47.2290191Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T03:18:47.2290325Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T03:18:47.2290485Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T03:18:47.2290605Z 131 │ │ isFinished: status.isFinished, 2026-10-24T03:18:47.2290783Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T03:18:47.2290888Z 133 │ │ error: status.error, 2026-10-24T03:18:47.2290988Z 134 │ │ url: status.url, 2026-10-24T03:18:47.2291072Z 135 │ │ }); 2026-10-24T03:18:47.2291150Z 136 │ │ }, 2026-10-24T03:18:47.2291350Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T03:18:47.2291537Z 138 │ │ selectInput: (inputs) => { 2026-10-24T03:18:47.2291791Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T03:18:47.2291941Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T03:18:47.2292107Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T03:18:47.2292250Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T03:18:47.2292353Z 143 │ │ if (order !== known) { 2026-10-24T03:18:47.2292559Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T03:18:47.2292682Z 145 │ │ transform: (current) => ({ 2026-10-24T03:18:47.2292897Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T03:18:47.2292988Z 147 │ │ }), 2026-10-24T03:18:47.2293070Z 148 │ │ }); 2026-10-24T03:18:47.2293148Z 149 │ │ } 2026-10-24T03:18:47.2293292Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T03:18:47.2293370Z 151 │ │ }, 2026-10-24T03:18:47.2293504Z 152 │ ├─▶ }); 2026-10-24T03:18:47.2293744Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T03:18:47.2293831Z 153 │ recorderRef.current = recorder; 2026-10-24T03:18:47.2293884Z ╰──── 2026-10-24T03:18:47.2294359Z  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-24T03:18:47.2294663Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2294666Z 2026-10-24T03:18:47.2294813Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2294979Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T03:18:47.2295040Z 152 │ }); 2026-10-24T03:18:47.2295123Z 153 │ recorderRef.current = recorder; 2026-10-24T03:18:47.2295237Z ·  ─────┬─────────┬─── 2026-10-24T03:18:47.2295433Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.2295554Z · ╰── This value is a ref 2026-10-24T03:18:47.2295663Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:18:47.2295715Z ╰──── 2026-10-24T03:18:47.2296204Z  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-24T03:18:47.2296507Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2296509Z 2026-10-24T03:18:47.2296656Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2297037Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T03:18:47.2297209Z 153 │ recorderRef.current = recorder; 2026-10-24T03:18:47.2297438Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:18:47.2297524Z 155 │ │ recorder, 2026-10-24T03:18:47.2297655Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T03:18:47.2297772Z 157 │ │ requestPermission: async () => { 2026-10-24T03:18:47.2297980Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T03:18:47.2298210Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T03:18:47.2298294Z 160 │ │ }, 2026-10-24T03:18:47.2298437Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T03:18:47.2298575Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T03:18:47.2298710Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T03:18:47.2298823Z 164 │ │ onStateChange: (nextState) => 2026-10-24T03:18:47.2298913Z 165 │ │ setState({ 2026-10-24T03:18:47.2299016Z 166 │ │ state: nextState, 2026-10-24T03:18:47.2299155Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T03:18:47.2299284Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T03:18:47.2299364Z 169 │ │ }), 2026-10-24T03:18:47.2299500Z 170 │ ├─▶ }); 2026-10-24T03:18:47.2299705Z · ╰──── Cannot access ref value during render 2026-10-24T03:18:47.2299763Z 171 │ } 2026-10-24T03:18:47.2299814Z ╰──── 2026-10-24T03:18:47.2300293Z  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-24T03:18:47.2300596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2300598Z 2026-10-24T03:18:47.2300750Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2300915Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T03:18:47.2300997Z 153 │ recorderRef.current = recorder; 2026-10-24T03:18:47.2301101Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:18:47.2301213Z ·  ─────┬────────┬─── 2026-10-24T03:18:47.2301397Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.2301513Z · ╰── This value is a ref 2026-10-24T03:18:47.2301579Z 155 │ recorder, 2026-10-24T03:18:47.2301631Z ╰──── 2026-10-24T03:18:47.2302175Z  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-24T03:18:47.2302562Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2302566Z 2026-10-24T03:18:47.2302708Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2302868Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T03:18:47.2302956Z 184 │ return () => subscription.remove(); 2026-10-24T03:18:47.2303035Z 185 │ }, [controller]); 2026-10-24T03:18:47.2303150Z ·  ─────┬──── 2026-10-24T03:18:47.2303316Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2303371Z 186 │ 2026-10-24T03:18:47.2303429Z ╰──── 2026-10-24T03:18:47.2303913Z  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-24T03:18:47.2304217Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2304219Z 2026-10-24T03:18:47.2304364Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2304524Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T03:18:47.2304611Z 184 │ return () => subscription.remove(); 2026-10-24T03:18:47.2304675Z 185 │ }, [controller]); 2026-10-24T03:18:47.2304760Z ·  ──────┬───── 2026-10-24T03:18:47.2304907Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2304962Z 186 │ 2026-10-24T03:18:47.2305013Z ╰──── 2026-10-24T03:18:47.2305498Z  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-24T03:18:47.2305800Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2305803Z 2026-10-24T03:18:47.2305946Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2306108Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T03:18:47.2306168Z 191 │ }, 2026-10-24T03:18:47.2306241Z 192 │ [controller, recorder], 2026-10-24T03:18:47.2306318Z ·  ─────┬──── 2026-10-24T03:18:47.2306459Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2306515Z 193 │ ); 2026-10-24T03:18:47.2306568Z ╰──── 2026-10-24T03:18:47.2307291Z  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-24T03:18:47.2307588Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2307591Z 2026-10-24T03:18:47.2307808Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2308056Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T03:18:47.2308151Z 174 │ const controller = session.controller; 2026-10-24T03:18:47.2308239Z 175 │ const recorder = recorderRef.current; 2026-10-24T03:18:47.2308344Z ·  ─────────┬───────── 2026-10-24T03:18:47.2308505Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2308559Z 176 │ 2026-10-24T03:18:47.2308612Z ╰──── 2026-10-24T03:18:47.2309164Z  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-24T03:18:47.2309457Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2309460Z 2026-10-24T03:18:47.2309603Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2309759Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T03:18:47.2309816Z 191 │ }, 2026-10-24T03:18:47.2309886Z 192 │ [controller, recorder], 2026-10-24T03:18:47.2309978Z ·  ───────────┬────────── 2026-10-24T03:18:47.2310128Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2310183Z 193 │ ); 2026-10-24T03:18:47.2310234Z ╰──── 2026-10-24T03:18:47.2310720Z  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-24T03:18:47.2311019Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2311021Z 2026-10-24T03:18:47.2311166Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2311325Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T03:18:47.2311419Z 245 │ return () => clearInterval(intervalId); 2026-10-24T03:18:47.2311531Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T03:18:47.2311622Z ·  ─────┬──── 2026-10-24T03:18:47.2311851Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2311959Z 247 │ 2026-10-24T03:18:47.2312039Z ╰──── 2026-10-24T03:18:47.2312534Z  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-24T03:18:47.2312912Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2312915Z 2026-10-24T03:18:47.2313058Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2313217Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T03:18:47.2313313Z 245 │ return () => clearInterval(intervalId); 2026-10-24T03:18:47.2313426Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T03:18:47.2313556Z ·  ────────────────────────┬─────────────────────── 2026-10-24T03:18:47.2313719Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2313773Z 247 │ 2026-10-24T03:18:47.2313826Z ╰──── 2026-10-24T03:18:47.2314290Z  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-24T03:18:47.2314586Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2314591Z 2026-10-24T03:18:47.2314739Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2314897Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T03:18:47.2314969Z 260 │ setOwnerFocused, 2026-10-24T03:18:47.2315029Z 261 │ session, 2026-10-24T03:18:47.2315102Z ·  ───┬─── 2026-10-24T03:18:47.2315241Z · ╰── Cannot access ref value during render 2026-10-24T03:18:47.2315302Z 262 │ stop, 2026-10-24T03:18:47.2315353Z ╰──── 2026-10-24T03:18:47.2315841Z  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-24T03:18:47.2316147Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2316152Z 2026-10-24T03:18:47.2316298Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2316456Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T03:18:47.2316515Z 250 │ 2026-10-24T03:18:47.2316659Z 251 │ ╭─▶ return { 2026-10-24T03:18:47.2317077Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T03:18:47.2317163Z 253 │ │ state, 2026-10-24T03:18:47.2317252Z 254 │ │ audioLevels, 2026-10-24T03:18:47.2317426Z 255 │ │ elapsedSeconds, 2026-10-24T03:18:47.2317611Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T03:18:47.2317723Z 257 │ │ ownerKey, 2026-10-24T03:18:47.2317804Z 258 │ │ label, 2026-10-24T03:18:47.2317897Z 259 │ │ focusedOwners, 2026-10-24T03:18:47.2317994Z 260 │ │ setOwnerFocused, 2026-10-24T03:18:47.2318075Z 261 │ │ session, 2026-10-24T03:18:47.2318156Z 262 │ │ stop, 2026-10-24T03:18:47.2318238Z 263 │ │ cancel, 2026-10-24T03:18:47.2318400Z 264 │ ├─▶ }; 2026-10-24T03:18:47.2318653Z · ╰──── Cannot access ref value during render 2026-10-24T03:18:47.2318714Z 265 │ } 2026-10-24T03:18:47.2318770Z ╰──── 2026-10-24T03:18:47.2319240Z  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-24T03:18:47.2319535Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2319538Z 2026-10-24T03:18:47.2319698Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2319860Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T03:18:47.2320031Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T03:18:47.2320159Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T03:18:47.2320238Z ·  ─────┬───── 2026-10-24T03:18:47.2320378Z · ╰── `audioLevels` originates here 2026-10-24T03:18:47.2320499Z 123 │ const sessionRef = useRef(null); 2026-10-24T03:18:47.2320647Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T03:18:47.2320700Z 125 │ 2026-10-24T03:18:47.2320808Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:18:47.2320910Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:18:47.2321051Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T03:18:47.2321145Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T03:18:47.2321275Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T03:18:47.2321365Z 131 │ isFinished: status.isFinished, 2026-10-24T03:18:47.2321509Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T03:18:47.2321583Z 133 │ error: status.error, 2026-10-24T03:18:47.2321654Z 134 │ url: status.url, 2026-10-24T03:18:47.2321715Z 135 │ }); 2026-10-24T03:18:47.2321773Z 136 │ }, 2026-10-24T03:18:47.2321938Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T03:18:47.2322016Z 138 │ selectInput: (inputs) => { 2026-10-24T03:18:47.2322140Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T03:18:47.2322255Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T03:18:47.2322459Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T03:18:47.2322619Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T03:18:47.2322726Z 143 │ if (order !== known) { 2026-10-24T03:18:47.2322836Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T03:18:47.2322919Z 145 │ transform: (current) => ({ 2026-10-24T03:18:47.2323096Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T03:18:47.2323159Z 147 │ }), 2026-10-24T03:18:47.2323221Z 148 │ }); 2026-10-24T03:18:47.2323279Z 149 │ } 2026-10-24T03:18:47.2323432Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T03:18:47.2323518Z 151 │ }, 2026-10-24T03:18:47.2323576Z 152 │ }); 2026-10-24T03:18:47.2323662Z 153 │ recorderRef.current = recorder; 2026-10-24T03:18:47.2323770Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:18:47.2323833Z 155 │ recorder, 2026-10-24T03:18:47.2323934Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T03:18:47.2324019Z 157 │ requestPermission: async () => { 2026-10-24T03:18:47.2324155Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T03:18:47.2324315Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T03:18:47.2324372Z 160 │ }, 2026-10-24T03:18:47.2324480Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T03:18:47.2324587Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T03:18:47.2324690Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T03:18:47.2324771Z 164 │ onStateChange: (nextState) => 2026-10-24T03:18:47.2324842Z 165 │ setState({ 2026-10-24T03:18:47.2324915Z 166 │ state: nextState, 2026-10-24T03:18:47.2325021Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T03:18:47.2325119Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T03:18:47.2325178Z 169 │ }), 2026-10-24T03:18:47.2325236Z 170 │ }); 2026-10-24T03:18:47.2325291Z 171 │ } 2026-10-24T03:18:47.2325343Z 172 │ 2026-10-24T03:18:47.2325430Z 173 │ const session = sessionRef.current; 2026-10-24T03:18:47.2325519Z 174 │ const controller = session.controller; 2026-10-24T03:18:47.2325606Z 175 │ const recorder = recorderRef.current; 2026-10-24T03:18:47.2325658Z 176 │ 2026-10-24T03:18:47.2325814Z 177 │ useEffect(() => { 2026-10-24T03:18:47.2325973Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T03:18:47.2326126Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T03:18:47.2326269Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T03:18:47.2326377Z 181 │ // calls and route interruptions during capture. 2026-10-24T03:18:47.2326516Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T03:18:47.2326573Z 183 │ }); 2026-10-24T03:18:47.2326657Z 184 │ return () => subscription.remove(); 2026-10-24T03:18:47.2326809Z 185 │ }, [controller]); 2026-10-24T03:18:47.2326891Z 186 │ 2026-10-24T03:18:47.2326967Z 187 │ useEffect( 2026-10-24T03:18:47.2327029Z 188 │ () => () => { 2026-10-24T03:18:47.2327103Z 189 │ controller.dispose(); 2026-10-24T03:18:47.2327172Z 190 │ recorder.release(); 2026-10-24T03:18:47.2327226Z 191 │ }, 2026-10-24T03:18:47.2327386Z 192 │ [controller, recorder], 2026-10-24T03:18:47.2327488Z 193 │ ); 2026-10-24T03:18:47.2327571Z 194 │ 2026-10-24T03:18:47.2327668Z 195 │ useEffect(() => { 2026-10-24T03:18:47.2327787Z 196 │ if (state.phase !== "recording") return; 2026-10-24T03:18:47.2327841Z 197 │ 2026-10-24T03:18:47.2327993Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T03:18:47.2328097Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T03:18:47.2328180Z 200 │ void activation.catch(() => {}); 2026-10-24T03:18:47.2328244Z 201 │ return () => { 2026-10-24T03:18:47.2328488Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T03:18:47.2328650Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T03:18:47.2328707Z 204 │ }; 2026-10-24T03:18:47.2328794Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T03:18:47.2328850Z 206 │ 2026-10-24T03:18:47.2328912Z 207 │ useEffect(() => { 2026-10-24T03:18:47.2329047Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T03:18:47.2329099Z 209 │ 2026-10-24T03:18:47.2329222Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T03:18:47.2329375Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T03:18:47.2329479Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T03:18:47.2329558Z ·  ─────┬───── 2026-10-24T03:18:47.2329701Z · ╰── `audioLevels` cannot be modified 2026-10-24T03:18:47.2329755Z 213 │ } 2026-10-24T03:18:47.2329809Z ╰──── 2026-10-24T03:18:47.2330087Z  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-24T03:18:47.2330402Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2330404Z 2026-10-24T03:18:47.2330608Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:18:47.2330771Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T03:18:47.2330825Z 206 │ 2026-10-24T03:18:47.2330889Z 207 │ useEffect(() => { 2026-10-24T03:18:47.2330966Z ·  ───┬─── 2026-10-24T03:18:47.2331190Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T03:18:47.2331331Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T03:18:47.2331387Z 209 │ 2026-10-24T03:18:47.2331508Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T03:18:47.2331662Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T03:18:47.2331766Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T03:18:47.2331844Z ·  ─────┬───── 2026-10-24T03:18:47.2331977Z · ╰── This modifies `audioLevels` 2026-10-24T03:18:47.2332033Z 213 │ } 2026-10-24T03:18:47.2332085Z ╰──── 2026-10-24T03:18:47.2332430Z  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-24T03:18:47.2332818Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2332853Z 2026-10-24T03:18:47.2333068Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:18:47.2333239Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T03:18:47.2333345Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T03:18:47.2333431Z 66 │ const progress = useSharedValue(0); 2026-10-24T03:18:47.2333505Z ·  ────┬─── 2026-10-24T03:18:47.2333638Z · ╰── `progress` originates here 2026-10-24T03:18:47.2333728Z 67 │ useEffect(() => { 2026-10-24T03:18:47.2333903Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T03:18:47.2333979Z ·  ────┬─── 2026-10-24T03:18:47.2334117Z · ╰── `progress` cannot be modified 2026-10-24T03:18:47.2334190Z 69 │ }, [expanded, progress]); 2026-10-24T03:18:47.2334242Z ╰──── 2026-10-24T03:18:47.2334512Z  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-24T03:18:47.2334820Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:18:47.2334824Z 2026-10-24T03:18:47.2334972Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:18:47.2335140Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T03:18:47.2335227Z 26 │ const latestInput = useRef(input); 2026-10-24T03:18:47.2335306Z 27 │ latestInput.current = input; 2026-10-24T03:18:47.2335419Z ·  ─────┬─────────┬─── 2026-10-24T03:18:47.2335606Z · │ ╰── Cannot update ref value during render 2026-10-24T03:18:47.2335724Z · ╰── This value is a ref 2026-10-24T03:18:47.2335801Z 28 │ const mounted = useRef(true); 2026-10-24T03:18:47.2335854Z ╰──── 2026-10-24T03:18:47.2336327Z  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-24T03:18:47.2336627Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:18:47.2336633Z 2026-10-24T03:18:47.2336986Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T03:18:47.2337227Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T03:18:47.2337302Z 3 │ AuthProvidersManageScope, 2026-10-24T03:18:47.2337373Z 4 │ type AuthSessionState, 2026-10-24T03:18:47.2337459Z ·  ────────┬─────── 2026-10-24T03:18:47.2337607Z · ╰── 'AuthSessionState' is imported here 2026-10-24T03:18:47.2337675Z 5 │ type EnvironmentId, 2026-10-24T03:18:47.2337728Z ╰──── 2026-10-24T03:18:47.2337827Z  help: Consider removing this import. 2026-10-24T03:18:47.2337830Z 2026-10-24T03:18:47.2338075Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2338279Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T03:18:47.2338399Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T03:18:47.2338557Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T03:18:47.2338683Z ·  ─────┬──── 2026-10-24T03:18:47.2338857Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2338948Z 822 │ return AsyncResult.failure( 2026-10-24T03:18:47.2339026Z ╰──── 2026-10-24T03:18:47.2339355Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.2339662Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2339664Z 2026-10-24T03:18:47.2339838Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2339960Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T03:18:47.2340031Z 708 │ const wokeAt = resolved 2026-10-24T03:18:47.2340171Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T03:18:47.2340288Z ·  ─────┬──── 2026-10-24T03:18:47.2340453Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2340519Z 710 │ : null; 2026-10-24T03:18:47.2340577Z ╰──── 2026-10-24T03:18:47.2340855Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.2341159Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2341162Z 2026-10-24T03:18:47.2341634Z ⚠ 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-24T03:18:47.2341769Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T03:18:47.2341827Z 225 │ ) { 2026-10-24T03:18:47.2342108Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.2342296Z 227 │ │ const socket = sockets[index]; 2026-10-24T03:18:47.2342397Z 228 │ │ if (socket) { 2026-10-24T03:18:47.2342492Z 229 │ │ return socket; 2026-10-24T03:18:47.2342567Z 230 │ │ } 2026-10-24T03:18:47.2342671Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2342797Z 232 │ ╰─▶ } 2026-10-24T03:18:47.2342993Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T03:18:47.2343075Z ╰──── 2026-10-24T03:18:47.2343080Z 2026-10-24T03:18:47.2343576Z ⚠ 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-24T03:18:47.2343715Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T03:18:47.2343772Z 239 │ ) { 2026-10-24T03:18:47.2343978Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.2344201Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T03:18:47.2344293Z 242 │ │ if (request) { 2026-10-24T03:18:47.2344388Z 243 │ │ return request; 2026-10-24T03:18:47.2344463Z 244 │ │ } 2026-10-24T03:18:47.2344571Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2344701Z 246 │ ╰─▶ } 2026-10-24T03:18:47.2344868Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T03:18:47.2344922Z ╰──── 2026-10-24T03:18:47.2344924Z 2026-10-24T03:18:47.2345387Z ⚠ 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-24T03:18:47.2345523Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T03:18:47.2345583Z 130 │ ) { 2026-10-24T03:18:47.2345798Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:18:47.2345930Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T03:18:47.2346025Z 133 │ │ return; 2026-10-24T03:18:47.2346105Z 134 │ │ } 2026-10-24T03:18:47.2346213Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2346347Z 136 │ ╰─▶ } 2026-10-24T03:18:47.2346514Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T03:18:47.2346564Z ╰──── 2026-10-24T03:18:47.2346569Z 2026-10-24T03:18:47.2347313Z ⚠ 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-24T03:18:47.2347538Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T03:18:47.2347703Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T03:18:47.2347955Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T03:18:47.2348060Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2348224Z 254 │ ╰─▶ } 2026-10-24T03:18:47.2348396Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T03:18:47.2348450Z ╰──── 2026-10-24T03:18:47.2348452Z 2026-10-24T03:18:47.2348939Z ⚠ 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-24T03:18:47.2349076Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T03:18:47.2349134Z 257 │ 2026-10-24T03:18:47.2349386Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T03:18:47.2349493Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2349623Z 260 │ ╰─▶ } 2026-10-24T03:18:47.2349730Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T03:18:47.2349784Z ╰──── 2026-10-24T03:18:47.2349786Z 2026-10-24T03:18:47.2350251Z ⚠ 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-24T03:18:47.2350384Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T03:18:47.2350446Z 321 │ ); 2026-10-24T03:18:47.2350708Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T03:18:47.2350813Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2350944Z 324 │ ╰─▶ } 2026-10-24T03:18:47.2350998Z 325 │ 2026-10-24T03:18:47.2351051Z ╰──── 2026-10-24T03:18:47.2351054Z 2026-10-24T03:18:47.2351520Z ⚠ 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-24T03:18:47.2351656Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T03:18:47.2351821Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T03:18:47.2352077Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T03:18:47.2352182Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2352313Z 332 │ ╰─▶ } 2026-10-24T03:18:47.2352417Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T03:18:47.2352470Z ╰──── 2026-10-24T03:18:47.2352547Z 2026-10-24T03:18:47.2352843Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T03:18:47.2352951Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T03:18:47.2353039Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T03:18:47.2353134Z 28 │ import { identity } from "effect/Function"; 2026-10-24T03:18:47.2353212Z ·  ────┬─── 2026-10-24T03:18:47.2353349Z · ╰── 'identity' is imported here 2026-10-24T03:18:47.2353464Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T03:18:47.2353546Z ╰──── 2026-10-24T03:18:47.2353659Z  help: Consider removing this import. 2026-10-24T03:18:47.2353662Z 2026-10-24T03:18:47.2354045Z ⚠ 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-24T03:18:47.2354180Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T03:18:47.2354317Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T03:18:47.2354453Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T03:18:47.2354562Z ·  ──────────────────────── 2026-10-24T03:18:47.2354704Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T03:18:47.2354755Z ╰──── 2026-10-24T03:18:47.2354757Z 2026-10-24T03:18:47.2355130Z ⚠ 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-24T03:18:47.2355266Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T03:18:47.2355369Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T03:18:47.2355526Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T03:18:47.2355641Z ·  ──────────────────────── 2026-10-24T03:18:47.2355703Z 257 │ return [ 2026-10-24T03:18:47.2355755Z ╰──── 2026-10-24T03:18:47.2355758Z 2026-10-24T03:18:47.2355927Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2356076Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T03:18:47.2356189Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T03:18:47.2356358Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T03:18:47.2356487Z ·  ─────┬──── 2026-10-24T03:18:47.2356702Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2356785Z 179 │ } 2026-10-24T03:18:47.2356864Z ╰──── 2026-10-24T03:18:47.2357202Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.2357501Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2357503Z 2026-10-24T03:18:47.2357743Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T03:18:47.2357979Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T03:18:47.2358093Z 264 │ ): boolean { 2026-10-24T03:18:47.2358287Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T03:18:47.2358457Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T03:18:47.2358609Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T03:18:47.2358662Z ╰──── 2026-10-24T03:18:47.2358739Z  help: Switch to `Set` 2026-10-24T03:18:47.2358742Z 2026-10-24T03:18:47.2358973Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:18:47.2359127Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T03:18:47.2359271Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T03:18:47.2359426Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T03:18:47.2359549Z ·  ─────┬──── 2026-10-24T03:18:47.2359723Z · ╰── Cannot call impure function 2026-10-24T03:18:47.2359822Z 141 │ onSelect={(selected) => { 2026-10-24T03:18:47.2359875Z ╰──── 2026-10-24T03:18:47.2360157Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:18:47.2360454Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:18:47.2360462Z 2026-10-24T03:18:47.2360744Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:18:47.2360879Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T03:18:47.2360933Z 339 │ 2026-10-24T03:18:47.2361038Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T03:18:47.2361114Z ·  ────┬──── 2026-10-24T03:18:47.2361250Z · ╰── 'layerTest' is declared here 2026-10-24T03:18:47.2361300Z ╰──── 2026-10-24T03:18:47.2361409Z  help: Consider removing this declaration. 2026-10-24T03:18:47.2361412Z 2026-10-24T03:18:47.2361583Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:18:47.2361713Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T03:18:47.2361769Z 265 │ 2026-10-24T03:18:47.2361876Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T03:18:47.2361948Z ·  ── 2026-10-24T03:18:47.2362004Z 267 │ } 2026-10-24T03:18:47.2362055Z ╰──── 2026-10-24T03:18:47.2362289Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:18:47.2362293Z 2026-10-24T03:18:47.2362484Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T03:18:47.2362611Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T03:18:47.2362720Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T03:18:47.2362788Z 187 │ let next = initial; 2026-10-24T03:18:47.2362980Z ·  ──┬─ 2026-10-24T03:18:47.2363186Z · ╰── From this accumulator 2026-10-24T03:18:47.2363271Z 188 │ let receivedSnapshot = false; 2026-10-24T03:18:47.2363349Z 189 │ for (const item of items) { 2026-10-24T03:18:47.2363419Z ·  ─┬─ 2026-10-24T03:18:47.2363528Z · ╰── For this loop 2026-10-24T03:18:47.2363618Z 190 │ if (item.kind === "synchronized") { 2026-10-24T03:18:47.2363687Z 191 │ waiting = false; 2026-10-24T03:18:47.2363779Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T03:18:47.2363958Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T03:18:47.2364057Z ·  ───┬─── 2026-10-24T03:18:47.2364198Z · ╰── From this spread 2026-10-24T03:18:47.2364261Z 194 │ } 2026-10-24T03:18:47.2364313Z ╰──── 2026-10-24T03:18:47.2364469Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T03:18:47.2364631Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T03:18:47.2364635Z 2026-10-24T03:18:47.2364899Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T03:18:47.2365048Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T03:18:47.2365208Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T03:18:47.2365288Z 12 │ this.onmessage = listener; 2026-10-24T03:18:47.2365369Z ·  ───────── 2026-10-24T03:18:47.2365434Z 13 │ } 2026-10-24T03:18:47.2365487Z ╰──── 2026-10-24T03:18:47.2365975Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T03:18:47.2365979Z 2026-10-24T03:18:47.2366193Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T03:18:47.2366341Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T03:18:47.2366408Z 15 │ constructor() { 2026-10-24T03:18:47.2366472Z 16 │ source = this; 2026-10-24T03:18:47.2366546Z ·  ────── 2026-10-24T03:18:47.2366603Z 17 │ } 2026-10-24T03:18:47.2366655Z ╰──── 2026-10-24T03:18:47.2367073Z  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-24T03:18:47.2367078Z 2026-10-24T03:18:47.2367289Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T03:18:47.2367426Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T03:18:47.2367503Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T03:18:47.2367572Z 3 │ type AuthSessionState, 2026-10-24T03:18:47.2367657Z ·  ────────┬─────── 2026-10-24T03:18:47.2367808Z · ╰── 'AuthSessionState' is imported here 2026-10-24T03:18:47.2367878Z 4 │ sessionGrantsScope, 2026-10-24T03:18:47.2367929Z ╰──── 2026-10-24T03:18:47.2368030Z  help: Consider removing this import. 2026-10-24T03:18:47.2368033Z 2026-10-24T03:18:47.2368613Z ⚠ 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-24T03:18:47.2368872Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T03:18:47.2368934Z 168 │ }); 2026-10-24T03:18:47.2369138Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T03:18:47.2369338Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T03:18:47.2369447Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2369638Z 172 │ ╰─▶ } 2026-10-24T03:18:47.2369705Z 173 │ 2026-10-24T03:18:47.2369765Z ╰──── 2026-10-24T03:18:47.2369770Z 2026-10-24T03:18:47.2370257Z ⚠ 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-24T03:18:47.2370407Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T03:18:47.2370518Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T03:18:47.2370716Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T03:18:47.2370852Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T03:18:47.2370958Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2371094Z 181 │ ╰─▶ } 2026-10-24T03:18:47.2371152Z 182 │ 2026-10-24T03:18:47.2371205Z ╰──── 2026-10-24T03:18:47.2371208Z 2026-10-24T03:18:47.2371668Z ⚠ 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-24T03:18:47.2371817Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T03:18:47.2371944Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T03:18:47.2372137Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T03:18:47.2372261Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T03:18:47.2372529Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T03:18:47.2372668Z 310 │ │ break; 2026-10-24T03:18:47.2372772Z 311 │ │ } 2026-10-24T03:18:47.2372879Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T03:18:47.2373012Z 313 │ ╰─▶ } 2026-10-24T03:18:47.2373066Z 314 │ 2026-10-24T03:18:47.2373118Z ╰──── 2026-10-24T03:18:47.2373121Z 2026-10-24T03:18:47.2373326Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T03:18:47.2373523Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T03:18:47.2373607Z 2 │ AuthFilesystemReadScope, 2026-10-24T03:18:47.2373684Z 3 │ type AuthSessionState, 2026-10-24T03:18:47.2373772Z ·  ────────┬─────── 2026-10-24T03:18:47.2373922Z · ╰── 'AuthSessionState' is imported here 2026-10-24T03:18:47.2373997Z 4 │ type FilesystemBrowseEntry, 2026-10-24T03:18:47.2374049Z ╰──── 2026-10-24T03:18:47.2374150Z  help: Consider removing this import. 2026-10-24T03:18:47.2374153Z 2026-10-24T03:18:47.2374369Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T03:18:47.2374473Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T03:18:47.2374618Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T03:18:47.2374737Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T03:18:47.2374830Z ·  ──────┬────── 2026-10-24T03:18:47.2374979Z · ╰── 'HookForwarder' is imported here 2026-10-24T03:18:47.2375086Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T03:18:47.2375139Z ╰──── 2026-10-24T03:18:47.2375239Z  help: Consider removing this import. 2026-10-24T03:18:47.2375241Z 2026-10-24T03:18:47.2375326Z Found 0 errors and 360 warnings in 5409 files (5.2s, 8 threads) 2026-10-24T03:18:47.2892134Z Post job cleanup. 2026-10-24T03:18:47.3558167Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T03:18:47.3637379Z Post job cleanup. 2026-10-24T03:18:47.3646479Z ##[start-action display=Cache full pnpm store;id=__9b546d06-f711-4b8b-896f-c9fcda459c8d.__actions_cache] 2026-10-24T03:18:47.3990563Z Post job cleanup. 2026-10-24T03:18:47.4926271Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-045caa51c4b226597018f0d0c699ccc3936ad58bb7e4b01dc2f26bb9d6fd8aef, not saving cache. 2026-10-24T03:18:47.4964518Z ##[end-action id=__9b546d06-f711-4b8b-896f-c9fcda459c8d.__actions_cache;outcome=success;conclusion=success;duration_ms=131] 2026-10-24T03:18:47.4966450Z ##[start-action display=Cache Vite+;id=__9b546d06-f711-4b8b-896f-c9fcda459c8d.vp_cache] 2026-10-24T03:18:47.4986829Z Post job cleanup. 2026-10-24T03:18:47.5627252Z 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-24T03:18:47.5664338Z ##[end-action id=__9b546d06-f711-4b8b-896f-c9fcda459c8d.vp_cache;outcome=success;conclusion=success;duration_ms=69] 2026-10-24T03:18:47.5701365Z Post job cleanup. 2026-10-24T03:18:47.6122158Z [command]/usr/local/bin/git version 2026-10-24T03:18:47.6151655Z git version 2.55.0 2026-10-24T03:18:47.6169079Z Temporarily overriding HOME='/home/runner/_work/_temp/7e153447-df7e-46dc-92a3-5292c4e66757' before making global git config changes 2026-10-24T03:18:47.6169649Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T03:18:47.6172067Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T03:18:47.6192722Z Removing SSH command configuration 2026-10-24T03:18:47.6195649Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T03:18:47.6217954Z [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-24T03:18:47.6348698Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T03:18:47.6402267Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T03:18:47.6439254Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T03:18:47.6455909Z ##[group]Run '/job_completed.sh' 2026-10-24T03:18:47.6462433Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:18:47.6462602Z env: 2026-10-24T03:18:47.6462715Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 223 2026-10-24T03:18:47.6462864Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 385 2026-10-24T03:18:47.6463005Z BLACKSMITH_CHECK_RUN_ID: 120764327339 2026-10-24T03:18:47.6463144Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T03:18:47.6463281Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T03:18:47.6463415Z ##[endgroup] 2026-10-24T03:18:47.6542446Z Docker container cache not activated, skipping hash computation. 2026-10-24T03:18:47.6855448Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T03:18:47.7283788Z Cleaning up orphan processes