2026-10-23T11:42:04.1252099Z Current runner version: '2.337.0' 2026-10-23T11:42:04.1255593Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-vdjld6son4kmqotb' 2026-10-23T11:42:04.1256273Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-23T11:42:04.1257059Z Machine name: 'ip-172-31-73-130' 2026-10-23T11:42:04.1258655Z ##[group]GITHUB_TOKEN Permissions 2026-10-23T11:42:04.1260035Z Contents: read 2026-10-23T11:42:04.1260440Z Metadata: read 2026-10-23T11:42:04.1261035Z ##[endgroup] 2026-10-23T11:42:04.1262493Z Secret source: None 2026-10-23T11:42:04.1263188Z Cache mode: write 2026-10-23T11:42:04.1263756Z Prepare workflow directory 2026-10-23T11:42:04.1442793Z Prepare all required actions 2026-10-23T11:42:04.1468987Z Getting action download info 2026-10-23T11:42:04.3019163Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-23T11:42:04.3404029Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-23T11:42:04.4481743Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-23T11:42:04.4519522Z Complete job name: Lint 2026-10-23T11:42:04.4852850Z A job started hook has been configured by the self-hosted runner administrator 2026-10-23T11:42:04.4980529Z ##[group]Run '/setup.sh' 2026-10-23T11:42:04.4992116Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T11:42:04.4992531Z env: 2026-10-23T11:42:04.4992757Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:04.4993045Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:04.4993347Z BLACKSMITH_CHECK_RUN_ID: 120394977672 2026-10-23T11:42:04.4993627Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T11:42:04.4993895Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T11:42:04.4994151Z ##[endgroup] 2026-10-23T11:42:04.5226394Z Logging daemon started (blacksmithd for logs) 2026-10-23T11:42:04.5322830Z Results daemon started (blacksmithd for results) 2026-10-23T11:42:04.5451170Z Background adoption and SSH setup started (PID: 3139) 2026-10-23T11:42:04.5451742Z 2026-10-23T11:42:04.5451923Z ---------------------------------------- 2026-10-23T11:42:04.5452658Z View this job: https://app.blacksmith.sh/pingdotgg/runs/39947904684/jobs/120394977672 2026-10-23T11:42:04.5453356Z SSH Access (using your GitHub SSH key): 2026-10-23T11:42:04.5453962Z ssh -p 64002 runner@blacksmith-8vcpu-ubuntu-2404-vdjld6son4kmqotb.vm.blacksmith.sh 2026-10-23T11:42:04.5454268Z 2026-10-23T11:42:04.5454373Z No GitHub SSH key? Add one at: 2026-10-23T11:42:04.5454860Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-23T11:42:04.5455258Z 2026-10-23T11:42:04.5455361Z ---------------------------------------- 2026-10-23T11:42:04.5455544Z 2026-10-23T11:42:04.5455778Z VM ID: blacksmith-8vcpu-ubuntu-2404-vdjld6son4kmqotb 2026-10-23T11:42:04.5456274Z Host: production-152.236.40.132-x8664 2026-10-23T11:42:04.5456704Z Host Agent PID: 3586130 2026-10-23T11:42:04.5457065Z Host Agent Git SHA: af74fd76b 2026-10-23T11:42:04.5457482Z Host CPU Manufacturer: AuthenticAMD 2026-10-23T11:42:04.5457931Z Blacksmith Host Generation: gen 2 2026-10-23T11:42:04.5458372Z Petname: production-just-midge-85df16ad 2026-10-23T11:42:04.5458817Z Region: us-east 2026-10-23T11:42:04.5459183Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-23T11:42:04.5465832Z OS Version: Ubuntu 24.04.4 LTS 2026-10-23T11:42:04.5466750Z 2026-10-23T11:42:04.5467123Z Enabling Blacksmith transparent cache 2026-10-23T11:42:04.5755639Z ##[group]Run actions/checkout@v6 2026-10-23T11:42:04.5755950Z with: 2026-10-23T11:42:04.5756279Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-23T11:42:04.5756673Z sparse-checkout-cone-mode: false 2026-10-23T11:42:04.5756954Z repository: pingdotgg/t3code 2026-10-23T11:42:04.5758772Z token: *** 2026-10-23T11:42:04.5758985Z ssh-strict: true 2026-10-23T11:42:04.5759207Z ssh-user: git 2026-10-23T11:42:04.5759430Z persist-credentials: true 2026-10-23T11:42:04.5759958Z clean: true 2026-10-23T11:42:04.5760167Z fetch-depth: 1 2026-10-23T11:42:04.5760385Z fetch-tags: false 2026-10-23T11:42:04.5760606Z show-progress: true 2026-10-23T11:42:04.5760830Z lfs: false 2026-10-23T11:42:04.5761035Z submodules: false 2026-10-23T11:42:04.5761257Z set-safe-directory: true 2026-10-23T11:42:04.5761514Z allow-unsafe-pr-checkout: false 2026-10-23T11:42:04.5761783Z env: 2026-10-23T11:42:04.5762022Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:04.5762307Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:04.5762587Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:04.5762848Z ##[endgroup] 2026-10-23T11:42:04.7017140Z Syncing repository: pingdotgg/t3code 2026-10-23T11:42:04.7018273Z ##[group]Getting Git version info 2026-10-23T11:42:04.7018744Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-23T11:42:04.7019256Z [command]/usr/local/bin/git version 2026-10-23T11:42:04.7093657Z git version 2.55.0 2026-10-23T11:42:04.7106318Z ##[endgroup] 2026-10-23T11:42:04.7113733Z Temporarily overriding HOME='/home/runner/_work/_temp/a9c95540-fe97-4455-8c4d-1eed6ca32e96' before making global git config changes 2026-10-23T11:42:04.7114412Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T11:42:04.7117278Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T11:42:04.7151092Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-23T11:42:04.7152793Z ##[group]Determining repository object format 2026-10-23T11:42:04.7153942Z ##[endgroup] 2026-10-23T11:42:04.7154341Z ##[group]Initializing the repository 2026-10-23T11:42:04.7157528Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-23T11:42:04.7203495Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-23T11:42:04.7204037Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-23T11:42:04.7204538Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-23T11:42:04.7204920Z hint: call: 2026-10-23T11:42:04.7205133Z hint: 2026-10-23T11:42:04.7205409Z hint: git config --global init.defaultBranch 2026-10-23T11:42:04.7205737Z hint: 2026-10-23T11:42:04.7206035Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-23T11:42:04.7206511Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-23T11:42:04.7206897Z hint: 2026-10-23T11:42:04.7207117Z hint: git branch -m 2026-10-23T11:42:04.7207364Z hint: 2026-10-23T11:42:04.7207690Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-23T11:42:04.7208177Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-23T11:42:04.7209685Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-23T11:42:04.7237723Z ##[endgroup] 2026-10-23T11:42:04.7238162Z ##[group]Disabling automatic garbage collection 2026-10-23T11:42:04.7239860Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-23T11:42:04.7267931Z ##[endgroup] 2026-10-23T11:42:04.7268327Z ##[group]Setting up auth 2026-10-23T11:42:04.7268647Z Removing SSH command configuration 2026-10-23T11:42:04.7273468Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T11:42:04.7302409Z [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-23T11:42:04.7444421Z Removing HTTP extra header 2026-10-23T11:42:04.7448387Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-23T11:42:04.7477861Z [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-23T11:42:04.7584916Z Removing includeIf entries pointing to credentials config files 2026-10-23T11:42:04.7589142Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-23T11:42:04.7615663Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-23T11:42:04.7732586Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-282a9469-de97-47a2-b9d8-ecf3a78ec997.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-23T11:42:04.7760075Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-282a9469-de97-47a2-b9d8-ecf3a78ec997.config 2026-10-23T11:42:04.7783314Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-282a9469-de97-47a2-b9d8-ecf3a78ec997.config 2026-10-23T11:42:04.7805935Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-282a9469-de97-47a2-b9d8-ecf3a78ec997.config 2026-10-23T11:42:04.7827849Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-282a9469-de97-47a2-b9d8-ecf3a78ec997.config 2026-10-23T11:42:04.7847366Z ##[endgroup] 2026-10-23T11:42:04.7847741Z ##[group]Fetching the repository 2026-10-23T11:42:04.7852255Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +377a6780b24b33578b780174c9a0243a7befceaa:refs/remotes/pull/23889/merge 2026-10-23T11:42:05.0777716Z From https://github.com/pingdotgg/t3code 2026-10-23T11:42:05.0778410Z * [new ref] 377a6780b24b33578b780174c9a0243a7befceaa -> pull/23889/merge 2026-10-23T11:42:05.0802571Z ##[endgroup] 2026-10-23T11:42:05.0803223Z ##[group]Determining the checkout info 2026-10-23T11:42:05.0803700Z ##[endgroup] 2026-10-23T11:42:05.0804094Z ##[group]Setting up sparse checkout 2026-10-23T11:42:05.0806785Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-23T11:42:05.0838217Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-23T11:42:05.0857001Z .git/info/sparse-checkout 2026-10-23T11:42:05.0863345Z ##[endgroup] 2026-10-23T11:42:05.0863895Z ##[group]Checking out the ref 2026-10-23T11:42:05.0867235Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/23889/merge 2026-10-23T11:42:13.0596575Z Updating files: 0% (1/6304) 2026-10-23T11:42:13.0627260Z Updating files: 1% (64/6304) 2026-10-23T11:42:13.0645707Z Updating files: 2% (127/6304) 2026-10-23T11:42:13.0668254Z Updating files: 3% (190/6304) 2026-10-23T11:42:13.0690629Z Updating files: 4% (253/6304) 2026-10-23T11:42:13.0725685Z Updating files: 5% (316/6304) 2026-10-23T11:42:13.0748404Z Updating files: 6% (379/6304) 2026-10-23T11:42:13.0816430Z Updating files: 7% (442/6304) 2026-10-23T11:42:13.0861274Z Updating files: 8% (505/6304) 2026-10-23T11:42:13.0888551Z Updating files: 9% (568/6304) 2026-10-23T11:42:13.1126164Z Updating files: 10% (631/6304) 2026-10-23T11:42:13.1201875Z Updating files: 10% (675/6304) 2026-10-23T11:42:13.1218684Z Updating files: 11% (694/6304) 2026-10-23T11:42:13.1230241Z Updating files: 12% (757/6304) 2026-10-23T11:42:13.1245729Z Updating files: 13% (820/6304) 2026-10-23T11:42:13.1262280Z Updating files: 14% (883/6304) 2026-10-23T11:42:13.1280008Z Updating files: 15% (946/6304) 2026-10-23T11:42:13.1300022Z Updating files: 16% (1009/6304) 2026-10-23T11:42:13.1314652Z Updating files: 17% (1072/6304) 2026-10-23T11:42:13.1333823Z Updating files: 18% (1135/6304) 2026-10-23T11:42:13.1349356Z Updating files: 19% (1198/6304) 2026-10-23T11:42:13.1373354Z Updating files: 20% (1261/6304) 2026-10-23T11:42:13.1392551Z Updating files: 21% (1324/6304) 2026-10-23T11:42:13.1411782Z Updating files: 22% (1387/6304) 2026-10-23T11:42:13.1425638Z Updating files: 23% (1450/6304) 2026-10-23T11:42:13.1439117Z Updating files: 24% (1513/6304) 2026-10-23T11:42:13.1455418Z Updating files: 25% (1576/6304) 2026-10-23T11:42:13.1469248Z Updating files: 26% (1640/6304) 2026-10-23T11:42:13.1483349Z Updating files: 27% (1703/6304) 2026-10-23T11:42:13.1504318Z Updating files: 28% (1766/6304) 2026-10-23T11:42:13.1537866Z Updating files: 29% (1829/6304) 2026-10-23T11:42:13.1561304Z Updating files: 30% (1892/6304) 2026-10-23T11:42:13.1588705Z Updating files: 31% (1955/6304) 2026-10-23T11:42:13.1620756Z Updating files: 32% (2018/6304) 2026-10-23T11:42:13.1654375Z Updating files: 33% (2081/6304) 2026-10-23T11:42:13.1726173Z Updating files: 34% (2144/6304) 2026-10-23T11:42:13.1785930Z Updating files: 35% (2207/6304) 2026-10-23T11:42:13.1825156Z Updating files: 36% (2270/6304) 2026-10-23T11:42:13.1865757Z Updating files: 37% (2333/6304) 2026-10-23T11:42:13.1910050Z Updating files: 38% (2396/6304) 2026-10-23T11:42:13.1937366Z Updating files: 39% (2459/6304) 2026-10-23T11:42:13.1969767Z Updating files: 40% (2522/6304) 2026-10-23T11:42:13.2002198Z Updating files: 41% (2585/6304) 2026-10-23T11:42:13.2019464Z Updating files: 42% (2648/6304) 2026-10-23T11:42:13.2030435Z Updating files: 43% (2711/6304) 2026-10-23T11:42:13.2050803Z Updating files: 44% (2774/6304) 2026-10-23T11:42:13.2080579Z Updating files: 45% (2837/6304) 2026-10-23T11:42:13.2104740Z Updating files: 46% (2900/6304) 2026-10-23T11:42:13.2133458Z Updating files: 47% (2963/6304) 2026-10-23T11:42:13.2161199Z Updating files: 48% (3026/6304) 2026-10-23T11:42:13.2193219Z Updating files: 49% (3089/6304) 2026-10-23T11:42:13.2233280Z Updating files: 50% (3152/6304) 2026-10-23T11:42:13.2249385Z Updating files: 51% (3216/6304) 2026-10-23T11:42:13.2283415Z Updating files: 52% (3279/6304) 2026-10-23T11:42:13.2310079Z Updating files: 53% (3342/6304) 2026-10-23T11:42:13.2330722Z Updating files: 54% (3405/6304) 2026-10-23T11:42:13.2354744Z Updating files: 55% (3468/6304) 2026-10-23T11:42:13.2373094Z Updating files: 56% (3531/6304) 2026-10-23T11:42:13.2389465Z Updating files: 57% (3594/6304) 2026-10-23T11:42:13.2409956Z Updating files: 58% (3657/6304) 2026-10-23T11:42:13.2805931Z Updating files: 59% (3720/6304) 2026-10-23T11:42:13.2824240Z Updating files: 60% (3783/6304) 2026-10-23T11:42:13.2844455Z Updating files: 61% (3846/6304) 2026-10-23T11:42:13.2863371Z Updating files: 62% (3909/6304) 2026-10-23T11:42:13.2885510Z Updating files: 63% (3972/6304) 2026-10-23T11:42:13.2912492Z Updating files: 64% (4035/6304) 2026-10-23T11:42:13.2934816Z Updating files: 65% (4098/6304) 2026-10-23T11:42:13.2951013Z Updating files: 66% (4161/6304) 2026-10-23T11:42:13.2976579Z Updating files: 67% (4224/6304) 2026-10-23T11:42:13.2989752Z Updating files: 68% (4287/6304) 2026-10-23T11:42:13.3009557Z Updating files: 69% (4350/6304) 2026-10-23T11:42:13.3022094Z Updating files: 70% (4413/6304) 2026-10-23T11:42:13.3038372Z Updating files: 71% (4476/6304) 2026-10-23T11:42:13.3056484Z Updating files: 72% (4539/6304) 2026-10-23T11:42:13.3081570Z Updating files: 73% (4602/6304) 2026-10-23T11:42:13.3342978Z Updating files: 74% (4665/6304) 2026-10-23T11:42:13.3538381Z Updating files: 75% (4728/6304) 2026-10-23T11:42:13.3561774Z Updating files: 76% (4792/6304) 2026-10-23T11:42:13.3582846Z Updating files: 77% (4855/6304) 2026-10-23T11:42:13.3609821Z Updating files: 78% (4918/6304) 2026-10-23T11:42:13.3628947Z Updating files: 79% (4981/6304) 2026-10-23T11:42:13.3648012Z Updating files: 80% (5044/6304) 2026-10-23T11:42:13.3667293Z Updating files: 81% (5107/6304) 2026-10-23T11:42:13.3687700Z Updating files: 82% (5170/6304) 2026-10-23T11:42:13.3705421Z Updating files: 83% (5233/6304) 2026-10-23T11:42:13.3728178Z Updating files: 84% (5296/6304) 2026-10-23T11:42:13.3748630Z Updating files: 85% (5359/6304) 2026-10-23T11:42:13.3771752Z Updating files: 86% (5422/6304) 2026-10-23T11:42:13.3841170Z Updating files: 87% (5485/6304) 2026-10-23T11:42:13.3874663Z Updating files: 88% (5548/6304) 2026-10-23T11:42:13.3892800Z Updating files: 89% (5611/6304) 2026-10-23T11:42:13.3919003Z Updating files: 90% (5674/6304) 2026-10-23T11:42:13.3954177Z Updating files: 91% (5737/6304) 2026-10-23T11:42:13.3970538Z Updating files: 92% (5800/6304) 2026-10-23T11:42:13.3986991Z Updating files: 93% (5863/6304) 2026-10-23T11:42:13.4008142Z Updating files: 94% (5926/6304) 2026-10-23T11:42:13.4032237Z Updating files: 95% (5989/6304) 2026-10-23T11:42:13.4086530Z Updating files: 96% (6052/6304) 2026-10-23T11:42:13.4112323Z Updating files: 97% (6115/6304) 2026-10-23T11:42:13.4160266Z Updating files: 98% (6178/6304) 2026-10-23T11:42:13.4180305Z Updating files: 99% (6241/6304) 2026-10-23T11:42:13.4180474Z Updating files: 100% (6304/6304) 2026-10-23T11:42:13.4338066Z Updating files: 100% (6304/6304), done. 2026-10-23T11:42:13.4338314Z Note: switching to 'refs/remotes/pull/23889/merge'. 2026-10-23T11:42:13.4338440Z 2026-10-23T11:42:13.4338542Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-23T11:42:13.4338783Z changes and commit them, and you can discard any commits you make in this 2026-10-23T11:42:13.4339020Z state without impacting any branches by switching back to a branch. 2026-10-23T11:42:13.4339159Z 2026-10-23T11:42:13.4339257Z If you want to create a new branch to retain commits you create, you may 2026-10-23T11:42:13.4339482Z do so (now or later) by using -c with the switch command. Example: 2026-10-23T11:42:13.4339609Z 2026-10-23T11:42:13.4339673Z git switch -c 2026-10-23T11:42:13.4339766Z 2026-10-23T11:42:13.4339823Z Or undo this operation with: 2026-10-23T11:42:13.4339910Z 2026-10-23T11:42:13.4339984Z git switch - 2026-10-23T11:42:13.4340058Z 2026-10-23T11:42:13.4340167Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-23T11:42:13.4340321Z 2026-10-23T11:42:13.4340591Z HEAD is now at 377a678 Merge 11753719dd93192fe8015c535feb19430f8ef5ce into 16aaf5ba7d75538c9c004ea7fb7ed62cd6b65e5b 2026-10-23T11:42:13.4351363Z ##[endgroup] 2026-10-23T11:42:13.4392827Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-23T11:42:13.4416249Z 377a6780b24b33578b780174c9a0243a7befceaa 2026-10-23T11:42:13.4508780Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-23T11:42:13.4509048Z files="$(git ls-files .github/pr-assets)" 2026-10-23T11:42:13.4509239Z if test -n "$files"; then 2026-10-23T11:42:13.4509469Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-23T11:42:13.4509684Z  exit 1 2026-10-23T11:42:13.4509793Z fi 2026-10-23T11:42:13.4523485Z shell: /usr/bin/bash -e {0} 2026-10-23T11:42:13.4523636Z env: 2026-10-23T11:42:13.4523758Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:13.4523936Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:13.4524081Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:13.4524217Z ##[endgroup] 2026-10-23T11:42:13.4680447Z Prepare all required actions 2026-10-23T11:42:13.4680807Z Getting action download info 2026-10-23T11:42:13.5804347Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-23T11:42:13.6926170Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-23T11:42:13.6926339Z env: 2026-10-23T11:42:13.6926463Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:13.6926616Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:13.6926767Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:13.6926908Z ##[endgroup] 2026-10-23T11:42:13.7008390Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-23T11:42:13.7024883Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T11:42:13.7025365Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-23T11:42:13.7025673Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T11:42:13.7025921Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-23T11:42:13.7038935Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T11:42:13.7039106Z env: 2026-10-23T11:42:13.7039223Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:13.7039376Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:13.7039525Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:13.7039667Z ##[endgroup] 2026-10-23T11:42:13.7114385Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-23T11:42:13.7116156Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-23T11:42:13.7162823Z ##[group]Run actions/cache@v6 2026-10-23T11:42:13.7162956Z with: 2026-10-23T11:42:13.7163192Z path: ~/.vite-plus 2026-10-23T11:42:13.7163353Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T11:42:13.7163558Z enableCrossOsArchive: false 2026-10-23T11:42:13.7163687Z fail-on-cache-miss: false 2026-10-23T11:42:13.7163813Z lookup-only: false 2026-10-23T11:42:13.7163919Z save-always: false 2026-10-23T11:42:13.7164033Z env: 2026-10-23T11:42:13.7164143Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:13.7164289Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:13.7164433Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:13.7164563Z ##[endgroup] 2026-10-23T11:42:13.9168675Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T11:42:14.2846881Z Received 170349591 of 170349591 (100.0%), 475.0 MBs/sec 2026-10-23T11:42:14.2847254Z Cache Size: ~162 MB (170349591 B) 2026-10-23T11:42:14.2885717Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/3d8210aa-ef5c-43cc-8ce4-f0f8601a5cf4/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T11:42:14.8954684Z Cache restored successfully 2026-10-23T11:42:14.9106068Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-23T11:42:14.9174415Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1205] 2026-10-23T11:42:14.9176817Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-23T11:42:14.9197763Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T11:42:14.9197995Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-23T11:42:14.9198179Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-23T11:42:14.9214699Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T11:42:14.9214895Z env: 2026-10-23T11:42:14.9215031Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:14.9215192Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:14.9215375Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:14.9215567Z ##[endgroup] 2026-10-23T11:42:14.9267906Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-23T11:42:14.9278955Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=10] 2026-10-23T11:42:14.9280824Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-23T11:42:14.9286410Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-23T11:42:14.9288092Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-23T11:42:14.9324852Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-23T11:42:14.9325129Z store_path="$(vp pm cache dir)" 2026-10-23T11:42:14.9325385Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-23T11:42:14.9341245Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T11:42:14.9341506Z env: 2026-10-23T11:42:14.9341686Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:14.9342125Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:14.9342622Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:14.9342804Z ##[endgroup] 2026-10-23T11:42:14.9526892Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=23] 2026-10-23T11:42:14.9528924Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-23T11:42:15.0513090Z ##[group]Run actions/cache@v6 2026-10-23T11:42:15.0513279Z with: 2026-10-23T11:42:15.0513418Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-23T11:42:15.0513704Z key: pnpm-full-v1-Linux-X64-2baa264059789b1dde4bbc8fdc5b8342f31f2fc8e6176e5c5e486efdd242b36c 2026-10-23T11:42:15.0513975Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-23T11:42:15.0514146Z enableCrossOsArchive: false 2026-10-23T11:42:15.0514290Z fail-on-cache-miss: false 2026-10-23T11:42:15.0514423Z lookup-only: false 2026-10-23T11:42:15.0514542Z save-always: false 2026-10-23T11:42:15.0514680Z env: 2026-10-23T11:42:15.0514805Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:15.0514954Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:15.0515110Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:15.0515247Z ##[endgroup] 2026-10-23T11:42:15.2647121Z Cache hit for: pnpm-full-v1-Linux-X64-2baa264059789b1dde4bbc8fdc5b8342f31f2fc8e6176e5c5e486efdd242b36c 2026-10-23T11:42:16.2980573Z Received 503316480 of 994615207 (50.6%), 478.6 MBs/sec 2026-10-23T11:42:17.1755657Z Received 994615207 of 994615207 (100.0%), 504.3 MBs/sec 2026-10-23T11:42:17.1756142Z Cache Size: ~949 MB (994615207 B) 2026-10-23T11:42:17.1798316Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/9fb19b1d-3a8b-48c2-b91d-47205194b042/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T11:42:22.7674526Z Cache restored successfully 2026-10-23T11:42:22.8185417Z Cache restored from key: pnpm-full-v1-Linux-X64-2baa264059789b1dde4bbc8fdc5b8342f31f2fc8e6176e5c5e486efdd242b36c 2026-10-23T11:42:22.8273436Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7874] 2026-10-23T11:42:22.8276974Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-23T11:42:22.8293339Z ##[group]Run vp install 2026-10-23T11:42:22.8293568Z vp install 2026-10-23T11:42:22.8311168Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T11:42:22.8311363Z env: 2026-10-23T11:42:22.8311494Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:22.8311654Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:22.8311804Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:22.8311958Z ##[endgroup] 2026-10-23T11:42:22.8806950Z Scope: all 33 workspace projects 2026-10-23T11:42:23.0096389Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-23T11:42:23.3486560Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-23T11:42:23.3486966Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-23T11:42:23.3487199Z Virtual store is at: node_modules/.pnpm 2026-10-23T11:42:25.7659342Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.8s) 2026-10-23T11:42:25.7659754Z Lockfile is up to date, resolution step is skipped 2026-10-23T11:42:25.7848732Z Packages: +1721 2026-10-23T11:42:25.7849076Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-23T11:42:25.8263836Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-23T11:42:26.9372687Z . prepare$ vp config --no-agent 2026-10-23T11:42:27.0754130Z . prepare: Done 2026-10-23T11:42:27.0779207Z 2026-10-23T11:42:27.0779701Z devDependencies: 2026-10-23T11:42:27.0779969Z + @coderabbitai/config 1.1.0 2026-10-23T11:42:27.0780236Z + @shadcn/lint 0.1.5 2026-10-23T11:42:27.0780514Z + @types/node 24.12.4 2026-10-23T11:42:27.0780727Z + knip 6.34.0 2026-10-23T11:42:27.0780963Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-23T11:42:27.0781224Z + vite-plus 1.3.0 2026-10-23T11:42:27.0781342Z 2026-10-23T11:42:27.0817058Z Done in 4.2s using pnpm v12.14.0 2026-10-23T11:42:27.1028441Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=4275] 2026-10-23T11:42:27.1901693Z ##[group]Run actions/cache@v6 2026-10-23T11:42:27.1901915Z with: 2026-10-23T11:42:27.1902111Z path: ~/.cache/electron 2026-10-23T11:42:27.1902373Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T11:42:27.1902646Z enableCrossOsArchive: false 2026-10-23T11:42:27.1902831Z fail-on-cache-miss: false 2026-10-23T11:42:27.1902984Z lookup-only: false 2026-10-23T11:42:27.1903133Z save-always: false 2026-10-23T11:42:27.1903273Z env: 2026-10-23T11:42:27.1903411Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:27.1903577Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:27.1903754Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:27.1903907Z ##[endgroup] 2026-10-23T11:42:27.4259347Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T11:42:27.6058033Z Received 122906203 of 122906203 (100.0%), 728.0 MBs/sec 2026-10-23T11:42:27.6058351Z Cache Size: ~117 MB (122906203 B) 2026-10-23T11:42:27.6073159Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/c6fb4db4-2d24-4aa8-90dc-819c80de83b9/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-23T11:42:27.6768357Z Cache restored successfully 2026-10-23T11:42:27.6891605Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-23T11:42:27.7009428Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-23T11:42:27.7009700Z vp run --filter @t3tools/desktop ensure:electron 2026-10-23T11:42:27.7024082Z shell: /usr/bin/bash -e {0} 2026-10-23T11:42:27.7024241Z env: 2026-10-23T11:42:27.7024625Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:27.7024781Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:27.7024927Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:27.7025067Z ##[endgroup] 2026-10-23T11:42:27.8934764Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-23T11:42:28.5019904Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-23T11:42:28.5040637Z 2026-10-23T11:42:28.5156686Z ##[group]Run vp run knip:check 2026-10-23T11:42:28.5156914Z vp run knip:check 2026-10-23T11:42:28.5171452Z shell: /usr/bin/bash -e {0} 2026-10-23T11:42:28.5171585Z env: 2026-10-23T11:42:28.5171703Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:42:28.5171925Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:42:28.5172082Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:42:28.5172224Z ##[endgroup] 2026-10-23T11:42:28.7184517Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-23T11:42:33.0039643Z 2026-10-23T11:42:33.0042877Z $ 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-23T11:43:08.0704145Z 2026-10-23T11:43:08.0704912Z --- 2026-10-23T11:43:08.0705334Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-23T11:43:08.0801604Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-23T11:43:08.0801902Z vp run --filter @t3tools/source-control-github generate --check 2026-10-23T11:43:08.0817790Z shell: /usr/bin/bash -e {0} 2026-10-23T11:43:08.0818003Z env: 2026-10-23T11:43:08.0818188Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:43:08.0818430Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:43:08.0818674Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:43:08.0818893Z ##[endgroup] 2026-10-23T11:43:08.2735993Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-23T11:43:08.5079980Z 2026-10-23T11:43:08.5168736Z ##[group]Run vp run --filter t3 generate --check 2026-10-23T11:43:08.5168992Z vp run --filter t3 generate --check 2026-10-23T11:43:08.5182757Z shell: /usr/bin/bash -e {0} 2026-10-23T11:43:08.5182892Z env: 2026-10-23T11:43:08.5183026Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:43:08.5183189Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:43:08.5183336Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:43:08.5183479Z ##[endgroup] 2026-10-23T11:43:08.7025455Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-23T11:43:08.8915592Z 2026-10-23T11:43:08.9005403Z ##[group]Run vp check 2026-10-23T11:43:08.9005596Z vp check 2026-10-23T11:43:08.9021275Z shell: /usr/bin/bash -e {0} 2026-10-23T11:43:08.9021423Z env: 2026-10-23T11:43:08.9021544Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:43:08.9021713Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:43:08.9021868Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-23T11:43:08.9022012Z ##[endgroup] 2026-10-23T11:43:09.6388896Z pass: All 5661 files are correctly formatted (518ms, 8 threads) 2026-10-23T11:43:17.0190886Z warn: Lint warnings found 2026-10-23T11:43:17.0192305Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-23T11:43:17.0193045Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-23T11:43:17.0193421Z 1619 │ 2026-10-23T11:43:17.0193931Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-23T11:43:17.0194544Z ·  ──────────────────┬────────────────── 2026-10-23T11:43:17.0195118Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-23T11:43:17.0195616Z 1621 │ const meta = response._meta; 2026-10-23T11:43:17.0195880Z ╰──── 2026-10-23T11:43:17.0196201Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0196419Z 2026-10-23T11:43:17.0196840Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-23T11:43:17.0197450Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-23T11:43:17.0197794Z 21 │ 2026-10-23T11:43:17.0198174Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-23T11:43:17.0198721Z ·  ────────┬─────── 2026-10-23T11:43:17.0199156Z · ╰── 'summarizePayload' is declared here 2026-10-23T11:43:17.0199593Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-23T11:43:17.0199891Z ╰──── 2026-10-23T11:43:17.0200158Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0200364Z 2026-10-23T11:43:17.0200974Z ⚠ 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-23T11:43:17.0201764Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-23T11:43:17.0202306Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-23T11:43:17.0202895Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T11:43:17.0203463Z ·  ───────── 2026-10-23T11:43:17.0203942Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T11:43:17.0204356Z ╰──── 2026-10-23T11:43:17.0204447Z 2026-10-23T11:43:17.0205037Z ⚠ 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-23T11:43:17.0205823Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-23T11:43:17.0206425Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-23T11:43:17.0207042Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-23T11:43:17.0207498Z ·  ───────── 2026-10-23T11:43:17.0207759Z 52 │ } 2026-10-23T11:43:17.0207949Z ╰──── 2026-10-23T11:43:17.0208066Z 2026-10-23T11:43:17.0208642Z ⚠ 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-23T11:43:17.0209421Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-23T11:43:17.0209794Z 54 │ assert.equal( 2026-10-23T11:43:17.0210480Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T11:43:17.0210990Z ·  ───────── 2026-10-23T11:43:17.0211240Z 56 │ true, 2026-10-23T11:43:17.0211442Z ╰──── 2026-10-23T11:43:17.0211536Z 2026-10-23T11:43:17.0212086Z ⚠ 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-23T11:43:17.0212825Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-23T11:43:17.0213207Z 58 │ assert.equal( 2026-10-23T11:43:17.0213643Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-23T11:43:17.0214080Z ·  ───────── 2026-10-23T11:43:17.0214320Z 60 │ true, 2026-10-23T11:43:17.0214533Z ╰──── 2026-10-23T11:43:17.0214638Z 2026-10-23T11:43:17.0215199Z ⚠ 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-23T11:43:17.0216002Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-23T11:43:17.0216341Z 102 │ 2026-10-23T11:43:17.0216734Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-23T11:43:17.0217160Z ·  ───────── 2026-10-23T11:43:17.0217410Z 104 │ }); 2026-10-23T11:43:17.0217606Z ╰──── 2026-10-23T11:43:17.0217704Z 2026-10-23T11:43:17.0218073Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T11:43:17.0218659Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-23T11:43:17.0218989Z 113 │ const declared = { 2026-10-23T11:43:17.0219287Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T11:43:17.0219654Z ·  ──────────────────────────────── 2026-10-23T11:43:17.0220058Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T11:43:17.0220338Z ╰──── 2026-10-23T11:43:17.0220871Z  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-23T11:43:17.0221276Z 2026-10-23T11:43:17.0221655Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T11:43:17.0222237Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-23T11:43:17.0222617Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-23T11:43:17.0222982Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T11:43:17.0223398Z ·  ──────────────────────────────────────── 2026-10-23T11:43:17.0223768Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T11:43:17.0224047Z ╰──── 2026-10-23T11:43:17.0224598Z  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-23T11:43:17.0225046Z 2026-10-23T11:43:17.0225426Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T11:43:17.0226057Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-23T11:43:17.0226463Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-23T11:43:17.0226817Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-23T11:43:17.0227384Z ·  ──────────────────────────────────── 2026-10-23T11:43:17.0227752Z 117 │ }; 2026-10-23T11:43:17.0227962Z ╰──── 2026-10-23T11:43:17.0228425Z  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-23T11:43:17.0228683Z 2026-10-23T11:43:17.0228885Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0229245Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-23T11:43:17.0229486Z 71 │ { 2026-10-23T11:43:17.0231755Z ·  ────┬──── 2026-10-23T11:43:17.0231982Z · ╰── This is the containing effect 2026-10-23T11:43:17.0232242Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-23T11:43:17.0232434Z 641 │ return; 2026-10-23T11:43:17.0232564Z 642 │ } 2026-10-23T11:43:17.0232719Z 643 │ setPendingLaunchEntry({ 2026-10-23T11:43:17.0232905Z ·  ──────────┬────────── 2026-10-23T11:43:17.0233183Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0233432Z 644 │ key: launchTargetKey, 2026-10-23T11:43:17.0233575Z ╰──── 2026-10-23T11:43:17.0234244Z  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-23T11:43:17.0235147Z  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-23T11:43:17.0235455Z 2026-10-23T11:43:17.0235724Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0236198Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-23T11:43:17.0236425Z 648 │ 2026-10-23T11:43:17.0236554Z 649 │ useEffect(() => { 2026-10-23T11:43:17.0236711Z ·  ────┬──── 2026-10-23T11:43:17.0236932Z · ╰── This is the containing effect 2026-10-23T11:43:17.0237189Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-23T11:43:17.0237381Z 651 │ return; 2026-10-23T11:43:17.0237519Z 652 │ } 2026-10-23T11:43:17.0237666Z 653 │ setInitialAttachGridEntry({ 2026-10-23T11:43:17.0237868Z ·  ────────────┬──────────── 2026-10-23T11:43:17.0238248Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0238546Z 654 │ key: launchTargetKey, 2026-10-23T11:43:17.0238688Z ╰──── 2026-10-23T11:43:17.0239343Z  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-23T11:43:17.0240198Z  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-23T11:43:17.0240503Z 2026-10-23T11:43:17.0240767Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0241183Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-23T11:43:17.0241421Z 743 │ 2026-10-23T11:43:17.0241547Z 744 │ useEffect(() => { 2026-10-23T11:43:17.0241704Z ·  ────┬──── 2026-10-23T11:43:17.0241922Z · ╰── This is the containing effect 2026-10-23T11:43:17.0242166Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-23T11:43:17.0242354Z 746 │ setLastGridSize({ 2026-10-23T11:43:17.0242525Z ·  ───────┬─────── 2026-10-23T11:43:17.0242805Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0243071Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-23T11:43:17.0243488Z ╰──── 2026-10-23T11:43:17.0244176Z  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-23T11:43:17.0245034Z  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-23T11:43:17.0245334Z 2026-10-23T11:43:17.0245542Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0245960Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-23T11:43:17.0246198Z 537 │ }); 2026-10-23T11:43:17.0246396Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-23T11:43:17.0246652Z ·  ───────────┬────────── 2026-10-23T11:43:17.0247029Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-23T11:43:17.0247436Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-23T11:43:17.0247661Z ╰──── 2026-10-23T11:43:17.0248012Z  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-23T11:43:17.0248596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0248890Z 2026-10-23T11:43:17.0249240Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0249663Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-23T11:43:17.0249952Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-23T11:43:17.0250134Z 709 │ }, [terminalKey]); 2026-10-23T11:43:17.0250304Z ·  ─────┬───── 2026-10-23T11:43:17.0250556Z · ╰── Unnecessary dependency `terminalKey` 2026-10-23T11:43:17.0250766Z 710 │ 2026-10-23T11:43:17.0250879Z ╰──── 2026-10-23T11:43:17.0251226Z  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-23T11:43:17.0251889Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0252216Z 2026-10-23T11:43:17.0252425Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0252812Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-23T11:43:17.0253049Z 799 │ }; 2026-10-23T11:43:17.0253314Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-23T11:43:17.0253715Z ·  ────────────┬──────────── ─────┬───── 2026-10-23T11:43:17.0254153Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-23T11:43:17.0254605Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-23T11:43:17.0254863Z 801 │ 2026-10-23T11:43:17.0254982Z ╰──── 2026-10-23T11:43:17.0255328Z  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-23T11:43:17.0255957Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0256266Z 2026-10-23T11:43:17.0256416Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0256750Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-23T11:43:17.0256985Z 792 │ } 2026-10-23T11:43:17.0257237Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-23T11:43:17.0257522Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0257825Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0258045Z 794 │ 2026-10-23T11:43:17.0258158Z ╰──── 2026-10-23T11:43:17.0258890Z  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-23T11:43:17.0260181Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0260709Z 2026-10-23T11:43:17.0261171Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0261894Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-23T11:43:17.0262453Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-23T11:43:17.0286420Z 113 │ useEffect(() => { 2026-10-23T11:43:17.0286786Z ·  ────┬──── 2026-10-23T11:43:17.0287222Z · ╰── This is the containing effect 2026-10-23T11:43:17.0287783Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-23T11:43:17.0288199Z 115 │ return; 2026-10-23T11:43:17.0288431Z 116 │ } 2026-10-23T11:43:17.0288763Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-23T11:43:17.0289151Z ·  ────┬─── 2026-10-23T11:43:17.0289613Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0290138Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-23T11:43:17.0290469Z ╰──── 2026-10-23T11:43:17.0291633Z  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-23T11:43:17.0293162Z  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-23T11:43:17.0293705Z 2026-10-23T11:43:17.0294068Z ⚠ react(static-components): Cannot create components during render 2026-10-23T11:43:17.0294694Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-23T11:43:17.0295145Z 196 │ const { onInput, onResize } = props; 2026-10-23T11:43:17.0295580Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-23T11:43:17.0296156Z ·  ────────────────┬─────────────── 2026-10-23T11:43:17.0296712Z · ╰── The component is created during render here 2026-10-23T11:43:17.0297253Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-23T11:43:17.0297574Z 199 │ 2026-10-23T11:43:17.0297812Z 200 │ useEffect(() => { 2026-10-23T11:43:17.0298113Z 201 │ terminalDebugLog("native:surface", { 2026-10-23T11:43:17.0298792Z 202 │ terminalKey: props.terminalKey, 2026-10-23T11:43:17.0299257Z 203 │ native: hasNativeSurface, 2026-10-23T11:43:17.0299653Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-23T11:43:17.0300048Z 205 │ bufferLen: props.buffer.length, 2026-10-23T11:43:17.0300372Z 206 │ isRunning: props.isRunning, 2026-10-23T11:43:17.0300633Z 207 │ }); 2026-10-23T11:43:17.0301019Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-23T11:43:17.0301466Z 209 │ const handleNativeInput = useCallback( 2026-10-23T11:43:17.0301849Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-23T11:43:17.0302251Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-23T11:43:17.0302549Z 212 │ return; 2026-10-23T11:43:17.0302776Z 213 │ } 2026-10-23T11:43:17.0303050Z 214 │ terminalDebugLog("native:onInput", { 2026-10-23T11:43:17.0303493Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-23T11:43:17.0303857Z 216 │ }); 2026-10-23T11:43:17.0304132Z 217 │ onInput(event.nativeEvent.data); 2026-10-23T11:43:17.0304422Z 218 │ }, 2026-10-23T11:43:17.0304696Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-23T11:43:17.0304993Z 220 │ ); 2026-10-23T11:43:17.0305244Z 221 │ const handleNativeResize = useCallback( 2026-10-23T11:43:17.0305621Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-23T11:43:17.0306006Z 223 │ onResize({ 2026-10-23T11:43:17.0306287Z 224 │ cols: event.nativeEvent.cols, 2026-10-23T11:43:17.0306601Z 225 │ rows: event.nativeEvent.rows, 2026-10-23T11:43:17.0306875Z 226 │ }); 2026-10-23T11:43:17.0307085Z 227 │ }, 2026-10-23T11:43:17.0308223Z 228 │ [onResize], 2026-10-23T11:43:17.0308457Z 229 │ ); 2026-10-23T11:43:17.0308651Z 230 │ 2026-10-23T11:43:17.0308891Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-23T11:43:17.0309170Z 232 │ return ( 2026-10-23T11:43:17.0309427Z 233 │ 2026-10-23T11:43:17.0309722Z 234 │ 2026-10-23T11:43:17.0315481Z ·  ──────┬───── 2026-10-23T11:43:17.0315958Z · ╰── 'stopSessions' is declared here 2026-10-23T11:43:17.0316294Z 286 │ effect.pipe( 2026-10-23T11:43:17.0316435Z ╰──── 2026-10-23T11:43:17.0316730Z  help: Consider removing this parameter. 2026-10-23T11:43:17.0316903Z 2026-10-23T11:43:17.0317385Z ⚠ 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-23T11:43:17.0317966Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-23T11:43:17.0318267Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-23T11:43:17.0318605Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-23T11:43:17.0318919Z ·  ──────────────────────── 2026-10-23T11:43:17.0319116Z 182 │ version: 1, 2026-10-23T11:43:17.0319252Z ╰──── 2026-10-23T11:43:17.0319314Z 2026-10-23T11:43:17.0319549Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T11:43:17.0319907Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-23T11:43:17.0320134Z 89 │ let cursor = prompt.length; 2026-10-23T11:43:17.0320345Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-23T11:43:17.0320580Z ·  ─────── 2026-10-23T11:43:17.0320784Z 91 │ let { start, end } = occurrence; 2026-10-23T11:43:17.0320945Z ╰──── 2026-10-23T11:43:17.0321281Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T11:43:17.0321542Z 2026-10-23T11:43:17.0322021Z ⚠ 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-23T11:43:17.0322573Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-23T11:43:17.0322787Z 38 │ JSON.stringify( 2026-10-23T11:43:17.0323003Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-23T11:43:17.0323332Z ·  ──────────────────────── 2026-10-23T11:43:17.0323513Z 40 │ { name: "a" }, 2026-10-23T11:43:17.0323657Z ╰──── 2026-10-23T11:43:17.0323713Z 2026-10-23T11:43:17.0324013Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0324457Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-23T11:43:17.0324689Z 14 │ 2026-10-23T11:43:17.0324827Z 15 │ const legacyCredentials = { 2026-10-23T11:43:17.0325017Z ·  ────────┬──────── 2026-10-23T11:43:17.0325278Z · ╰── 'legacyCredentials' is declared here 2026-10-23T11:43:17.0325504Z 16 │ version: 1 as const, 2026-10-23T11:43:17.0325645Z ╰──── 2026-10-23T11:43:17.0325813Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0325992Z 2026-10-23T11:43:17.0326257Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0326663Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-23T11:43:17.0326875Z 3754 │ 2026-10-23T11:43:17.0327160Z 3755 │ const layer: Layer.Layer = 2026-10-23T11:43:17.0327580Z ·  ──┬── 2026-10-23T11:43:17.0327867Z · ╰── 'layer' is declared here 2026-10-23T11:43:17.0328078Z 3756 │ Layer.effect( 2026-10-23T11:43:17.0328218Z ╰──── 2026-10-23T11:43:17.0328381Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0328508Z 2026-10-23T11:43:17.0328701Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-23T11:43:17.0329037Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-23T11:43:17.0329276Z 14 │ import * as Layer from "effect/Layer"; 2026-10-23T11:43:17.0329484Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-23T11:43:17.0329678Z ·  ──┬── 2026-10-23T11:43:17.0329937Z · ╰── 'Scope' is imported here 2026-10-23T11:43:17.0330173Z 16 │ import * as Stream from "effect/Stream"; 2026-10-23T11:43:17.0330338Z ╰──── 2026-10-23T11:43:17.0330496Z  help: Consider removing this import. 2026-10-23T11:43:17.0330617Z 2026-10-23T11:43:17.0330797Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0331101Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-23T11:43:17.0331348Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-23T11:43:17.0331639Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-23T11:43:17.0331945Z ·  ─────┬──── 2026-10-23T11:43:17.0332274Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0332535Z 822 │ return AsyncResult.failure( 2026-10-23T11:43:17.0332695Z ╰──── 2026-10-23T11:43:17.0333047Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.0333635Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0333929Z 2026-10-23T11:43:17.0334107Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0334414Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-23T11:43:17.0334622Z 708 │ const wokeAt = resolved 2026-10-23T11:43:17.0334858Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-23T11:43:17.0335213Z ·  ─────┬──── 2026-10-23T11:43:17.0335555Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0335788Z 710 │ : null; 2026-10-23T11:43:17.0335938Z ╰──── 2026-10-23T11:43:17.0336301Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.0336881Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0337171Z 2026-10-23T11:43:17.0337351Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0337738Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-23T11:43:17.0337996Z 52 │ 2026-10-23T11:43:17.0338129Z 53 │ for (const {} of [ 2026-10-23T11:43:17.0338292Z ·  ── 2026-10-23T11:43:17.0338459Z 54 │ { healthy: true }, 2026-10-23T11:43:17.0338603Z ╰──── 2026-10-23T11:43:17.0338905Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0339136Z 2026-10-23T11:43:17.0339399Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-23T11:43:17.0339773Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-23T11:43:17.0339958Z 55 │ 2026-10-23T11:43:17.0340120Z 56 │ function normalizeTerminalContextSelection( 2026-10-23T11:43:17.0340374Z ·  ────────────────┬──────────────── 2026-10-23T11:43:17.0340712Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-23T11:43:17.0341003Z 57 │ selection: TerminalContextSelection, 2026-10-23T11:43:17.0341164Z ╰──── 2026-10-23T11:43:17.0341330Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0341454Z 2026-10-23T11:43:17.0341720Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0342113Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-23T11:43:17.0342312Z 3404 │ 2026-10-23T11:43:17.0342572Z 3405 │ const layer: Layer.Layer = 2026-10-23T11:43:17.0342845Z ·  ──┬── 2026-10-23T11:43:17.0343085Z · ╰── 'layer' is declared here 2026-10-23T11:43:17.0343304Z 3406 │ Layer.effect( 2026-10-23T11:43:17.0343446Z ╰──── 2026-10-23T11:43:17.0343613Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0343738Z 2026-10-23T11:43:17.0343951Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-23T11:43:17.0344308Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-23T11:43:17.0344557Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-23T11:43:17.0344773Z 24 │ import * as Duration from "effect/Duration"; 2026-10-23T11:43:17.0344972Z ·  ────┬─── 2026-10-23T11:43:17.0345230Z · ╰── 'Duration' is imported here 2026-10-23T11:43:17.0345556Z 25 │ import * as Effect from "effect/Effect"; 2026-10-23T11:43:17.0345766Z ╰──── 2026-10-23T11:43:17.0345937Z  help: Consider removing this import. 2026-10-23T11:43:17.0346084Z 2026-10-23T11:43:17.0346265Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0346601Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-23T11:43:17.0346823Z 465 │ 2026-10-23T11:43:17.0346999Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-23T11:43:17.0347200Z ·  ── 2026-10-23T11:43:17.0347352Z 467 │ } 2026-10-23T11:43:17.0347470Z ╰──── 2026-10-23T11:43:17.0347766Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0348001Z 2026-10-23T11:43:17.0348472Z ⚠ 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-23T11:43:17.0349035Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-23T11:43:17.0349324Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-23T11:43:17.0349682Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-23T11:43:17.0350009Z ·  ─────────────────── 2026-10-23T11:43:17.0350245Z 1044 │ expect(encoded).not.toContain(url); 2026-10-23T11:43:17.0350416Z ╰──── 2026-10-23T11:43:17.0350477Z 2026-10-23T11:43:17.0350756Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0351154Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-23T11:43:17.0351356Z 407 │ 2026-10-23T11:43:17.0351488Z 408 │ const layer: Layer.Layer< 2026-10-23T11:43:17.0351656Z ·  ──┬── 2026-10-23T11:43:17.0351884Z · ╰── 'layer' is declared here 2026-10-23T11:43:17.0352128Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T11:43:17.0352299Z ╰──── 2026-10-23T11:43:17.0352464Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0352587Z 2026-10-23T11:43:17.0352768Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0353086Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-23T11:43:17.0353390Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-23T11:43:17.0353694Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-23T11:43:17.0353990Z ·  ─────┬──── 2026-10-23T11:43:17.0354315Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0354594Z 141 │ onSelect={(selected) => { 2026-10-23T11:43:17.0354765Z ╰──── 2026-10-23T11:43:17.0355121Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.0355777Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0356201Z 2026-10-23T11:43:17.0356372Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-23T11:43:17.0356676Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-23T11:43:17.0356940Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-23T11:43:17.0357174Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-23T11:43:17.0357402Z ·  ───────────────────────────── 2026-10-23T11:43:17.0357652Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-23T11:43:17.0357854Z ╰──── 2026-10-23T11:43:17.0358075Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-23T11:43:17.0358247Z 2026-10-23T11:43:17.0358524Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-23T11:43:17.0358973Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-23T11:43:17.0359220Z 959 │ 2026-10-23T11:43:17.0359395Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-23T11:43:17.0359664Z ·  ──────────────────┬───────────────── 2026-10-23T11:43:17.0360020Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-23T11:43:17.0360336Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-23T11:43:17.0360513Z ╰──── 2026-10-23T11:43:17.0360679Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0360799Z 2026-10-23T11:43:17.0361031Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T11:43:17.0361366Z ╭─[apps/mobile/src/Stack.tsx:1044:21] 2026-10-23T11:43:17.0361554Z 1043 │ } 2026-10-23T11:43:17.0362087Z ·  ───────────────────────────────────────────── 2026-10-23T11:43:17.0362314Z 1045 │ screenListeners={{ 2026-10-23T11:43:17.0362467Z ╰──── 2026-10-23T11:43:17.0362897Z  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-23T11:43:17.0363629Z 2026-10-23T11:43:17.0363841Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-23T11:43:17.0364193Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-23T11:43:17.0364475Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-23T11:43:17.0364694Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T11:43:17.0364879Z ·  ─┬─ 2026-10-23T11:43:17.0365107Z · ╰── 'Arr' is imported here 2026-10-23T11:43:17.0365340Z 5 │ import * as Order from "effect/Order"; 2026-10-23T11:43:17.0365503Z ╰──── 2026-10-23T11:43:17.0365665Z  help: Consider removing this import. 2026-10-23T11:43:17.0365784Z 2026-10-23T11:43:17.0366029Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-23T11:43:17.0366373Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-23T11:43:17.0366605Z 4 │ import * as Arr from "effect/Array"; 2026-10-23T11:43:17.0366927Z 5 │ import * as Order from "effect/Order"; 2026-10-23T11:43:17.0367162Z ·  ──┬── 2026-10-23T11:43:17.0367401Z · ╰── 'Order' is imported here 2026-10-23T11:43:17.0367608Z 6 │ 2026-10-23T11:43:17.0367721Z ╰──── 2026-10-23T11:43:17.0367889Z  help: Consider removing this import. 2026-10-23T11:43:17.0368007Z 2026-10-23T11:43:17.0368261Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-23T11:43:17.0368676Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:187:9] 2026-10-23T11:43:17.0368923Z 186 │ ): boolean { 2026-10-23T11:43:17.0369167Z 187 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-23T11:43:17.0369569Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-23T11:43:17.0369941Z 188 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-23T11:43:17.0370157Z ╰──── 2026-10-23T11:43:17.0370296Z  help: Switch to `Set` 2026-10-23T11:43:17.0370396Z 2026-10-23T11:43:17.0370605Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T11:43:17.0370938Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-23T11:43:17.0371196Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-23T11:43:17.0371395Z 187 │ let next = initial; 2026-10-23T11:43:17.0371563Z ·  ──┬─ 2026-10-23T11:43:17.0371789Z · ╰── From this accumulator 2026-10-23T11:43:17.0372015Z 188 │ let receivedSnapshot = false; 2026-10-23T11:43:17.0372206Z 189 │ for (const item of items) { 2026-10-23T11:43:17.0372388Z ·  ─┬─ 2026-10-23T11:43:17.0372592Z · ╰── For this loop 2026-10-23T11:43:17.0372815Z 190 │ if (item.kind === "synchronized") { 2026-10-23T11:43:17.0372995Z 191 │ waiting = false; 2026-10-23T11:43:17.0373179Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-23T11:43:17.0373422Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-23T11:43:17.0373653Z ·  ───┬─── 2026-10-23T11:43:17.0373901Z · ╰── From this spread 2026-10-23T11:43:17.0374108Z 194 │ } 2026-10-23T11:43:17.0374238Z ╰──── 2026-10-23T11:43:17.0374460Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T11:43:17.0374864Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T11:43:17.0375066Z 2026-10-23T11:43:17.0375277Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0375664Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-23T11:43:17.0375941Z 813 │
{ 2026-10-23T11:43:17.0382617Z 236 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-23T11:43:17.0382895Z ·  ──────────────────────── 2026-10-23T11:43:17.0383167Z 237 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-23T11:43:17.0383382Z ╰──── 2026-10-23T11:43:17.0383443Z 2026-10-23T11:43:17.0383819Z ⚠ 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-23T11:43:17.0384297Z ╭─[apps/server/src/auth/RpcAuthorization.ts:255:26] 2026-10-23T11:43:17.0384543Z 254 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-23T11:43:17.0384827Z 255 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-23T11:43:17.0385182Z ·  ──────────────────────── 2026-10-23T11:43:17.0385421Z 256 │ return [ 2026-10-23T11:43:17.0385552Z ╰──── 2026-10-23T11:43:17.0385611Z 2026-10-23T11:43:17.0385815Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-23T11:43:17.0386223Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-23T11:43:17.0386447Z  80 │ 2026-10-23T11:43:17.0386814Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-23T11:43:17.0387211Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-23T11:43:17.0387476Z  83 │ │ ): Effect.fn.Return { 2026-10-23T11:43:17.0387800Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-23T11:43:17.0388123Z  85 │ │ const connections = new Map(); 2026-10-23T11:43:17.0388351Z  86 │ │ 2026-10-23T11:43:17.0388670Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-23T11:43:17.0388996Z  88 │ │ Effect.suspend(() => { 2026-10-23T11:43:17.0389260Z  89 │ │ const connection = connections.get(connectionId); 2026-10-23T11:43:17.0389529Z  90 │ │ return connection === undefined 2026-10-23T11:43:17.0389884Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-23T11:43:17.0390219Z  92 │ │ : Effect.succeed(connection); 2026-10-23T11:43:17.0390438Z  93 │ │ }); 2026-10-23T11:43:17.0390607Z  94 │ │ 2026-10-23T11:43:17.0390789Z  95 │ │ const send = ( 2026-10-23T11:43:17.0390998Z  96 │ │ connection: Connection, 2026-10-23T11:43:17.0391217Z  97 │ │ message: unknown, 2026-10-23T11:43:17.0391496Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-23T11:43:17.0391791Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-23T11:43:17.0392036Z 100 │ │ Effect.gen(function* () { 2026-10-23T11:43:17.0392292Z 101 │ │ const body = JSON.stringify(message); 2026-10-23T11:43:17.0392579Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-23T11:43:17.0392967Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-23T11:43:17.0393270Z 104 │ │ } 2026-10-23T11:43:17.0393517Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T11:43:17.0393771Z 106 │ │ try: (signal) => 2026-10-23T11:43:17.0394027Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-23T11:43:17.0394287Z 108 │ │ method: "POST", 2026-10-23T11:43:17.0394504Z 109 │ │ signal, 2026-10-23T11:43:17.0394719Z 110 │ │ headers: { 2026-10-23T11:43:17.0394967Z 111 │ │ "content-type": "application/json", 2026-10-23T11:43:17.0395349Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-23T11:43:17.0395681Z 113 │ │ authorization: options.authorization, 2026-10-23T11:43:17.0395999Z 114 │ │ ...(connection.sessionId === null 2026-10-23T11:43:17.0396238Z 115 │ │ ? {} 2026-10-23T11:43:17.0396507Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-23T11:43:17.0396808Z 117 │ │ ...(connection.protocolVersion === null 2026-10-23T11:43:17.0397058Z 118 │ │ ? {} 2026-10-23T11:43:17.0397347Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T11:43:17.0397611Z 120 │ │ }, 2026-10-23T11:43:17.0397818Z 121 │ │ body, 2026-10-23T11:43:17.0398019Z 122 │ │ }), 2026-10-23T11:43:17.0398234Z 123 │ │ catch: bridgeError, 2026-10-23T11:43:17.0398439Z 124 │ │ }); 2026-10-23T11:43:17.0398766Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-23T11:43:17.0399093Z 126 │ │ if (!response.ok) { 2026-10-23T11:43:17.0399327Z 127 │ │ yield* Effect.promise( 2026-10-23T11:43:17.0399645Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T11:43:17.0399927Z 129 │ │ ); 2026-10-23T11:43:17.0400156Z 130 │ │ return yield* Effect.fail( 2026-10-23T11:43:17.0400516Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-23T11:43:17.0400815Z 132 │ │ ); 2026-10-23T11:43:17.0401001Z 133 │ │ } 2026-10-23T11:43:17.0401324Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-23T11:43:17.0401671Z 135 │ │ for (const payload of payloads) { 2026-10-23T11:43:17.0402037Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-23T11:43:17.0402343Z 137 │ │ } 2026-10-23T11:43:17.0402547Z 138 │ │ return payloads; 2026-10-23T11:43:17.0402804Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-23T11:43:17.0403024Z 140 │ │ ); 2026-10-23T11:43:17.0403471Z 141 │ │ 2026-10-23T11:43:17.0403749Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-23T11:43:17.0404071Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-23T11:43:17.0404412Z 144 │ │ ): Effect.fn.Return { 2026-10-23T11:43:17.0404776Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T11:43:17.0405084Z 146 │ │ connections.delete(request.connectionId); 2026-10-23T11:43:17.0405355Z 147 │ │ const sessionId = connection.sessionId; 2026-10-23T11:43:17.0405703Z 148 │ │ if (sessionId !== null) { 2026-10-23T11:43:17.0406117Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-23T11:43:17.0406372Z 150 │ │ try: (signal) => 2026-10-23T11:43:17.0406627Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-23T11:43:17.0406888Z 152 │ │ method: "DELETE", 2026-10-23T11:43:17.0407105Z 153 │ │ signal, 2026-10-23T11:43:17.0407318Z 154 │ │ headers: { 2026-10-23T11:43:17.0407573Z 155 │ │ authorization: options.authorization, 2026-10-23T11:43:17.0407850Z 156 │ │ "mcp-session-id": sessionId, 2026-10-23T11:43:17.0408134Z 157 │ │ ...(connection.protocolVersion === null 2026-10-23T11:43:17.0408385Z 158 │ │ ? {} 2026-10-23T11:43:17.0408666Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-23T11:43:17.0408929Z 160 │ │ }, 2026-10-23T11:43:17.0409117Z 161 │ │ }), 2026-10-23T11:43:17.0409324Z 162 │ │ catch: bridgeError, 2026-10-23T11:43:17.0409528Z 163 │ │ }); 2026-10-23T11:43:17.0409773Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-23T11:43:17.0410043Z 165 │ │ return yield* Effect.fail( 2026-10-23T11:43:17.0410292Z 166 │ │ new AcpMcpOverAcpError( 2026-10-23T11:43:17.0410623Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-23T11:43:17.0410900Z 168 │ │ ), 2026-10-23T11:43:17.0411088Z 169 │ │ ); 2026-10-23T11:43:17.0411268Z 170 │ │ } 2026-10-23T11:43:17.0411479Z 171 │ │ yield* Effect.promise( 2026-10-23T11:43:17.0411791Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-23T11:43:17.0412064Z 173 │ │ ); 2026-10-23T11:43:17.0412242Z 174 │ │ } 2026-10-23T11:43:17.0412427Z 175 │ │ return {}; 2026-10-23T11:43:17.0412609Z 176 │ │ }); 2026-10-23T11:43:17.0412777Z 177 │ │ 2026-10-23T11:43:17.0412960Z 178 │ │ return { 2026-10-23T11:43:17.0413246Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-23T11:43:17.0413561Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-23T11:43:17.0413814Z 181 │ │ return yield* Effect.fail( 2026-10-23T11:43:17.0414143Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-23T11:43:17.0414426Z 183 │ │ ); 2026-10-23T11:43:17.0414612Z 184 │ │ } 2026-10-23T11:43:17.0414853Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-23T11:43:17.0415226Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-23T11:43:17.0415587Z 187 │ │ } 2026-10-23T11:43:17.0415915Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-23T11:43:17.0416235Z 189 │ │ connections.set(connectionId, { 2026-10-23T11:43:17.0416494Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-23T11:43:17.0416741Z 191 │ │ sessionId: null, 2026-10-23T11:43:17.0416969Z 192 │ │ protocolVersion: null, 2026-10-23T11:43:17.0417203Z 193 │ │ nextRequestId: 0, 2026-10-23T11:43:17.0417403Z 194 │ │ }); 2026-10-23T11:43:17.0417614Z 195 │ │ return { connectionId }; 2026-10-23T11:43:17.0417816Z 196 │ │ }), 2026-10-23T11:43:17.0418118Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-23T11:43:17.0418484Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T11:43:17.0418798Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-23T11:43:17.0419082Z 200 │ │ const payloads = yield* send(connection, { 2026-10-23T11:43:17.0419338Z 201 │ │ jsonrpc: "2.0", 2026-10-23T11:43:17.0419541Z 202 │ │ id, 2026-10-23T11:43:17.0419759Z 203 │ │ method: request.method, 2026-10-23T11:43:17.0420054Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T11:43:17.0420309Z 205 │ │ }); 2026-10-23T11:43:17.0420613Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-23T11:43:17.0420945Z 207 │ │ const envelope = asEnvelope(response); 2026-10-23T11:43:17.0421196Z 208 │ │ if (envelope === null) { 2026-10-23T11:43:17.0421437Z 209 │ │ return yield* Effect.fail( 2026-10-23T11:43:17.0421772Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-23T11:43:17.0422053Z 211 │ │ ); 2026-10-23T11:43:17.0422237Z 212 │ │ } 2026-10-23T11:43:17.0422457Z 213 │ │ if (envelope.error !== undefined) { 2026-10-23T11:43:17.0422809Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-23T11:43:17.0423094Z 215 │ │ } 2026-10-23T11:43:17.0423378Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-23T11:43:17.0423640Z 217 │ │ }), 2026-10-23T11:43:17.0423949Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-23T11:43:17.0424325Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-23T11:43:17.0424613Z 220 │ │ yield* send(connection, { 2026-10-23T11:43:17.0424842Z 221 │ │ jsonrpc: "2.0", 2026-10-23T11:43:17.0425074Z 222 │ │ method: request.method, 2026-10-23T11:43:17.0425365Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-23T11:43:17.0425712Z 224 │ │ }); 2026-10-23T11:43:17.0425969Z 225 │ │ }), 2026-10-23T11:43:17.0426158Z 226 │ │ disconnect, 2026-10-23T11:43:17.0426389Z 227 │ │ dispose: Effect.suspend(() => 2026-10-23T11:43:17.0426624Z 228 │ │ Effect.forEach( 2026-10-23T11:43:17.0426857Z 229 │ │ [...connections.keys()], 2026-10-23T11:43:17.0427159Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-23T11:43:17.0427449Z 231 │ │ { discard: true }, 2026-10-23T11:43:17.0427648Z 232 │ │ ), 2026-10-23T11:43:17.0427829Z 233 │ │ ), 2026-10-23T11:43:17.0428006Z 234 │ │ }; 2026-10-23T11:43:17.0428252Z 235 │ ╰─▶ }); 2026-10-23T11:43:17.0428456Z ╰──── 2026-10-23T11:43:17.0428779Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-23T11:43:17.0429034Z 2026-10-23T11:43:17.0429216Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0429531Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-23T11:43:17.0429734Z 265 │ 2026-10-23T11:43:17.0429913Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-23T11:43:17.0430136Z ·  ── 2026-10-23T11:43:17.0430303Z 267 │ } 2026-10-23T11:43:17.0430437Z ╰──── 2026-10-23T11:43:17.0430753Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0430997Z 2026-10-23T11:43:17.0431309Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T11:43:17.0431776Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:387:19] 2026-10-23T11:43:17.0432043Z 386 │ onFilters, 2026-10-23T11:43:17.0432209Z 387 │ authorOptions = [], 2026-10-23T11:43:17.0432400Z ·  ── 2026-10-23T11:43:17.0432576Z 388 │ labelOptions = [], 2026-10-23T11:43:17.0432727Z ╰──── 2026-10-23T11:43:17.0433149Z  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-23T11:43:17.0433469Z 2026-10-23T11:43:17.0433845Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T11:43:17.0434353Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:388:18] 2026-10-23T11:43:17.0434628Z 387 │ authorOptions = [], 2026-10-23T11:43:17.0434798Z 388 │ labelOptions = [], 2026-10-23T11:43:17.0434973Z ·  ── 2026-10-23T11:43:17.0435149Z 389 │ host, 2026-10-23T11:43:17.0435283Z ╰──── 2026-10-23T11:43:17.0435689Z  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-23T11:43:17.0436058Z 2026-10-23T11:43:17.0436302Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T11:43:17.0436677Z ╭─[apps/mobile/src/lib/markdownDocument.ts:138:28] 2026-10-23T11:43:17.0436911Z 137 │ visit(parser.parse(markdown)); 2026-10-23T11:43:17.0437132Z 138 │ for (const edit of edits.reverse()) 2026-10-23T11:43:17.0437357Z ·  ─────── 2026-10-23T11:43:17.0437667Z 139 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T11:43:17.0437907Z ╰──── 2026-10-23T11:43:17.0438267Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T11:43:17.0438529Z 2026-10-23T11:43:17.0438774Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T11:43:17.0439137Z ╭─[apps/mobile/src/lib/markdownDocument.ts:169:28] 2026-10-23T11:43:17.0439378Z 168 │ visit(parser.parse(markdown)); 2026-10-23T11:43:17.0439591Z 169 │ for (const edit of edits.reverse()) 2026-10-23T11:43:17.0439814Z ·  ─────── 2026-10-23T11:43:17.0440097Z 170 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-23T11:43:17.0440330Z ╰──── 2026-10-23T11:43:17.0440659Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T11:43:17.0440922Z 2026-10-23T11:43:17.0441143Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T11:43:17.0441487Z ╭─[apps/mobile/src/lib/markdownDocument.ts:223:38] 2026-10-23T11:43:17.0441716Z 222 │ visit(parser.parse(markdown)); 2026-10-23T11:43:17.0441931Z 223 │ for (const lineStart of lineStarts.reverse()) { 2026-10-23T11:43:17.0442179Z ·  ─────── 2026-10-23T11:43:17.0442470Z 224 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-23T11:43:17.0442708Z ╰──── 2026-10-23T11:43:17.0443034Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T11:43:17.0443431Z 2026-10-23T11:43:17.0443820Z ⚠ 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-23T11:43:17.0444297Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-23T11:43:17.0444604Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-23T11:43:17.0445080Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-23T11:43:17.0445436Z ·  ──────────────────────── 2026-10-23T11:43:17.0445623Z 18 │ "review:write", 2026-10-23T11:43:17.0445772Z ╰──── 2026-10-23T11:43:17.0445832Z 2026-10-23T11:43:17.0446256Z ⚠ 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-23T11:43:17.0446726Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-23T11:43:17.0446915Z 19 │ ]); 2026-10-23T11:43:17.0447164Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-23T11:43:17.0447461Z ·  ──────────────────────── 2026-10-23T11:43:17.0447734Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-23T11:43:17.0447944Z ╰──── 2026-10-23T11:43:17.0448005Z 2026-10-23T11:43:17.0448381Z ⚠ 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-23T11:43:17.0448842Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-23T11:43:17.0449151Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-23T11:43:17.0449465Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-23T11:43:17.0449730Z ·  ──────────────────────── 2026-10-23T11:43:17.0450591Z 59 │ authenticated: true, 2026-10-23T11:43:17.0450739Z ╰──── 2026-10-23T11:43:17.0450800Z 2026-10-23T11:43:17.0451004Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T11:43:17.0451399Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-23T11:43:17.0451679Z 115 │ return [...commands]; 2026-10-23T11:43:17.0451920Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-23T11:43:17.0452208Z ·  ─────────┬───────── 2026-10-23T11:43:17.0452545Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-23T11:43:17.0452800Z 117 │ 2026-10-23T11:43:17.0452921Z ╰──── 2026-10-23T11:43:17.0453323Z  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-23T11:43:17.0453983Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0454303Z 2026-10-23T11:43:17.0454532Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T11:43:17.0454890Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-23T11:43:17.0455127Z 2 │ AuthDiagnosticsReadScope, 2026-10-23T11:43:17.0455297Z 3 │ type AuthSessionState, 2026-10-23T11:43:17.0455490Z ·  ────────┬─────── 2026-10-23T11:43:17.0455761Z · ╰── 'AuthSessionState' is imported here 2026-10-23T11:43:17.0456050Z 4 │ sessionGrantsScope, 2026-10-23T11:43:17.0456201Z ╰──── 2026-10-23T11:43:17.0456459Z  help: Consider removing this import. 2026-10-23T11:43:17.0456646Z 2026-10-23T11:43:17.0456857Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-23T11:43:17.0457166Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-23T11:43:17.0457385Z  9 │ import * as Effect from "effect/Effect"; 2026-10-23T11:43:17.0457590Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-23T11:43:17.0457794Z ·  ──┬── 2026-10-23T11:43:17.0458044Z · ╰── 'Fiber' is imported here 2026-10-23T11:43:17.0458313Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-23T11:43:17.0458498Z ╰──── 2026-10-23T11:43:17.0458676Z  help: Consider removing this import. 2026-10-23T11:43:17.0458793Z 2026-10-23T11:43:17.0459014Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-23T11:43:17.0459329Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-23T11:43:17.0459537Z 16 │ import * as Ref from "effect/Ref"; 2026-10-23T11:43:17.0459754Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-23T11:43:17.0459960Z ·  ────┬─── 2026-10-23T11:43:17.0471799Z · ╰── 'Schedule' is imported here 2026-10-23T11:43:17.0472065Z 18 │ import * as Schema from "effect/Schema"; 2026-10-23T11:43:17.0472233Z ╰──── 2026-10-23T11:43:17.0472400Z  help: Consider removing this import. 2026-10-23T11:43:17.0472523Z 2026-10-23T11:43:17.0472855Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0473277Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-23T11:43:17.0473569Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-23T11:43:17.0473957Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-23T11:43:17.0474287Z ·  ────────────┬─────────── 2026-10-23T11:43:17.0474605Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-23T11:43:17.0474966Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-23T11:43:17.0475214Z ╰──── 2026-10-23T11:43:17.0475386Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0475517Z 2026-10-23T11:43:17.0475799Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0476314Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-23T11:43:17.0476565Z 76 │ 2026-10-23T11:43:17.0476696Z 77 │ useEffect(() => { 2026-10-23T11:43:17.0476860Z ·  ────┬──── 2026-10-23T11:43:17.0477102Z · ╰── This is the containing effect 2026-10-23T11:43:17.0477385Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-23T11:43:17.0477602Z 79 │ setHostInput(host); 2026-10-23T11:43:17.0477773Z ·  ──────┬───── 2026-10-23T11:43:17.0478049Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0478292Z 80 │ setCodeInput(code); 2026-10-23T11:43:17.0478434Z ╰──── 2026-10-23T11:43:17.0479276Z  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-23T11:43:17.0480235Z  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-23T11:43:17.0480557Z 2026-10-23T11:43:17.0480978Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0481644Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-23T11:43:17.0481885Z 82 │ 2026-10-23T11:43:17.0482018Z 83 │ useEffect(() => { 2026-10-23T11:43:17.0482187Z ·  ────┬──── 2026-10-23T11:43:17.0482428Z · ╰── This is the containing effect 2026-10-23T11:43:17.0482675Z 84 │ if (routePairingUrl.length === 0) { 2026-10-23T11:43:17.0482854Z 85 │ return; 2026-10-23T11:43:17.0482986Z 86 │ } 2026-10-23T11:43:17.0483250Z 87 │ 2026-10-23T11:43:17.0483433Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-23T11:43:17.0483641Z 89 │ setHostInput(host); 2026-10-23T11:43:17.0483813Z ·  ──────┬───── 2026-10-23T11:43:17.0484087Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0484332Z 90 │ setCodeInput(code); 2026-10-23T11:43:17.0484476Z ╰──── 2026-10-23T11:43:17.0485152Z  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-23T11:43:17.0486105Z  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-23T11:43:17.0486426Z 2026-10-23T11:43:17.0486698Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0487128Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-23T11:43:17.0487369Z 92 │ 2026-10-23T11:43:17.0487495Z 93 │ useEffect(() => { 2026-10-23T11:43:17.0487661Z ·  ────┬──── 2026-10-23T11:43:17.0487895Z · ╰── This is the containing effect 2026-10-23T11:43:17.0488135Z 94 │ if (pairingConnectionError) { 2026-10-23T11:43:17.0488315Z 95 │ setIsSubmitting(false); 2026-10-23T11:43:17.0488501Z ·  ───────┬─────── 2026-10-23T11:43:17.0488789Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0489123Z 96 │ } 2026-10-23T11:43:17.0489268Z ╰──── 2026-10-23T11:43:17.0490015Z  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-23T11:43:17.0491387Z  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-23T11:43:17.0491978Z 2026-10-23T11:43:17.0492765Z ⚠ 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-23T11:43:17.0493685Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-23T11:43:17.0494016Z 2382 │ let orphanedAt: number | undefined; 2026-10-23T11:43:17.0494384Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-23T11:43:17.0494745Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-23T11:43:17.0495055Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-23T11:43:17.0495404Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-23T11:43:17.0495692Z 2387 │ │ flush: () => { 2026-10-23T11:43:17.0495992Z 2388 │ │ let task: (() => void) | undefined; 2026-10-23T11:43:17.0496294Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-23T11:43:17.0496548Z 2390 │ │ }, 2026-10-23T11:43:17.0496734Z 2391 │ │ }; 2026-10-23T11:43:17.0496910Z 2392 │ │ 2026-10-23T11:43:17.0497180Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-23T11:43:17.0497463Z 2394 │ │ let requestChecks = 0; 2026-10-23T11:43:17.0497740Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-23T11:43:17.0498004Z 2396 │ │ executionMode: "async", 2026-10-23T11:43:17.0498263Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-23T11:43:17.0498518Z 2398 │ │ shouldYield: (fiber) => { 2026-10-23T11:43:17.0498795Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-23T11:43:17.0499054Z 2400 │ │ requestChecks += 1; 2026-10-23T11:43:17.0499333Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-23T11:43:17.0499608Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-23T11:43:17.0499845Z 2403 │ │ return true; 2026-10-23T11:43:17.0500115Z 2404 │ │ }, 2026-10-23T11:43:17.0500375Z 2405 │ │ }; 2026-10-23T11:43:17.0500550Z 2406 │ │ 2026-10-23T11:43:17.0500766Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-23T11:43:17.0501011Z 2408 │ │ ...WINDOW, 2026-10-23T11:43:17.0501259Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-23T11:43:17.0501611Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-23T11:43:17.0501888Z 2411 │ │ }; 2026-10-23T11:43:17.0502107Z 2412 │ │ const first = yield* service 2026-10-23T11:43:17.0502346Z 2413 │ │ .readSummary(input) 2026-10-23T11:43:17.0502570Z 2414 │ │ .pipe( 2026-10-23T11:43:17.0502789Z 2415 │ │ Effect.exit, 2026-10-23T11:43:17.0503074Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T11:43:17.0503350Z 2417 │ │ Effect.forkChild, 2026-10-23T11:43:17.0503556Z 2418 │ │ ); 2026-10-23T11:43:17.0503763Z 2419 │ │ requestFiber = first; 2026-10-23T11:43:17.0504000Z 2420 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0504230Z 2421 │ │ dispatcher.flush(); 2026-10-23T11:43:17.0504425Z 2422 │ │ 2026-10-23T11:43:17.0504676Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-23T11:43:17.0504948Z 2424 │ │ Effect.match({ 2026-10-23T11:43:17.0505200Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-23T11:43:17.0505471Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-23T11:43:17.0505700Z 2427 │ │ }), 2026-10-23T11:43:17.0506022Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-23T11:43:17.0506300Z 2429 │ │ Effect.forkChild, 2026-10-23T11:43:17.0506504Z 2430 │ │ ); 2026-10-23T11:43:17.0506714Z 2431 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0506943Z 2432 │ │ dispatcher.flush(); 2026-10-23T11:43:17.0507198Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-23T11:43:17.0507469Z 2434 │ │ if (secondExit === undefined) { 2026-10-23T11:43:17.0507724Z 2435 │ │ second.interruptUnsafe(); 2026-10-23T11:43:17.0507972Z 2436 │ │ orphanedAt = interruptAt; 2026-10-23T11:43:17.0508191Z 2437 │ │ break; 2026-10-23T11:43:17.0508384Z 2438 │ │ } 2026-10-23T11:43:17.0508609Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-23T11:43:17.0508915Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-23T11:43:17.0509161Z 2441 │ │ } 2026-10-23T11:43:17.0509422Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-23T11:43:17.0509793Z 2443 │ ╰─▶ } 2026-10-23T11:43:17.0510056Z 2444 │ 2026-10-23T11:43:17.0510181Z ╰──── 2026-10-23T11:43:17.0510243Z 2026-10-23T11:43:17.0510527Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0510916Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-23T11:43:17.0511107Z 168 │ 2026-10-23T11:43:17.0511251Z 169 │ const layerTest = Layer.succeed( 2026-10-23T11:43:17.0511437Z ·  ────┬──── 2026-10-23T11:43:17.0511675Z · ╰── 'layerTest' is declared here 2026-10-23T11:43:17.0511885Z 170 │ UsageService, 2026-10-23T11:43:17.0512026Z ╰──── 2026-10-23T11:43:17.0512207Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0512331Z 2026-10-23T11:43:17.0512545Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0512924Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-23T11:43:17.0513176Z 87 │
  • { 2026-10-23T11:43:17.0517256Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T11:43:17.0517456Z ·  ────────┬──────── 2026-10-23T11:43:17.0517725Z · ╰── `inspectorProgress` cannot be modified 2026-10-23T11:43:17.0517962Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T11:43:17.0518120Z ╰──── 2026-10-23T11:43:17.0518453Z  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-23T11:43:17.0519033Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0519330Z 2026-10-23T11:43:17.0519491Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0519823Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-23T11:43:17.0520088Z 37 │ const { renderedInspectorWidth } = props; 2026-10-23T11:43:17.0520413Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-23T11:43:17.0520705Z ·  ──────────┬───────── 2026-10-23T11:43:17.0520980Z · ╰── `renderedContentWidth` originates here 2026-10-23T11:43:17.0521191Z 39 │ 2026-10-23T11:43:17.0521334Z 40 │ const onClosed = props.onClosed; 2026-10-23T11:43:17.0521502Z 41 │ useEffect(() => { 2026-10-23T11:43:17.0521679Z 42 │ inspectorProgress.value = withTiming( 2026-10-23T11:43:17.0521867Z 43 │ inspectorVisible ? 1 : 0, 2026-10-23T11:43:17.0522037Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-23T11:43:17.0522202Z 45 │ (finished) => { 2026-10-23T11:43:17.0522430Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-23T11:43:17.0522658Z 47 │ runOnJS(onClosed)(); 2026-10-23T11:43:17.0522822Z 48 │ } 2026-10-23T11:43:17.0522953Z 49 │ }, 2026-10-23T11:43:17.0523171Z 50 │ ); 2026-10-23T11:43:17.0523379Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-23T11:43:17.0523608Z 52 │ renderedInspectorWidth.set( 2026-10-23T11:43:17.0523864Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-23T11:43:17.0524079Z 54 │ ); 2026-10-23T11:43:17.0524202Z 55 │ }, [ 2026-10-23T11:43:17.0524339Z 56 │ inspectorProgress, 2026-10-23T11:43:17.0524497Z 57 │ inspectorVisible, 2026-10-23T11:43:17.0524655Z 58 │ inspectorWidth, 2026-10-23T11:43:17.0524801Z 59 │ onClosed, 2026-10-23T11:43:17.0524956Z 60 │ renderedInspectorWidth, 2026-10-23T11:43:17.0525111Z 61 │ resizing, 2026-10-23T11:43:17.0525241Z 62 │ ]); 2026-10-23T11:43:17.0525358Z 63 │ 2026-10-23T11:43:17.0525489Z 64 │ useEffect(() => { 2026-10-23T11:43:17.0525673Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-23T11:43:17.0525873Z 66 │ if (!inspectorVisible || resizing) { 2026-10-23T11:43:17.0526124Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-23T11:43:17.0526336Z ·  ──────────┬───────── 2026-10-23T11:43:17.0526614Z · ╰── `renderedContentWidth` cannot be modified 2026-10-23T11:43:17.0526841Z 68 │ return; 2026-10-23T11:43:17.0526968Z ╰──── 2026-10-23T11:43:17.0527305Z  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-23T11:43:17.0527890Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0528192Z 2026-10-23T11:43:17.0528416Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-23T11:43:17.0528786Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-23T11:43:17.0529005Z 233 │ 2026-10-23T11:43:17.0529191Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-23T11:43:17.0529423Z ·  ───────┬────── 2026-10-23T11:43:17.0529680Z · ╰── 'nonEmptyString' is declared here 2026-10-23T11:43:17.0529989Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-23T11:43:17.0530200Z ╰──── 2026-10-23T11:43:17.0530370Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0530496Z 2026-10-23T11:43:17.0530842Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-23T11:43:17.0531245Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-23T11:43:17.0531438Z 78 │ 2026-10-23T11:43:17.0531643Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-23T11:43:17.0531886Z ·  ────────┬─────── 2026-10-23T11:43:17.0532157Z · ╰── 'describeSchedule' is declared here 2026-10-23T11:43:17.0532430Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-23T11:43:17.0532614Z ╰──── 2026-10-23T11:43:17.0532778Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0532903Z 2026-10-23T11:43:17.0533119Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0533502Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-23T11:43:17.0533735Z 214 │ } 2026-10-23T11:43:17.0533882Z 215 │ }, [wrappedRender]); 2026-10-23T11:43:17.0534054Z ·  ──────┬────── 2026-10-23T11:43:17.0534317Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-23T11:43:17.0534532Z 216 │ 2026-10-23T11:43:17.0534649Z ╰──── 2026-10-23T11:43:17.0535010Z  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-23T11:43:17.0535623Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0535967Z 2026-10-23T11:43:17.0536234Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T11:43:17.0536653Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-23T11:43:17.0536890Z 816 │ > 2026-10-23T11:43:17.0537079Z 817 │ 2026-10-23T11:43:17.0537339Z ·  ──────────────────── 2026-10-23T11:43:17.0537577Z 818 │ 2026-10-23T11:43:17.0539715Z 832 │ 2026-10-23T11:43:17.0539996Z ·  ──────────────────── 2026-10-23T11:43:17.0540239Z 833 │ 2026-10-23T11:43:17.0540412Z ╰──── 2026-10-23T11:43:17.0540702Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T11:43:17.0541066Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T11:43:17.0541326Z 2026-10-23T11:43:17.0541861Z ⚠ 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-23T11:43:17.0542497Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-23T11:43:17.0542767Z 520 │ })).delivery; 2026-10-23T11:43:17.0543082Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-23T11:43:17.0543406Z 522 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0543693Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-23T11:43:17.0543966Z 524 │ │ id: task.id, 2026-10-23T11:43:17.0544212Z 525 │ │ deliveryId: deliveryId!, 2026-10-23T11:43:17.0544456Z 526 │ │ })).delivery; 2026-10-23T11:43:17.0544724Z 527 │ ╰─▶ } 2026-10-23T11:43:17.0545002Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-23T11:43:17.0545196Z ╰──── 2026-10-23T11:43:17.0545259Z 2026-10-23T11:43:17.0545537Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0546010Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-23T11:43:17.0546250Z 100 │ 2026-10-23T11:43:17.0546384Z 101 │ useEffect(() => { 2026-10-23T11:43:17.0546563Z ·  ────┬──── 2026-10-23T11:43:17.0546802Z · ╰── This is the containing effect 2026-10-23T11:43:17.0547055Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-23T11:43:17.0547275Z 103 │ setHighlightedLinesById({}); 2026-10-23T11:43:17.0547483Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0547673Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0547741Z 104 │ return; 2026-10-23T11:43:17.0547798Z ╰──── 2026-10-23T11:43:17.0548493Z  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-23T11:43:17.0548889Z  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-23T11:43:17.0548892Z 2026-10-23T11:43:17.0549110Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0549258Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-23T11:43:17.0549350Z 453 │ showAuxiliaryPane("inspector"); 2026-10-23T11:43:17.0549465Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-23T11:43:17.0549634Z ·  ──────┬────── ────┬─── 2026-10-23T11:43:17.0549855Z · │ ╰── Unnecessary dependency `threadId` 2026-10-23T11:43:17.0550022Z · ╰── Unnecessary dependency `environmentId` 2026-10-23T11:43:17.0550087Z 455 │ const { 2026-10-23T11:43:17.0550144Z ╰──── 2026-10-23T11:43:17.0550455Z  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-23T11:43:17.0550781Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0550784Z 2026-10-23T11:43:17.0550985Z ⚠ react(static-components): Cannot create components during render 2026-10-23T11:43:17.0551130Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-23T11:43:17.0551199Z 492 │ // same check. 2026-10-23T11:43:17.0551338Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-23T11:43:17.0551475Z ·  ─────────────┬───────────── 2026-10-23T11:43:17.0551669Z · ╰── The component is created during render here 2026-10-23T11:43:17.0551828Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-23T11:43:17.0551957Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-23T11:43:17.0552095Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-23T11:43:17.0552191Z 497 │ const handlePullToRefresh = async () => { 2026-10-23T11:43:17.0552274Z 498 │ setIsPullRefreshing(true); 2026-10-23T11:43:17.0552363Z 499 │ await refreshSelectedSection(); 2026-10-23T11:43:17.0552454Z 500 │ setIsPullRefreshing(false); 2026-10-23T11:43:17.0552515Z 501 │ }; 2026-10-23T11:43:17.0552667Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-23T11:43:17.0552818Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-23T11:43:17.0552935Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-23T11:43:17.0553024Z 505 │ threadKey: reviewCache.threadKey, 2026-10-23T11:43:17.0553122Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-23T11:43:17.0553197Z 507 │ files: reviewFiles, 2026-10-23T11:43:17.0553304Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-23T11:43:17.0553441Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-23T11:43:17.0553513Z 510 │ : undefined, 2026-10-23T11:43:17.0553613Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-23T11:43:17.0553805Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-23T11:43:17.0553912Z 513 │ : undefined, 2026-10-23T11:43:17.0553980Z 514 │ }); 2026-10-23T11:43:17.0554180Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-23T11:43:17.0554320Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-23T11:43:17.0554385Z 517 │ environmentId, 2026-10-23T11:43:17.0554453Z 518 │ threadId, 2026-10-23T11:43:17.0554524Z 519 │ selectedSection, 2026-10-23T11:43:17.0554597Z 520 │ nativeReviewDiffData, 2026-10-23T11:43:17.0554658Z 521 │ }); 2026-10-23T11:43:17.0554770Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-23T11:43:17.0554863Z 523 │ threadKey: reviewCache.threadKey, 2026-10-23T11:43:17.0554955Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-23T11:43:17.0555043Z 525 │ diff: selectedSection?.diff, 2026-10-23T11:43:17.0555126Z 526 │ data: nativeReviewDiffData, 2026-10-23T11:43:17.0555198Z 527 │ collapsedFileIds, 2026-10-23T11:43:17.0555263Z 528 │ viewedFileIds, 2026-10-23T11:43:17.0555382Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-23T11:43:17.0555490Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-23T11:43:17.0555549Z 531 │ }); 2026-10-23T11:43:17.0555625Z 532 │ const showcaseReviewKey = 2026-10-23T11:43:17.0555769Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-23T11:43:17.0556036Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-23T11:43:17.0556102Z 535 │ : null; 2026-10-23T11:43:17.0556283Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-23T11:43:17.0556367Z 537 │ nativeBridge.onDebug(event); 2026-10-23T11:43:17.0556430Z 538 │ if ( 2026-10-23T11:43:17.0556516Z 539 │ showcaseReviewKey === null || 2026-10-23T11:43:17.0556641Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-23T11:43:17.0556759Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-23T11:43:17.0556821Z 542 │ ) { 2026-10-23T11:43:17.0556887Z 543 │ return; 2026-10-23T11:43:17.0556942Z 544 │ } 2026-10-23T11:43:17.0557062Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-23T11:43:17.0557236Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-23T11:43:17.0557294Z 547 │ }; 2026-10-23T11:43:17.0557349Z 548 │ 2026-10-23T11:43:17.0557475Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-23T11:43:17.0557566Z 550 │ loadVisibleFile(fileId, true); 2026-10-23T11:43:17.0557659Z 551 │ commentSelection.clearSelection(); 2026-10-23T11:43:17.0557788Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-23T11:43:17.0557874Z 553 │ toggleExpandedFile(fileId); 2026-10-23T11:43:17.0557932Z 554 │ } 2026-10-23T11:43:17.0558048Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-23T11:43:17.0558125Z 556 │ if (!nativeView) return; 2026-10-23T11:43:17.0558227Z 557 │ const result = await settlePromise(() => 2026-10-23T11:43:17.0558413Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-23T11:43:17.0558470Z 559 │ ); 2026-10-23T11:43:17.0558564Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-23T11:43:17.0558818Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-23T11:43:17.0558917Z 562 │ } 2026-10-23T11:43:17.0558972Z 563 │ }; 2026-10-23T11:43:17.0559063Z 564 │ const handleVisibleFileChange = ( 2026-10-23T11:43:17.0559204Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-23T11:43:17.0559265Z 566 │ ) => { 2026-10-23T11:43:17.0559381Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T11:43:17.0559562Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-23T11:43:17.0559620Z 569 │ }; 2026-10-23T11:43:17.0559705Z 570 │ const renderInspector = () => ( 2026-10-23T11:43:17.0559777Z 571 │ void handleSelectFile(fileId)} 2026-10-23T11:43:17.0560334Z 577 │ /> 2026-10-23T11:43:17.0560392Z 578 │ ); 2026-10-23T11:43:17.0560445Z 579 │ 2026-10-23T11:43:17.0560638Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-23T11:43:17.0560730Z 581 │ const { fileId } = event.nativeEvent; 2026-10-23T11:43:17.0560795Z 582 │ if (fileId) { 2026-10-23T11:43:17.0560884Z 583 │ loadVisibleFile(fileId, true); 2026-10-23T11:43:17.0560966Z 584 │ toggleExpandedFile(fileId); 2026-10-23T11:43:17.0561024Z 585 │ } 2026-10-23T11:43:17.0561079Z 586 │ }; 2026-10-23T11:43:17.0561134Z 587 │ 2026-10-23T11:43:17.0561236Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-23T11:43:17.0561365Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-23T11:43:17.0561425Z 590 │ ) => { 2026-10-23T11:43:17.0561518Z 591 │ const { fileId } = event.nativeEvent; 2026-10-23T11:43:17.0561585Z 592 │ if (fileId) { 2026-10-23T11:43:17.0561667Z 593 │ toggleViewedFile(fileId); 2026-10-23T11:43:17.0561722Z 594 │ } 2026-10-23T11:43:17.0561782Z 595 │ }; 2026-10-23T11:43:17.0561845Z 596 │ 2026-10-23T11:43:17.0561923Z 597 │ const parsedDiffNotice = 2026-10-23T11:43:17.0562091Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-23T11:43:17.0562224Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-23T11:43:17.0562392Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-23T11:43:17.0562526Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-23T11:43:17.0562694Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-23T11:43:17.0562815Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-23T11:43:17.0562924Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-23T11:43:17.0563004Z 605 │ hasCachedSelectedDiff, 2026-10-23T11:43:17.0563152Z 606 │ hasAnyCachedDiff, 2026-10-23T11:43:17.0563212Z 607 │ }); 2026-10-23T11:43:17.0563306Z 608 │ const handleRetryEnvironment = () => { 2026-10-23T11:43:17.0563396Z 609 │ void retryEnvironment(environmentId); 2026-10-23T11:43:17.0563455Z 610 │ }; 2026-10-23T11:43:17.0563547Z 611 │ const handleReturnToThread = () => { 2026-10-23T11:43:17.0563631Z 612 │ if (navigation.canGoBack()) { 2026-10-23T11:43:17.0563701Z 613 │ navigation.goBack(); 2026-10-23T11:43:17.0563874Z 614 │ return; 2026-10-23T11:43:17.0564138Z 615 │ } 2026-10-23T11:43:17.0564227Z 616 │ navigation.navigate("Thread", { 2026-10-23T11:43:17.0564319Z 617 │ environmentId: String(environmentId), 2026-10-23T11:43:17.0564403Z 618 │ threadId: String(threadId), 2026-10-23T11:43:17.0564462Z 619 │ }); 2026-10-23T11:43:17.0564520Z 620 │ }; 2026-10-23T11:43:17.0564600Z 621 │ const androidHeaderSubtitle = [ 2026-10-23T11:43:17.0564676Z 622 │ selectedSection?.title, 2026-10-23T11:43:17.0564760Z 623 │ headerDiffSummary.additions, 2026-10-23T11:43:17.0564842Z 624 │ headerDiffSummary.deletions, 2026-10-23T11:43:17.0564899Z 625 │ ] 2026-10-23T11:43:17.0565012Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-23T11:43:17.0565082Z 627 │ .join(" · "); 2026-10-23T11:43:17.0565136Z 628 │ 2026-10-23T11:43:17.0565224Z 629 │ const showChangedFilesPane = 2026-10-23T11:43:17.0565304Z 630 │ !showConnectionNotice && 2026-10-23T11:43:17.0565382Z 631 │ selectedSection !== null && 2026-10-23T11:43:17.0565464Z 632 │ parsedDiff.kind === "files" && 2026-10-23T11:43:17.0565548Z 633 │ NativeReviewDiffView !== null; 2026-10-23T11:43:17.0565727Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-23T11:43:17.0565933Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-23T11:43:17.0565990Z 636 │ 2026-10-23T11:43:17.0566075Z 637 │ const listHeader = (() => { 2026-10-23T11:43:17.0566169Z 638 │ const children: ReactElement[] = []; 2026-10-23T11:43:17.0566226Z 639 │ 2026-10-23T11:43:17.0566290Z 640 │ if (error) { 2026-10-23T11:43:17.0566361Z 641 │ children.push( 2026-10-23T11:43:17.0566432Z 642 │ 2026-10-23T11:43:17.0567133Z 649 │ Review unavailable 2026-10-23T11:43:17.0567303Z 650 │ {error} 2026-10-23T11:43:17.0567371Z 651 │ , 2026-10-23T11:43:17.0567428Z 652 │ ); 2026-10-23T11:43:17.0567486Z 653 │ } 2026-10-23T11:43:17.0567542Z 654 │ 2026-10-23T11:43:17.0567622Z 655 │ if (parsedDiffNotice) { 2026-10-23T11:43:17.0567796Z 656 │ children.push(); 2026-10-23T11:43:17.0567853Z 657 │ } 2026-10-23T11:43:17.0567912Z 658 │ 2026-10-23T11:43:17.0567990Z 659 │ if (children.length === 0) { 2026-10-23T11:43:17.0568060Z 660 │ return null; 2026-10-23T11:43:17.0568119Z 661 │ } 2026-10-23T11:43:17.0568174Z 662 │ 2026-10-23T11:43:17.0568247Z 663 │ return <>{children}; 2026-10-23T11:43:17.0568308Z 664 │ })(); 2026-10-23T11:43:17.0568383Z 665 │ const headerSubtitle = [ 2026-10-23T11:43:17.0568468Z 666 │ headerDiffSummary.additions, 2026-10-23T11:43:17.0568549Z 667 │ headerDiffSummary.deletions, 2026-10-23T11:43:17.0568634Z 668 │ pendingReviewCommentCount > 0 2026-10-23T11:43:17.0568904Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-23T11:43:17.0569000Z 670 │ : null, 2026-10-23T11:43:17.0569059Z 671 │ ] 2026-10-23T11:43:17.0569129Z 672 │ .filter(Boolean) 2026-10-23T11:43:17.0569197Z 673 │ .join(" · "); 2026-10-23T11:43:17.0569343Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-23T11:43:17.0569402Z 675 │ 2026-10-23T11:43:17.0569467Z 676 │ return ( 2026-10-23T11:43:17.0569525Z 677 │ <> 2026-10-23T11:43:17.0569593Z 678 │ 2026-10-23T11:43:17.0571013Z 694 │ 2026-10-23T11:43:17.0571084Z 695 │ 2026-10-23T11:43:17.0571211Z 696 │ 2026-10-23T11:43:17.0571299Z 697 │ {showConnectionNotice ? ( 2026-10-23T11:43:17.0571450Z 698 │ 2026-10-23T11:43:17.0571547Z 699 │ 2026-10-23T11:43:17.0572639Z 711 │ 2026-10-23T11:43:17.0572806Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-23T11:43:17.0572867Z 713 │ 2026-10-23T11:43:17.0573345Z 719 │ 2026-10-23T11:43:17.0573832Z 723 │ {listHeader} 2026-10-23T11:43:17.0573958Z 724 │ 2026-10-23T11:43:17.0574047Z 725 │ { 2026-10-23T11:43:17.0576795Z ·  ────┬──── 2026-10-23T11:43:17.0576936Z · ╰── This is the containing effect 2026-10-23T11:43:17.0577021Z 106 │ clearReviewCommentTarget(); 2026-10-23T11:43:17.0577131Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T11:43:17.0577252Z ·  ────────────────┬─────────────── 2026-10-23T11:43:17.0577439Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0577524Z 108 │ }, [selectedSection?.id]); 2026-10-23T11:43:17.0577582Z ╰──── 2026-10-23T11:43:17.0578212Z  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-23T11:43:17.0578551Z  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-23T11:43:17.0578553Z 2026-10-23T11:43:17.0578821Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0579023Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-23T11:43:17.0579134Z 109 │ 2026-10-23T11:43:17.0579235Z 110 │ useEffect(() => { 2026-10-23T11:43:17.0579307Z ·  ────┬──── 2026-10-23T11:43:17.0579450Z · ╰── This is the containing effect 2026-10-23T11:43:17.0579545Z 111 │ if (activeCommentTarget === null) { 2026-10-23T11:43:17.0579650Z 112 │ setPendingNativeCommentSelection(null); 2026-10-23T11:43:17.0579768Z ·  ────────────────┬─────────────── 2026-10-23T11:43:17.0579960Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0580021Z 113 │ } 2026-10-23T11:43:17.0580076Z ╰──── 2026-10-23T11:43:17.0580697Z  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-23T11:43:17.0581033Z  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-23T11:43:17.0581036Z 2026-10-23T11:43:17.0581249Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0581447Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-23T11:43:17.0581551Z 107 │ setPendingNativeCommentSelection(null); 2026-10-23T11:43:17.0581625Z 108 │ }, [selectedSection?.id]); 2026-10-23T11:43:17.0581718Z ·  ─────────┬───────── 2026-10-23T11:43:17.0581899Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-23T11:43:17.0581958Z 109 │ 2026-10-23T11:43:17.0582009Z ╰──── 2026-10-23T11:43:17.0582318Z  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-23T11:43:17.0582637Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0582640Z 2026-10-23T11:43:17.0582909Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0583092Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-23T11:43:17.0583149Z 55 │ 2026-10-23T11:43:17.0583280Z 56 │ useEffect(() => { 2026-10-23T11:43:17.0583388Z ·  ────┬──── 2026-10-23T11:43:17.0583534Z · ╰── This is the containing effect 2026-10-23T11:43:17.0583603Z 57 │ scheduler.reset(); 2026-10-23T11:43:17.0583708Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-23T11:43:17.0583798Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-23T11:43:17.0583918Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-23T11:43:17.0584005Z ·  ───────┬─────── 2026-10-23T11:43:17.0584188Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0584309Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-23T11:43:17.0584363Z ╰──── 2026-10-23T11:43:17.0584991Z  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-23T11:43:17.0585325Z  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-23T11:43:17.0585328Z 2026-10-23T11:43:17.0585542Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0585728Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-23T11:43:17.0585814Z 62 │ return () => scheduler.cancel(); 2026-10-23T11:43:17.0585988Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-23T11:43:17.0586199Z ·  ───┬─── ─────┬───── 2026-10-23T11:43:17.0586516Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-23T11:43:17.0586679Z · ╰── Unnecessary dependency `enabled` 2026-10-23T11:43:17.0586736Z 64 │ 2026-10-23T11:43:17.0586793Z ╰──── 2026-10-23T11:43:17.0587099Z  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-23T11:43:17.0587420Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0587422Z 2026-10-23T11:43:17.0587623Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T11:43:17.0587757Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-23T11:43:17.0587822Z 7 │ () => 2026-10-23T11:43:17.0587897Z 8 │ Gesture.Hover() 2026-10-23T11:43:17.0587976Z ·  ──┬── 2026-10-23T11:43:17.0588127Z · ╰── `Hover` may be a component 2026-10-23T11:43:17.0588211Z 9 │ .manualActivation(true) 2026-10-23T11:43:17.0588272Z ╰──── 2026-10-23T11:43:17.0588559Z  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-23T11:43:17.0589102Z  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-23T11:43:17.0589144Z 2026-10-23T11:43:17.0589352Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0589516Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-23T11:43:17.0589632Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-23T11:43:17.0589730Z 223 │ 2026-10-23T11:43:17.0589849Z ·  ─────────────── 2026-10-23T11:43:17.0589951Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-23T11:43:17.0590007Z ╰──── 2026-10-23T11:43:17.0590161Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T11:43:17.0590164Z 2026-10-23T11:43:17.0590378Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0590541Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-23T11:43:17.0590629Z 226 │ cancelAnimationFrame(frame); 2026-10-23T11:43:17.0592811Z 257 │ }, [props.path, targetIndex]); 2026-10-23T11:43:17.0592892Z ·  ─────┬──── 2026-10-23T11:43:17.0593054Z · ╰── Unnecessary dependency `props.path` 2026-10-23T11:43:17.0593110Z 258 │ 2026-10-23T11:43:17.0593161Z ╰──── 2026-10-23T11:43:17.0593468Z  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-23T11:43:17.0593793Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0593795Z 2026-10-23T11:43:17.0594000Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0594218Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-23T11:43:17.0594335Z 292 │ 2026-10-23T11:43:17.0595497Z ·  ─────────── 2026-10-23T11:43:17.0595569Z 310 │ {body} 2026-10-23T11:43:17.0595621Z ╰──── 2026-10-23T11:43:17.0595774Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T11:43:17.0595777Z 2026-10-23T11:43:17.0596102Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0596252Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-23T11:43:17.0596305Z 150 │ 2026-10-23T11:43:17.0596378Z 151 │ useEffect(() => { 2026-10-23T11:43:17.0596453Z ·  ────┬──── 2026-10-23T11:43:17.0596597Z · ╰── This is the containing effect 2026-10-23T11:43:17.0596681Z 152 │ if (!controlledSelectedPath) { 2026-10-23T11:43:17.0596754Z 153 │ return; 2026-10-23T11:43:17.0596816Z 154 │ } 2026-10-23T11:43:17.0596904Z 155 │ setExpandedPaths((current) => { 2026-10-23T11:43:17.0596987Z ·  ────────┬─────── 2026-10-23T11:43:17.0597172Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0597307Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-23T11:43:17.0597363Z ╰──── 2026-10-23T11:43:17.0597989Z  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-23T11:43:17.0598327Z  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-23T11:43:17.0598332Z 2026-10-23T11:43:17.0598553Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-23T11:43:17.0598687Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-23T11:43:17.0598796Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-23T11:43:17.0598968Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-23T11:43:17.0599116Z 159 │ │ constructor(data: Record) { 2026-10-23T11:43:17.0599247Z 160 │ │ clipboardItemConstructor(data); 2026-10-23T11:43:17.0599327Z 161 │ │ } 2026-10-23T11:43:17.0599524Z 162 │ ╰─▶ }, 2026-10-23T11:43:17.0599633Z 163 │ clipboard: { 2026-10-23T11:43:17.0599692Z ╰──── 2026-10-23T11:43:17.0599871Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-23T11:43:17.0599873Z 2026-10-23T11:43:17.0600098Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.0600253Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:772:7] 2026-10-23T11:43:17.0600360Z 771 │ if (settingsSheetPresentation.isActive) { 2026-10-23T11:43:17.0600501Z 772 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-23T11:43:17.0600607Z ·  ────────────┬──────────── 2026-10-23T11:43:17.0600800Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-23T11:43:17.0600865Z 773 │ } 2026-10-23T11:43:17.0601079Z 774 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-23T11:43:17.0601200Z ·  ────────────────┬──────────────── 2026-10-23T11:43:17.0601495Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-23T11:43:17.0601552Z 775 │ 2026-10-23T11:43:17.0601611Z ╰──── 2026-10-23T11:43:17.0602054Z  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-23T11:43:17.0602379Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0602385Z 2026-10-23T11:43:17.0602553Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0602704Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:390:5] 2026-10-23T11:43:17.0602872Z 386 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-23T11:43:17.0603018Z 387 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-23T11:43:17.0603213Z ·  ──────────┬───────── 2026-10-23T11:43:17.0603382Z · ╰── `animatedBorderRadius` originates here 2026-10-23T11:43:17.0603550Z 388 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-23T11:43:17.0603630Z 389 │ useLayoutEffect(() => { 2026-10-23T11:43:17.0603736Z 390 │ animatedBorderRadius.value = shouldAnimate 2026-10-23T11:43:17.0603830Z ·  ──────────┬───────── 2026-10-23T11:43:17.0604001Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-23T11:43:17.0604097Z 391 │ ? withTiming(targetBorderRadius, { 2026-10-23T11:43:17.0604149Z ╰──── 2026-10-23T11:43:17.0604514Z  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-23T11:43:17.0604937Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0604941Z 2026-10-23T11:43:17.0605537Z ⚠ 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-23T11:43:17.0605791Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-23T11:43:17.0605866Z 222 │ let idlePasses = 0; 2026-10-23T11:43:17.0606084Z 223 │ ╭─▶ for (;;) { 2026-10-23T11:43:17.0606235Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-23T11:43:17.0606389Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-23T11:43:17.0606488Z 226 │ │ if (!pending) { 2026-10-23T11:43:17.0606591Z 227 │ │ idlePasses++; 2026-10-23T11:43:17.0606710Z 228 │ │ if (idlePasses >= 3) { 2026-10-23T11:43:17.0606806Z 229 │ │ return; 2026-10-23T11:43:17.0606889Z 230 │ │ } 2026-10-23T11:43:17.0606984Z 231 │ │ continue; 2026-10-23T11:43:17.0607067Z 232 │ │ } 2026-10-23T11:43:17.0607168Z 233 │ │ idlePasses = 0; 2026-10-23T11:43:17.0607292Z 234 │ │ const exit = yield* Effect.exit( 2026-10-23T11:43:17.0607526Z 235 │ │ pending.operation as Effect.Effect, 2026-10-23T11:43:17.0607611Z 236 │ │ ); 2026-10-23T11:43:17.0607732Z 237 │ │ yield* Effect.sync(() => { 2026-10-23T11:43:17.0607841Z 238 │ │ pending.resolve(exit); 2026-10-23T11:43:17.0607929Z 239 │ │ }); 2026-10-23T11:43:17.0608073Z 240 │ ╰─▶ } 2026-10-23T11:43:17.0608139Z 241 │ }, 2026-10-23T11:43:17.0608193Z ╰──── 2026-10-23T11:43:17.0608195Z 2026-10-23T11:43:17.0608471Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0608646Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T11:43:17.0608715Z 259 │ .join("|"); 2026-10-23T11:43:17.0608782Z 260 │ useEffect(() => { 2026-10-23T11:43:17.0608862Z ·  ────┬──── 2026-10-23T11:43:17.0609006Z · ╰── This is the containing effect 2026-10-23T11:43:17.0609075Z 261 │ stop(); 2026-10-23T11:43:17.0609212Z ·  ──┬─ 2026-10-23T11:43:17.0609431Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0609500Z 262 │ }, [orderVersion]); 2026-10-23T11:43:17.0609557Z ╰──── 2026-10-23T11:43:17.0610182Z  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-23T11:43:17.0610520Z  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-23T11:43:17.0610523Z 2026-10-23T11:43:17.0610760Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.0610937Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-23T11:43:17.0611008Z 260 │ useEffect(() => { 2026-10-23T11:43:17.0611069Z 261 │ stop(); 2026-10-23T11:43:17.0611142Z ·  ──┬─ 2026-10-23T11:43:17.0611278Z · ╰── Missing dependency `stop` 2026-10-23T11:43:17.0611349Z 262 │ }, [orderVersion]); 2026-10-23T11:43:17.0611432Z ·  ──────┬───── 2026-10-23T11:43:17.0611595Z · ╰── Unnecessary dependency `orderVersion` 2026-10-23T11:43:17.0611661Z 263 │ useEffect( 2026-10-23T11:43:17.0611714Z ╰──── 2026-10-23T11:43:17.0612161Z  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-23T11:43:17.0612490Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0612492Z 2026-10-23T11:43:17.0612652Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0612825Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-23T11:43:17.0612905Z 95 │ const latest = useRef(props); 2026-10-23T11:43:17.0612980Z 96 │ latest.current = props; 2026-10-23T11:43:17.0613097Z ·  ───┬──────┬─── 2026-10-23T11:43:17.0613293Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.0613421Z · ╰── This value is a ref 2026-10-23T11:43:17.0613498Z 97 │ const gesture = useMemo( 2026-10-23T11:43:17.0613553Z ╰──── 2026-10-23T11:43:17.0614046Z  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-23T11:43:17.0614353Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0614356Z 2026-10-23T11:43:17.0614506Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0614681Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-23T11:43:17.0614807Z 103 │ .runOnJS(true) 2026-10-23T11:43:17.0614946Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T11:43:17.0615075Z ·  ───────────────┬────────────── 2026-10-23T11:43:17.0615316Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.0615535Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0615620Z ╰──── 2026-10-23T11:43:17.0616371Z  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-23T11:43:17.0616858Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0616865Z 2026-10-23T11:43:17.0617116Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0617404Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-23T11:43:17.0617578Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T11:43:17.0617801Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0618068Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T11:43:17.0618441Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.0618664Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0618760Z ╰──── 2026-10-23T11:43:17.0619592Z  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-23T11:43:17.0620112Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0620116Z 2026-10-23T11:43:17.0620361Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0620641Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-23T11:43:17.0620870Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0621101Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0621379Z ·  ──────────────────────────┬───────────────────────── 2026-10-23T11:43:17.0621737Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.0621954Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T11:43:17.0622052Z ╰──── 2026-10-23T11:43:17.0622871Z  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-23T11:43:17.0623498Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0623559Z 2026-10-23T11:43:17.0623824Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0624110Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-23T11:43:17.0624335Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0624561Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T11:43:17.0624825Z ·  ───────────────────────┬────────────────────── 2026-10-23T11:43:17.0625207Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.0625329Z 108 │ [props.disabled], 2026-10-23T11:43:17.0625423Z ╰──── 2026-10-23T11:43:17.0626341Z  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-23T11:43:17.0626737Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0626741Z 2026-10-23T11:43:17.0626896Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0627071Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-23T11:43:17.0627193Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T11:43:17.0627310Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-23T11:43:17.0627421Z ·  ───┬──────┬─── 2026-10-23T11:43:17.0627630Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.0627761Z · ╰── This value is a ref 2026-10-23T11:43:17.0627820Z 250 │ 2026-10-23T11:43:17.0627873Z ╰──── 2026-10-23T11:43:17.0628355Z  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-23T11:43:17.0628653Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0628655Z 2026-10-23T11:43:17.0628807Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0628984Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-23T11:43:17.0629112Z 246 │ const [preview, setPreview] = useState(null); 2026-10-23T11:43:17.0629235Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-23T11:43:17.0629376Z ·  ──────────────────┬────────────────── 2026-10-23T11:43:17.0629558Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0629672Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-23T11:43:17.0629728Z ╰──── 2026-10-23T11:43:17.0630296Z  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-23T11:43:17.0630653Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0630655Z 2026-10-23T11:43:17.0630837Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0631004Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-23T11:43:17.0631074Z 323 │ update(0); 2026-10-23T11:43:17.0631164Z 324 │ let last = performance.now(); 2026-10-23T11:43:17.0631269Z ·  ────────┬──────── 2026-10-23T11:43:17.0631419Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0631494Z 325 │ const tick = () => { 2026-10-23T11:43:17.0631549Z ╰──── 2026-10-23T11:43:17.0631869Z  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-23T11:43:17.0632170Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0632176Z 2026-10-23T11:43:17.0632372Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T11:43:17.0632540Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-23T11:43:17.0632603Z  98 │ () => 2026-10-23T11:43:17.0632670Z  99 │ Gesture.Pan() 2026-10-23T11:43:17.0632750Z ·  ─┬─ 2026-10-23T11:43:17.0632895Z · ╰── `Pan` may be a component 2026-10-23T11:43:17.0632989Z 100 │ .enabled(!props.disabled) 2026-10-23T11:43:17.0633041Z ╰──── 2026-10-23T11:43:17.0633328Z  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-23T11:43:17.0633787Z  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-23T11:43:17.0633790Z 2026-10-23T11:43:17.0633987Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T11:43:17.0634154Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-23T11:43:17.0634221Z 103 │ .runOnJS(true) 2026-10-23T11:43:17.0634387Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-23T11:43:17.0634519Z ·  ───┬── 2026-10-23T11:43:17.0634974Z · ╰── 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-23T11:43:17.0635115Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0635246Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-23T11:43:17.0635377Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-23T11:43:17.0635449Z 108 │ [props.disabled], 2026-10-23T11:43:17.0635538Z ·  ────────┬─────── 2026-10-23T11:43:17.0635742Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.0635804Z 109 │ ); 2026-10-23T11:43:17.0635858Z ╰──── 2026-10-23T11:43:17.0636123Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T11:43:17.0636449Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0636452Z 2026-10-23T11:43:17.0636727Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0636913Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-23T11:43:17.0636973Z 118 │ 2026-10-23T11:43:17.0637038Z 119 │ useEffect(() => { 2026-10-23T11:43:17.0637122Z ·  ────┬──── 2026-10-23T11:43:17.0637266Z · ╰── This is the containing effect 2026-10-23T11:43:17.0637353Z 120 │ if (orientationSettled) return; 2026-10-23T11:43:17.0637470Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-23T11:43:17.0637551Z 122 │ if (orientation === null) { 2026-10-23T11:43:17.0637640Z 123 │ setOrientationSettled(true); 2026-10-23T11:43:17.0637738Z ·  ──────────┬────────── 2026-10-23T11:43:17.0637922Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0637989Z 124 │ return; 2026-10-23T11:43:17.0638047Z ╰──── 2026-10-23T11:43:17.0638669Z  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-23T11:43:17.0638997Z  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-23T11:43:17.0639002Z 2026-10-23T11:43:17.0639265Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0639456Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-23T11:43:17.0639513Z 292 │ 2026-10-23T11:43:17.0639584Z 293 │ useEffect(() => { 2026-10-23T11:43:17.0639657Z ·  ────┬──── 2026-10-23T11:43:17.0639851Z · ╰── This is the containing effect 2026-10-23T11:43:17.0639951Z 294 │ if ( 2026-10-23T11:43:17.0640022Z 295 │ scene === null || 2026-10-23T11:43:17.0640100Z 296 │ requestedScene === null || 2026-10-23T11:43:17.0689543Z 297 │ scene !== requestedScene || 2026-10-23T11:43:17.0689934Z 298 │ !hasFixture || 2026-10-23T11:43:17.0690023Z 299 │ !orientationSettled || 2026-10-23T11:43:17.0690096Z 300 │ !themeApplied || 2026-10-23T11:43:17.0690237Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-23T11:43:17.0690380Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-23T11:43:17.0690446Z 303 │ ) { 2026-10-23T11:43:17.0690520Z 304 │ setReadyScene(null); 2026-10-23T11:43:17.0690619Z ·  ──────┬────── 2026-10-23T11:43:17.0690866Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0690943Z 305 │ return; 2026-10-23T11:43:17.0691002Z ╰──── 2026-10-23T11:43:17.0691623Z  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-23T11:43:17.0691968Z  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-23T11:43:17.0691976Z 2026-10-23T11:43:17.0692265Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0692460Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-23T11:43:17.0692536Z 127 │ let cancelled = false; 2026-10-23T11:43:17.0692636Z 128 │ let lastOutcome: string | null = null; 2026-10-23T11:43:17.0692719Z ·  ─────┬───── 2026-10-23T11:43:17.0692871Z · ╰── 'lastOutcome' is declared here 2026-10-23T11:43:17.0693056Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-23T11:43:17.0693118Z ╰──── 2026-10-23T11:43:17.0693232Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0693237Z 2026-10-23T11:43:17.0693510Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0693679Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-23T11:43:17.0693746Z 510 │ }, []); 2026-10-23T11:43:17.0693814Z 511 │ useEffect(() => { 2026-10-23T11:43:17.0693893Z ·  ────┬──── 2026-10-23T11:43:17.0694039Z · ╰── This is the containing effect 2026-10-23T11:43:17.0694128Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T11:43:17.0694221Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0694409Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0694511Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T11:43:17.0694566Z ╰──── 2026-10-23T11:43:17.0695663Z  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-23T11:43:17.0696191Z  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-23T11:43:17.0696195Z 2026-10-23T11:43:17.0696464Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0696626Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-23T11:43:17.0696790Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-23T11:43:17.0696855Z 870 │ useEffect(() => { 2026-10-23T11:43:17.0696931Z ·  ────┬──── 2026-10-23T11:43:17.0697075Z · ╰── This is the containing effect 2026-10-23T11:43:17.0697238Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-23T11:43:17.0697354Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-23T11:43:17.0697458Z ·  ─────────────┬──────────── 2026-10-23T11:43:17.0697647Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0697706Z 873 │ } 2026-10-23T11:43:17.0697758Z ╰──── 2026-10-23T11:43:17.0698372Z  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-23T11:43:17.0698700Z  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-23T11:43:17.0698703Z 2026-10-23T11:43:17.0698965Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0699127Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-23T11:43:17.0699184Z 1117 │ 2026-10-23T11:43:17.0699258Z 1118 │ useEffect(() => { 2026-10-23T11:43:17.0699334Z ·  ────┬──── 2026-10-23T11:43:17.0699471Z · ╰── This is the containing effect 2026-10-23T11:43:17.0699549Z 1119 │ setAnchorMessageId(null); 2026-10-23T11:43:17.0699645Z ·  ─────────┬──────── 2026-10-23T11:43:17.0699828Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0699913Z 1120 │ setSubmittedMessageId(null); 2026-10-23T11:43:17.0699965Z ╰──── 2026-10-23T11:43:17.0700572Z  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-23T11:43:17.0700897Z  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-23T11:43:17.0700900Z 2026-10-23T11:43:17.0701167Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0701363Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-23T11:43:17.0701448Z 512 │ setKeyboardStateSuspect(false); 2026-10-23T11:43:17.0701550Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-23T11:43:17.0701708Z ·  ────────┬──────── ─────────┬──────── 2026-10-23T11:43:17.0701932Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-23T11:43:17.0702097Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-23T11:43:17.0702229Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-23T11:43:17.0702284Z ╰──── 2026-10-23T11:43:17.0702590Z  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-23T11:43:17.0702904Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0702916Z 2026-10-23T11:43:17.0703120Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0703280Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-23T11:43:17.0703376Z 1066 │ userInputInsetProgress.set(1); 2026-10-23T11:43:17.0703539Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-23T11:43:17.0703637Z ·  ────────────┬─────────── 2026-10-23T11:43:17.0703826Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-23T11:43:17.0703944Z 1068 │ const showContent = props.showContent ?? true; 2026-10-23T11:43:17.0703999Z ╰──── 2026-10-23T11:43:17.0704292Z  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-23T11:43:17.0704605Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0704607Z 2026-10-23T11:43:17.0704811Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0704975Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-23T11:43:17.0705050Z 1124 │ freeze.set(false); 2026-10-23T11:43:17.0705133Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-23T11:43:17.0705231Z ·  ────────┬──────── 2026-10-23T11:43:17.0705406Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-23T11:43:17.0705462Z 1126 │ 2026-10-23T11:43:17.0705518Z ╰──── 2026-10-23T11:43:17.0705812Z  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-23T11:43:17.0706161Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0706164Z 2026-10-23T11:43:17.0706334Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0706551Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-23T11:43:17.0706699Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-23T11:43:17.0706807Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-23T11:43:17.0706907Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0707076Z · ╰── `floatingControlCoverage` originates here 2026-10-23T11:43:17.0707208Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T11:43:17.0707267Z 953 │ ); 2026-10-23T11:43:17.0707336Z 954 │ useEffect(() => { 2026-10-23T11:43:17.0707438Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-23T11:43:17.0707533Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0707711Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-23T11:43:17.0707844Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-23T11:43:17.0707897Z ╰──── 2026-10-23T11:43:17.0708167Z  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-23T11:43:17.0708477Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0708480Z 2026-10-23T11:43:17.0708642Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0708797Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-23T11:43:17.0708988Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-23T11:43:17.0709115Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-23T11:43:17.0709238Z ·  ────────────────┬──────────────── 2026-10-23T11:43:17.0709435Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-23T11:43:17.0709564Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-23T11:43:17.0709621Z 966 │ ); 2026-10-23T11:43:17.0709692Z 967 │ useAnimatedReaction( 2026-10-23T11:43:17.0709755Z 968 │ () => 2026-10-23T11:43:17.0709846Z 969 │ contentInsetEndAdjustment.value + 2026-10-23T11:43:17.0709936Z 970 │ floatingControlCoverage.value + 2026-10-23T11:43:17.0710132Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-23T11:43:17.0710251Z 972 │ (value) => { 2026-10-23T11:43:17.0710408Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-23T11:43:17.0710525Z ·  ────────────────┬──────────────── 2026-10-23T11:43:17.0710723Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-23T11:43:17.0710784Z 974 │ }, 2026-10-23T11:43:17.0710836Z ╰──── 2026-10-23T11:43:17.0711107Z  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-23T11:43:17.0711414Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0711416Z 2026-10-23T11:43:17.0711576Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0711749Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-23T11:43:17.0711861Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-23T11:43:17.0711947Z 66 │ const progress = useSharedValue(0); 2026-10-23T11:43:17.0712024Z ·  ────┬─── 2026-10-23T11:43:17.0712164Z · ╰── `progress` originates here 2026-10-23T11:43:17.0712237Z 67 │ useEffect(() => { 2026-10-23T11:43:17.0712362Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-23T11:43:17.0712435Z ·  ────┬─── 2026-10-23T11:43:17.0712572Z · ╰── `progress` cannot be modified 2026-10-23T11:43:17.0712646Z 69 │ }, [expanded, progress]); 2026-10-23T11:43:17.0712701Z ╰──── 2026-10-23T11:43:17.0712975Z  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-23T11:43:17.0713280Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0713287Z 2026-10-23T11:43:17.0713436Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0713611Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-23T11:43:17.0713698Z 26 │ const latestInput = useRef(input); 2026-10-23T11:43:17.0713774Z 27 │ latestInput.current = input; 2026-10-23T11:43:17.0713890Z ·  ─────┬─────────┬─── 2026-10-23T11:43:17.0714090Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.0714213Z · ╰── This value is a ref 2026-10-23T11:43:17.0714289Z 28 │ const mounted = useRef(true); 2026-10-23T11:43:17.0714342Z ╰──── 2026-10-23T11:43:17.0714822Z  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-23T11:43:17.0715117Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0715120Z 2026-10-23T11:43:17.0715271Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0715514Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-23T11:43:17.0715738Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T11:43:17.0715870Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T11:43:17.0716036Z ·  ───────────┬────────── 2026-10-23T11:43:17.0716236Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0716362Z 123 │ const sessionRef = useRef(null); 2026-10-23T11:43:17.0716421Z ╰──── 2026-10-23T11:43:17.0716898Z  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-23T11:43:17.0717205Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0717210Z 2026-10-23T11:43:17.0717357Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0717519Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-23T11:43:17.0717587Z 125 │ 2026-10-23T11:43:17.0717707Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T11:43:17.0717804Z ·  ─────────┬──────── 2026-10-23T11:43:17.0717961Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0718074Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T11:43:17.0718135Z ╰──── 2026-10-23T11:43:17.0718612Z  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-23T11:43:17.0718906Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0718908Z 2026-10-23T11:43:17.0719059Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0719227Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-23T11:43:17.0719286Z 125 │ 2026-10-23T11:43:17.0719402Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T11:43:17.0719493Z ·  ─────────┬───────── 2026-10-23T11:43:17.0719658Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0719773Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T11:43:17.0719826Z ╰──── 2026-10-23T11:43:17.0720294Z  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-23T11:43:17.0720594Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0720600Z 2026-10-23T11:43:17.0720754Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0720993Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-23T11:43:17.0721097Z 125 │ 2026-10-23T11:43:17.0721206Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T11:43:17.0721331Z ·  ─────────┬───────── 2026-10-23T11:43:17.0721509Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0721608Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T11:43:17.0721673Z ╰──── 2026-10-23T11:43:17.0722160Z  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-23T11:43:17.0722457Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0722462Z 2026-10-23T11:43:17.0722614Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0722774Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-23T11:43:17.0722836Z 125 │ 2026-10-23T11:43:17.0722947Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T11:43:17.0723211Z ·  ──────────┬───────── 2026-10-23T11:43:17.0723382Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0723490Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T11:43:17.0723548Z ╰──── 2026-10-23T11:43:17.0724022Z  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-23T11:43:17.0724314Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0724319Z 2026-10-23T11:43:17.0724463Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0724628Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-23T11:43:17.0724742Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T11:43:17.0724944Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-23T11:43:17.0725127Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T11:43:17.0725266Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-23T11:43:17.0725428Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T11:43:17.0725555Z 131 │ │ isFinished: status.isFinished, 2026-10-23T11:43:17.0725734Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T11:43:17.0725843Z 133 │ │ error: status.error, 2026-10-23T11:43:17.0725964Z 134 │ │ url: status.url, 2026-10-23T11:43:17.0726092Z 135 │ │ }); 2026-10-23T11:43:17.0726172Z 136 │ │ }, 2026-10-23T11:43:17.0726566Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T11:43:17.0726772Z 138 │ │ selectInput: (inputs) => { 2026-10-23T11:43:17.0726942Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T11:43:17.0727091Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T11:43:17.0727266Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T11:43:17.0727411Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-23T11:43:17.0727524Z 143 │ │ if (order !== known) { 2026-10-23T11:43:17.0727670Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T11:43:17.0727793Z 145 │ │ transform: (current) => ({ 2026-10-23T11:43:17.0728007Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T11:43:17.0728100Z 147 │ │ }), 2026-10-23T11:43:17.0728184Z 148 │ │ }); 2026-10-23T11:43:17.0728261Z 149 │ │ } 2026-10-23T11:43:17.0728406Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-23T11:43:17.0728488Z 151 │ │ }, 2026-10-23T11:43:17.0728627Z 152 │ ├─▶ }); 2026-10-23T11:43:17.0728874Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.0728962Z 153 │ recorderRef.current = recorder; 2026-10-23T11:43:17.0729026Z ╰──── 2026-10-23T11:43:17.0729500Z  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-23T11:43:17.0729789Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0729795Z 2026-10-23T11:43:17.0729943Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0730114Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-23T11:43:17.0730174Z 152 │ }); 2026-10-23T11:43:17.0730261Z 153 │ recorderRef.current = recorder; 2026-10-23T11:43:17.0730381Z ·  ─────┬─────────┬─── 2026-10-23T11:43:17.0730578Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.0730701Z · ╰── This value is a ref 2026-10-23T11:43:17.0730811Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T11:43:17.0730864Z ╰──── 2026-10-23T11:43:17.0731331Z  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-23T11:43:17.0731622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0731625Z 2026-10-23T11:43:17.0731844Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0732055Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-23T11:43:17.0732143Z 153 │ recorderRef.current = recorder; 2026-10-23T11:43:17.0732351Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-23T11:43:17.0732445Z 155 │ │ recorder, 2026-10-23T11:43:17.0732583Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T11:43:17.0732702Z 157 │ │ requestPermission: async () => { 2026-10-23T11:43:17.0732890Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T11:43:17.0733097Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T11:43:17.0733185Z 160 │ │ }, 2026-10-23T11:43:17.0733329Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T11:43:17.0733476Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T11:43:17.0733618Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T11:43:17.0733734Z 164 │ │ onStateChange: (nextState) => 2026-10-23T11:43:17.0733827Z 165 │ │ setState({ 2026-10-23T11:43:17.0733936Z 166 │ │ state: nextState, 2026-10-23T11:43:17.0734080Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T11:43:17.0734220Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-23T11:43:17.0734308Z 169 │ │ }), 2026-10-23T11:43:17.0734449Z 170 │ ├─▶ }); 2026-10-23T11:43:17.0734666Z · ╰──── Cannot access ref value during render 2026-10-23T11:43:17.0734730Z 171 │ } 2026-10-23T11:43:17.0734780Z ╰──── 2026-10-23T11:43:17.0735252Z  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-23T11:43:17.0735736Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0735782Z 2026-10-23T11:43:17.0736004Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0736175Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-23T11:43:17.0736258Z 153 │ recorderRef.current = recorder; 2026-10-23T11:43:17.0736368Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T11:43:17.0736490Z ·  ─────┬────────┬─── 2026-10-23T11:43:17.0736682Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.0736803Z · ╰── This value is a ref 2026-10-23T11:43:17.0736876Z 155 │ recorder, 2026-10-23T11:43:17.0736936Z ╰──── 2026-10-23T11:43:17.0737425Z  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-23T11:43:17.0737718Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0737725Z 2026-10-23T11:43:17.0737872Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0738044Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-23T11:43:17.0738167Z 184 │ return () => subscription.remove(); 2026-10-23T11:43:17.0738245Z 185 │ }, [controller]); 2026-10-23T11:43:17.0738328Z ·  ─────┬──── 2026-10-23T11:43:17.0738485Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0738550Z 186 │ 2026-10-23T11:43:17.0738608Z ╰──── 2026-10-23T11:43:17.0739073Z  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-23T11:43:17.0739376Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0739380Z 2026-10-23T11:43:17.0739534Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0739701Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-23T11:43:17.0739800Z 184 │ return () => subscription.remove(); 2026-10-23T11:43:17.0739870Z 185 │ }, [controller]); 2026-10-23T11:43:17.0739956Z ·  ──────┬───── 2026-10-23T11:43:17.0740111Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0740164Z 186 │ 2026-10-23T11:43:17.0740220Z ╰──── 2026-10-23T11:43:17.0740687Z  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-23T11:43:17.0740981Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0740983Z 2026-10-23T11:43:17.0741190Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0741431Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-23T11:43:17.0741498Z 191 │ }, 2026-10-23T11:43:17.0741579Z 192 │ [controller, recorder], 2026-10-23T11:43:17.0741667Z ·  ─────┬──── 2026-10-23T11:43:17.0741815Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0741883Z 193 │ ); 2026-10-23T11:43:17.0741943Z ╰──── 2026-10-23T11:43:17.0742408Z  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-23T11:43:17.0742701Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0742710Z 2026-10-23T11:43:17.0742857Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0743022Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-23T11:43:17.0743117Z 174 │ const controller = session.controller; 2026-10-23T11:43:17.0743209Z 175 │ const recorder = recorderRef.current; 2026-10-23T11:43:17.0743316Z ·  ─────────┬───────── 2026-10-23T11:43:17.0743487Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0743543Z 176 │ 2026-10-23T11:43:17.0743598Z ╰──── 2026-10-23T11:43:17.0744066Z  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-23T11:43:17.0744360Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0744363Z 2026-10-23T11:43:17.0744518Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0744683Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-23T11:43:17.0744738Z 191 │ }, 2026-10-23T11:43:17.0744814Z 192 │ [controller, recorder], 2026-10-23T11:43:17.0744910Z ·  ───────────┬────────── 2026-10-23T11:43:17.0745069Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0745128Z 193 │ ); 2026-10-23T11:43:17.0745187Z ╰──── 2026-10-23T11:43:17.0745657Z  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-23T11:43:17.0745987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0745990Z 2026-10-23T11:43:17.0746138Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0746298Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-23T11:43:17.0746393Z 245 │ return () => clearInterval(intervalId); 2026-10-23T11:43:17.0746573Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T11:43:17.0746703Z ·  ─────┬──── 2026-10-23T11:43:17.0746867Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0746923Z 247 │ 2026-10-23T11:43:17.0746979Z ╰──── 2026-10-23T11:43:17.0747446Z  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-23T11:43:17.0747733Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0747739Z 2026-10-23T11:43:17.0747887Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0748053Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-23T11:43:17.0748149Z 245 │ return () => clearInterval(intervalId); 2026-10-23T11:43:17.0748263Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-23T11:43:17.0748402Z ·  ────────────────────────┬─────────────────────── 2026-10-23T11:43:17.0748569Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0748628Z 247 │ 2026-10-23T11:43:17.0748683Z ╰──── 2026-10-23T11:43:17.0749144Z  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-23T11:43:17.0749442Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0749447Z 2026-10-23T11:43:17.0749596Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0749762Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-23T11:43:17.0749834Z 260 │ setOwnerFocused, 2026-10-23T11:43:17.0749895Z 261 │ session, 2026-10-23T11:43:17.0749972Z ·  ───┬─── 2026-10-23T11:43:17.0750118Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.0750181Z 262 │ stop, 2026-10-23T11:43:17.0750233Z ╰──── 2026-10-23T11:43:17.0750703Z  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-23T11:43:17.0750995Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0750997Z 2026-10-23T11:43:17.0751143Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.0751303Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-23T11:43:17.0751363Z 250 │ 2026-10-23T11:43:17.0751508Z 251 │ ╭─▶ return { 2026-10-23T11:43:17.0751727Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-23T11:43:17.0751868Z 253 │ │ state, 2026-10-23T11:43:17.0751993Z 254 │ │ audioLevels, 2026-10-23T11:43:17.0752090Z 255 │ │ elapsedSeconds, 2026-10-23T11:43:17.0752225Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-23T11:43:17.0752308Z 257 │ │ ownerKey, 2026-10-23T11:43:17.0752389Z 258 │ │ label, 2026-10-23T11:43:17.0752482Z 259 │ │ focusedOwners, 2026-10-23T11:43:17.0752582Z 260 │ │ setOwnerFocused, 2026-10-23T11:43:17.0752663Z 261 │ │ session, 2026-10-23T11:43:17.0752747Z 262 │ │ stop, 2026-10-23T11:43:17.0752830Z 263 │ │ cancel, 2026-10-23T11:43:17.0752983Z 264 │ ├─▶ }; 2026-10-23T11:43:17.0753199Z · ╰──── Cannot access ref value during render 2026-10-23T11:43:17.0753262Z 265 │ } 2026-10-23T11:43:17.0753317Z ╰──── 2026-10-23T11:43:17.0753784Z  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-23T11:43:17.0754073Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.0754075Z 2026-10-23T11:43:17.0754236Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0754405Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T11:43:17.0754570Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-23T11:43:17.0754700Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-23T11:43:17.0754780Z ·  ─────┬───── 2026-10-23T11:43:17.0754926Z · ╰── `audioLevels` originates here 2026-10-23T11:43:17.0755049Z 123 │ const sessionRef = useRef(null); 2026-10-23T11:43:17.0755200Z 124 │ const recorderRef = useRef | null>(null); 2026-10-23T11:43:17.0755253Z 125 │ 2026-10-23T11:43:17.0755366Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-23T11:43:17.0755468Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-23T11:43:17.0755616Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-23T11:43:17.0755715Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-23T11:43:17.0755843Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-23T11:43:17.0755980Z 131 │ isFinished: status.isFinished, 2026-10-23T11:43:17.0756128Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-23T11:43:17.0756201Z 133 │ error: status.error, 2026-10-23T11:43:17.0756274Z 134 │ url: status.url, 2026-10-23T11:43:17.0756335Z 135 │ }); 2026-10-23T11:43:17.0756394Z 136 │ }, 2026-10-23T11:43:17.0756561Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-23T11:43:17.0756644Z 138 │ selectInput: (inputs) => { 2026-10-23T11:43:17.0756830Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-23T11:43:17.0756980Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-23T11:43:17.0757113Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-23T11:43:17.0757228Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-23T11:43:17.0757307Z 143 │ if (order !== known) { 2026-10-23T11:43:17.0757416Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-23T11:43:17.0757501Z 145 │ transform: (current) => ({ 2026-10-23T11:43:17.0757679Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-23T11:43:17.0757744Z 147 │ }), 2026-10-23T11:43:17.0757811Z 148 │ }); 2026-10-23T11:43:17.0757869Z 149 │ } 2026-10-23T11:43:17.0757983Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-23T11:43:17.0758048Z 151 │ }, 2026-10-23T11:43:17.0758110Z 152 │ }); 2026-10-23T11:43:17.0758191Z 153 │ recorderRef.current = recorder; 2026-10-23T11:43:17.0758297Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-23T11:43:17.0758362Z 155 │ recorder, 2026-10-23T11:43:17.0758462Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-23T11:43:17.0758552Z 157 │ requestPermission: async () => { 2026-10-23T11:43:17.0758685Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-23T11:43:17.0758845Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-23T11:43:17.0758899Z 160 │ }, 2026-10-23T11:43:17.0759014Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-23T11:43:17.0759125Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-23T11:43:17.0759240Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-23T11:43:17.0759323Z 164 │ onStateChange: (nextState) => 2026-10-23T11:43:17.0759391Z 165 │ setState({ 2026-10-23T11:43:17.0759465Z 166 │ state: nextState, 2026-10-23T11:43:17.0759577Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-23T11:43:17.0759676Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-23T11:43:17.0759746Z 169 │ }), 2026-10-23T11:43:17.0759806Z 170 │ }); 2026-10-23T11:43:17.0759865Z 171 │ } 2026-10-23T11:43:17.0759916Z 172 │ 2026-10-23T11:43:17.0760003Z 173 │ const session = sessionRef.current; 2026-10-23T11:43:17.0760094Z 174 │ const controller = session.controller; 2026-10-23T11:43:17.0760180Z 175 │ const recorder = recorderRef.current; 2026-10-23T11:43:17.0760233Z 176 │ 2026-10-23T11:43:17.0760307Z 177 │ useEffect(() => { 2026-10-23T11:43:17.0760465Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-23T11:43:17.0760610Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-23T11:43:17.0760748Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-23T11:43:17.0760858Z 181 │ // calls and route interruptions during capture. 2026-10-23T11:43:17.0760996Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-23T11:43:17.0761061Z 183 │ }); 2026-10-23T11:43:17.0761146Z 184 │ return () => subscription.remove(); 2026-10-23T11:43:17.0761216Z 185 │ }, [controller]); 2026-10-23T11:43:17.0761270Z 186 │ 2026-10-23T11:43:17.0761330Z 187 │ useEffect( 2026-10-23T11:43:17.0761406Z 188 │ () => () => { 2026-10-23T11:43:17.0761484Z 189 │ controller.dispose(); 2026-10-23T11:43:17.0761618Z 190 │ recorder.release(); 2026-10-23T11:43:17.0761712Z 191 │ }, 2026-10-23T11:43:17.0761785Z 192 │ [controller, recorder], 2026-10-23T11:43:17.0761847Z 193 │ ); 2026-10-23T11:43:17.0761901Z 194 │ 2026-10-23T11:43:17.0761965Z 195 │ useEffect(() => { 2026-10-23T11:43:17.0762062Z 196 │ if (state.phase !== "recording") return; 2026-10-23T11:43:17.0762115Z 197 │ 2026-10-23T11:43:17.0762267Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-23T11:43:17.0762372Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-23T11:43:17.0762459Z 200 │ void activation.catch(() => {}); 2026-10-23T11:43:17.0762528Z 201 │ return () => { 2026-10-23T11:43:17.0762684Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-23T11:43:17.0762827Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-23T11:43:17.0762892Z 204 │ }; 2026-10-23T11:43:17.0762981Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-23T11:43:17.0763035Z 206 │ 2026-10-23T11:43:17.0763199Z 207 │ useEffect(() => { 2026-10-23T11:43:17.0763338Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T11:43:17.0763398Z 209 │ 2026-10-23T11:43:17.0763522Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T11:43:17.0763682Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T11:43:17.0763790Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T11:43:17.0763875Z ·  ─────┬───── 2026-10-23T11:43:17.0764025Z · ╰── `audioLevels` cannot be modified 2026-10-23T11:43:17.0764098Z 213 │ } 2026-10-23T11:43:17.0764157Z ╰──── 2026-10-23T11:43:17.0764433Z  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-23T11:43:17.0764752Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0764755Z 2026-10-23T11:43:17.0764960Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T11:43:17.0765127Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-23T11:43:17.0765184Z 206 │ 2026-10-23T11:43:17.0765250Z 207 │ useEffect(() => { 2026-10-23T11:43:17.0765329Z ·  ───┬─── 2026-10-23T11:43:17.0765701Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-23T11:43:17.0765949Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-23T11:43:17.0766005Z 209 │ 2026-10-23T11:43:17.0766130Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-23T11:43:17.0766291Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-23T11:43:17.0766397Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-23T11:43:17.0766480Z ·  ─────┬───── 2026-10-23T11:43:17.0766617Z · ╰── This modifies `audioLevels` 2026-10-23T11:43:17.0766676Z 213 │ } 2026-10-23T11:43:17.0766733Z ╰──── 2026-10-23T11:43:17.0767085Z  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-23T11:43:17.0767398Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0767403Z 2026-10-23T11:43:17.0767563Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0767739Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-23T11:43:17.0767797Z 90 │ }) { 2026-10-23T11:43:17.0767915Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-23T11:43:17.0767993Z ·  ────┬─── 2026-10-23T11:43:17.0768138Z · ╰── `rotation` originates here 2026-10-23T11:43:17.0768220Z 92 │ useLayoutEffect(() => { 2026-10-23T11:43:17.0768368Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-23T11:43:17.0768445Z ·  ────┬─── 2026-10-23T11:43:17.0768586Z · ╰── `rotation` cannot be modified 2026-10-23T11:43:17.0768669Z 94 │ }, [props.hidden, rotation]); 2026-10-23T11:43:17.0768721Z ╰──── 2026-10-23T11:43:17.0768989Z  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-23T11:43:17.0769297Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0769299Z 2026-10-23T11:43:17.0769461Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0769641Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-23T11:43:17.0769740Z 266 │ const variant = props.variant ?? "plain"; 2026-10-23T11:43:17.0769877Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-23T11:43:17.0769971Z ·  ────────┬──────── 2026-10-23T11:43:17.0770127Z · ╰── `loadingVisibility` originates here 2026-10-23T11:43:17.0770197Z 268 │ useLayoutEffect(() => { 2026-10-23T11:43:17.0770365Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-23T11:43:17.0770451Z ·  ────────┬──────── 2026-10-23T11:43:17.0770609Z · ╰── `loadingVisibility` cannot be modified 2026-10-23T11:43:17.0770750Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-23T11:43:17.0770842Z ╰──── 2026-10-23T11:43:17.0771111Z  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-23T11:43:17.0771420Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0771423Z 2026-10-23T11:43:17.0771583Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0771753Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-23T11:43:17.0771820Z 325 │ }) { 2026-10-23T11:43:17.0771982Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-23T11:43:17.0772074Z ·  ─────────┬───────── 2026-10-23T11:43:17.0772235Z · ╰── `recordingVisibility` originates here 2026-10-23T11:43:17.0772315Z 327 │ useLayoutEffect(() => { 2026-10-23T11:43:17.0772508Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-23T11:43:17.0772601Z ·  ─────────┬───────── 2026-10-23T11:43:17.0772759Z · ╰── `recordingVisibility` cannot be modified 2026-10-23T11:43:17.0772853Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-23T11:43:17.0772908Z ╰──── 2026-10-23T11:43:17.0773175Z  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-23T11:43:17.0773487Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0773493Z 2026-10-23T11:43:17.0773977Z ⚠ 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-23T11:43:17.0774142Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-23T11:43:17.0774235Z 1227 │ yield* harness.replaceSession; 2026-10-23T11:43:17.0774460Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.0774615Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-23T11:43:17.0774707Z 1230 │ │ break; 2026-10-23T11:43:17.0774795Z 1231 │ │ } 2026-10-23T11:43:17.0774910Z 1232 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0775048Z 1233 │ ╰─▶ } 2026-10-23T11:43:17.0775130Z 1234 │ yield* Queue.offer( 2026-10-23T11:43:17.0775188Z ╰──── 2026-10-23T11:43:17.0775191Z 2026-10-23T11:43:17.0775828Z ⚠ 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-23T11:43:17.0776121Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-23T11:43:17.0776217Z 1336 │ yield* harness.replaceSession; 2026-10-23T11:43:17.0776501Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.0776713Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-23T11:43:17.0776828Z 1339 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0776967Z 1340 │ ╰─▶ } 2026-10-23T11:43:17.0777103Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-23T11:43:17.0777157Z ╰──── 2026-10-23T11:43:17.0777160Z 2026-10-23T11:43:17.0777441Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.0777577Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-23T11:43:17.0777642Z 339 │ 2026-10-23T11:43:17.0777757Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-23T11:43:17.0777836Z ·  ────┬──── 2026-10-23T11:43:17.0777981Z · ╰── 'layerTest' is declared here 2026-10-23T11:43:17.0778039Z ╰──── 2026-10-23T11:43:17.0778153Z  help: Consider removing this declaration. 2026-10-23T11:43:17.0778155Z 2026-10-23T11:43:17.0778425Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0778613Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:7] 2026-10-23T11:43:17.0778672Z 330 │ }; 2026-10-23T11:43:17.0778750Z 331 │ useEffect(() => { 2026-10-23T11:43:17.0778828Z ·  ────┬──── 2026-10-23T11:43:17.0778971Z · ╰── This is the containing effect 2026-10-23T11:43:17.0779079Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T11:43:17.0779180Z 333 │ requestedSection.current = "overview"; 2026-10-23T11:43:17.0779363Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T11:43:17.0779436Z 335 │ setSection("overview"); 2026-10-23T11:43:17.0779517Z ·  ─────┬──── 2026-10-23T11:43:17.0779696Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0779756Z 336 │ } 2026-10-23T11:43:17.0779809Z ╰──── 2026-10-23T11:43:17.0780435Z  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-23T11:43:17.0780773Z  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-23T11:43:17.0780777Z 2026-10-23T11:43:17.0780994Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T11:43:17.0781174Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:337:6] 2026-10-23T11:43:17.0781272Z 332 │ if (!guidesEnabled && section === "guide") { 2026-10-23T11:43:17.0781376Z 333 │ requestedSection.current = "overview"; 2026-10-23T11:43:17.0781467Z ·  ────────┬─────── 2026-10-23T11:43:17.0782016Z · ╰── 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-23T11:43:17.0782231Z 334 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-23T11:43:17.0782407Z ·  ─────────┬───────── ──────┬────── 2026-10-23T11:43:17.0782924Z · │ ╰── 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-23T11:43:17.0783393Z · ╰── 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-23T11:43:17.0783476Z 335 │ setSection("overview"); 2026-10-23T11:43:17.0783531Z 336 │ } 2026-10-23T11:43:17.0783631Z 337 │ }, [guidesEnabled, section, insets.top]); 2026-10-23T11:43:17.0783764Z ·  ──────────────────┬───────────────── 2026-10-23T11:43:17.0784149Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.0784442Z 338 │ const tabContent = activityContent; 2026-10-23T11:43:17.0784608Z ╰──── 2026-10-23T11:43:17.0784849Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T11:43:17.0785365Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0785682Z 2026-10-23T11:43:17.0785935Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T11:43:17.0786340Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:873:6] 2026-10-23T11:43:17.0786602Z 856 │ if ( 2026-10-23T11:43:17.0786807Z 857 │ lastSelection.current.path === route.params.path && 2026-10-23T11:43:17.0787086Z ·  ──────┬────── 2026-10-23T11:43:17.0787926Z · ╰── 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-23T11:43:17.0788863Z 858 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-23T11:43:17.0789196Z 859 │ ) 2026-10-23T11:43:17.0789364Z 860 │ return; 2026-10-23T11:43:17.0789628Z 861 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-23T11:43:17.0789965Z 862 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-23T11:43:17.0790211Z 863 │ setJumpPath(route.params.path); 2026-10-23T11:43:17.0790456Z 864 │ setSelectedRowId(null); 2026-10-23T11:43:17.0790657Z 865 │ jumpStarted.current = false; 2026-10-23T11:43:17.0790921Z 866 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-23T11:43:17.0791204Z 867 │ if (!file || !nativeView.current) return; 2026-10-23T11:43:17.0791418Z ·  ─────┬──── 2026-10-23T11:43:17.0792089Z · ╰── 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-23T11:43:17.0792677Z 868 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-23T11:43:17.0792909Z 869 │ jumpStarted.current = true; 2026-10-23T11:43:17.0793157Z 870 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-23T11:43:17.0793404Z 871 │ jumpStarted.current = false; 2026-10-23T11:43:17.0793577Z 872 │ }); 2026-10-23T11:43:17.0793849Z 873 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-23T11:43:17.0794309Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-23T11:43:17.0794769Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.0795104Z 874 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-23T11:43:17.0795297Z ╰──── 2026-10-23T11:43:17.0795533Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T11:43:17.0796083Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0796395Z 2026-10-23T11:43:17.0796668Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0797082Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-23T11:43:17.0797307Z 55 │ 2026-10-23T11:43:17.0797436Z 56 │ useEffect(() => { 2026-10-23T11:43:17.0797607Z ·  ────┬──── 2026-10-23T11:43:17.0797836Z · ╰── This is the containing effect 2026-10-23T11:43:17.0798054Z 57 │ setDecodedSize(null); 2026-10-23T11:43:17.0798229Z ·  ───────┬────── 2026-10-23T11:43:17.0798503Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0798751Z 58 │ }, [props.sourceKey]); 2026-10-23T11:43:17.0798902Z ╰──── 2026-10-23T11:43:17.0799574Z  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-23T11:43:17.0800522Z  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-23T11:43:17.0800875Z 2026-10-23T11:43:17.0801146Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0801562Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-23T11:43:17.0801779Z 59 │ 2026-10-23T11:43:17.0801912Z 60 │ useEffect(() => { 2026-10-23T11:43:17.0802073Z ·  ────┬──── 2026-10-23T11:43:17.0802301Z · ╰── This is the containing effect 2026-10-23T11:43:17.0802510Z 61 │ setFailedUri(null); 2026-10-23T11:43:17.0802677Z ·  ──────┬───── 2026-10-23T11:43:17.0802962Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0803365Z 62 │ }, [props.uri]); 2026-10-23T11:43:17.0803511Z ╰──── 2026-10-23T11:43:17.0804179Z  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-23T11:43:17.0805061Z  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-23T11:43:17.0805376Z 2026-10-23T11:43:17.0805605Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T11:43:17.0806011Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-23T11:43:17.0806319Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-23T11:43:17.0806647Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-23T11:43:17.0806930Z ·  ────────┬──────── 2026-10-23T11:43:17.0807197Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T11:43:17.0807403Z 8 │ 2026-10-23T11:43:17.0807525Z ╰──── 2026-10-23T11:43:17.0807685Z  help: Consider removing this import. 2026-10-23T11:43:17.0807808Z 2026-10-23T11:43:17.0808017Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0808378Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-23T11:43:17.0808620Z 57 │ setDecodedSize(null); 2026-10-23T11:43:17.0808781Z 58 │ }, [props.sourceKey]); 2026-10-23T11:43:17.0808957Z ·  ───────┬─────── 2026-10-23T11:43:17.0809214Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-23T11:43:17.0809436Z 59 │ 2026-10-23T11:43:17.0809548Z ╰──── 2026-10-23T11:43:17.0809904Z  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-23T11:43:17.0810504Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0810804Z 2026-10-23T11:43:17.0811013Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0811482Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-23T11:43:17.0811764Z 61 │ setFailedUri(null); 2026-10-23T11:43:17.0811932Z 62 │ }, [props.uri]); 2026-10-23T11:43:17.0812095Z ·  ────┬──── 2026-10-23T11:43:17.0812342Z · ╰── Unnecessary dependency `props.uri` 2026-10-23T11:43:17.0812547Z 63 │ 2026-10-23T11:43:17.0812666Z ╰──── 2026-10-23T11:43:17.0813021Z  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-23T11:43:17.0813626Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0813926Z 2026-10-23T11:43:17.0814138Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T11:43:17.0814482Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-23T11:43:17.0814695Z 2 │ AuthFilesystemReadScope, 2026-10-23T11:43:17.0814862Z 3 │ type AuthSessionState, 2026-10-23T11:43:17.0815038Z ·  ────────┬─────── 2026-10-23T11:43:17.0815291Z · ╰── 'AuthSessionState' is imported here 2026-10-23T11:43:17.0815523Z 4 │ type FilesystemBrowseEntry, 2026-10-23T11:43:17.0815682Z ╰──── 2026-10-23T11:43:17.0815843Z  help: Consider removing this import. 2026-10-23T11:43:17.0816035Z 2026-10-23T11:43:17.0816299Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0816719Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-23T11:43:17.0817050Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-23T11:43:17.0817297Z 29 │ useEffect(() => { 2026-10-23T11:43:17.0817456Z ·  ────┬──── 2026-10-23T11:43:17.0817685Z · ╰── This is the containing effect 2026-10-23T11:43:17.0817959Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-23T11:43:17.0818216Z ·  ───┬─── 2026-10-23T11:43:17.0818537Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0818813Z 31 │ }, [key, live, snapshot]); 2026-10-23T11:43:17.0818965Z ╰──── 2026-10-23T11:43:17.0819645Z  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-23T11:43:17.0820527Z  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-23T11:43:17.0820838Z 2026-10-23T11:43:17.0821016Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-23T11:43:17.0821390Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-23T11:43:17.0821741Z 219 │ 2026-10-23T11:43:17.0822116Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-23T11:43:17.0822453Z ·  ──┬─ 2026-10-23T11:43:17.0822754Z · ╰── 'U+001B' is a control character. 2026-10-23T11:43:17.0822992Z 221 │ 2026-10-23T11:43:17.0823134Z ╰──── 2026-10-23T11:43:17.0823430Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-23T11:43:17.0823667Z 2026-10-23T11:43:17.0823834Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.0824166Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-23T11:43:17.0824437Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-23T11:43:17.0824659Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-23T11:43:17.0824870Z ·  ──────┬────── 2026-10-23T11:43:17.0825113Z · ╰── `pulseProgress` originates here 2026-10-23T11:43:17.0825328Z 55 │ 2026-10-23T11:43:17.0825455Z 56 │ useEffect(() => { 2026-10-23T11:43:17.0825614Z 57 │ if (pulse) { 2026-10-23T11:43:17.0825789Z 58 │ pulseProgress.value = withRepeat( 2026-10-23T11:43:17.0826051Z ·  ──────┬────── 2026-10-23T11:43:17.0826307Z · ╰── `pulseProgress` cannot be modified 2026-10-23T11:43:17.0826529Z 59 │ withTiming(1, { 2026-10-23T11:43:17.0826684Z ╰──── 2026-10-23T11:43:17.0827028Z  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-23T11:43:17.0827619Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.0827927Z 2026-10-23T11:43:17.0828128Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-23T11:43:17.0828495Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-23T11:43:17.0828846Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-23T11:43:17.0829245Z 602 │ const gesture = Gesture.Pan() 2026-10-23T11:43:17.0829861Z ·  ─┬─ 2026-10-23T11:43:17.0830199Z · ╰── `Pan` may be a component 2026-10-23T11:43:17.0830480Z 603 │ .enabled(!props.disabled) 2026-10-23T11:43:17.0830724Z ╰──── 2026-10-23T11:43:17.0831114Z  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-23T11:43:17.0831950Z  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-23T11:43:17.0832412Z 2026-10-23T11:43:17.0832695Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0833220Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-23T11:43:17.0833509Z 434 │ : null; 2026-10-23T11:43:17.0833890Z 435 │ useEffect(() => { 2026-10-23T11:43:17.0834178Z ·  ────┬──── 2026-10-23T11:43:17.0834544Z · ╰── This is the containing effect 2026-10-23T11:43:17.0834817Z 436 │ if ( 2026-10-23T11:43:17.0835036Z 437 │ props.active === false || 2026-10-23T11:43:17.0835294Z 438 │ activeDraftKey !== null || 2026-10-23T11:43:17.0835558Z 439 │ editingPendingTask !== null || 2026-10-23T11:43:17.0835805Z 440 │ selectedProject === null 2026-10-23T11:43:17.0836059Z 441 │ ) { 2026-10-23T11:43:17.0836401Z 442 │ return; 2026-10-23T11:43:17.0836595Z 443 │ } 2026-10-23T11:43:17.0836793Z 444 │ setActiveDraftKey( 2026-10-23T11:43:17.0837036Z ·  ────────┬──────── 2026-10-23T11:43:17.0837391Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0837709Z 445 │ createNewTaskDraft({ 2026-10-23T11:43:17.0837934Z ╰──── 2026-10-23T11:43:17.0838666Z  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-23T11:43:17.0839650Z  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-23T11:43:17.0840116Z 2026-10-23T11:43:17.0840380Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T11:43:17.0840895Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-23T11:43:17.0841239Z 1243 │ 2026-10-23T11:43:17.0841663Z 1244 │ {props.children} 2026-10-23T11:43:17.0842034Z ·  ───────────── 2026-10-23T11:43:17.0842314Z 1245 │ 2026-10-23T11:43:17.0842513Z ╰──── 2026-10-23T11:43:17.0842870Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T11:43:17.0843417Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T11:43:17.0843761Z 2026-10-23T11:43:17.0844285Z ⚠ 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-23T11:43:17.0844974Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-23T11:43:17.0845327Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-23T11:43:17.0845719Z 133 │ ╭─▶ for ( 2026-10-23T11:43:17.0846089Z 134 │ │ let attempt = 0; 2026-10-23T11:43:17.0846467Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-23T11:43:17.0846798Z 136 │ │ attempt += 1 2026-10-23T11:43:17.0847044Z 137 │ │ ) { 2026-10-23T11:43:17.0847350Z 138 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0847901Z 139 │ ╰─▶ } 2026-10-23T11:43:17.0848351Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-23T11:43:17.0848598Z ╰──── 2026-10-23T11:43:17.0848700Z 2026-10-23T11:43:17.0848963Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-23T11:43:17.0849359Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-23T11:43:17.0849644Z 1 │ import type { 2026-10-23T11:43:17.0849846Z 2 │ EnvironmentId, 2026-10-23T11:43:17.0850062Z ·  ──────┬────── 2026-10-23T11:43:17.0850502Z · ╰── 'EnvironmentId' is imported here 2026-10-23T11:43:17.0850802Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-23T11:43:17.0851031Z ╰──── 2026-10-23T11:43:17.0851259Z  help: Consider removing this import. 2026-10-23T11:43:17.0851393Z 2026-10-23T11:43:17.0851603Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0852012Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-23T11:43:17.0852261Z 185 │ 2026-10-23T11:43:17.0852527Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-23T11:43:17.0852776Z ·  ── 2026-10-23T11:43:17.0853161Z 187 │ } 2026-10-23T11:43:17.0853325Z ╰──── 2026-10-23T11:43:17.0853679Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0853949Z 2026-10-23T11:43:17.0854153Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0854525Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-23T11:43:17.0854820Z 188 │ 2026-10-23T11:43:17.0854999Z 189 │ for (const {} of [ 2026-10-23T11:43:17.0855241Z ·  ── 2026-10-23T11:43:17.0855471Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-23T11:43:17.0855876Z ╰──── 2026-10-23T11:43:17.0856287Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0856553Z 2026-10-23T11:43:17.0856767Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0857144Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-23T11:43:17.0857407Z 310 │ 2026-10-23T11:43:17.0857668Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-23T11:43:17.0858039Z ·  ── 2026-10-23T11:43:17.0858316Z 312 │ } 2026-10-23T11:43:17.0858526Z ╰──── 2026-10-23T11:43:17.0858991Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0859268Z 2026-10-23T11:43:17.0859473Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-23T11:43:17.0859823Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-23T11:43:17.0860127Z 313 │ 2026-10-23T11:43:17.0860302Z 314 │ for (const {} of [ 2026-10-23T11:43:17.0860514Z ·  ── 2026-10-23T11:43:17.0860723Z 315 │ { 2026-10-23T11:43:17.0860898Z ╰──── 2026-10-23T11:43:17.0861263Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-23T11:43:17.0861650Z 2026-10-23T11:43:17.0861926Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0862468Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-23T11:43:17.0862764Z 117 │ 2026-10-23T11:43:17.0862978Z 118 │ useEffect(() => { 2026-10-23T11:43:17.0863195Z ·  ────┬──── 2026-10-23T11:43:17.0863509Z · ╰── This is the containing effect 2026-10-23T11:43:17.0863788Z 119 │ void refreshNotifications(); 2026-10-23T11:43:17.0864082Z ·  ──────────┬───────── 2026-10-23T11:43:17.0864442Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0864967Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-23T11:43:17.0865254Z ╰──── 2026-10-23T11:43:17.0866058Z  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-23T11:43:17.0867006Z  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-23T11:43:17.0867355Z 2026-10-23T11:43:17.0867659Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0868161Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-23T11:43:17.0868499Z 125 │ 2026-10-23T11:43:17.0868665Z 126 │ useEffect(() => { 2026-10-23T11:43:17.0868950Z ·  ────┬──── 2026-10-23T11:43:17.0869369Z · ╰── This is the containing effect 2026-10-23T11:43:17.0869668Z 127 │ if (!isLoaded) { 2026-10-23T11:43:17.0869897Z 128 │ setLiveActivityStatus("checking"); 2026-10-23T11:43:17.0870184Z ·  ──────────┬────────── 2026-10-23T11:43:17.0870522Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0870836Z 129 │ return; 2026-10-23T11:43:17.0871028Z ╰──── 2026-10-23T11:43:17.0871843Z  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-23T11:43:17.0872962Z  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-23T11:43:17.0873305Z 2026-10-23T11:43:17.0873601Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0874099Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-23T11:43:17.0874406Z 58 │ 2026-10-23T11:43:17.0874598Z 59 │ useEffect(() => { 2026-10-23T11:43:17.0874837Z ·  ────┬──── 2026-10-23T11:43:17.0885262Z · ╰── This is the containing effect 2026-10-23T11:43:17.0885627Z 60 │ setMountedModes((current) => { 2026-10-23T11:43:17.0885825Z ·  ───────┬─────── 2026-10-23T11:43:17.0886150Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0886411Z 61 │ if (current.has(props.mode)) { 2026-10-23T11:43:17.0886575Z ╰──── 2026-10-23T11:43:17.0887245Z  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-23T11:43:17.0888131Z  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-23T11:43:17.0888445Z 2026-10-23T11:43:17.0888715Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0889124Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-23T11:43:17.0889350Z 398 │ 2026-10-23T11:43:17.0889479Z 399 │ useEffect(() => { 2026-10-23T11:43:17.0889650Z ·  ────┬──── 2026-10-23T11:43:17.0889876Z · ╰── This is the containing effect 2026-10-23T11:43:17.0890113Z 400 │ setInspectorSelection((current) => { 2026-10-23T11:43:17.0890315Z ·  ──────────┬────────── 2026-10-23T11:43:17.0890599Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0890888Z 401 │ if (props.renderInspector === undefined) { 2026-10-23T11:43:17.0891065Z ╰──── 2026-10-23T11:43:17.0891731Z  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-23T11:43:17.0892602Z  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-23T11:43:17.0892910Z 2026-10-23T11:43:17.0893138Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T11:43:17.0893520Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-23T11:43:17.0894066Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-23T11:43:17.0894496Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-23T11:43:17.0894771Z 529 │ │ 2026-10-23T11:43:17.0896452Z 534 │ ╰─▶ ); 2026-10-23T11:43:17.0896682Z 535 │ const FilesInspector = () => 2026-10-23T11:43:17.0896848Z ╰──── 2026-10-23T11:43:17.0897148Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T11:43:17.0897371Z 2026-10-23T11:43:17.0897591Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-23T11:43:17.0897963Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-23T11:43:17.0898195Z 534 │ ); 2026-10-23T11:43:17.0898447Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-23T11:43:17.0898780Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-23T11:43:17.0899065Z 537 │ │ 2026-10-23T11:43:17.0901145Z 545 │ ╰─▶ ) : null; 2026-10-23T11:43:17.0901460Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-23T11:43:17.0901684Z ╰──── 2026-10-23T11:43:17.0901979Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-23T11:43:17.0902206Z 2026-10-23T11:43:17.0902382Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0902724Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-23T11:43:17.0903087Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-23T11:43:17.0903449Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-23T11:43:17.0903776Z ·  ─────┬──── 2026-10-23T11:43:17.0904118Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0904511Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-23T11:43:17.0904772Z ╰──── 2026-10-23T11:43:17.0905125Z  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-23T11:43:17.0905717Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0906053Z 2026-10-23T11:43:17.0906224Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0906562Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-23T11:43:17.0906812Z 717 │ const snoozePresets = useMemo( 2026-10-23T11:43:17.0907110Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T11:43:17.0907434Z ·  ─────┬──── 2026-10-23T11:43:17.0907781Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0908078Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T11:43:17.0908275Z ╰──── 2026-10-23T11:43:17.0908624Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.0909200Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0909488Z 2026-10-23T11:43:17.0909684Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T11:43:17.0910047Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-23T11:43:17.0910399Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-23T11:43:17.0910717Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-23T11:43:17.0910952Z ·  ────────────┬─────────── 2026-10-23T11:43:17.0911270Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-23T11:43:17.0911528Z 720 │ ); 2026-10-23T11:43:17.0911663Z ╰──── 2026-10-23T11:43:17.0912072Z  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-23T11:43:17.0912710Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0913025Z 2026-10-23T11:43:17.0913217Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T11:43:17.0913589Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-23T11:43:17.0913838Z 764 │ thread.pinnedAt, 2026-10-23T11:43:17.0914018Z 765 │ variant, 2026-10-23T11:43:17.0914181Z ·  ───┬─── 2026-10-23T11:43:17.0914431Z · ╰── Unnecessary dependency `variant` 2026-10-23T11:43:17.0914653Z 766 │ ], 2026-10-23T11:43:17.0914791Z ╰──── 2026-10-23T11:43:17.0915311Z  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-23T11:43:17.0916067Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0916377Z 2026-10-23T11:43:17.0916586Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.0916964Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-23T11:43:17.0917289Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-23T11:43:17.0917571Z 1215 │ 2026-10-23T11:43:17.0917844Z ·  ────────────────────────── 2026-10-23T11:43:17.0918090Z 1216 │ 2026-10-23T11:43:17.0918282Z ╰──── 2026-10-23T11:43:17.0918490Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-23T11:43:17.0918656Z 2026-10-23T11:43:17.0919141Z ⚠ 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-23T11:43:17.0919732Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-23T11:43:17.0919964Z 168 │ }); 2026-10-23T11:43:17.0920260Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T11:43:17.0920680Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-23T11:43:17.0920996Z 171 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0921291Z 172 │ ╰─▶ } 2026-10-23T11:43:17.0921497Z 173 │ 2026-10-23T11:43:17.0921633Z ╰──── 2026-10-23T11:43:17.0921692Z 2026-10-23T11:43:17.0922166Z ⚠ 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-23T11:43:17.0922756Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-23T11:43:17.0923034Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-23T11:43:17.0923559Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T11:43:17.0923909Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-23T11:43:17.0924186Z 180 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0924457Z 181 │ ╰─▶ } 2026-10-23T11:43:17.0924691Z 182 │ 2026-10-23T11:43:17.0924826Z ╰──── 2026-10-23T11:43:17.0924891Z 2026-10-23T11:43:17.0925366Z ⚠ 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-23T11:43:17.0925971Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-23T11:43:17.0926460Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-23T11:43:17.0926890Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-23T11:43:17.0927218Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-23T11:43:17.0927559Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-23T11:43:17.0927860Z 310 │ │ break; 2026-10-23T11:43:17.0928057Z 311 │ │ } 2026-10-23T11:43:17.0928275Z 312 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.0928539Z 313 │ ╰─▶ } 2026-10-23T11:43:17.0928742Z 314 │ 2026-10-23T11:43:17.0928865Z ╰──── 2026-10-23T11:43:17.0928926Z 2026-10-23T11:43:17.0929196Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0929631Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-23T11:43:17.0929934Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-23T11:43:17.0930149Z 38 │ useLayoutEffect(() => { 2026-10-23T11:43:17.0930324Z ·  ───────┬─────── 2026-10-23T11:43:17.0930577Z · ╰── This is the containing effect 2026-10-23T11:43:17.0930796Z 39 │ reset(); 2026-10-23T11:43:17.0930964Z 40 │ setInitialized(true); 2026-10-23T11:43:17.0931151Z ·  ───────┬────── 2026-10-23T11:43:17.0931439Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0931686Z 41 │ }, [reset]); 2026-10-23T11:43:17.0931830Z ╰──── 2026-10-23T11:43:17.0932518Z  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-23T11:43:17.0933409Z  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-23T11:43:17.0933714Z 2026-10-23T11:43:17.0933979Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0934462Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-23T11:43:17.0934916Z 88 │ 2026-10-23T11:43:17.0935054Z 89 │ useEffect(() => { 2026-10-23T11:43:17.0935225Z ·  ────┬──── 2026-10-23T11:43:17.0935454Z · ╰── This is the containing effect 2026-10-23T11:43:17.0935764Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-23T11:43:17.0936078Z 91 │ const branchName = initialProjectRef.branch; 2026-10-23T11:43:17.0936274Z 92 │ let active = true; 2026-10-23T11:43:17.0936460Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-23T11:43:17.0936674Z ·  ─────────┬───────── 2026-10-23T11:43:17.0936955Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0937298Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-23T11:43:17.0937520Z ╰──── 2026-10-23T11:43:17.0938181Z  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-23T11:43:17.0939044Z  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-23T11:43:17.0939353Z 2026-10-23T11:43:17.0939794Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-23T11:43:17.0940347Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-23T11:43:17.0940593Z 262 │ ...(update._meta !== undefined 2026-10-23T11:43:17.0940871Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-23T11:43:17.0941140Z ·  ───────── 2026-10-23T11:43:17.0941311Z 264 │ : {}), 2026-10-23T11:43:17.0941447Z ╰──── 2026-10-23T11:43:17.0941513Z 2026-10-23T11:43:17.0941733Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.0942135Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:370:7] 2026-10-23T11:43:17.0942395Z 369 │ mountedRef.current = false; 2026-10-23T11:43:17.0942583Z 370 │ flow.setBranchQuery(""); 2026-10-23T11:43:17.0942761Z ·  ──┬─ 2026-10-23T11:43:17.0942989Z · ╰── Missing dependency `flow` 2026-10-23T11:43:17.0943189Z 371 │ }; 2026-10-23T11:43:17.0943333Z 372 │ }, [flow.setBranchQuery]); 2026-10-23T11:43:17.0943517Z ·  ─────────┬───────── 2026-10-23T11:43:17.0943832Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-23T11:43:17.0944092Z 373 │ 2026-10-23T11:43:17.0944209Z ╰──── 2026-10-23T11:43:17.0944694Z  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-23T11:43:17.0945477Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0945823Z 2026-10-23T11:43:17.0946132Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0946558Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-23T11:43:17.0946852Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-23T11:43:17.0947065Z 284 │ useEffect(() => { 2026-10-23T11:43:17.0947239Z ·  ────┬──── 2026-10-23T11:43:17.0947466Z · ╰── This is the containing effect 2026-10-23T11:43:17.0947706Z 285 │ setNow(new Date().toISOString()); 2026-10-23T11:43:17.0947886Z ·  ───┬── 2026-10-23T11:43:17.0948157Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0948472Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-23T11:43:17.0948679Z ╰──── 2026-10-23T11:43:17.0949346Z  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-23T11:43:17.0950214Z  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-23T11:43:17.0950528Z 2026-10-23T11:43:17.0950735Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0951124Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-23T11:43:17.0951435Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-23T11:43:17.0951680Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T11:43:17.0951899Z ·  ───────┬────── 2026-10-23T11:43:17.0952198Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T11:43:17.0952481Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-23T11:43:17.0952670Z ╰──── 2026-10-23T11:43:17.0953037Z  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-23T11:43:17.0953642Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0953951Z 2026-10-23T11:43:17.0954123Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.0954469Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-23T11:43:17.0954726Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T11:43:17.0954998Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T11:43:17.0955285Z ·  ─────┬──── 2026-10-23T11:43:17.0955597Z · ╰── Cannot call impure function 2026-10-23T11:43:17.0955843Z 357 │ const id = setTimeout(() => { 2026-10-23T11:43:17.0956037Z ╰──── 2026-10-23T11:43:17.0956450Z  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-23T11:43:17.0957081Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.0957365Z 2026-10-23T11:43:17.0957553Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T11:43:17.0957905Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-23T11:43:17.0958187Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-23T11:43:17.0958507Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-23T11:43:17.0958853Z ·  ─────┬───── 2026-10-23T11:43:17.0959215Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T11:43:17.0959489Z 101 │ const readEditor = useCallback( 2026-10-23T11:43:17.0959655Z ╰──── 2026-10-23T11:43:17.0960043Z  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-23T11:43:17.0960668Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0960968Z 2026-10-23T11:43:17.0961159Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T11:43:17.0961519Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-23T11:43:17.0961765Z 120 │ setEditor, 2026-10-23T11:43:17.0961916Z 121 │ startEditor, 2026-10-23T11:43:17.0962080Z ·  ─────┬───── 2026-10-23T11:43:17.0962328Z · ╰── Unnecessary dependency `startEditor` 2026-10-23T11:43:17.0962556Z 122 │ hasChanges, 2026-10-23T11:43:17.0962694Z ╰──── 2026-10-23T11:43:17.0963166Z  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-23T11:43:17.0963781Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0964089Z 2026-10-23T11:43:17.0964363Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.0964760Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2109:5] 2026-10-23T11:43:17.0964967Z 2107 │ ); 2026-10-23T11:43:17.0965104Z 2108 │ useEffect(() => { 2026-10-23T11:43:17.0965270Z ·  ────┬──── 2026-10-23T11:43:17.0965501Z · ╰── This is the containing effect 2026-10-23T11:43:17.0965580Z 2109 │ setExpandedVideo(null); 2026-10-23T11:43:17.0965669Z ·  ────────┬─────── 2026-10-23T11:43:17.0965853Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.0965983Z 2110 │ setExpandedFile(null); 2026-10-23T11:43:17.0966048Z ╰──── 2026-10-23T11:43:17.0966774Z  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-23T11:43:17.0967151Z  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-23T11:43:17.0967154Z 2026-10-23T11:43:17.0967397Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-23T11:43:17.0967537Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:62:10] 2026-10-23T11:43:17.0967687Z 61 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-23T11:43:17.0967834Z 62 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-23T11:43:17.0967939Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0968118Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-23T11:43:17.0968283Z 63 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-23T11:43:17.0968339Z ╰──── 2026-10-23T11:43:17.0968445Z  help: Consider removing this import. 2026-10-23T11:43:17.0968448Z 2026-10-23T11:43:17.0968663Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-23T11:43:17.0968804Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:88:3] 2026-10-23T11:43:17.0968865Z 87 │ import { 2026-10-23T11:43:17.0968943Z 88 │ createContext, 2026-10-23T11:43:17.0969023Z ·  ──────┬────── 2026-10-23T11:43:17.0969171Z · ╰── 'createContext' is imported here 2026-10-23T11:43:17.0969231Z 89 │ memo, 2026-10-23T11:43:17.0969286Z ╰──── 2026-10-23T11:43:17.0969385Z  help: Consider removing this import. 2026-10-23T11:43:17.0969388Z 2026-10-23T11:43:17.0969610Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-23T11:43:17.0969753Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:103:3] 2026-10-23T11:43:17.0969816Z 102 │ import { 2026-10-23T11:43:17.0969886Z 103 │ ActivityIndicator, 2026-10-23T11:43:17.0969973Z ·  ────────┬──────── 2026-10-23T11:43:17.0970133Z · ╰── 'ActivityIndicator' is imported here 2026-10-23T11:43:17.0970198Z 104 │ Image, 2026-10-23T11:43:17.0970251Z ╰──── 2026-10-23T11:43:17.0970352Z  help: Consider removing this import. 2026-10-23T11:43:17.0970354Z 2026-10-23T11:43:17.0970563Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-23T11:43:17.0970702Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:110:3] 2026-10-23T11:43:17.0970769Z 109 │ Pressable, 2026-10-23T11:43:17.0970836Z 110 │ ScrollView, 2026-10-23T11:43:17.0970920Z ·  ─────┬──── 2026-10-23T11:43:17.0971064Z · ╰── 'ScrollView' is imported here 2026-10-23T11:43:17.0971128Z 111 │ StyleSheet, 2026-10-23T11:43:17.0971189Z ╰──── 2026-10-23T11:43:17.0971292Z  help: Consider removing this import. 2026-10-23T11:43:17.0971294Z 2026-10-23T11:43:17.0971567Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-23T11:43:17.0971744Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:11] 2026-10-23T11:43:17.0971814Z 111 │ StyleSheet, 2026-10-23T11:43:17.0971894Z 112 │ Text as NativeText, 2026-10-23T11:43:17.0971989Z ·  ─────┬──── 2026-10-23T11:43:17.0972135Z · ╰── 'NativeText' is imported here 2026-10-23T11:43:17.0972219Z 113 │ type ColorValue, 2026-10-23T11:43:17.0972279Z ╰──── 2026-10-23T11:43:17.0972393Z  help: Consider removing this import. 2026-10-23T11:43:17.0972396Z 2026-10-23T11:43:17.0972620Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-23T11:43:17.0972770Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:134:10] 2026-10-23T11:43:17.0972924Z 133 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-23T11:43:17.0973060Z 134 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-23T11:43:17.0973156Z ·  ─────────┬──────── 2026-10-23T11:43:17.0973323Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-23T11:43:17.0973478Z 135 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-23T11:43:17.0973540Z ╰──── 2026-10-23T11:43:17.0973639Z  help: Consider removing this import. 2026-10-23T11:43:17.0973642Z 2026-10-23T11:43:17.0973873Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-23T11:43:17.0974023Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:137:10] 2026-10-23T11:43:17.0974171Z 136 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-23T11:43:17.0974297Z 137 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-23T11:43:17.0974398Z ·  ─────────┬───────── 2026-10-23T11:43:17.0974565Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-23T11:43:17.0974628Z 138 │ import { 2026-10-23T11:43:17.0974679Z ╰──── 2026-10-23T11:43:17.0974782Z  help: Consider removing this import. 2026-10-23T11:43:17.0974784Z 2026-10-23T11:43:17.0975006Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-23T11:43:17.0975144Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:151:10] 2026-10-23T11:43:17.0975360Z 150 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-23T11:43:17.0975542Z 151 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-23T11:43:17.0975637Z ·  ────────┬─────── 2026-10-23T11:43:17.0975797Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-23T11:43:17.0976004Z 152 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-23T11:43:17.0976057Z ╰──── 2026-10-23T11:43:17.0976162Z  help: Consider removing this import. 2026-10-23T11:43:17.0976165Z 2026-10-23T11:43:17.0976406Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-23T11:43:17.0976548Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:155:3] 2026-10-23T11:43:17.0976641Z 154 │ attachmentVideoPreviewSource, 2026-10-23T11:43:17.0976725Z 155 │ mediaVideoPreviewUri, 2026-10-23T11:43:17.0976818Z ·  ──────────┬───────── 2026-10-23T11:43:17.0976983Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-23T11:43:17.0977058Z 156 │ mediaVideoThumbnailKey, 2026-10-23T11:43:17.0977118Z ╰──── 2026-10-23T11:43:17.0977219Z  help: Consider removing this import. 2026-10-23T11:43:17.0977222Z 2026-10-23T11:43:17.0977458Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-23T11:43:17.0977596Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:156:3] 2026-10-23T11:43:17.0977675Z 155 │ mediaVideoPreviewUri, 2026-10-23T11:43:17.0977757Z 156 │ mediaVideoThumbnailKey, 2026-10-23T11:43:17.0977861Z ·  ───────────┬────────── 2026-10-23T11:43:17.0978028Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-23T11:43:17.0978120Z 157 │ type MediaVideoPreviewSource, 2026-10-23T11:43:17.0978179Z ╰──── 2026-10-23T11:43:17.0978284Z  help: Consider removing this import. 2026-10-23T11:43:17.0978286Z 2026-10-23T11:43:17.0978505Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-23T11:43:17.0978648Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:8] 2026-10-23T11:43:17.0978725Z 156 │ mediaVideoThumbnailKey, 2026-10-23T11:43:17.0978815Z 157 │ type MediaVideoPreviewSource, 2026-10-23T11:43:17.0978916Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0979100Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-23T11:43:17.0979196Z 158 │ } from "../../lib/videoPreviewSource"; 2026-10-23T11:43:17.0979253Z ╰──── 2026-10-23T11:43:17.0979350Z  help: Consider removing this import. 2026-10-23T11:43:17.0979353Z 2026-10-23T11:43:17.0979560Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-23T11:43:17.0979707Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:15] 2026-10-23T11:43:17.0979890Z 164 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-23T11:43:17.0980038Z 165 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-23T11:43:17.0980140Z ·  ───────┬─────── 2026-10-23T11:43:17.0980389Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-23T11:43:17.0980503Z 166 │ import { 2026-10-23T11:43:17.0980555Z ╰──── 2026-10-23T11:43:17.0980657Z  help: Consider removing this import. 2026-10-23T11:43:17.0980659Z 2026-10-23T11:43:17.0980907Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-23T11:43:17.0981051Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:180:3] 2026-10-23T11:43:17.0981113Z 179 │ import { 2026-10-23T11:43:17.0981194Z 180 │ resolveMarkdownFontSizes, 2026-10-23T11:43:17.0981293Z ·  ────────────┬─────────── 2026-10-23T11:43:17.0981469Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-23T11:43:17.0981562Z 181 │ resolveNativeMarkdownTypography, 2026-10-23T11:43:17.0981616Z ╰──── 2026-10-23T11:43:17.0981727Z  help: Consider removing this import. 2026-10-23T11:43:17.0981733Z 2026-10-23T11:43:17.0981969Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-23T11:43:17.0982110Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:185:10] 2026-10-23T11:43:17.0982244Z 184 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-23T11:43:17.0982387Z 185 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-23T11:43:17.0982489Z ·  ───────────┬────────── 2026-10-23T11:43:17.0982662Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-23T11:43:17.0982721Z 186 │ import { 2026-10-23T11:43:17.0982779Z ╰──── 2026-10-23T11:43:17.0982884Z  help: Consider removing this import. 2026-10-23T11:43:17.0982890Z 2026-10-23T11:43:17.0983160Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-23T11:43:17.0983296Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:188:3] 2026-10-23T11:43:17.0983383Z 187 │ normalizeNativeMarkdownUrl, 2026-10-23T11:43:17.0983487Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T11:43:17.0983610Z ·  ──────────────────┬────────────────── 2026-10-23T11:43:17.0983815Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-23T11:43:17.0983893Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T11:43:17.0983950Z ╰──── 2026-10-23T11:43:17.0984054Z  help: Consider removing this import. 2026-10-23T11:43:17.0984056Z 2026-10-23T11:43:17.0984294Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-23T11:43:17.0984436Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:189:3] 2026-10-23T11:43:17.0984536Z 188 │ resolveMarkdownInlineCodePresentation, 2026-10-23T11:43:17.0984613Z 189 │ resolveMarkdownLinkIcon, 2026-10-23T11:43:17.0984706Z ·  ───────────┬─────────── 2026-10-23T11:43:17.0984875Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-23T11:43:17.0984974Z 190 │ resolveMarkdownLinkPresentation, 2026-10-23T11:43:17.0985029Z ╰──── 2026-10-23T11:43:17.0985125Z  help: Consider removing this import. 2026-10-23T11:43:17.0985127Z 2026-10-23T11:43:17.0985424Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-23T11:43:17.0985608Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:228:10] 2026-10-23T11:43:17.0985719Z 227 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-23T11:43:17.0985869Z 228 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-23T11:43:17.0986028Z ·  ────────────┬─────────── 2026-10-23T11:43:17.0986209Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-23T11:43:17.0986278Z 229 │ import { 2026-10-23T11:43:17.0986331Z ╰──── 2026-10-23T11:43:17.0986435Z  help: Consider removing this import. 2026-10-23T11:43:17.0986439Z 2026-10-23T11:43:17.0986658Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-23T11:43:17.0986804Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:232:3] 2026-10-23T11:43:17.0986878Z 231 │ useAssetUrl, 2026-10-23T11:43:17.0986948Z 232 │ useAssetUrlState, 2026-10-23T11:43:17.0987037Z ·  ────────┬─────── 2026-10-23T11:43:17.0987187Z · ╰── 'useAssetUrlState' is imported here 2026-10-23T11:43:17.0987263Z 233 │ useRefreshAssetUrl, 2026-10-23T11:43:17.0987316Z ╰──── 2026-10-23T11:43:17.0987416Z  help: Consider removing this import. 2026-10-23T11:43:17.0987418Z 2026-10-23T11:43:17.0987629Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0987774Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2111:7] 2026-10-23T11:43:17.0987850Z 2110 │ setExpandedFile(null); 2026-10-23T11:43:17.0988020Z 2111 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-23T11:43:17.0988278Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-23T11:43:17.0988585Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-23T11:43:17.0988793Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-23T11:43:17.0988966Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T11:43:17.0989113Z 2112 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-23T11:43:17.0989172Z ╰──── 2026-10-23T11:43:17.0989545Z  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-23T11:43:17.0989918Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0989920Z 2026-10-23T11:43:17.0990135Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0990284Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2578:7] 2026-10-23T11:43:17.0990389Z 2577 │ reportHeaderMaterialVisibility(false); 2026-10-23T11:43:17.0990512Z 2578 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-23T11:43:17.0990600Z ·  ──────┬────── 2026-10-23T11:43:17.0990771Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-23T11:43:17.0990835Z 2579 │ 2026-10-23T11:43:17.0990891Z ╰──── 2026-10-23T11:43:17.0991197Z  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-23T11:43:17.0991521Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0991524Z 2026-10-23T11:43:17.0991740Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0991888Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2594:7] 2026-10-23T11:43:17.0991946Z 2593 │ } 2026-10-23T11:43:17.0992091Z 2594 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-23T11:43:17.0992177Z ·  ──────┬───── 2026-10-23T11:43:17.0992342Z · ╰── Unnecessary dependency `listMountKey` 2026-10-23T11:43:17.0992402Z 2595 │ 2026-10-23T11:43:17.0992463Z ╰──── 2026-10-23T11:43:17.0992763Z  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-23T11:43:17.0993082Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0993085Z 2026-10-23T11:43:17.0993288Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.0993437Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2751:7] 2026-10-23T11:43:17.0993503Z 2750 │ } 2026-10-23T11:43:17.0993694Z 2751 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-23T11:43:17.0993921Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-23T11:43:17.0994191Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-23T11:43:17.0994410Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-23T11:43:17.0994572Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-23T11:43:17.0994630Z 2752 │ 2026-10-23T11:43:17.0994681Z ╰──── 2026-10-23T11:43:17.0995050Z  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-23T11:43:17.0995409Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0995411Z 2026-10-23T11:43:17.0995606Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-23T11:43:17.0995751Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:603:9] 2026-10-23T11:43:17.0995827Z 602 │ }; 2026-10-23T11:43:17.0995987Z 603 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-23T11:43:17.0996207Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-23T11:43:17.0996465Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-23T11:43:17.0996682Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-23T11:43:17.0996859Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-23T11:43:17.0996925Z 604 │ ); 2026-10-23T11:43:17.0996983Z ╰──── 2026-10-23T11:43:17.0997302Z  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-23T11:43:17.0997631Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.0997636Z 2026-10-23T11:43:17.0998009Z ⚠ 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-23T11:43:17.0998154Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-23T11:43:17.0998296Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-23T11:43:17.0998448Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-23T11:43:17.0998577Z ·  ─────────────────── 2026-10-23T11:43:17.0998648Z 1787 │ cwd, 2026-10-23T11:43:17.0998704Z ╰──── 2026-10-23T11:43:17.0998707Z 2026-10-23T11:43:17.0998961Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-23T11:43:17.0999096Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-23T11:43:17.0999202Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-23T11:43:17.0999346Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-23T11:43:17.0999436Z ·  ─────────────── 2026-10-23T11:43:17.0999496Z 510 │ ) 2026-10-23T11:43:17.0999558Z ╰──── 2026-10-23T11:43:17.0999721Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-23T11:43:17.0999725Z 2026-10-23T11:43:17.1000016Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-23T11:43:17.1000227Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-23T11:43:17.1000348Z 248 │ }, 2026-10-23T11:43:17.1000434Z 249 │ (effect, flow, stopSessions) => 2026-10-23T11:43:17.1000531Z ·  ──────┬───── 2026-10-23T11:43:17.1000691Z · ╰── 'stopSessions' is declared here 2026-10-23T11:43:17.1000765Z 250 │ effect.pipe( 2026-10-23T11:43:17.1000826Z ╰──── 2026-10-23T11:43:17.1000930Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1000933Z 2026-10-23T11:43:17.1001152Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-23T11:43:17.1001331Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-23T11:43:17.1001411Z 14 │ } from "@t3tools/contracts"; 2026-10-23T11:43:17.1001511Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-23T11:43:17.1001594Z ·  ── 2026-10-23T11:43:17.1001786Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-23T11:43:17.1001844Z ╰──── 2026-10-23T11:43:17.1001930Z  help: Remove empty braces 2026-10-23T11:43:17.1001932Z 2026-10-23T11:43:17.1002207Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1002367Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-23T11:43:17.1002511Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-23T11:43:17.1002578Z 356 │ useEffect(() => { 2026-10-23T11:43:17.1002662Z ·  ────┬──── 2026-10-23T11:43:17.1002811Z · ╰── This is the containing effect 2026-10-23T11:43:17.1002911Z 357 │ if (!isReturningToProjectPicker) { 2026-10-23T11:43:17.1002974Z 358 │ return; 2026-10-23T11:43:17.1003033Z 359 │ } 2026-10-23T11:43:17.1003150Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-23T11:43:17.1003338Z 361 │ setIsReturningToProjectPicker(false); 2026-10-23T11:43:17.1003452Z ·  ──────────────┬────────────── 2026-10-23T11:43:17.1003642Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1003712Z 362 │ return; 2026-10-23T11:43:17.1003772Z ╰──── 2026-10-23T11:43:17.1004400Z  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-23T11:43:17.1004741Z  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-23T11:43:17.1004743Z 2026-10-23T11:43:17.1005021Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1005185Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-23T11:43:17.1005249Z 447 │ 2026-10-23T11:43:17.1005316Z 448 │ useEffect(() => { 2026-10-23T11:43:17.1005397Z ·  ────┬──── 2026-10-23T11:43:17.1005539Z · ╰── This is the containing effect 2026-10-23T11:43:17.1005770Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-23T11:43:17.1005888Z 450 │ return; 2026-10-23T11:43:17.1006022Z 451 │ } 2026-10-23T11:43:17.1006176Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-23T11:43:17.1006321Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-23T11:43:17.1006428Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-23T11:43:17.1006494Z 455 │ } 2026-10-23T11:43:17.1006647Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T11:43:17.1006787Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T11:43:17.1006894Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-23T11:43:17.1006975Z 459 │ const directProject = 2026-10-23T11:43:17.1007051Z 460 │ projects.find( 2026-10-23T11:43:17.1007132Z 461 │ (project) => 2026-10-23T11:43:17.1007312Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-23T11:43:17.1007381Z 463 │ ) ?? null; 2026-10-23T11:43:17.1007438Z 464 │ 2026-10-23T11:43:17.1007514Z 465 │ if (directProject) { 2026-10-23T11:43:17.1007656Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-23T11:43:17.1007801Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-23T11:43:17.1007971Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-23T11:43:17.1008120Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-23T11:43:17.1008185Z 470 │ return; 2026-10-23T11:43:17.1008249Z 471 │ } 2026-10-23T11:43:17.1008359Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-23T11:43:17.1008434Z 473 │ if ( 2026-10-23T11:43:17.1008581Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-23T11:43:17.1008692Z 475 │ selectedProject.id !== directProject.id 2026-10-23T11:43:17.1008757Z 476 │ ) { 2026-10-23T11:43:17.1008844Z 477 │ setProject(directProject); 2026-10-23T11:43:17.1008914Z 478 │ return; 2026-10-23T11:43:17.1008982Z 479 │ } 2026-10-23T11:43:17.1009074Z 480 │ if (!flow.draftKey) return; 2026-10-23T11:43:17.1009214Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-23T11:43:17.1009365Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-23T11:43:17.1009500Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-23T11:43:17.1009590Z 484 │ workspaceSelection: { 2026-10-23T11:43:17.1009667Z 485 │ mode: "local", 2026-10-23T11:43:17.1009781Z 486 │ branch: props.initialProjectRef.branch, 2026-10-23T11:43:17.1009926Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-23T11:43:17.1010017Z 488 │ startFromOrigin: false, 2026-10-23T11:43:17.1010082Z 489 │ }, 2026-10-23T11:43:17.1010150Z 490 │ }); 2026-10-23T11:43:17.1010214Z 491 │ } 2026-10-23T11:43:17.1010353Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-23T11:43:17.1010415Z 493 │ if ( 2026-10-23T11:43:17.1010570Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-23T11:43:17.1010675Z 495 │ selectedProject.id === directProject.id 2026-10-23T11:43:17.1010743Z 496 │ ) { 2026-10-23T11:43:17.1010882Z 497 │ return; 2026-10-23T11:43:17.1011002Z 498 │ } 2026-10-23T11:43:17.1011091Z 499 │ setProject(directProject); 2026-10-23T11:43:17.1011162Z 500 │ return; 2026-10-23T11:43:17.1011222Z 501 │ } 2026-10-23T11:43:17.1011281Z 502 │ 2026-10-23T11:43:17.1011372Z 503 │ if (projects.length > 0) { 2026-10-23T11:43:17.1011473Z 504 │ setIsReturningToProjectPicker(true); 2026-10-23T11:43:17.1011598Z ·  ──────────────┬────────────── 2026-10-23T11:43:17.1011792Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1011855Z 505 │ } 2026-10-23T11:43:17.1011907Z ╰──── 2026-10-23T11:43:17.1012531Z  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-23T11:43:17.1012868Z  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-23T11:43:17.1012871Z 2026-10-23T11:43:17.1013140Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1013301Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-23T11:43:17.1013353Z 545 │ 2026-10-23T11:43:17.1013425Z 546 │ useEffect(() => { 2026-10-23T11:43:17.1013507Z ·  ────┬──── 2026-10-23T11:43:17.1013655Z · ╰── This is the containing effect 2026-10-23T11:43:17.1013756Z 547 │ const shareId = props.incomingShareId; 2026-10-23T11:43:17.1013845Z 548 │ const draftKey = flow.draftKey; 2026-10-23T11:43:17.1013955Z 549 │ const destinationProject = selectedProject; 2026-10-23T11:43:17.1014103Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-23T11:43:17.1014232Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-23T11:43:17.1014331Z 552 │ const selectedProjectMatchesRoute = 2026-10-23T11:43:17.1014417Z 553 │ !initialEnvironmentId || 2026-10-23T11:43:17.1014496Z 554 │ !initialProjectId || 2026-10-23T11:43:17.1014639Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-23T11:43:17.1014754Z 556 │ destinationProject.id === initialProjectId); 2026-10-23T11:43:17.1014895Z 557 │ if ( 2026-10-23T11:43:17.1015030Z 558 │ !shareId || 2026-10-23T11:43:17.1015094Z 559 │ !draftKey || 2026-10-23T11:43:17.1015178Z 560 │ !destinationProject || 2026-10-23T11:43:17.1015274Z 561 │ !selectedProjectMatchesRoute || 2026-10-23T11:43:17.1015373Z 562 │ cancelledIncomingShareId === shareId 2026-10-23T11:43:17.1015430Z 563 │ ) { 2026-10-23T11:43:17.1015496Z 564 │ return; 2026-10-23T11:43:17.1015555Z 565 │ } 2026-10-23T11:43:17.1015658Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-23T11:43:17.1015750Z 567 │ if ( 2026-10-23T11:43:17.1016044Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-23T11:43:17.1016258Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-23T11:43:17.1016365Z 570 │ ) { 2026-10-23T11:43:17.1016445Z 571 │ return; 2026-10-23T11:43:17.1016528Z 572 │ } 2026-10-23T11:43:17.1016593Z 573 │ 2026-10-23T11:43:17.1016670Z 574 │ if (!incomingShare) { 2026-10-23T11:43:17.1016895Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-23T11:43:17.1017034Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-23T11:43:17.1017109Z 577 │ Dialog.alert( 2026-10-23T11:43:17.1017198Z 578 │ "Shared content unavailable", 2026-10-23T11:43:17.1017388Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-23T11:43:17.1017454Z 580 │ ); 2026-10-23T11:43:17.1017518Z 581 │ } 2026-10-23T11:43:17.1017579Z 582 │ return; 2026-10-23T11:43:17.1017639Z 583 │ } 2026-10-23T11:43:17.1017699Z 584 │ 2026-10-23T11:43:17.1017758Z 585 │ if ( 2026-10-23T11:43:17.1017934Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-23T11:43:17.1018054Z 587 │ selectedEnvironmentServerConfig === null 2026-10-23T11:43:17.1018115Z 588 │ ) { 2026-10-23T11:43:17.1018181Z 589 │ return; 2026-10-23T11:43:17.1018239Z 590 │ } 2026-10-23T11:43:17.1018298Z 591 │ 2026-10-23T11:43:17.1018440Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-23T11:43:17.1018568Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-23T11:43:17.1018633Z 594 │ } 2026-10-23T11:43:17.1018745Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-23T11:43:17.1018821Z 596 │ const draftBackup = 2026-10-23T11:43:17.1019041Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-23T11:43:17.1019196Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-23T11:43:17.1019295Z 599 │ const importToken = Symbol(importKey); 2026-10-23T11:43:17.1019383Z 600 │ let didReserveShare = false; 2026-10-23T11:43:17.1019462Z 601 │ let didConsumeShare = false; 2026-10-23T11:43:17.1019551Z 602 │ let needsDraftRestore = false; 2026-10-23T11:43:17.1019673Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-23T11:43:17.1019761Z 604 │ setImportingShareKey(importKey); 2026-10-23T11:43:17.1019856Z ·  ──────────┬───────── 2026-10-23T11:43:17.1020051Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1020135Z 605 │ void (async () => { 2026-10-23T11:43:17.1020196Z ╰──── 2026-10-23T11:43:17.1020907Z  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-23T11:43:17.1021365Z  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-23T11:43:17.1021369Z 2026-10-23T11:43:17.1021595Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1021764Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-23T11:43:17.1021847Z 523 │ props.initialProjectRef, 2026-10-23T11:43:17.1021918Z 524 │ props.incomingShareId, 2026-10-23T11:43:17.1022019Z ·  ──────────┬────────── 2026-10-23T11:43:17.1022205Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-23T11:43:17.1022290Z 525 │ props.pendingTaskId, 2026-10-23T11:43:17.1022341Z ╰──── 2026-10-23T11:43:17.1022646Z  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-23T11:43:17.1022967Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1022970Z 2026-10-23T11:43:17.1023192Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.1023350Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-23T11:43:17.1023475Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-23T11:43:17.1023560Z 543 │ flow.loadBranches(); 2026-10-23T11:43:17.1023641Z ·  ──┬─ 2026-10-23T11:43:17.1023776Z · ╰── Missing dependency `flow` 2026-10-23T11:43:17.1023872Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-23T11:43:17.1023965Z ·  ────────┬──────── 2026-10-23T11:43:17.1024180Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-23T11:43:17.1024250Z 545 │ 2026-10-23T11:43:17.1024304Z ╰──── 2026-10-23T11:43:17.1024737Z  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-23T11:43:17.1025065Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1025071Z 2026-10-23T11:43:17.1025286Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1025452Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-23T11:43:17.1025517Z 765 │ flow.draftKey, 2026-10-23T11:43:17.1025601Z 766 │ hasImportedIncomingShare, 2026-10-23T11:43:17.1025702Z ·  ────────────┬─────────── 2026-10-23T11:43:17.1025886Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-23T11:43:17.1026052Z 767 │ incomingShare, 2026-10-23T11:43:17.1026147Z 768 │ isIncomingShareInboxLoading, 2026-10-23T11:43:17.1026331Z ·  ─────────────┬───────────── 2026-10-23T11:43:17.1026636Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-23T11:43:17.1026728Z 769 │ isIncomingShareUnavailable, 2026-10-23T11:43:17.1026809Z 770 │ props.incomingShareId, 2026-10-23T11:43:17.1026914Z 771 │ props.initialProjectRef?.environmentId, 2026-10-23T11:43:17.1027007Z 772 │ props.initialProjectRef?.projectId, 2026-10-23T11:43:17.1027094Z 773 │ releaseShareReservation, 2026-10-23T11:43:17.1027170Z 774 │ reserveShare, 2026-10-23T11:43:17.1027269Z 775 │ selectedEnvironmentServerConfig, 2026-10-23T11:43:17.1027337Z 776 │ selectedProject, 2026-10-23T11:43:17.1027414Z 777 │ shareImportAttempt, 2026-10-23T11:43:17.1027517Z ·  ─────────┬──────── 2026-10-23T11:43:17.1027705Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-23T11:43:17.1027779Z 778 │ ]); 2026-10-23T11:43:17.1027846Z ╰──── 2026-10-23T11:43:17.1028149Z  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-23T11:43:17.1028472Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1028474Z 2026-10-23T11:43:17.1028628Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1028793Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-23T11:43:17.1028854Z 276 │ 2026-10-23T11:43:17.1029055Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-23T11:43:17.1029158Z 278 │ │ ...nativeProps, 2026-10-23T11:43:17.1029307Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-23T11:43:17.1029413Z 280 │ │ ref: nativeRef, 2026-10-23T11:43:17.1029553Z 281 │ ├─▶ }); 2026-10-23T11:43:17.1029810Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1029867Z 282 │ } 2026-10-23T11:43:17.1029931Z ╰──── 2026-10-23T11:43:17.1030418Z  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-23T11:43:17.1030724Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1030727Z 2026-10-23T11:43:17.1030898Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.1031072Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-23T11:43:17.1031150Z 107 │ ); 2026-10-23T11:43:17.1031312Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-23T11:43:17.1031416Z ·  ─────────┬──────── 2026-10-23T11:43:17.1031583Z · ╰── `separationProgress` originates here 2026-10-23T11:43:17.1031650Z 109 │ 2026-10-23T11:43:17.1031832Z 110 │ useEffect(() => { 2026-10-23T11:43:17.1032445Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-23T11:43:17.1032540Z ·  ─────────┬──────── 2026-10-23T11:43:17.1032723Z · ╰── `separationProgress` cannot be modified 2026-10-23T11:43:17.1032849Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-23T11:43:17.1032912Z ╰──── 2026-10-23T11:43:17.1033192Z  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-23T11:43:17.1033508Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1033511Z 2026-10-23T11:43:17.1033684Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.1033864Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T11:43:17.1033985Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T11:43:17.1034127Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T11:43:17.1034226Z ·  ──────┬───── 2026-10-23T11:43:17.1034396Z · ╰── `capsuleWidth` originates here 2026-10-23T11:43:17.1034515Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T11:43:17.1034672Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1034786Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T11:43:17.1034902Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T11:43:17.1034979Z 134 │ return; 2026-10-23T11:43:17.1035059Z 135 │ } 2026-10-23T11:43:17.1035182Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T11:43:17.1035292Z 137 │ measuredWidthRef.current = width; 2026-10-23T11:43:17.1035444Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T11:43:17.1035534Z ·  ──────┬───── 2026-10-23T11:43:17.1035689Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T11:43:17.1035754Z 139 │ }; 2026-10-23T11:43:17.1035815Z ╰──── 2026-10-23T11:43:17.1036185Z  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-23T11:43:17.1036506Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1036515Z 2026-10-23T11:43:17.1036683Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.1036851Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T11:43:17.1036980Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-23T11:43:17.1037105Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-23T11:43:17.1037198Z ·  ──────┬───── 2026-10-23T11:43:17.1037345Z · ╰── `capsuleWidth` originates here 2026-10-23T11:43:17.1037463Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T11:43:17.1037599Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1037791Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T11:43:17.1038050Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T11:43:17.1038113Z 134 │ return; 2026-10-23T11:43:17.1038177Z 135 │ } 2026-10-23T11:43:17.1038300Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T11:43:17.1038390Z 137 │ measuredWidthRef.current = width; 2026-10-23T11:43:17.1038554Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T11:43:17.1038628Z 139 │ }; 2026-10-23T11:43:17.1038740Z 140 │ const hasStatus = props.status !== null; 2026-10-23T11:43:17.1038883Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T11:43:17.1038967Z 142 │ useEffect(() => { 2026-10-23T11:43:17.1039043Z 143 │ if (!hasStatus) { 2026-10-23T11:43:17.1039143Z 144 │ measuredWidthRef.current = null; 2026-10-23T11:43:17.1039237Z 145 │ capsuleWidth.value = null; 2026-10-23T11:43:17.1039335Z ·  ──────┬───── 2026-10-23T11:43:17.1039494Z · ╰── `capsuleWidth` cannot be modified 2026-10-23T11:43:17.1039557Z 146 │ } 2026-10-23T11:43:17.1039617Z ╰──── 2026-10-23T11:43:17.1039895Z  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-23T11:43:17.1040208Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1040210Z 2026-10-23T11:43:17.1040430Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T11:43:17.1040616Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-23T11:43:17.1040765Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-23T11:43:17.1040842Z 142 │ useEffect(() => { 2026-10-23T11:43:17.1040930Z ·  ───┬─── 2026-10-23T11:43:17.1041177Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T11:43:17.1041250Z 143 │ if (!hasStatus) { 2026-10-23T11:43:17.1041351Z 144 │ measuredWidthRef.current = null; 2026-10-23T11:43:17.1041434Z 145 │ capsuleWidth.value = null; 2026-10-23T11:43:17.1041521Z ·  ──────┬───── 2026-10-23T11:43:17.1041672Z · ╰── This modifies `capsuleWidth` 2026-10-23T11:43:17.1041738Z 146 │ } 2026-10-23T11:43:17.1041801Z ╰──── 2026-10-23T11:43:17.1042241Z  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-23T11:43:17.1042672Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1042675Z 2026-10-23T11:43:17.1042891Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T11:43:17.1043567Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-23T11:43:17.1043709Z 130 │ const measuredWidthRef = useRef(null); 2026-10-23T11:43:17.1043826Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1043984Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1044257Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-23T11:43:17.1044385Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-23T11:43:17.1044484Z 133 │ if (width === measuredWidthRef.current) { 2026-10-23T11:43:17.1044572Z 134 │ return; 2026-10-23T11:43:17.1044641Z 135 │ } 2026-10-23T11:43:17.1044757Z 136 │ const first = measuredWidthRef.current === null; 2026-10-23T11:43:17.1044859Z 137 │ measuredWidthRef.current = width; 2026-10-23T11:43:17.1045019Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-23T11:43:17.1045120Z ·  ──────┬───── 2026-10-23T11:43:17.1045272Z · ╰── This modifies `capsuleWidth` 2026-10-23T11:43:17.1045330Z 139 │ }; 2026-10-23T11:43:17.1045392Z ╰──── 2026-10-23T11:43:17.1045738Z  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-23T11:43:17.1046152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1046155Z 2026-10-23T11:43:17.1046639Z ⚠ 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-23T11:43:17.1046783Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-23T11:43:17.1046856Z 130 │ ) { 2026-10-23T11:43:17.1047083Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.1047218Z 132 │ │ if (subscriptions.length >= count) { 2026-10-23T11:43:17.1047313Z 133 │ │ return; 2026-10-23T11:43:17.1047402Z 134 │ │ } 2026-10-23T11:43:17.1047516Z 135 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1047660Z 136 │ ╰─▶ } 2026-10-23T11:43:17.1047826Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-23T11:43:17.1047892Z ╰──── 2026-10-23T11:43:17.1047895Z 2026-10-23T11:43:17.1048538Z ⚠ 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-23T11:43:17.1048801Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-23T11:43:17.1048972Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-23T11:43:17.1049249Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-23T11:43:17.1049375Z 253 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1049521Z 254 │ ╰─▶ } 2026-10-23T11:43:17.1049658Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-23T11:43:17.1049711Z ╰──── 2026-10-23T11:43:17.1049714Z 2026-10-23T11:43:17.1050183Z ⚠ 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-23T11:43:17.1050324Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-23T11:43:17.1050385Z 257 │ 2026-10-23T11:43:17.1050695Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T11:43:17.1050799Z 259 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1050945Z 260 │ ╰─▶ } 2026-10-23T11:43:17.1051062Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T11:43:17.1051124Z ╰──── 2026-10-23T11:43:17.1051126Z 2026-10-23T11:43:17.1051588Z ⚠ 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-23T11:43:17.1051729Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-23T11:43:17.1051798Z 321 │ ); 2026-10-23T11:43:17.1052061Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-23T11:43:17.1052176Z 323 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1052317Z 324 │ ╰─▶ } 2026-10-23T11:43:17.1052382Z 325 │ 2026-10-23T11:43:17.1052441Z ╰──── 2026-10-23T11:43:17.1052445Z 2026-10-23T11:43:17.1052915Z ⚠ 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-23T11:43:17.1053048Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-23T11:43:17.1053214Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-23T11:43:17.1053471Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-23T11:43:17.1053581Z 331 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1053771Z 332 │ ╰─▶ } 2026-10-23T11:43:17.1054058Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-23T11:43:17.1054118Z ╰──── 2026-10-23T11:43:17.1054121Z 2026-10-23T11:43:17.1054583Z ⚠ 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-23T11:43:17.1054728Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-23T11:43:17.1054787Z 225 │ ) { 2026-10-23T11:43:17.1055003Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.1055123Z 227 │ │ const socket = sockets[index]; 2026-10-23T11:43:17.1055230Z 228 │ │ if (socket) { 2026-10-23T11:43:17.1055329Z 229 │ │ return socket; 2026-10-23T11:43:17.1055423Z 230 │ │ } 2026-10-23T11:43:17.1055539Z 231 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1055679Z 232 │ ╰─▶ } 2026-10-23T11:43:17.1055855Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-23T11:43:17.1055968Z ╰──── 2026-10-23T11:43:17.1055970Z 2026-10-23T11:43:17.1056436Z ⚠ 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-23T11:43:17.1056583Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-23T11:43:17.1056644Z 239 │ ) { 2026-10-23T11:43:17.1056857Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.1057079Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-23T11:43:17.1057175Z 242 │ │ if (request) { 2026-10-23T11:43:17.1057275Z 243 │ │ return request; 2026-10-23T11:43:17.1057351Z 244 │ │ } 2026-10-23T11:43:17.1057458Z 245 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1057594Z 246 │ ╰─▶ } 2026-10-23T11:43:17.1057766Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-23T11:43:17.1057821Z ╰──── 2026-10-23T11:43:17.1057823Z 2026-10-23T11:43:17.1058088Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1058264Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-23T11:43:17.1058328Z 211 │ }; 2026-10-23T11:43:17.1058396Z 212 │ useEffect(() => { 2026-10-23T11:43:17.1058481Z ·  ────┬──── 2026-10-23T11:43:17.1058622Z · ╰── This is the containing effect 2026-10-23T11:43:17.1058801Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-23T11:43:17.1058865Z 214 │ if (inserted) { 2026-10-23T11:43:17.1059032Z 215 │ setSelection((current) => 2026-10-23T11:43:17.1059205Z ·  ──────┬───── 2026-10-23T11:43:17.1059384Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1059555Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-23T11:43:17.1059619Z ╰──── 2026-10-23T11:43:17.1060229Z  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-23T11:43:17.1060555Z  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-23T11:43:17.1060562Z 2026-10-23T11:43:17.1060831Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1060996Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-23T11:43:17.1061081Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-23T11:43:17.1061152Z 285 │ useEffect(() => { 2026-10-23T11:43:17.1061238Z ·  ────┬──── 2026-10-23T11:43:17.1061372Z · ╰── This is the containing effect 2026-10-23T11:43:17.1061527Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-23T11:43:17.1061678Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-23T11:43:17.1061758Z 288 │ const now = Date.now(); 2026-10-23T11:43:17.1061877Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-23T11:43:17.1061947Z 290 │ if ( 2026-10-23T11:43:17.1062031Z 291 │ lastRequest?.key === key && 2026-10-23T11:43:17.1062193Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-23T11:43:17.1062246Z 293 │ ) 2026-10-23T11:43:17.1062314Z 294 │ return; 2026-10-23T11:43:17.1062498Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-23T11:43:17.1062594Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-23T11:43:17.1062695Z ·  ────────────┬─────────── 2026-10-23T11:43:17.1062881Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1062945Z 297 │ return; 2026-10-23T11:43:17.1062999Z ╰──── 2026-10-23T11:43:17.1063596Z  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-23T11:43:17.1063922Z  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-23T11:43:17.1063925Z 2026-10-23T11:43:17.1064129Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1064298Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-23T11:43:17.1064361Z 325 │ }, [ 2026-10-23T11:43:17.1064424Z 326 │ draftMessage, 2026-10-23T11:43:17.1064586Z ·  ──────┬───── 2026-10-23T11:43:17.1064847Z · ╰── Unnecessary dependency `draftMessage` 2026-10-23T11:43:17.1064915Z 327 │ environmentId, 2026-10-23T11:43:17.1064966Z ╰──── 2026-10-23T11:43:17.1065265Z  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-23T11:43:17.1065579Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1065581Z 2026-10-23T11:43:17.1065744Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.1065951Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-23T11:43:17.1071324Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-23T11:43:17.1071506Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-23T11:43:17.1071598Z ·  ────┬─── 2026-10-23T11:43:17.1071745Z · ╰── `rotation` originates here 2026-10-23T11:43:17.1071817Z 172 │ 2026-10-23T11:43:17.1071893Z 173 │ useLayoutEffect(() => { 2026-10-23T11:43:17.1072038Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-23T11:43:17.1072111Z ·  ────┬─── 2026-10-23T11:43:17.1072256Z · ╰── `rotation` cannot be modified 2026-10-23T11:43:17.1072364Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-23T11:43:17.1072421Z ╰──── 2026-10-23T11:43:17.1072697Z  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-23T11:43:17.1073014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1073017Z 2026-10-23T11:43:17.1073225Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.1073386Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-23T11:43:17.1073460Z 1245 │ 2026-10-23T11:43:17.1074758Z ·  ───────────── 2026-10-23T11:43:17.1074832Z 291 │ {props.children} 2026-10-23T11:43:17.1074887Z ╰──── 2026-10-23T11:43:17.1075113Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T11:43:17.1075378Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T11:43:17.1075425Z 2026-10-23T11:43:17.1075674Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T11:43:17.1075838Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-23T11:43:17.1075942Z 653 │ return ( 2026-10-23T11:43:17.1076078Z 654 │ 2026-10-23T11:43:17.1076200Z ·  ───────────── 2026-10-23T11:43:17.1076272Z 655 │ {props.children} 2026-10-23T11:43:17.1076325Z ╰──── 2026-10-23T11:43:17.1076551Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-23T11:43:17.1076698Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-23T11:43:17.1076703Z 2026-10-23T11:43:17.1076949Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-23T11:43:17.1077119Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-23T11:43:17.1077184Z 1461 │ return ( 2026-10-23T11:43:17.1077353Z 1462 │ 2026-10-23T11:43:17.1077501Z ·  ──────────────────── 2026-10-23T11:43:17.1077608Z 1463 │ { 2026-10-23T11:43:17.1079314Z  92 │ if (!cardCoverage) { 2026-10-23T11:43:17.1079384Z  93 │ return; 2026-10-23T11:43:17.1079445Z  94 │ } 2026-10-23T11:43:17.1079595Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T11:43:17.1079688Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T11:43:17.1079753Z  97 │ return; 2026-10-23T11:43:17.1079809Z  98 │ } 2026-10-23T11:43:17.1079896Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T11:43:17.1079987Z 100 │ cardCoverage.value = coverage; 2026-10-23T11:43:17.1080071Z ·  ──────┬───── 2026-10-23T11:43:17.1080218Z · ╰── `cardCoverage` cannot be modified 2026-10-23T11:43:17.1080290Z 101 │ return; 2026-10-23T11:43:17.1080349Z ╰──── 2026-10-23T11:43:17.1080654Z  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-23T11:43:17.1080967Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1080970Z 2026-10-23T11:43:17.1081131Z ⚠ react(immutability): This value cannot be modified 2026-10-23T11:43:17.1081293Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T11:43:17.1081379Z  89 │ const cardHeightRef = useRef(0); 2026-10-23T11:43:17.1081471Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T11:43:17.1081550Z ·  ─────┬──── 2026-10-23T11:43:17.1081697Z · ╰── `cardHeight` originates here 2026-10-23T11:43:17.1081794Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T11:43:17.1081871Z  92 │ if (!cardCoverage) { 2026-10-23T11:43:17.1081934Z  93 │ return; 2026-10-23T11:43:17.1081993Z  94 │ } 2026-10-23T11:43:17.1082151Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T11:43:17.1082246Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T11:43:17.1082304Z  97 │ return; 2026-10-23T11:43:17.1082367Z  98 │ } 2026-10-23T11:43:17.1082461Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T11:43:17.1082548Z 100 │ cardCoverage.value = coverage; 2026-10-23T11:43:17.1082620Z 101 │ return; 2026-10-23T11:43:17.1082687Z 102 │ } 2026-10-23T11:43:17.1082794Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T11:43:17.1082894Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T11:43:17.1082992Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T11:43:17.1083234Z 106 │ }); 2026-10-23T11:43:17.1083337Z 107 │ }, [cardCoverage]); 2026-10-23T11:43:17.1083422Z 108 │ const handleBarLayout = useCallback( 2026-10-23T11:43:17.1083509Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1083640Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T11:43:17.1083711Z 111 │ notifyCoverage(); 2026-10-23T11:43:17.1083767Z 112 │ }, 2026-10-23T11:43:17.1083842Z 113 │ [notifyCoverage], 2026-10-23T11:43:17.1083900Z 114 │ ); 2026-10-23T11:43:17.1083990Z 115 │ const handleCardLayout = useCallback( 2026-10-23T11:43:17.1084073Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1084333Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T11:43:17.1084502Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T11:43:17.1084584Z ·  ─────┬──── 2026-10-23T11:43:17.1084728Z · ╰── `cardHeight` cannot be modified 2026-10-23T11:43:17.1084801Z 119 │ notifyCoverage(); 2026-10-23T11:43:17.1084859Z ╰──── 2026-10-23T11:43:17.1085125Z  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-23T11:43:17.1085425Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1085428Z 2026-10-23T11:43:17.1085640Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T11:43:17.1085805Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T11:43:17.1085945Z  90 │ const cardHeight = useSharedValue(0); 2026-10-23T11:43:17.1086052Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-23T11:43:17.1086166Z ·  ───┬─── 2026-10-23T11:43:17.1086412Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T11:43:17.1086485Z  92 │ if (!cardCoverage) { 2026-10-23T11:43:17.1086545Z  93 │ return; 2026-10-23T11:43:17.1086604Z  94 │ } 2026-10-23T11:43:17.1086758Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-23T11:43:17.1086868Z  96 │ if (coverage === cardCoverage.value) { 2026-10-23T11:43:17.1086931Z  97 │ return; 2026-10-23T11:43:17.1086989Z  98 │ } 2026-10-23T11:43:17.1087076Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T11:43:17.1087158Z 100 │ cardCoverage.value = coverage; 2026-10-23T11:43:17.1087237Z ·  ──────┬───── 2026-10-23T11:43:17.1087381Z · ╰── This modifies `cardCoverage` 2026-10-23T11:43:17.1087441Z 101 │ return; 2026-10-23T11:43:17.1087498Z ╰──── 2026-10-23T11:43:17.1087834Z  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-23T11:43:17.1088145Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1088150Z 2026-10-23T11:43:17.1088356Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T11:43:17.1088516Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-23T11:43:17.1088601Z  99 │ if (cardCoverage.value === 0) { 2026-10-23T11:43:17.1088682Z 100 │ cardCoverage.value = coverage; 2026-10-23T11:43:17.1088766Z ·  ──────┬───── 2026-10-23T11:43:17.1088906Z · ╰── This modifies `cardCoverage` 2026-10-23T11:43:17.1088964Z 101 │ return; 2026-10-23T11:43:17.1089022Z 102 │ } 2026-10-23T11:43:17.1089126Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-23T11:43:17.1089226Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-23T11:43:17.1089370Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-23T11:43:17.1089472Z 106 │ }); 2026-10-23T11:43:17.1089541Z 107 │ }, [cardCoverage]); 2026-10-23T11:43:17.1089633Z 108 │ const handleBarLayout = useCallback( 2026-10-23T11:43:17.1089712Z 109 │ (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1089826Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1090060Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-23T11:43:17.1090188Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T11:43:17.1090241Z ╰──── 2026-10-23T11:43:17.1090579Z  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-23T11:43:17.1090889Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1090895Z 2026-10-23T11:43:17.1091095Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-23T11:43:17.1091253Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-23T11:43:17.1091340Z 115 │ const handleCardLayout = useCallback( 2026-10-23T11:43:17.1091429Z 116 │ (event: LayoutChangeEvent) => { 2026-10-23T11:43:17.1091541Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1091765Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-23T11:43:17.1091890Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-23T11:43:17.1092015Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-23T11:43:17.1092097Z ·  ─────┬──── 2026-10-23T11:43:17.1092233Z · ╰── This modifies `cardHeight` 2026-10-23T11:43:17.1092301Z 119 │ notifyCoverage(); 2026-10-23T11:43:17.1092357Z ╰──── 2026-10-23T11:43:17.1092694Z  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-23T11:43:17.1092997Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-23T11:43:17.1093000Z 2026-10-23T11:43:17.1093151Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1093274Z ╭─[apps/mobile/src/native/StackHeader.tsx:184:9] 2026-10-23T11:43:17.1093345Z 183 │ "options", 2026-10-23T11:43:17.1093443Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T11:43:17.1093560Z ·  ────────────────┬─────────────── 2026-10-23T11:43:17.1093757Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1093856Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T11:43:17.1093909Z ╰──── 2026-10-23T11:43:17.1094380Z  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-23T11:43:17.1094730Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1094768Z 2026-10-23T11:43:17.1094923Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1095044Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-23T11:43:17.1095141Z 184 │ latestOptionFunctionsRef.current, 2026-10-23T11:43:17.1095235Z 185 │ optionFunctionWrappersRef.current, 2026-10-23T11:43:17.1095354Z ·  ────────────────┬──────────────── 2026-10-23T11:43:17.1095561Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1095658Z 186 │ ) as NativeStackNavigationOptions) 2026-10-23T11:43:17.1095711Z ╰──── 2026-10-23T11:43:17.1096216Z  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-23T11:43:17.1096512Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1096514Z 2026-10-23T11:43:17.1096727Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T11:43:17.1096870Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:229:6] 2026-10-23T11:43:17.1097032Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T11:43:17.1097128Z 226 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1097228Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1097693Z · ╰── 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-23T11:43:17.1097769Z 227 │ mostRecentEventCount, 2026-10-23T11:43:17.1097826Z 228 │ ); 2026-10-23T11:43:17.1097954Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T11:43:17.1098105Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T11:43:17.1098314Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.1098395Z 230 │ const assumedValue = props.value; 2026-10-23T11:43:17.1098451Z ╰──── 2026-10-23T11:43:17.1098700Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T11:43:17.1099057Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1099060Z 2026-10-23T11:43:17.1099276Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.1099420Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:237:7] 2026-10-23T11:43:17.1099569Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T11:43:17.1099661Z 237 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1099752Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1100219Z · ╰── 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-23T11:43:17.1100298Z 238 │ controlledEventCount, 2026-10-23T11:43:17.1100367Z 239 │ assumedValue, 2026-10-23T11:43:17.1100427Z 240 │ ); 2026-10-23T11:43:17.1100586Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T11:43:17.1100729Z ·  ───────────┬────────── 2026-10-23T11:43:17.1100946Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T11:43:17.1101038Z 242 │ const acceptNativeEvent = useCallback( 2026-10-23T11:43:17.1101088Z ╰──── 2026-10-23T11:43:17.1101515Z  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-23T11:43:17.1101831Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1101834Z 2026-10-23T11:43:17.1101983Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1102134Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T11:43:17.1102257Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T11:43:17.1102376Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T11:43:17.1102508Z ·  ─────────────┬──────────── 2026-10-23T11:43:17.1102780Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.1102864Z 163 │ }); 2026-10-23T11:43:17.1102921Z ╰──── 2026-10-23T11:43:17.1103392Z  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-23T11:43:17.1103684Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1103687Z 2026-10-23T11:43:17.1103835Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1104059Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:162:29] 2026-10-23T11:43:17.1104228Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T11:43:17.1104343Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T11:43:17.1104464Z ·  ─────────────┬──────────── 2026-10-23T11:43:17.1104678Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1104737Z 163 │ }); 2026-10-23T11:43:17.1104794Z ╰──── 2026-10-23T11:43:17.1105260Z  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-23T11:43:17.1105548Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1105554Z 2026-10-23T11:43:17.1105702Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1105844Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:23] 2026-10-23T11:43:17.1105936Z 163 │ }); 2026-10-23T11:43:17.1106031Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T11:43:17.1106168Z ·  ─────────┬────────────┬─── 2026-10-23T11:43:17.1106364Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.1106486Z · ╰── This value is a ref 2026-10-23T11:43:17.1106559Z 165 │ return JSON.stringify( 2026-10-23T11:43:17.1106621Z ╰──── 2026-10-23T11:43:17.1107087Z  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-23T11:43:17.1107376Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1107379Z 2026-10-23T11:43:17.1107528Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1107664Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:206:5] 2026-10-23T11:43:17.1107738Z 205 │ mostRecentEventCount, 2026-10-23T11:43:17.1107830Z 206 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1107946Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1108138Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1108195Z 207 │ ); 2026-10-23T11:43:17.1108252Z ╰──── 2026-10-23T11:43:17.1108715Z  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-23T11:43:17.1109001Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1109003Z 2026-10-23T11:43:17.1109149Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1109362Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:212:5] 2026-10-23T11:43:17.1109474Z 211 │ mostRecentEventCount, 2026-10-23T11:43:17.1109565Z 212 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1109672Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1109867Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1109923Z 213 │ ); 2026-10-23T11:43:17.1109978Z ╰──── 2026-10-23T11:43:17.1110436Z  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-23T11:43:17.1110729Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1110735Z 2026-10-23T11:43:17.1110927Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T11:43:17.1111065Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:197:6] 2026-10-23T11:43:17.1111189Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T11:43:17.1111302Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T11:43:17.1111419Z ·  ─────────┬──────── 2026-10-23T11:43:17.1111896Z · ╰── 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-23T11:43:17.1111959Z 163 │ }); 2026-10-23T11:43:17.1112051Z 164 │ confirmedTokensRef.current = tokens; 2026-10-23T11:43:17.1112127Z 165 │ return JSON.stringify( 2026-10-23T11:43:17.1112292Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T11:43:17.1112364Z 167 │ const record = 2026-10-23T11:43:17.1112445Z 168 │ token.type === "context" 2026-10-23T11:43:17.1112616Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T11:43:17.1112692Z 170 │ : undefined; 2026-10-23T11:43:17.1112811Z 171 │ const presentation = contextChipPresentation( 2026-10-23T11:43:17.1112921Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-23T11:43:17.1112988Z 173 │ record, 2026-10-23T11:43:17.1113049Z 174 │ ); 2026-10-23T11:43:17.1113154Z 175 │ const icon = contextChipIcon( 2026-10-23T11:43:17.1113228Z 176 │ presentation, 2026-10-23T11:43:17.1113451Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T11:43:17.1113548Z 178 │ ); 2026-10-23T11:43:17.1113643Z 179 │ return { 2026-10-23T11:43:17.1113748Z 180 │ type: token.type, 2026-10-23T11:43:17.1113863Z 181 │ source: token.source, 2026-10-23T11:43:17.1113976Z 182 │ start: token.start, 2026-10-23T11:43:17.1114076Z 183 │ end: token.end, 2026-10-23T11:43:17.1114216Z 184 │ accent: presentation.accent, 2026-10-23T11:43:17.1114324Z 185 │ label: 2026-10-23T11:43:17.1114456Z 186 │ token.type === "skill" 2026-10-23T11:43:17.1114622Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T11:43:17.1114834Z 188 │ : token.type === "context" 2026-10-23T11:43:17.1115281Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T11:43:17.1115428Z 190 │ : basename(token.value), 2026-10-23T11:43:17.1115671Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T11:43:17.1115834Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-23T11:43:17.1116025Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-23T11:43:17.1116129Z 194 │ }; 2026-10-23T11:43:17.1116226Z 195 │ }), 2026-10-23T11:43:17.1116320Z 196 │ ); 2026-10-23T11:43:17.1116480Z 197 │ }, [props.value, props.context, skillLabels]); 2026-10-23T11:43:17.1116614Z ·  ────────────────────┬──────────────────── 2026-10-23T11:43:17.1116826Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.1116975Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T11:43:17.1117031Z ╰──── 2026-10-23T11:43:17.1117244Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T11:43:17.1117555Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1117562Z 2026-10-23T11:43:17.1117752Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T11:43:17.1117894Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:259:5] 2026-10-23T11:43:17.1118031Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T11:43:17.1118144Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T11:43:17.1118239Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1118708Z · ╰── 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-23T11:43:17.1118809Z 253 │ eventCount: acknowledgedEventCount, 2026-10-23T11:43:17.1118875Z 254 │ value, 2026-10-23T11:43:17.1118956Z 255 │ selection: nextSelection, 2026-10-23T11:43:17.1119019Z 256 │ }); 2026-10-23T11:43:17.1119109Z 257 │ return acknowledgedEventCount; 2026-10-23T11:43:17.1119168Z 258 │ }, 2026-10-23T11:43:17.1119221Z 259 │ [], 2026-10-23T11:43:17.1119301Z ·  ─┬ 2026-10-23T11:43:17.1119493Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.1119554Z 260 │ ); 2026-10-23T11:43:17.1119608Z ╰──── 2026-10-23T11:43:17.1119818Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T11:43:17.1120133Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1120135Z 2026-10-23T11:43:17.1120336Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-23T11:43:17.1120482Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-23T11:43:17.1120844Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-23T11:43:17.1120998Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-23T11:43:17.1121074Z ·  ──┬── 2026-10-23T11:43:17.1121204Z · ╰── 'Image' is imported here 2026-10-23T11:43:17.1121260Z 18 │ 2026-10-23T11:43:17.1121314Z ╰──── 2026-10-23T11:43:17.1121416Z  help: Consider removing this import. 2026-10-23T11:43:17.1121419Z 2026-10-23T11:43:17.1121624Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-23T11:43:17.1121772Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:227:6] 2026-10-23T11:43:17.1121938Z 223 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-23T11:43:17.1122032Z 224 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1122134Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1122600Z · ╰── 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-23T11:43:17.1122677Z 225 │ mostRecentEventCount, 2026-10-23T11:43:17.1122739Z 226 │ ); 2026-10-23T11:43:17.1122868Z 227 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-23T11:43:17.1123015Z ·  ──────────────────────────┬────────────────────────── 2026-10-23T11:43:17.1123348Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.1123434Z 228 │ const assumedValue = props.value; 2026-10-23T11:43:17.1123490Z ╰──── 2026-10-23T11:43:17.1123666Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-23T11:43:17.1123984Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1123987Z 2026-10-23T11:43:17.1124209Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.1124359Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:235:7] 2026-10-23T11:43:17.1124504Z 234 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-23T11:43:17.1124599Z 235 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1124696Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1125259Z · ╰── 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-23T11:43:17.1125388Z 236 │ controlledEventCount, 2026-10-23T11:43:17.1125454Z 237 │ assumedValue, 2026-10-23T11:43:17.1125514Z 238 │ ); 2026-10-23T11:43:17.1125676Z 239 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-23T11:43:17.1125821Z ·  ───────────┬────────── 2026-10-23T11:43:17.1126071Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-23T11:43:17.1126168Z 240 │ const acceptNativeEvent = useCallback( 2026-10-23T11:43:17.1126223Z ╰──── 2026-10-23T11:43:17.1126657Z  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-23T11:43:17.1126973Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1126980Z 2026-10-23T11:43:17.1127129Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1127281Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T11:43:17.1127409Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T11:43:17.1127526Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T11:43:17.1127653Z ·  ─────────────┬──────────── 2026-10-23T11:43:17.1127831Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.1127891Z 161 │ }); 2026-10-23T11:43:17.1127949Z ╰──── 2026-10-23T11:43:17.1128422Z  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-23T11:43:17.1128720Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1128722Z 2026-10-23T11:43:17.1128875Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1129030Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:160:29] 2026-10-23T11:43:17.1129160Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T11:43:17.1129273Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T11:43:17.1129400Z ·  ─────────────┬──────────── 2026-10-23T11:43:17.1129614Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1129677Z 161 │ }); 2026-10-23T11:43:17.1129728Z ╰──── 2026-10-23T11:43:17.1130198Z  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-23T11:43:17.1130542Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1130578Z 2026-10-23T11:43:17.1130731Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1130881Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:23] 2026-10-23T11:43:17.1130937Z 161 │ }); 2026-10-23T11:43:17.1131033Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T11:43:17.1131170Z ·  ─────────┬────────────┬─── 2026-10-23T11:43:17.1131374Z · │ ╰── Cannot update ref value during render 2026-10-23T11:43:17.1131494Z · ╰── This value is a ref 2026-10-23T11:43:17.1131575Z 163 │ return JSON.stringify( 2026-10-23T11:43:17.1131634Z ╰──── 2026-10-23T11:43:17.1132100Z  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-23T11:43:17.1132390Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1132393Z 2026-10-23T11:43:17.1132545Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1132698Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:204:5] 2026-10-23T11:43:17.1132775Z 203 │ mostRecentEventCount, 2026-10-23T11:43:17.1132868Z 204 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1132993Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1133192Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1133251Z 205 │ ); 2026-10-23T11:43:17.1133306Z ╰──── 2026-10-23T11:43:17.1133778Z  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-23T11:43:17.1134073Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1134075Z 2026-10-23T11:43:17.1134231Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1134381Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:210:5] 2026-10-23T11:43:17.1134451Z 209 │ mostRecentEventCount, 2026-10-23T11:43:17.1134545Z 210 │ nativeEventSnapshotsRef.current, 2026-10-23T11:43:17.1134657Z ·  ───────────────┬─────────────── 2026-10-23T11:43:17.1134852Z · ╰── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1134908Z 211 │ ); 2026-10-23T11:43:17.1134967Z ╰──── 2026-10-23T11:43:17.1135434Z  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-23T11:43:17.1135779Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1135817Z 2026-10-23T11:43:17.1136061Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T11:43:17.1136205Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:195:6] 2026-10-23T11:43:17.1136331Z 159 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-23T11:43:17.1136448Z 160 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-23T11:43:17.1136565Z ·  ─────────┬──────── 2026-10-23T11:43:17.1137043Z · ╰── 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-23T11:43:17.1137108Z 161 │ }); 2026-10-23T11:43:17.1137205Z 162 │ confirmedTokensRef.current = tokens; 2026-10-23T11:43:17.1137279Z 163 │ return JSON.stringify( 2026-10-23T11:43:17.1137445Z 164 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-23T11:43:17.1137520Z 165 │ const record = 2026-10-23T11:43:17.1137606Z 166 │ token.type === "context" 2026-10-23T11:43:17.1137774Z 167 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-23T11:43:17.1137842Z 168 │ : undefined; 2026-10-23T11:43:17.1137957Z 169 │ const presentation = contextChipPresentation( 2026-10-23T11:43:17.1138072Z 170 │ token.type === "context" ? token.kind : token.type, 2026-10-23T11:43:17.1138139Z 171 │ record, 2026-10-23T11:43:17.1138203Z 172 │ ); 2026-10-23T11:43:17.1138296Z 173 │ const icon = contextChipIcon( 2026-10-23T11:43:17.1138371Z 174 │ presentation, 2026-10-23T11:43:17.1138523Z 175 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-23T11:43:17.1138581Z 176 │ ); 2026-10-23T11:43:17.1138649Z 177 │ return { 2026-10-23T11:43:17.1138723Z 178 │ type: token.type, 2026-10-23T11:43:17.1138806Z 179 │ source: token.source, 2026-10-23T11:43:17.1138880Z 180 │ start: token.start, 2026-10-23T11:43:17.1138952Z 181 │ end: token.end, 2026-10-23T11:43:17.1139043Z 182 │ accent: presentation.accent, 2026-10-23T11:43:17.1139110Z 183 │ label: 2026-10-23T11:43:17.1139191Z 184 │ token.type === "skill" 2026-10-23T11:43:17.1139309Z 185 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-23T11:43:17.1139400Z 186 │ : token.type === "context" 2026-10-23T11:43:17.1139648Z 187 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-23T11:43:17.1139732Z 188 │ : basename(token.value), 2026-10-23T11:43:17.1139881Z 189 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-23T11:43:17.1139980Z 190 │ iconUri: contextChipIconUri(icon), 2026-10-23T11:43:17.1140072Z 191 │ tintsIcon: icon.kind === "chip", 2026-10-23T11:43:17.1140130Z 192 │ }; 2026-10-23T11:43:17.1140192Z 193 │ }), 2026-10-23T11:43:17.1140252Z 194 │ ); 2026-10-23T11:43:17.1140354Z 195 │ }, [props.value, props.context, skillLabels]); 2026-10-23T11:43:17.1140555Z ·  ────────────────────┬──────────────────── 2026-10-23T11:43:17.1140795Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.1140939Z 196 │ // Every render resolves against the snapshot history, so a render whose 2026-10-23T11:43:17.1140995Z ╰──── 2026-10-23T11:43:17.1141204Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T11:43:17.1141523Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1141525Z 2026-10-23T11:43:17.1141721Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-23T11:43:17.1141868Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:257:5] 2026-10-23T11:43:17.1142004Z 249 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-23T11:43:17.1142114Z 250 │ nativeEventSnapshotsRef.current.push({ 2026-10-23T11:43:17.1142216Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1142687Z · ╰── 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-23T11:43:17.1142787Z 251 │ eventCount: acknowledgedEventCount, 2026-10-23T11:43:17.1142851Z 252 │ value, 2026-10-23T11:43:17.1142936Z 253 │ selection: nextSelection, 2026-10-23T11:43:17.1142998Z 254 │ }); 2026-10-23T11:43:17.1143082Z 255 │ return acknowledgedEventCount; 2026-10-23T11:43:17.1143145Z 256 │ }, 2026-10-23T11:43:17.1143208Z 257 │ [], 2026-10-23T11:43:17.1143281Z ·  ─┬ 2026-10-23T11:43:17.1143465Z · ╰── This dependency list is missing values used by the callback 2026-10-23T11:43:17.1143527Z 258 │ ); 2026-10-23T11:43:17.1143581Z ╰──── 2026-10-23T11:43:17.1143790Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-23T11:43:17.1144105Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1144107Z 2026-10-23T11:43:17.1144320Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-23T11:43:17.1144420Z ╭─[apps/web/src/types.ts:22:3] 2026-10-23T11:43:17.1144551Z 21 │ EnvironmentThreadShell, 2026-10-23T11:43:17.1144652Z 22 │ ThreadRunSummary, 2026-10-23T11:43:17.1144739Z ·  ────────┬─────── 2026-10-23T11:43:17.1144893Z · ╰── 'ThreadRunSummary' is imported here 2026-10-23T11:43:17.1144968Z 23 │ ThreadRuntimeSummary, 2026-10-23T11:43:17.1145022Z ╰──── 2026-10-23T11:43:17.1145129Z  help: Consider removing this import. 2026-10-23T11:43:17.1145132Z 2026-10-23T11:43:17.1145396Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1145573Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-23T11:43:17.1145630Z 10577 │ 2026-10-23T11:43:17.1145704Z 10578 │ const layer: Layer.Layer< 2026-10-23T11:43:17.1145787Z ·  ──┬── 2026-10-23T11:43:17.1145954Z · ╰── 'layer' is declared here 2026-10-23T11:43:17.1146051Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T11:43:17.1146111Z ╰──── 2026-10-23T11:43:17.1146224Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1146227Z 2026-10-23T11:43:17.1146402Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.1146558Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-23T11:43:17.1146691Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-23T11:43:17.1146850Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-23T11:43:17.1146973Z ·  ─────┬──── 2026-10-23T11:43:17.1147149Z · ╰── Cannot call impure function 2026-10-23T11:43:17.1147212Z 373 │ return ( 2026-10-23T11:43:17.1147270Z ╰──── 2026-10-23T11:43:17.1147557Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.1147860Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.1147862Z 2026-10-23T11:43:17.1148034Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.1148188Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-23T11:43:17.1148284Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-23T11:43:17.1148425Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-23T11:43:17.1148543Z ·  ─────┬──── 2026-10-23T11:43:17.1148706Z · ╰── Cannot call impure function 2026-10-23T11:43:17.1148764Z 854 │ } 2026-10-23T11:43:17.1148821Z ╰──── 2026-10-23T11:43:17.1149098Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.1149400Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.1149402Z 2026-10-23T11:43:17.1149671Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T11:43:17.1149837Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-23T11:43:17.1149907Z 37 │ get isConnected() { 2026-10-23T11:43:17.1150000Z 38 │ let current: FakeElement | null = this; 2026-10-23T11:43:17.1150079Z ·  ─────── 2026-10-23T11:43:17.1150157Z 39 │ while (current?.parent) { 2026-10-23T11:43:17.1150213Z ╰──── 2026-10-23T11:43:17.1150488Z  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-23T11:43:17.1150491Z 2026-10-23T11:43:17.1150725Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T11:43:17.1150907Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-23T11:43:17.1150983Z 1997 │ assert.equal( 2026-10-23T11:43:17.1151138Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-23T11:43:17.1151223Z ·  ────── 2026-10-23T11:43:17.1151306Z 1999 │ "authoritative answer", 2026-10-23T11:43:17.1151365Z ╰──── 2026-10-23T11:43:17.1151539Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T11:43:17.1151542Z 2026-10-23T11:43:17.1152027Z ⚠ 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-23T11:43:17.1152206Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-23T11:43:17.1152399Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-23T11:43:17.1152623Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-23T11:43:17.1152737Z 3952 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1152880Z 3953 │ ╰─▶ } 2026-10-23T11:43:17.1153010Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-23T11:43:17.1153065Z ╰──── 2026-10-23T11:43:17.1153067Z 2026-10-23T11:43:17.1153536Z ⚠ 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-23T11:43:17.1153719Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-23T11:43:17.1153816Z 6061 │ .pipe(Effect.forkScoped); 2026-10-23T11:43:17.1154016Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-23T11:43:17.1154140Z 6063 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1154286Z 6064 │ ╰─▶ } 2026-10-23T11:43:17.1154464Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-23T11:43:17.1154522Z ╰──── 2026-10-23T11:43:17.1154524Z 2026-10-23T11:43:17.1155043Z ⚠ 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-23T11:43:17.1155258Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-23T11:43:17.1155350Z 6196 │ .pipe(Effect.forkScoped); 2026-10-23T11:43:17.1155544Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-23T11:43:17.1155665Z 6198 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1155809Z 6199 │ ╰─▶ } 2026-10-23T11:43:17.1156027Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-23T11:43:17.1156085Z ╰──── 2026-10-23T11:43:17.1156088Z 2026-10-23T11:43:17.1156310Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-23T11:43:17.1156481Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-23T11:43:17.1156574Z 24 │ import * as Schema from "effect/Schema"; 2026-10-23T11:43:17.1156695Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-23T11:43:17.1156785Z ·  ─────┬───── 2026-10-23T11:43:17.1156933Z · ╰── 'HostProcess' is imported here 2026-10-23T11:43:17.1156986Z 26 │ 2026-10-23T11:43:17.1157053Z ╰──── 2026-10-23T11:43:17.1157158Z  help: Consider removing this import. 2026-10-23T11:43:17.1157160Z 2026-10-23T11:43:17.1157444Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1157621Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-23T11:43:17.1157711Z 123 │ const path = yield* Path.Path; 2026-10-23T11:43:17.1157833Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T11:43:17.1157927Z ·  ──────┬───── 2026-10-23T11:43:17.1158072Z · ╰── 'serverConfig' is declared here 2026-10-23T11:43:17.1158222Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T11:43:17.1158278Z ╰──── 2026-10-23T11:43:17.1158391Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1158394Z 2026-10-23T11:43:17.1158676Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1158856Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-23T11:43:17.1158983Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-23T11:43:17.1159131Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-23T11:43:17.1159221Z ·  ───────┬────── 2026-10-23T11:43:17.1159374Z · ╰── 'serverSettings' is declared here 2026-10-23T11:43:17.1159517Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-23T11:43:17.1159582Z ╰──── 2026-10-23T11:43:17.1159692Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1159694Z 2026-10-23T11:43:17.1160039Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1160265Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-23T11:43:17.1160358Z 1443 │ 2026-10-23T11:43:17.1160481Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-23T11:43:17.1160610Z ·  ───────────────────┬─────────────────── 2026-10-23T11:43:17.1160832Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-23T11:43:17.1160962Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-23T11:43:17.1161020Z ╰──── 2026-10-23T11:43:17.1161123Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1161126Z 2026-10-23T11:43:17.1161392Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1161568Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-23T11:43:17.1161629Z 1679 │ 2026-10-23T11:43:17.1161701Z 1680 │ const layer: Layer.Layer< 2026-10-23T11:43:17.1161781Z ·  ──┬── 2026-10-23T11:43:17.1161915Z · ╰── 'layer' is declared here 2026-10-23T11:43:17.1162015Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-23T11:43:17.1162068Z ╰──── 2026-10-23T11:43:17.1162175Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1162177Z 2026-10-23T11:43:17.1162653Z ⚠ 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-23T11:43:17.1162800Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-23T11:43:17.1162862Z 93 │ ) { 2026-10-23T11:43:17.1163153Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.1163368Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-23T11:43:17.1163500Z 96 │ │ if (predicate(project)) return project; 2026-10-23T11:43:17.1163611Z 97 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1163739Z 98 │ ╰─▶ } 2026-10-23T11:43:17.1163897Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-23T11:43:17.1163955Z ╰──── 2026-10-23T11:43:17.1163958Z 2026-10-23T11:43:17.1164158Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1164337Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-23T11:43:17.1164426Z 554 │ assert.deepStrictEqual( 2026-10-23T11:43:17.1164599Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T11:43:17.1164728Z ·  ┬ 2026-10-23T11:43:17.1164900Z · ╰── '_' is declared here 2026-10-23T11:43:17.1164971Z 556 │ [ 2026-10-23T11:43:17.1165029Z ╰──── 2026-10-23T11:43:17.1165137Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1165139Z 2026-10-23T11:43:17.1165413Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1165641Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-23T11:43:17.1165732Z 1154 │ assert.deepStrictEqual( 2026-10-23T11:43:17.1165935Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-23T11:43:17.1166073Z ·  ┬ 2026-10-23T11:43:17.1166246Z · ╰── '_' is declared here 2026-10-23T11:43:17.1166315Z 1156 │ [ 2026-10-23T11:43:17.1166370Z ╰──── 2026-10-23T11:43:17.1166479Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1166481Z 2026-10-23T11:43:17.1166965Z ⚠ 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-23T11:43:17.1167132Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-23T11:43:17.1167192Z 27 │ ) { 2026-10-23T11:43:17.1167402Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-23T11:43:17.1167549Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-23T11:43:17.1167684Z 30 │ │ if (predicate(available)) return available; 2026-10-23T11:43:17.1167795Z 31 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1167927Z 32 │ ╰─▶ } 2026-10-23T11:43:17.1168115Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-23T11:43:17.1168174Z ╰──── 2026-10-23T11:43:17.1168178Z 2026-10-23T11:43:17.1168489Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1168664Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-23T11:43:17.1168726Z 345 │ 2026-10-23T11:43:17.1168832Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-23T11:43:17.1168936Z ·  ────────────┬─────────── 2026-10-23T11:43:17.1169112Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-23T11:43:17.1169197Z 347 │ ProviderAdapterRegistryV2, 2026-10-23T11:43:17.1169249Z ╰──── 2026-10-23T11:43:17.1169367Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1169372Z 2026-10-23T11:43:17.1169635Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1169806Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:408:7] 2026-10-23T11:43:17.1169859Z 407 │ 2026-10-23T11:43:17.1169994Z 408 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-23T11:43:17.1170070Z ·  ──┬── 2026-10-23T11:43:17.1170202Z · ╰── 'layer' is declared here 2026-10-23T11:43:17.1170255Z ╰──── 2026-10-23T11:43:17.1170365Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1170368Z 2026-10-23T11:43:17.1170601Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.1170776Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-23T11:43:17.1170895Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-23T11:43:17.1171003Z 1996 │ createdAt: new Date().toISOString(), 2026-10-23T11:43:17.1171100Z ·  ─────┬──── 2026-10-23T11:43:17.1171252Z · ╰── Cannot call impure function 2026-10-23T11:43:17.1171360Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-23T11:43:17.1171420Z ╰──── 2026-10-23T11:43:17.1171709Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.1172021Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.1172027Z 2026-10-23T11:43:17.1172501Z ⚠ 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-23T11:43:17.1172678Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-23T11:43:17.1172788Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-23T11:43:17.1172998Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-23T11:43:17.1173107Z 567 │ │ const nextEvent = { 2026-10-23T11:43:17.1173277Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-23T11:43:17.1173424Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-23T11:43:17.1173520Z 570 │ │ threadId, 2026-10-23T11:43:17.1173633Z 571 │ │ providerInstanceId, 2026-10-23T11:43:17.1173734Z 572 │ │ occurredAt: now, 2026-10-23T11:43:17.1173892Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-23T11:43:17.1174028Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-23T11:43:17.1174150Z 575 │ │ const reader = yield* eventSink 2026-10-23T11:43:17.1174274Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-23T11:43:17.1174468Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-23T11:43:17.1174665Z 578 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1174838Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-23T11:43:17.1174976Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-23T11:43:17.1175099Z 581 │ │ if (Option.isNone(received)) { 2026-10-23T11:43:17.1175308Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-23T11:43:17.1175394Z 583 │ │ } 2026-10-23T11:43:17.1175566Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-23T11:43:17.1175723Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-23T11:43:17.1175864Z 586 │ │ afterSequence = received.value.sequence; 2026-10-23T11:43:17.1176040Z 587 │ ╰─▶ } 2026-10-23T11:43:17.1176109Z 588 │ }), 2026-10-23T11:43:17.1176164Z ╰──── 2026-10-23T11:43:17.1176166Z 2026-10-23T11:43:17.1176644Z ⚠ 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-23T11:43:17.1176827Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-23T11:43:17.1176908Z 2326 │ let settled = false; 2026-10-23T11:43:17.1177079Z 2327 │ ╭─▶ while (!settled) { 2026-10-23T11:43:17.1177248Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-23T11:43:17.1177389Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-23T11:43:17.1177476Z 2330 │ │ ); 2026-10-23T11:43:17.1177609Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-23T11:43:17.1177752Z 2332 │ ╰─▶ } 2026-10-23T11:43:17.1177879Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-23T11:43:17.1177937Z ╰──── 2026-10-23T11:43:17.1177940Z 2026-10-23T11:43:17.1178156Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-23T11:43:17.1178331Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-23T11:43:17.1178404Z 1782 │ assert.equal( 2026-10-23T11:43:17.1178556Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-23T11:43:17.1178675Z ·  ────────────────────────── 2026-10-23T11:43:17.1178757Z 1784 │ stored.attachments[0]?.id, 2026-10-23T11:43:17.1178817Z ╰──── 2026-10-23T11:43:17.1179001Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-23T11:43:17.1179004Z 2026-10-23T11:43:17.1179294Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1179435Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-23T11:43:17.1179494Z 913 │ 2026-10-23T11:43:17.1179750Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-23T11:43:17.1179877Z ·  ─────┬───── 2026-10-23T11:43:17.1180019Z · ╰── 'layerDaemon' is declared here 2026-10-23T11:43:17.1180117Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-23T11:43:17.1180174Z ╰──── 2026-10-23T11:43:17.1180285Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1180288Z 2026-10-23T11:43:17.1180473Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-23T11:43:17.1180614Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-23T11:43:17.1180747Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-23T11:43:17.1180847Z 194 │ const codes = new Array(count); 2026-10-23T11:43:17.1180972Z ·  ──────────────────────── 2026-10-23T11:43:17.1181085Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-23T11:43:17.1181142Z ╰──── 2026-10-23T11:43:17.1181577Z  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-23T11:43:17.1181579Z 2026-10-23T11:43:17.1181874Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1182023Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12322:7] 2026-10-23T11:43:17.1182090Z 12321 │ 2026-10-23T11:43:17.1182245Z 12322 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-23T11:43:17.1182342Z ·  ────────┬─────── 2026-10-23T11:43:17.1182497Z · ╰── 'layerUnavailable' is declared here 2026-10-23T11:43:17.1182570Z 12323 │ OrchestratorV2, 2026-10-23T11:43:17.1182627Z ╰──── 2026-10-23T11:43:17.1182740Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1182743Z 2026-10-23T11:43:17.1182950Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1183098Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-23T11:43:17.1183184Z 1314 │ queuedMessagesByThreadKey, 2026-10-23T11:43:17.1183252Z 1315 │ retryTick, 2026-10-23T11:43:17.1183327Z ·  ────┬──── 2026-10-23T11:43:17.1183484Z · ╰── Unnecessary dependency `retryTick` 2026-10-23T11:43:17.1183567Z 1316 │ restoreQueuedMessage, 2026-10-23T11:43:17.1183627Z ╰──── 2026-10-23T11:43:17.1183932Z  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-23T11:43:17.1184255Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1184258Z 2026-10-23T11:43:17.1184467Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1184589Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-23T11:43:17.1184669Z 28 │ getPendingThreadOrder(); 2026-10-23T11:43:17.1184755Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-23T11:43:17.1184946Z ·  ────┬──── ───────┬────── 2026-10-23T11:43:17.1185188Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T11:43:17.1185336Z · ╰── Unnecessary dependency `nowMinute` 2026-10-23T11:43:17.1185402Z 30 │ return pending; 2026-10-23T11:43:17.1185461Z ╰──── 2026-10-23T11:43:17.1185763Z  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-23T11:43:17.1186122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1186125Z 2026-10-23T11:43:17.1186398Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1186539Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-23T11:43:17.1186656Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-23T11:43:17.1186729Z 84 │ useEffect(() => { 2026-10-23T11:43:17.1186805Z ·  ────┬──── 2026-10-23T11:43:17.1186947Z · ╰── This is the containing effect 2026-10-23T11:43:17.1187038Z 85 │ if (!actionState.isRunning) return; 2026-10-23T11:43:17.1187111Z 86 │ setNowMs(Date.now()); 2026-10-23T11:43:17.1187191Z ·  ────┬─── 2026-10-23T11:43:17.1187369Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1187507Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-23T11:43:17.1187570Z ╰──── 2026-10-23T11:43:17.1188194Z  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-23T11:43:17.1188524Z  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-23T11:43:17.1188527Z 2026-10-23T11:43:17.1188738Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1188882Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:542:25] 2026-10-23T11:43:17.1189026Z 541 │ // range) the boundary string is identical and the chain would die. 2026-10-23T11:43:17.1189123Z 542 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-23T11:43:17.1189239Z ·  ───────┬────── 2026-10-23T11:43:17.1189413Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-23T11:43:17.1189559Z 543 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-23T11:43:17.1189611Z ╰──── 2026-10-23T11:43:17.1189912Z  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-23T11:43:17.1190229Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1190232Z 2026-10-23T11:43:17.1190464Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.1190638Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:53] 2026-10-23T11:43:17.1190726Z 532 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-23T11:43:17.1190893Z 533 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-23T11:43:17.1191025Z ·  ─────┬──── 2026-10-23T11:43:17.1191204Z · ╰── Cannot call impure function 2026-10-23T11:43:17.1191285Z 534 │ const id = setTimeout(() => { 2026-10-23T11:43:17.1191343Z ╰──── 2026-10-23T11:43:17.1191645Z  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-23T11:43:17.1191959Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.1191962Z 2026-10-23T11:43:17.1192172Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1192306Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-23T11:43:17.1192367Z 81 │ }, 2026-10-23T11:43:17.1192438Z 82 │ [draftKey], 2026-10-23T11:43:17.1192518Z ·  ────┬─── 2026-10-23T11:43:17.1192663Z · ╰── Unnecessary dependency `draftKey` 2026-10-23T11:43:17.1192722Z 83 │ ); 2026-10-23T11:43:17.1192778Z ╰──── 2026-10-23T11:43:17.1193086Z  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-23T11:43:17.1193408Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1193410Z 2026-10-23T11:43:17.1193645Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T11:43:17.1193801Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-23T11:43:17.1193873Z 20 │ [instanceId]: { 2026-10-23T11:43:17.1193955Z 21 │ ...(state[instanceId] ?? {}), 2026-10-23T11:43:17.1194066Z ·  ──────────────────────────── 2026-10-23T11:43:17.1194138Z 22 │ [model]: options, 2026-10-23T11:43:17.1194194Z ╰──── 2026-10-23T11:43:17.1194473Z  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-23T11:43:17.1194478Z 2026-10-23T11:43:17.1194749Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1194907Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-23T11:43:17.1194969Z 61 │ }, []); 2026-10-23T11:43:17.1195035Z 62 │ useEffect(() => { 2026-10-23T11:43:17.1195112Z ·  ────┬──── 2026-10-23T11:43:17.1195250Z · ╰── This is the containing effect 2026-10-23T11:43:17.1195405Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-23T11:43:17.1195602Z ·  ───────┬────── 2026-10-23T11:43:17.1196040Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1196130Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-23T11:43:17.1196184Z ╰──── 2026-10-23T11:43:17.1196800Z  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-23T11:43:17.1197128Z  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-23T11:43:17.1197134Z 2026-10-23T11:43:17.1197410Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-23T11:43:17.1197567Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-23T11:43:17.1197731Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-23T11:43:17.1197819Z 12 │ this.onmessage = listener; 2026-10-23T11:43:17.1197902Z ·  ───────── 2026-10-23T11:43:17.1197968Z 13 │ } 2026-10-23T11:43:17.1198023Z ╰──── 2026-10-23T11:43:17.1198354Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-23T11:43:17.1198357Z 2026-10-23T11:43:17.1198579Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-23T11:43:17.1198730Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-23T11:43:17.1198801Z 15 │ constructor() { 2026-10-23T11:43:17.1198872Z 16 │ source = this; 2026-10-23T11:43:17.1198948Z ·  ────── 2026-10-23T11:43:17.1199013Z 17 │ } 2026-10-23T11:43:17.1199069Z ╰──── 2026-10-23T11:43:17.1199353Z  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-23T11:43:17.1199355Z 2026-10-23T11:43:17.1199582Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T11:43:17.1199731Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-23T11:43:17.1199885Z 1021 │ instanceId, 2026-10-23T11:43:17.1200075Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-23T11:43:17.1200283Z ·  ────────────────────────────────────────────────── 2026-10-23T11:43:17.1200353Z 1023 │ ]), 2026-10-23T11:43:17.1200409Z ╰──── 2026-10-23T11:43:17.1200685Z  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-23T11:43:17.1200687Z 2026-10-23T11:43:17.1200842Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1201003Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-23T11:43:17.1201068Z 493 │ > 2026-10-23T11:43:17.1201152Z 494 │ {props.children(close)} 2026-10-23T11:43:17.1201253Z ·  ──┬── 2026-10-23T11:43:17.1201444Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.1201528Z 495 │ 2026-10-23T11:43:17.1201588Z ╰──── 2026-10-23T11:43:17.1202079Z  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-23T11:43:17.1202374Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1202378Z 2026-10-23T11:43:17.1202587Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.1202746Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-23T11:43:17.1202845Z 35 │ 2026-10-23T11:43:17.1204410Z ·  ┬ 2026-10-23T11:43:17.1204551Z · ╰── '_' is declared here 2026-10-23T11:43:17.1204661Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-23T11:43:17.1204714Z ╰──── 2026-10-23T11:43:17.1204822Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1204825Z 2026-10-23T11:43:17.1205015Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1205162Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-23T11:43:17.1205221Z 133 │ ); 2026-10-23T11:43:17.1205331Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-23T11:43:17.1205441Z ·  ┬ 2026-10-23T11:43:17.1205695Z · ╰── '_' is declared here 2026-10-23T11:43:17.1205849Z 135 │ Effect.succeed( 2026-10-23T11:43:17.1205941Z ╰──── 2026-10-23T11:43:17.1206064Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1206066Z 2026-10-23T11:43:17.1206255Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1206398Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-23T11:43:17.1206456Z 177 │ }); 2026-10-23T11:43:17.1206571Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-23T11:43:17.1206672Z ·  ┬ 2026-10-23T11:43:17.1206818Z · ╰── '_' is declared here 2026-10-23T11:43:17.1206929Z 179 │ switch (options.continuation ?? "queued") { 2026-10-23T11:43:17.1206988Z ╰──── 2026-10-23T11:43:17.1207094Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1207097Z 2026-10-23T11:43:17.1207286Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1207431Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-23T11:43:17.1207493Z 202 │ ); 2026-10-23T11:43:17.1207597Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-23T11:43:17.1207694Z ·  ┬ 2026-10-23T11:43:17.1207834Z · ╰── '_' is declared here 2026-10-23T11:43:17.1207926Z 204 │ options.removeWorktreeFails 2026-10-23T11:43:17.1207983Z ╰──── 2026-10-23T11:43:17.1208094Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1208099Z 2026-10-23T11:43:17.1208284Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1208432Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-23T11:43:17.1208495Z 207 │ ); 2026-10-23T11:43:17.1208604Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-23T11:43:17.1208705Z ·  ┬ 2026-10-23T11:43:17.1208856Z · ╰── '_' is declared here 2026-10-23T11:43:17.1208951Z 209 │ options.deleteLocalBranchFails 2026-10-23T11:43:17.1209009Z ╰──── 2026-10-23T11:43:17.1209114Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1209116Z 2026-10-23T11:43:17.1209310Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1209457Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-23T11:43:17.1209518Z 212 │ ); 2026-10-23T11:43:17.1209634Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-23T11:43:17.1209746Z ·  ┬ 2026-10-23T11:43:17.1209903Z · ╰── '_' is declared here 2026-10-23T11:43:17.1209994Z 214 │ options.fetchWorktreeBaseFails 2026-10-23T11:43:17.1210051Z ╰──── 2026-10-23T11:43:17.1210159Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1210162Z 2026-10-23T11:43:17.1210348Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1210552Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-23T11:43:17.1210679Z 253 │ ); 2026-10-23T11:43:17.1210805Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-23T11:43:17.1210903Z ·  ┬ 2026-10-23T11:43:17.1211049Z · ╰── '_' is declared here 2026-10-23T11:43:17.1211121Z 255 │ Effect.succeed({ 2026-10-23T11:43:17.1211184Z ╰──── 2026-10-23T11:43:17.1211295Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1211297Z 2026-10-23T11:43:17.1211493Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1211631Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-23T11:43:17.1211694Z 263 │ ); 2026-10-23T11:43:17.1211861Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-23T11:43:17.1211965Z ·  ┬ 2026-10-23T11:43:17.1212105Z · ╰── '_' is declared here 2026-10-23T11:43:17.1212272Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-23T11:43:17.1212338Z ╰──── 2026-10-23T11:43:17.1212453Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1212455Z 2026-10-23T11:43:17.1212760Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1212891Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-23T11:43:17.1212955Z 217 │ 2026-10-23T11:43:17.1213115Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-23T11:43:17.1213216Z ·  ──────────┬────────── 2026-10-23T11:43:17.1213381Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-23T11:43:17.1213580Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-23T11:43:17.1213639Z ╰──── 2026-10-23T11:43:17.1213751Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1213754Z 2026-10-23T11:43:17.1214069Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1214204Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-23T11:43:17.1214261Z 220 │ 2026-10-23T11:43:17.1214411Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-23T11:43:17.1214523Z ·  ──────────────┬────────────── 2026-10-23T11:43:17.1214714Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-23T11:43:17.1214887Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-23T11:43:17.1214944Z ╰──── 2026-10-23T11:43:17.1215052Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1215054Z 2026-10-23T11:43:17.1215238Z ⚠ react(purity): Cannot call impure function during render 2026-10-23T11:43:17.1215397Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-23T11:43:17.1215516Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-23T11:43:17.1215764Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-23T11:43:17.1216009Z ·  ─────┬──── 2026-10-23T11:43:17.1216192Z · ╰── Cannot call impure function 2026-10-23T11:43:17.1216251Z 179 │ } 2026-10-23T11:43:17.1216303Z ╰──── 2026-10-23T11:43:17.1216595Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-23T11:43:17.1216899Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-23T11:43:17.1216903Z 2026-10-23T11:43:17.1217381Z ⚠ 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-23T11:43:17.1217516Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-23T11:43:17.1217614Z 128 │ const secret = "acp-summary-secret"; 2026-10-23T11:43:17.1217742Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-23T11:43:17.1217874Z ·  ────────────────────────── 2026-10-23T11:43:17.1217949Z 130 │ Schema.Struct({ 2026-10-23T11:43:17.1218002Z ╰──── 2026-10-23T11:43:17.1218005Z 2026-10-23T11:43:17.1218226Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-23T11:43:17.1218336Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-23T11:43:17.1218487Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-23T11:43:17.1218609Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-23T11:43:17.1218707Z ·  ──────┬────── 2026-10-23T11:43:17.1218864Z · ╰── 'HookForwarder' is imported here 2026-10-23T11:43:17.1218974Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-23T11:43:17.1219026Z ╰──── 2026-10-23T11:43:17.1219132Z  help: Consider removing this import. 2026-10-23T11:43:17.1219135Z 2026-10-23T11:43:17.1219478Z ⚠ 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-23T11:43:17.1219605Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-23T11:43:17.1219781Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-23T11:43:17.1219911Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-23T11:43:17.1219999Z ·  ───────── 2026-10-23T11:43:17.1220067Z 19 │ expect( 2026-10-23T11:43:17.1220123Z ╰──── 2026-10-23T11:43:17.1220126Z 2026-10-23T11:43:17.1220461Z ⚠ 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-23T11:43:17.1220586Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-23T11:43:17.1220650Z 19 │ expect( 2026-10-23T11:43:17.1220825Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-23T11:43:17.1220902Z ·  ───────── 2026-10-23T11:43:17.1221038Z 21 │ ).toBe(true); 2026-10-23T11:43:17.1221176Z ╰──── 2026-10-23T11:43:17.1221180Z 2026-10-23T11:43:17.1221676Z ⚠ 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-23T11:43:17.1221816Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-23T11:43:17.1221875Z 499 │ 2026-10-23T11:43:17.1221995Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-23T11:43:17.1222126Z ·  ────────────────────────── 2026-10-23T11:43:17.1222239Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-23T11:43:17.1222303Z ╰──── 2026-10-23T11:43:17.1222306Z 2026-10-23T11:43:17.1222600Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1222756Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-23T11:43:17.1222815Z 60 │ ) { 2026-10-23T11:43:17.1222988Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-23T11:43:17.1223077Z ·  ──────┬────── 2026-10-23T11:43:17.1223227Z · ╰── 'useDragRegion' is declared here 2026-10-23T11:43:17.1223324Z 62 │ const isInline = props.mode === "inline"; 2026-10-23T11:43:17.1223378Z ╰──── 2026-10-23T11:43:17.1223490Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1223493Z 2026-10-23T11:43:17.1223878Z ⚠ 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-23T11:43:17.1224006Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-23T11:43:17.1224162Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-23T11:43:17.1224347Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-23T11:43:17.1224464Z ·  ────────────────────────── 2026-10-23T11:43:17.1224620Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-23T11:43:17.1224672Z ╰──── 2026-10-23T11:43:17.1224675Z 2026-10-23T11:43:17.1224829Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1224994Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-23T11:43:17.1225243Z 151 │ 2026-10-23T11:43:17.1225364Z 152 │ {props.children(open)} 2026-10-23T11:43:17.1225466Z ·  ──┬─ 2026-10-23T11:43:17.1225646Z · ╰── Cannot access ref value during render 2026-10-23T11:43:17.1225720Z 153 │ 2026-10-23T11:43:17.1225774Z ╰──── 2026-10-23T11:43:17.1227507Z  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-23T11:43:17.1227814Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1227819Z 2026-10-23T11:43:17.1228029Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-23T11:43:17.1228185Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-23T11:43:17.1228269Z 139 │ if (action.id !== undefined) { 2026-10-23T11:43:17.1228356Z 140 │ props.onPressAction?.({ 2026-10-23T11:43:17.1228439Z ·  ──┬── 2026-10-23T11:43:17.1228582Z · ╰── Missing dependency `props` 2026-10-23T11:43:17.1228676Z 141 │ nativeEvent: { event: action.id }, 2026-10-23T11:43:17.1228833Z 142 │ } as Parameters>[0]); 2026-10-23T11:43:17.1228897Z 143 │ } 2026-10-23T11:43:17.1228959Z 144 │ }, 2026-10-23T11:43:17.1229049Z 145 │ [close, props.onPressAction], 2026-10-23T11:43:17.1229161Z ·  ─────────┬───────── 2026-10-23T11:43:17.1229389Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-23T11:43:17.1229449Z 146 │ ); 2026-10-23T11:43:17.1229501Z ╰──── 2026-10-23T11:43:17.1229994Z  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-23T11:43:17.1230316Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1230319Z 2026-10-23T11:43:17.1230542Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-23T11:43:17.1230693Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-23T11:43:17.1230820Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-23T11:43:17.1230945Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-23T11:43:17.1231070Z ·  ─────── 2026-10-23T11:43:17.1231199Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-23T11:43:17.1231255Z ╰──── 2026-10-23T11:43:17.1231541Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-23T11:43:17.1231543Z 2026-10-23T11:43:17.1231919Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-23T11:43:17.1232100Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-23T11:43:17.1232155Z 35 │ 2026-10-23T11:43:17.1232297Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-23T11:43:17.1232382Z ·  ─────┬──── 2026-10-23T11:43:17.1232530Z · ╰── 'claudeCaps' is declared here 2026-10-23T11:43:17.1232605Z 37 │ optionDescriptors: [ 2026-10-23T11:43:17.1232675Z ╰──── 2026-10-23T11:43:17.1232790Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1232792Z 2026-10-23T11:43:17.1233265Z ⚠ 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-23T11:43:17.1233409Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-23T11:43:17.1233588Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-23T11:43:17.1233800Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T11:43:17.1233930Z ·  ─────────────────── 2026-10-23T11:43:17.1234057Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T11:43:17.1234117Z ╰──── 2026-10-23T11:43:17.1234120Z 2026-10-23T11:43:17.1234583Z ⚠ 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-23T11:43:17.1234732Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-23T11:43:17.1234935Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-23T11:43:17.1235065Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-23T11:43:17.1235204Z ·  ─────────────────── 2026-10-23T11:43:17.1235339Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-23T11:43:17.1235402Z ╰──── 2026-10-23T11:43:17.1235404Z 2026-10-23T11:43:17.1235577Z ⚠ react(refs): Cannot access refs during render 2026-10-23T11:43:17.1235700Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-23T11:43:17.1235992Z 53 │ const child = children as ReactElement>; 2026-10-23T11:43:17.1236204Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-23T11:43:17.1236331Z 55 │ │ onTouchStart: (event) => { 2026-10-23T11:43:17.1236513Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-23T11:43:17.1236694Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-23T11:43:17.1236836Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-23T11:43:17.1237019Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-23T11:43:17.1237141Z 60 │ │ pendingPress.current = null; 2026-10-23T11:43:17.1237273Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-23T11:43:17.1237442Z 62 │ │ }, 2026-10-23T11:43:17.1237626Z 63 │ │ onPress: (event) => { 2026-10-23T11:43:17.1237809Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-23T11:43:17.1237976Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-23T11:43:17.1238154Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-23T11:43:17.1238355Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-23T11:43:17.1238450Z 68 │ │ return; 2026-10-23T11:43:17.1238529Z 69 │ │ } 2026-10-23T11:43:17.1238680Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-23T11:43:17.1238867Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-23T11:43:17.1239046Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-23T11:43:17.1239149Z 73 │ │ event.persist(); 2026-10-23T11:43:17.1239320Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-23T11:43:17.1239416Z 75 │ │ return; 2026-10-23T11:43:17.1239498Z 76 │ │ } 2026-10-23T11:43:17.1239615Z 77 │ │ child.props.onPress?.(event); 2026-10-23T11:43:17.1239697Z 78 │ │ }, 2026-10-23T11:43:17.1239835Z 79 │ ├─▶ }); 2026-10-23T11:43:17.1240097Z · ╰──── Passing a ref to a function may read its value during render 2026-10-23T11:43:17.1240206Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-23T11:43:17.1240267Z ╰──── 2026-10-23T11:43:17.1240750Z  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-23T11:43:17.1241047Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-23T11:43:17.1241050Z 2026-10-23T11:43:17.1241537Z ⚠ 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-23T11:43:17.1241702Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-23T11:43:17.1241822Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-23T11:43:17.1242046Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-23T11:43:17.1242191Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-23T11:43:17.1242300Z 137 │ │ if (predicate(lastState)) { 2026-10-23T11:43:17.1242403Z 138 │ │ return lastState; 2026-10-23T11:43:17.1242488Z 139 │ │ } 2026-10-23T11:43:17.1242601Z 140 │ │ yield* Effect.yieldNow; 2026-10-23T11:43:17.1242785Z 141 │ ╰─▶ } 2026-10-23T11:43:17.1242906Z 142 │ return yield* Effect.die( 2026-10-23T11:43:17.1242965Z ╰──── 2026-10-23T11:43:17.1242967Z 2026-10-23T11:43:17.1243363Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1243508Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-23T11:43:17.1243620Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-23T11:43:17.1243691Z 67 │ useEffect(() => { 2026-10-23T11:43:17.1243771Z ·  ────┬──── 2026-10-23T11:43:17.1243909Z · ╰── This is the containing effect 2026-10-23T11:43:17.1243980Z 68 │ setUri(null); 2026-10-23T11:43:17.1244064Z ·  ───┬── 2026-10-23T11:43:17.1244241Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1244305Z 69 │ setError(null); 2026-10-23T11:43:17.1244364Z ╰──── 2026-10-23T11:43:17.1244978Z  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-23T11:43:17.1245311Z  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-23T11:43:17.1245313Z 2026-10-23T11:43:17.1245528Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1245670Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-23T11:43:17.1245732Z 90 │ }; 2026-10-23T11:43:17.1245814Z 91 │ }, [attachmentId, fileUri]); 2026-10-23T11:43:17.1246007Z ·  ──────┬───── ───┬─── 2026-10-23T11:43:17.1246204Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-23T11:43:17.1249782Z · ╰── Unnecessary dependency `attachmentId` 2026-10-23T11:43:17.1249948Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-23T11:43:17.1250006Z ╰──── 2026-10-23T11:43:17.1250308Z  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-23T11:43:17.1250639Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1250646Z 2026-10-23T11:43:17.1250872Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-23T11:43:17.1251023Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-23T11:43:17.1251095Z 212 │ useEffect(() => { 2026-10-23T11:43:17.1251212Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-23T11:43:17.1251320Z ·  ──┬── 2026-10-23T11:43:17.1251479Z · ╰── Missing dependency `props` 2026-10-23T11:43:17.1251594Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-23T11:43:17.1251922Z ·  ──────────┬───────── 2026-10-23T11:43:17.1252243Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-23T11:43:17.1252337Z 215 │ const { source } = props; 2026-10-23T11:43:17.1252407Z ╰──── 2026-10-23T11:43:17.1252844Z  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-23T11:43:17.1253182Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1253185Z 2026-10-23T11:43:17.1253475Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1253631Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-23T11:43:17.1253701Z 57 │ 2026-10-23T11:43:17.1253778Z 58 │ useEffect(() => { 2026-10-23T11:43:17.1253871Z ·  ────┬──── 2026-10-23T11:43:17.1254013Z · ╰── This is the containing effect 2026-10-23T11:43:17.1254127Z 59 │ const controller = new AbortController(); 2026-10-23T11:43:17.1254203Z 60 │ setLoadState("pending"); 2026-10-23T11:43:17.1254298Z ·  ──────┬───── 2026-10-23T11:43:17.1254490Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1254665Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-23T11:43:17.1254727Z ╰──── 2026-10-23T11:43:17.1255350Z  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-23T11:43:17.1255686Z  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-23T11:43:17.1255689Z 2026-10-23T11:43:17.1255975Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-23T11:43:17.1256131Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-23T11:43:17.1256222Z 70 │ return () => controller.abort(); 2026-10-23T11:43:17.1256335Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-23T11:43:17.1256528Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-23T11:43:17.1256780Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-23T11:43:17.1256992Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-23T11:43:17.1257144Z · ╰── Unnecessary dependency `player_0` 2026-10-23T11:43:17.1257212Z 72 │ 2026-10-23T11:43:17.1257278Z ╰──── 2026-10-23T11:43:17.1257666Z  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-23T11:43:17.1258057Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-23T11:43:17.1258061Z 2026-10-23T11:43:17.1258337Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-23T11:43:17.1258489Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:158:5] 2026-10-23T11:43:17.1258693Z 153 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-23T11:43:17.1258772Z 154 │ useLayoutEffect(() => { 2026-10-23T11:43:17.1258865Z ·  ───────┬─────── 2026-10-23T11:43:17.1259015Z · ╰── This is the containing effect 2026-10-23T11:43:17.1259123Z 155 │ if (faviconRequest === null) return; 2026-10-23T11:43:17.1259188Z 156 │ 2026-10-23T11:43:17.1259334Z 157 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-23T11:43:17.1259447Z 158 │ setActiveFaviconRequest(faviconRequest); 2026-10-23T11:43:17.1259552Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1259730Z · ╰── Avoid calling setState() directly within an effect 2026-10-23T11:43:17.1259812Z 159 │ return endRequest; 2026-10-23T11:43:17.1259873Z ╰──── 2026-10-23T11:43:17.1260481Z  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-23T11:43:17.1260809Z  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-23T11:43:17.1260821Z 2026-10-23T11:43:17.1261018Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-23T11:43:17.1261173Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-23T11:43:17.1261294Z 266 │ {record.elements?.map((element, index) => ( 2026-10-23T11:43:17.1261466Z 267 │ 2026-10-23T11:43:17.1261631Z ·  ─────────────────────────────────────────────────────── 2026-10-23T11:43:17.1261715Z 268 │ approval.requestId, 2026-10-23T11:43:17.1264025Z 987 │ ╰─▶ ); 2026-10-23T11:43:17.1264171Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-23T11:43:17.1264228Z ╰──── 2026-10-23T11:43:17.1264312Z  help: Switch to `Set` 2026-10-23T11:43:17.1264315Z 2026-10-23T11:43:17.1264552Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-23T11:43:17.1264688Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-23T11:43:17.1264876Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-23T11:43:17.1264982Z 35 │ instanceId === configured ? true : false, 2026-10-23T11:43:17.1265104Z ·  ──────────────────────────────────────── 2026-10-23T11:43:17.1265166Z 36 │ ); 2026-10-23T11:43:17.1265225Z ╰──── 2026-10-23T11:43:17.1265328Z  help: Remove this ternary operator 2026-10-23T11:43:17.1265331Z 2026-10-23T11:43:17.1265713Z ⚠ 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-23T11:43:17.1265846Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-23T11:43:17.1265960Z 145 │ name, 2026-10-23T11:43:17.1266106Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-23T11:43:17.1266221Z ·  ────────────────────────── 2026-10-23T11:43:17.1266349Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-23T11:43:17.1266403Z ╰──── 2026-10-23T11:43:17.1266406Z 2026-10-23T11:43:17.1266602Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-23T11:43:17.1266710Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-23T11:43:17.1266779Z 457 │ ): Array { 2026-10-23T11:43:17.1266895Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-23T11:43:17.1267086Z ·  ┬ 2026-10-23T11:43:17.1267293Z · ╰── '_' is declared here 2026-10-23T11:43:17.1267372Z 459 │ for (const b of data) { 2026-10-23T11:43:17.1267429Z ╰──── 2026-10-23T11:43:17.1267547Z  help: Consider removing this parameter. 2026-10-23T11:43:17.1267551Z 2026-10-23T11:43:17.1268027Z ⚠ 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-23T11:43:17.1268153Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-23T11:43:17.1268234Z 138 │ Effect.gen(function* () { 2026-10-23T11:43:17.1268454Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-23T11:43:17.1268587Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-23T11:43:17.1268923Z 141 │ │ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock 2026-10-23T11:43:17.1269119Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-23T11:43:17.1269273Z 143 │ ╰─▶ } 2026-10-23T11:43:17.1269368Z 144 │ return yield* Fiber.join(fiber); 2026-10-23T11:43:17.1269420Z ╰──── 2026-10-23T11:43:17.1269422Z 2026-10-23T11:43:17.1269661Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-23T11:43:17.1269794Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-23T11:43:17.1269855Z 11 │ 2026-10-23T11:43:17.1269952Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-23T11:43:17.1270071Z ·  ────────────┬──────────── 2026-10-23T11:43:17.1270256Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-23T11:43:17.1270334Z 13 │ readonly thread: { 2026-10-23T11:43:17.1270389Z ╰──── 2026-10-23T11:43:17.1270505Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1270508Z 2026-10-23T11:43:17.1270743Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-23T11:43:17.1270874Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-23T11:43:17.1270950Z 730 │ ); 2026-10-23T11:43:17.1271126Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-23T11:43:17.1271228Z ·  ────── 2026-10-23T11:43:17.1271355Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-23T11:43:17.1271411Z ╰──── 2026-10-23T11:43:17.1271582Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-23T11:43:17.1271585Z 2026-10-23T11:43:17.1271816Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-23T11:43:17.1271942Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-23T11:43:17.1272046Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-23T11:43:17.1272235Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-23T11:43:17.1272450Z ·  ────────────────────────────────────────────────────────────── 2026-10-23T11:43:17.1272513Z 347 │ }; 2026-10-23T11:43:17.1272570Z ╰──── 2026-10-23T11:43:17.1272836Z  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-23T11:43:17.1272839Z 2026-10-23T11:43:17.1273065Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-23T11:43:17.1273194Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-23T11:43:17.1273263Z 447 │ const favorites = 2026-10-23T11:43:17.1273372Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-23T11:43:17.1273476Z ·  ───┬── 2026-10-23T11:43:17.1273623Z · ╰── For this reduce 2026-10-23T11:43:17.1273717Z 449 │ const exists = current.some( 2026-10-23T11:43:17.1273889Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-23T11:43:17.1273952Z 451 │ ); 2026-10-23T11:43:17.1274031Z 452 │ return change.favorite 2026-10-23T11:43:17.1274099Z 453 │ ? exists 2026-10-23T11:43:17.1274164Z 454 │ ? current 2026-10-23T11:43:17.1274307Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-23T11:43:17.1274396Z ·  ─────┬──── 2026-10-23T11:43:17.1274525Z · ╰── From this spread 2026-10-23T11:43:17.1274596Z 456 │ : current.filter( 2026-10-23T11:43:17.1274663Z ╰──── 2026-10-23T11:43:17.1274882Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-23T11:43:17.1275047Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T11:43:17.1275049Z 2026-10-23T11:43:17.1275236Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-23T11:43:17.1275363Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-23T11:43:17.1275430Z 464 │ null; 2026-10-23T11:43:17.1275551Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-23T11:43:17.1275642Z ·  ──────────┬───────── 2026-10-23T11:43:17.1275777Z · ╰── From this accumulator 2026-10-23T11:43:17.1275883Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-23T11:43:17.1276055Z ·  ─┬─ 2026-10-23T11:43:17.1276206Z · ╰── For this loop 2026-10-23T11:43:17.1276345Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-23T11:43:17.1276420Z 468 │ hiddenModels: [], 2026-10-23T11:43:17.1276495Z 469 │ modelOrder: [], 2026-10-23T11:43:17.1276553Z 470 │ }; 2026-10-23T11:43:17.1276737Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-23T11:43:17.1276850Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-23T11:43:17.1276930Z 473 │ nextModelPreferences = { 2026-10-23T11:43:17.1277009Z 474 │ ...nextModelPreferences, 2026-10-23T11:43:17.1277113Z ·  ───────────┬─────────── 2026-10-23T11:43:17.1277243Z · ╰── From this spread 2026-10-23T11:43:17.1277367Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-23T11:43:17.1277421Z ╰──── 2026-10-23T11:43:17.1277577Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-23T11:43:17.1277740Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-23T11:43:17.1277743Z 2026-10-23T11:43:17.1277977Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-23T11:43:17.1278145Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-23T11:43:17.1278204Z 1397 │ 2026-10-23T11:43:17.1278298Z 1398 │ function assertUserMessagesExclude( 2026-10-23T11:43:17.1278413Z ·  ────────────┬──────────── 2026-10-23T11:43:17.1278594Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-23T11:43:17.1278711Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-23T11:43:17.1278770Z ╰──── 2026-10-23T11:43:17.1278879Z  help: Consider removing this declaration. 2026-10-23T11:43:17.1278882Z 2026-10-23T11:43:17.1279178Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-23T11:43:17.1279339Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-23T11:43:17.1279404Z 162 │ keys, 2026-10-23T11:43:17.1279480Z 163 │ overridingProjects = [], 2026-10-23T11:43:17.1279568Z ·  ── 2026-10-23T11:43:17.1279635Z 164 │ onClearOverrides, 2026-10-23T11:43:17.1279693Z ╰──── 2026-10-23T11:43:17.1280034Z  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-23T11:43:17.1280040Z 2026-10-23T11:43:17.1280262Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-23T11:43:17.1280429Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-23T11:43:17.1280512Z 3 │ AuthProvidersManageScope, 2026-10-23T11:43:17.1280593Z 4 │ type AuthSessionState, 2026-10-23T11:43:17.1280690Z ·  ────────┬─────── 2026-10-23T11:43:17.1280852Z · ╰── 'AuthSessionState' is imported here 2026-10-23T11:43:17.1280936Z 5 │ type EnvironmentId, 2026-10-23T11:43:17.1281003Z ╰──── 2026-10-23T11:43:17.1281191Z  help: Consider removing this import. 2026-10-23T11:43:17.1281485Z 2026-10-23T11:43:17.1281569Z Found 0 errors and 362 warnings in 5395 files (7.3s, 8 threads) 2026-10-23T11:43:17.1927109Z Post job cleanup. 2026-10-23T11:43:17.2668559Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-23T11:43:17.2752949Z Post job cleanup. 2026-10-23T11:43:17.2771383Z ##[start-action display=Cache full pnpm store;id=__937a1491-dc03-4a61-b3ff-debcc670b076.__actions_cache] 2026-10-23T11:43:17.3183621Z Post job cleanup. 2026-10-23T11:43:17.3923108Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-2baa264059789b1dde4bbc8fdc5b8342f31f2fc8e6176e5c5e486efdd242b36c, not saving cache. 2026-10-23T11:43:17.3965670Z ##[end-action id=__937a1491-dc03-4a61-b3ff-debcc670b076.__actions_cache;outcome=success;conclusion=success;duration_ms=119] 2026-10-23T11:43:17.3967523Z ##[start-action display=Cache Vite+;id=__937a1491-dc03-4a61-b3ff-debcc670b076.vp_cache] 2026-10-23T11:43:17.3993551Z Post job cleanup. 2026-10-23T11:43:17.4764455Z 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-23T11:43:17.4803799Z ##[end-action id=__937a1491-dc03-4a61-b3ff-debcc670b076.vp_cache;outcome=success;conclusion=success;duration_ms=83] 2026-10-23T11:43:17.4872839Z Post job cleanup. 2026-10-23T11:43:17.5362394Z [command]/usr/local/bin/git version 2026-10-23T11:43:17.5402911Z git version 2.55.0 2026-10-23T11:43:17.5423979Z Temporarily overriding HOME='/home/runner/_work/_temp/05b92162-ef0d-4b4c-bafe-0dac9dddcbd2' before making global git config changes 2026-10-23T11:43:17.5424190Z Adding repository directory to the temporary git global config as a safe directory 2026-10-23T11:43:17.5427705Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-23T11:43:17.5457394Z Removing SSH command configuration 2026-10-23T11:43:17.5461210Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-23T11:43:17.5490929Z [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-23T11:43:17.5649688Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-23T11:43:17.5680292Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-23T11:43:17.5723509Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-23T11:43:17.5749290Z ##[group]Run '/job_completed.sh' 2026-10-23T11:43:17.5761226Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-23T11:43:17.5761305Z env: 2026-10-23T11:43:17.5761405Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 187 2026-10-23T11:43:17.5761497Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 418 2026-10-23T11:43:17.5761586Z BLACKSMITH_CHECK_RUN_ID: 120394977672 2026-10-23T11:43:17.5761674Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-23T11:43:17.5761787Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-23T11:43:17.5761868Z ##[endgroup] 2026-10-23T11:43:17.5859932Z Docker container cache not activated, skipping hash computation. 2026-10-23T11:43:17.6160132Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-23T11:43:17.6211343Z Cleaning up orphan processes