2026-10-24T10:40:54.5180584Z Current runner version: '2.338.1' 2026-10-24T10:40:54.5184039Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-vhnbrejutfokrj4z' 2026-10-24T10:40:54.5184773Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T10:40:54.5185466Z Machine name: 'ip-172-31-73-130' 2026-10-24T10:40:54.5187136Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T10:40:54.5188436Z Contents: read 2026-10-24T10:40:54.5188864Z Metadata: read 2026-10-24T10:40:54.5189239Z ##[endgroup] 2026-10-24T10:40:54.5190625Z Secret source: Actions 2026-10-24T10:40:54.5191273Z Cache mode: write 2026-10-24T10:40:54.5191791Z Prepare workflow directory 2026-10-24T10:40:54.5385593Z Prepare all required actions 2026-10-24T10:40:54.5414103Z Getting action download info 2026-10-24T10:40:54.6458749Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T10:40:54.6849154Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T10:40:54.8073883Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T10:40:54.8112924Z Complete job name: Lint 2026-10-24T10:40:54.8521077Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T10:40:54.8589355Z ##[group]Run '/setup.sh' 2026-10-24T10:40:54.8604223Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T10:40:54.8604702Z env: 2026-10-24T10:40:54.8604924Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:40:54.8605213Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:40:54.8605491Z BLACKSMITH_CHECK_RUN_ID: 120851488754 2026-10-24T10:40:54.8605770Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T10:40:54.8606042Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T10:40:54.8606301Z ##[endgroup] 2026-10-24T10:40:54.8847425Z Logging daemon started (blacksmithd for logs) 2026-10-24T10:40:54.8958190Z Results daemon started (blacksmithd for results) 2026-10-24T10:40:54.9106721Z Background adoption and SSH setup started (PID: 3170) 2026-10-24T10:40:54.9106983Z 2026-10-24T10:40:54.9107097Z ---------------------------------------- 2026-10-24T10:40:54.9107551Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40086867681/jobs/120851488754 2026-10-24T10:40:54.9107971Z SSH Access (using your GitHub SSH key): 2026-10-24T10:40:54.9108401Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-vhnbrejutfokrj4z.vm.blacksmith.sh 2026-10-24T10:40:54.9108709Z 2026-10-24T10:40:54.9108817Z No GitHub SSH key? Add one at: 2026-10-24T10:40:54.9109304Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T10:40:54.9109701Z 2026-10-24T10:40:54.9109809Z ---------------------------------------- 2026-10-24T10:40:54.9109986Z 2026-10-24T10:40:54.9110131Z VM ID: blacksmith-8vcpu-ubuntu-2404-vhnbrejutfokrj4z 2026-10-24T10:40:54.9110455Z Host: production-152.236.46.252-x8664 2026-10-24T10:40:54.9110732Z Host Agent PID: 969059 2026-10-24T10:40:54.9110977Z Host Agent Git SHA: 1637818df 2026-10-24T10:40:54.9111246Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T10:40:54.9111525Z Blacksmith Host Generation: gen 2 2026-10-24T10:40:54.9111812Z Petname: production-unbiased-moray-d293b328 2026-10-24T10:40:54.9112105Z Region: us-east 2026-10-24T10:40:54.9112341Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T10:40:54.9117109Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T10:40:54.9117642Z 2026-10-24T10:40:54.9117762Z Enabling Blacksmith transparent cache 2026-10-24T10:40:54.9332886Z ##[group]Run actions/checkout@v6 2026-10-24T10:40:54.9333187Z with: 2026-10-24T10:40:54.9333563Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T10:40:54.9333953Z sparse-checkout-cone-mode: false 2026-10-24T10:40:54.9334231Z repository: pingdotgg/t3code 2026-10-24T10:40:54.9336053Z token: *** 2026-10-24T10:40:54.9336261Z ssh-strict: true 2026-10-24T10:40:54.9336485Z ssh-user: git 2026-10-24T10:40:54.9336705Z persist-credentials: true 2026-10-24T10:40:54.9337123Z clean: true 2026-10-24T10:40:54.9337338Z fetch-depth: 1 2026-10-24T10:40:54.9337552Z fetch-tags: false 2026-10-24T10:40:54.9337778Z show-progress: true 2026-10-24T10:40:54.9338028Z lfs: false 2026-10-24T10:40:54.9338289Z submodules: false 2026-10-24T10:40:54.9338518Z set-safe-directory: true 2026-10-24T10:40:54.9338769Z allow-unsafe-pr-checkout: false 2026-10-24T10:40:54.9339029Z env: 2026-10-24T10:40:54.9339262Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:40:54.9339544Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:40:54.9339823Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:40:54.9340084Z ##[endgroup] 2026-10-24T10:40:55.0376265Z Syncing repository: pingdotgg/t3code 2026-10-24T10:40:55.0377201Z ##[group]Getting Git version info 2026-10-24T10:40:55.0377552Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T10:40:55.0378034Z [command]/usr/local/bin/git version 2026-10-24T10:40:55.0453616Z git version 2.55.0 2026-10-24T10:40:55.0464380Z ##[endgroup] 2026-10-24T10:40:55.0471372Z Temporarily overriding HOME='/home/runner/_work/_temp/f2666932-a7ce-4c09-81bc-220c08b280f4' before making global git config changes 2026-10-24T10:40:55.0472016Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T10:40:55.0474976Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T10:40:55.0505409Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T10:40:55.0507349Z ##[group]Determining repository object format 2026-10-24T10:40:55.0508576Z ##[endgroup] 2026-10-24T10:40:55.0508954Z ##[group]Initializing the repository 2026-10-24T10:40:55.0510814Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T10:40:55.0544995Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T10:40:55.0545475Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T10:40:55.0545937Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T10:40:55.0546300Z hint: call: 2026-10-24T10:40:55.0546511Z hint: 2026-10-24T10:40:55.0546787Z hint: git config --global init.defaultBranch 2026-10-24T10:40:55.0547090Z hint: 2026-10-24T10:40:55.0547382Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T10:40:55.0547834Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T10:40:55.0548202Z hint: 2026-10-24T10:40:55.0548417Z hint: git branch -m 2026-10-24T10:40:55.0548657Z hint: 2026-10-24T10:40:55.0548971Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T10:40:55.0549441Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T10:40:55.0550313Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T10:40:55.0576238Z ##[endgroup] 2026-10-24T10:40:55.0576616Z ##[group]Disabling automatic garbage collection 2026-10-24T10:40:55.0578509Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T10:40:55.0604252Z ##[endgroup] 2026-10-24T10:40:55.0604630Z ##[group]Setting up auth 2026-10-24T10:40:55.0604907Z Removing SSH command configuration 2026-10-24T10:40:55.0608584Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T10:40:55.0671153Z [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-24T10:40:55.0835574Z Removing HTTP extra header 2026-10-24T10:40:55.0840431Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T10:40:55.0871214Z [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-24T10:40:55.0995267Z Removing includeIf entries pointing to credentials config files 2026-10-24T10:40:55.1000687Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T10:40:55.1026217Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T10:40:55.1133573Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-ff3e8b33-e36d-441c-aef6-88876bc5b6d9.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T10:40:55.1160925Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-ff3e8b33-e36d-441c-aef6-88876bc5b6d9.config 2026-10-24T10:40:55.1180916Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-ff3e8b33-e36d-441c-aef6-88876bc5b6d9.config 2026-10-24T10:40:55.1201394Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-ff3e8b33-e36d-441c-aef6-88876bc5b6d9.config 2026-10-24T10:40:55.1220300Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-ff3e8b33-e36d-441c-aef6-88876bc5b6d9.config 2026-10-24T10:40:55.1238024Z ##[endgroup] 2026-10-24T10:40:55.1238391Z ##[group]Fetching the repository 2026-10-24T10:40:55.1242818Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +fef851bee09102641061aeb78a3092c2ba2c72ab:refs/remotes/origin/main 2026-10-24T10:40:55.4088578Z From https://github.com/pingdotgg/t3code 2026-10-24T10:40:55.4089488Z * [new ref] fef851bee09102641061aeb78a3092c2ba2c72ab -> origin/main 2026-10-24T10:40:55.4117841Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T10:40:55.4139455Z origin/main 2026-10-24T10:40:55.4143896Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T10:40:55.4162136Z fef851bee09102641061aeb78a3092c2ba2c72ab 2026-10-24T10:40:55.4164385Z ##[endgroup] 2026-10-24T10:40:55.4165150Z ##[group]Determining the checkout info 2026-10-24T10:40:55.4166035Z ##[endgroup] 2026-10-24T10:40:55.4166858Z ##[group]Setting up sparse checkout 2026-10-24T10:40:55.4167626Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T10:40:55.4194192Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T10:40:55.4212818Z .git/info/sparse-checkout 2026-10-24T10:40:55.4217103Z ##[endgroup] 2026-10-24T10:40:55.4218106Z ##[group]Checking out the ref 2026-10-24T10:40:55.4219931Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T10:41:01.9870928Z Updating files: 0% (1/6336) 2026-10-24T10:41:01.9900533Z Updating files: 1% (64/6336) 2026-10-24T10:41:01.9918982Z Updating files: 2% (127/6336) 2026-10-24T10:41:01.9941072Z Updating files: 3% (191/6336) 2026-10-24T10:41:01.9962391Z Updating files: 4% (254/6336) 2026-10-24T10:41:01.9996445Z Updating files: 5% (317/6336) 2026-10-24T10:41:02.0016625Z Updating files: 6% (381/6336) 2026-10-24T10:41:02.0075607Z Updating files: 7% (444/6336) 2026-10-24T10:41:02.0108059Z Updating files: 8% (507/6336) 2026-10-24T10:41:02.0134729Z Updating files: 9% (571/6336) 2026-10-24T10:41:02.0449642Z Updating files: 10% (634/6336) 2026-10-24T10:41:02.0467743Z Updating files: 11% (697/6336) 2026-10-24T10:41:02.0479652Z Updating files: 12% (761/6336) 2026-10-24T10:41:02.0495727Z Updating files: 13% (824/6336) 2026-10-24T10:41:02.0512784Z Updating files: 14% (888/6336) 2026-10-24T10:41:02.0531912Z Updating files: 15% (951/6336) 2026-10-24T10:41:02.0552347Z Updating files: 16% (1014/6336) 2026-10-24T10:41:02.0568267Z Updating files: 17% (1078/6336) 2026-10-24T10:41:02.0589035Z Updating files: 18% (1141/6336) 2026-10-24T10:41:02.0605301Z Updating files: 19% (1204/6336) 2026-10-24T10:41:02.0629046Z Updating files: 20% (1268/6336) 2026-10-24T10:41:02.0649041Z Updating files: 21% (1331/6336) 2026-10-24T10:41:02.0669047Z Updating files: 22% (1394/6336) 2026-10-24T10:41:02.0683670Z Updating files: 23% (1458/6336) 2026-10-24T10:41:02.0698210Z Updating files: 24% (1521/6336) 2026-10-24T10:41:02.0714557Z Updating files: 25% (1584/6336) 2026-10-24T10:41:02.0729725Z Updating files: 26% (1648/6336) 2026-10-24T10:41:02.0743527Z Updating files: 27% (1711/6336) 2026-10-24T10:41:02.0765313Z Updating files: 28% (1775/6336) 2026-10-24T10:41:02.0799223Z Updating files: 29% (1838/6336) 2026-10-24T10:41:02.0822365Z Updating files: 30% (1901/6336) 2026-10-24T10:41:02.0847438Z Updating files: 31% (1965/6336) 2026-10-24T10:41:02.0879620Z Updating files: 32% (2028/6336) 2026-10-24T10:41:02.0912473Z Updating files: 33% (2091/6336) 2026-10-24T10:41:02.0983930Z Updating files: 34% (2155/6336) 2026-10-24T10:41:02.1049775Z Updating files: 35% (2218/6336) 2026-10-24T10:41:02.1093310Z Updating files: 36% (2281/6336) 2026-10-24T10:41:02.1131239Z Updating files: 37% (2345/6336) 2026-10-24T10:41:02.1182243Z Updating files: 38% (2408/6336) 2026-10-24T10:41:02.1210828Z Updating files: 39% (2472/6336) 2026-10-24T10:41:02.1243621Z Updating files: 40% (2535/6336) 2026-10-24T10:41:02.1273672Z Updating files: 41% (2598/6336) 2026-10-24T10:41:02.1294208Z Updating files: 42% (2662/6336) 2026-10-24T10:41:02.1305113Z Updating files: 43% (2725/6336) 2026-10-24T10:41:02.1328946Z Updating files: 44% (2788/6336) 2026-10-24T10:41:02.1364795Z Updating files: 45% (2852/6336) 2026-10-24T10:41:02.1389405Z Updating files: 46% (2915/6336) 2026-10-24T10:41:02.1420173Z Updating files: 47% (2978/6336) 2026-10-24T10:41:02.1449837Z Updating files: 48% (3042/6336) 2026-10-24T10:41:02.1482744Z Updating files: 49% (3105/6336) 2026-10-24T10:41:02.1523393Z Updating files: 50% (3168/6336) 2026-10-24T10:41:02.1540184Z Updating files: 51% (3232/6336) 2026-10-24T10:41:02.1575887Z Updating files: 52% (3295/6336) 2026-10-24T10:41:02.1604039Z Updating files: 53% (3359/6336) 2026-10-24T10:41:02.1625669Z Updating files: 54% (3422/6336) 2026-10-24T10:41:02.1650930Z Updating files: 55% (3485/6336) 2026-10-24T10:41:02.1669880Z Updating files: 56% (3549/6336) 2026-10-24T10:41:02.1688432Z Updating files: 57% (3612/6336) 2026-10-24T10:41:02.1708109Z Updating files: 58% (3675/6336) 2026-10-24T10:41:02.2103012Z Updating files: 59% (3739/6336) 2026-10-24T10:41:02.2117909Z Updating files: 60% (3802/6336) 2026-10-24T10:41:02.2135149Z Updating files: 61% (3865/6336) 2026-10-24T10:41:02.2154235Z Updating files: 62% (3929/6336) 2026-10-24T10:41:02.2178923Z Updating files: 63% (3992/6336) 2026-10-24T10:41:02.2206106Z Updating files: 64% (4056/6336) 2026-10-24T10:41:02.2228416Z Updating files: 65% (4119/6336) 2026-10-24T10:41:02.2245725Z Updating files: 66% (4182/6336) 2026-10-24T10:41:02.2272907Z Updating files: 67% (4246/6336) 2026-10-24T10:41:02.2286815Z Updating files: 68% (4309/6336) 2026-10-24T10:41:02.2306865Z Updating files: 69% (4372/6336) 2026-10-24T10:41:02.2320041Z Updating files: 70% (4436/6336) 2026-10-24T10:41:02.2337312Z Updating files: 71% (4499/6336) 2026-10-24T10:41:02.2355782Z Updating files: 72% (4562/6336) 2026-10-24T10:41:02.2382505Z Updating files: 73% (4626/6336) 2026-10-24T10:41:02.2658072Z Updating files: 74% (4689/6336) 2026-10-24T10:41:02.2859411Z Updating files: 75% (4752/6336) 2026-10-24T10:41:02.2882476Z Updating files: 76% (4816/6336) 2026-10-24T10:41:02.2904385Z Updating files: 77% (4879/6336) 2026-10-24T10:41:02.2931287Z Updating files: 78% (4943/6336) 2026-10-24T10:41:02.2952531Z Updating files: 79% (5006/6336) 2026-10-24T10:41:02.2973142Z Updating files: 80% (5069/6336) 2026-10-24T10:41:02.2991785Z Updating files: 81% (5133/6336) 2026-10-24T10:41:02.3013633Z Updating files: 82% (5196/6336) 2026-10-24T10:41:02.3032253Z Updating files: 83% (5259/6336) 2026-10-24T10:41:02.3055206Z Updating files: 84% (5323/6336) 2026-10-24T10:41:02.3079215Z Updating files: 85% (5386/6336) 2026-10-24T10:41:02.3104579Z Updating files: 86% (5449/6336) 2026-10-24T10:41:02.3178600Z Updating files: 87% (5513/6336) 2026-10-24T10:41:02.3212485Z Updating files: 88% (5576/6336) 2026-10-24T10:41:02.3234556Z Updating files: 89% (5640/6336) 2026-10-24T10:41:02.3259421Z Updating files: 90% (5703/6336) 2026-10-24T10:41:02.3296575Z Updating files: 91% (5766/6336) 2026-10-24T10:41:02.3313779Z Updating files: 92% (5830/6336) 2026-10-24T10:41:02.3331244Z Updating files: 93% (5893/6336) 2026-10-24T10:41:02.3353613Z Updating files: 94% (5956/6336) 2026-10-24T10:41:02.3378793Z Updating files: 95% (6020/6336) 2026-10-24T10:41:02.3435547Z Updating files: 96% (6083/6336) 2026-10-24T10:41:02.3464595Z Updating files: 97% (6146/6336) 2026-10-24T10:41:02.3513691Z Updating files: 98% (6210/6336) 2026-10-24T10:41:02.3534376Z Updating files: 99% (6273/6336) 2026-10-24T10:41:02.3534591Z Updating files: 100% (6336/6336) 2026-10-24T10:41:02.3534777Z Updating files: 100% (6336/6336), done. 2026-10-24T10:41:02.3700604Z Switched to a new branch 'main' 2026-10-24T10:41:02.3701412Z branch 'main' set up to track 'origin/main'. 2026-10-24T10:41:02.3716757Z ##[endgroup] 2026-10-24T10:41:02.3755855Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T10:41:02.3778029Z fef851bee09102641061aeb78a3092c2ba2c72ab 2026-10-24T10:41:02.3859363Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T10:41:02.3859630Z files="$(git ls-files .github/pr-assets)" 2026-10-24T10:41:02.3859838Z if test -n "$files"; then 2026-10-24T10:41:02.3860151Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T10:41:02.3860510Z  exit 1 2026-10-24T10:41:02.3860711Z fi 2026-10-24T10:41:02.3880596Z shell: /usr/bin/bash -e {0} 2026-10-24T10:41:02.3880834Z env: 2026-10-24T10:41:02.3880976Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:02.3881163Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:02.3881333Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:02.3881494Z ##[endgroup] 2026-10-24T10:41:02.4046999Z Prepare all required actions 2026-10-24T10:41:02.4047373Z Getting action download info 2026-10-24T10:41:02.4883660Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T10:41:02.5739154Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T10:41:02.5739352Z env: 2026-10-24T10:41:02.5739498Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:02.5739676Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:02.5739847Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:02.5740013Z ##[endgroup] 2026-10-24T10:41:02.5823924Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T10:41:02.5837645Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T10:41:02.5838056Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T10:41:02.5838386Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T10:41:02.5838654Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T10:41:02.5856265Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T10:41:02.5856457Z env: 2026-10-24T10:41:02.5856599Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:02.5856772Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:02.5856944Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:02.5857101Z ##[endgroup] 2026-10-24T10:41:02.5934926Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=11] 2026-10-24T10:41:02.5936353Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T10:41:02.5978337Z ##[group]Run actions/cache@v6 2026-10-24T10:41:02.5978502Z with: 2026-10-24T10:41:02.5978862Z path: ~/.vite-plus 2026-10-24T10:41:02.5979054Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T10:41:02.5979284Z enableCrossOsArchive: false 2026-10-24T10:41:02.5979440Z fail-on-cache-miss: false 2026-10-24T10:41:02.5979596Z lookup-only: false 2026-10-24T10:41:02.5979732Z save-always: false 2026-10-24T10:41:02.5979870Z env: 2026-10-24T10:41:02.5980008Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:02.5980180Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:02.5980351Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:02.5980508Z ##[endgroup] 2026-10-24T10:41:02.8020911Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T10:41:03.1918726Z Received 170349591 of 170349591 (100.0%), 440.3 MBs/sec 2026-10-24T10:41:03.1919250Z Cache Size: ~162 MB (170349591 B) 2026-10-24T10:41:03.1954594Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/c1ae4ca2-dc9b-40c5-b3a0-ffb52238b4bd/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T10:41:03.9169739Z Cache restored successfully 2026-10-24T10:41:03.9314504Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T10:41:03.9375455Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1343] 2026-10-24T10:41:03.9377923Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T10:41:03.9395972Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T10:41:03.9396197Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T10:41:03.9396377Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T10:41:03.9414313Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T10:41:03.9414485Z env: 2026-10-24T10:41:03.9414609Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:03.9414762Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:03.9414909Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:03.9415065Z ##[endgroup] 2026-10-24T10:41:03.9460841Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T10:41:03.9473641Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T10:41:03.9475796Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T10:41:03.9480763Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T10:41:03.9482083Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T10:41:03.9492958Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T10:41:03.9493161Z store_path="$(vp pm cache dir)" 2026-10-24T10:41:03.9493332Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T10:41:03.9513525Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T10:41:03.9513741Z env: 2026-10-24T10:41:03.9513861Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:03.9514017Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:03.9514225Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:03.9514414Z ##[endgroup] 2026-10-24T10:41:03.9661940Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=17] 2026-10-24T10:41:03.9663414Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T10:41:04.0019508Z ##[group]Run actions/cache@v6 2026-10-24T10:41:04.0019668Z with: 2026-10-24T10:41:04.0019801Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T10:41:04.0020078Z key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T10:41:04.0020340Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T10:41:04.0020492Z enableCrossOsArchive: false 2026-10-24T10:41:04.0020633Z fail-on-cache-miss: false 2026-10-24T10:41:04.0020760Z lookup-only: false 2026-10-24T10:41:04.0020903Z save-always: false 2026-10-24T10:41:04.0021354Z env: 2026-10-24T10:41:04.0021640Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:04.0022263Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:04.0022705Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:04.0022986Z ##[endgroup] 2026-10-24T10:41:04.1898368Z Cache hit for: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T10:41:05.2128089Z Received 603979776 of 995169257 (60.7%), 576.0 MBs/sec 2026-10-24T10:41:05.7633656Z Received 995169257 of 995169257 (100.0%), 611.9 MBs/sec 2026-10-24T10:41:05.7635151Z Cache Size: ~949 MB (995169257 B) 2026-10-24T10:41:05.7673659Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/e68ad0a7-19f6-4861-8a3c-6398a08af49e/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T10:41:11.6158649Z Cache restored successfully 2026-10-24T10:41:11.6640050Z Cache restored from key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T10:41:11.6711583Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7704] 2026-10-24T10:41:11.6714145Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T10:41:11.6724564Z ##[group]Run vp install 2026-10-24T10:41:11.6724714Z vp install 2026-10-24T10:41:11.6741648Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T10:41:11.6741820Z env: 2026-10-24T10:41:11.6741942Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:11.6742096Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:11.6742247Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:11.6742387Z ##[endgroup] 2026-10-24T10:41:11.7081066Z Scope: all 33 workspace projects 2026-10-24T10:41:11.8119475Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T10:41:12.1322754Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T10:41:12.1323107Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T10:41:12.1323334Z Virtual store is at: node_modules/.pnpm 2026-10-24T10:41:14.5065087Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.7s) 2026-10-24T10:41:14.5065358Z Lockfile is up to date, resolution step is skipped 2026-10-24T10:41:14.5244346Z Packages: +1721 2026-10-24T10:41:14.5244509Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T10:41:14.5611673Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T10:41:15.6438274Z . prepare$ vp config --no-agent 2026-10-24T10:41:15.7553319Z . prepare: Done 2026-10-24T10:41:15.7572080Z 2026-10-24T10:41:15.7572257Z devDependencies: 2026-10-24T10:41:15.7572445Z + @coderabbitai/config 1.1.0 2026-10-24T10:41:15.7572594Z + @shadcn/lint 0.1.5 2026-10-24T10:41:15.7572771Z + @types/node 24.12.4 2026-10-24T10:41:15.7572914Z + knip 6.34.0 2026-10-24T10:41:15.7573063Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T10:41:15.7573215Z + vite-plus 1.3.0 2026-10-24T10:41:15.7573285Z 2026-10-24T10:41:15.7613674Z Done in 4.1s using pnpm v12.14.0 2026-10-24T10:41:15.7805320Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=4109] 2026-10-24T10:41:15.8443102Z ##[group]Run actions/cache@v6 2026-10-24T10:41:15.8443265Z with: 2026-10-24T10:41:15.8443388Z path: ~/.cache/electron 2026-10-24T10:41:15.8443637Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T10:41:15.8443890Z enableCrossOsArchive: false 2026-10-24T10:41:15.8444036Z fail-on-cache-miss: false 2026-10-24T10:41:15.8444166Z lookup-only: false 2026-10-24T10:41:15.8444295Z save-always: false 2026-10-24T10:41:15.8444411Z env: 2026-10-24T10:41:15.8444530Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:15.8444687Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:15.8444854Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:15.8444991Z ##[endgroup] 2026-10-24T10:41:16.0504365Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T10:41:16.2123759Z Received 122906203 of 122906203 (100.0%), 802.8 MBs/sec 2026-10-24T10:41:16.2124690Z Cache Size: ~117 MB (122906203 B) 2026-10-24T10:41:16.2142571Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/e04e2bc0-3a2d-49f2-bec8-2d11f7c17cc1/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T10:41:16.2730161Z Cache restored successfully 2026-10-24T10:41:16.2860118Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T10:41:16.3001299Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T10:41:16.3001548Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T10:41:16.3018954Z shell: /usr/bin/bash -e {0} 2026-10-24T10:41:16.3019084Z env: 2026-10-24T10:41:16.3019386Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:16.3019538Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:16.3019683Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:16.3019821Z ##[endgroup] 2026-10-24T10:41:16.4751918Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T10:41:17.0991562Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T10:41:17.1012641Z 2026-10-24T10:41:17.1108723Z ##[group]Run vp run knip:check 2026-10-24T10:41:17.1109019Z vp run knip:check 2026-10-24T10:41:17.1126297Z shell: /usr/bin/bash -e {0} 2026-10-24T10:41:17.1126431Z env: 2026-10-24T10:41:17.1126550Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:17.1126703Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:17.1126854Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:17.1126990Z ##[endgroup] 2026-10-24T10:41:17.2653431Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T10:41:21.2181249Z 2026-10-24T10:41:21.2184180Z $ 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-24T10:41:30.0856779Z 2026-10-24T10:41:30.0857361Z --- 2026-10-24T10:41:30.0857660Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T10:41:30.0953606Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T10:41:30.0953920Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T10:41:30.0972031Z shell: /usr/bin/bash -e {0} 2026-10-24T10:41:30.0972169Z env: 2026-10-24T10:41:30.0972286Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:30.0972442Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:30.0972588Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:30.0972733Z ##[endgroup] 2026-10-24T10:41:30.2504973Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T10:41:30.4510266Z 2026-10-24T10:41:30.4639949Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T10:41:30.4640166Z vp run --filter t3 generate --check 2026-10-24T10:41:30.4657590Z shell: /usr/bin/bash -e {0} 2026-10-24T10:41:30.4657721Z env: 2026-10-24T10:41:30.4657861Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:30.4658010Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:30.4658157Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:30.4658293Z ##[endgroup] 2026-10-24T10:41:30.6245248Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T10:41:30.7894847Z 2026-10-24T10:41:30.7975420Z ##[group]Run vp check 2026-10-24T10:41:30.7975604Z vp check 2026-10-24T10:41:30.7992483Z shell: /usr/bin/bash -e {0} 2026-10-24T10:41:30.7992622Z env: 2026-10-24T10:41:30.7992742Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:30.7992900Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:30.7993048Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T10:41:30.7993190Z ##[endgroup] 2026-10-24T10:41:31.3695242Z pass: All 5690 files are correctly formatted (417ms, 8 threads) 2026-10-24T10:41:36.8617377Z warn: Lint warnings found 2026-10-24T10:41:36.8618809Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T10:41:36.8619355Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T10:41:36.8619783Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T10:41:36.8620177Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T10:41:36.8620477Z ·  ─┬─ 2026-10-24T10:41:36.8620824Z · ╰── 'Arr' is imported here 2026-10-24T10:41:36.8621187Z 5 │ import * as Order from "effect/Order"; 2026-10-24T10:41:36.8621356Z ╰──── 2026-10-24T10:41:36.8621523Z  help: Consider removing this import. 2026-10-24T10:41:36.8621647Z 2026-10-24T10:41:36.8621873Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T10:41:36.8622246Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T10:41:36.8622483Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T10:41:36.8622689Z 5 │ import * as Order from "effect/Order"; 2026-10-24T10:41:36.8622975Z ·  ──┬── 2026-10-24T10:41:36.8623323Z · ╰── 'Order' is imported here 2026-10-24T10:41:36.8623621Z 6 │ 2026-10-24T10:41:36.8623800Z ╰──── 2026-10-24T10:41:36.8624034Z  help: Consider removing this import. 2026-10-24T10:41:36.8624236Z 2026-10-24T10:41:36.8624505Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.8625080Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T10:41:36.8625489Z 52 │ 2026-10-24T10:41:36.8625714Z 53 │ for (const {} of [ 2026-10-24T10:41:36.8625976Z ·  ── 2026-10-24T10:41:36.8626233Z 54 │ { healthy: true }, 2026-10-24T10:41:36.8626466Z ╰──── 2026-10-24T10:41:36.8626959Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.8627320Z 2026-10-24T10:41:36.8627739Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8628406Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T10:41:36.8628770Z 118 │ 2026-10-24T10:41:36.8628981Z 119 │ useEffect(() => { 2026-10-24T10:41:36.8629247Z ·  ────┬──── 2026-10-24T10:41:36.8629601Z · ╰── This is the containing effect 2026-10-24T10:41:36.8629942Z 120 │ if (orientationSettled) return; 2026-10-24T10:41:36.8630280Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T10:41:36.8630589Z 122 │ if (orientation === null) { 2026-10-24T10:41:36.8630867Z 123 │ setOrientationSettled(true); 2026-10-24T10:41:36.8631161Z ·  ──────────┬────────── 2026-10-24T10:41:36.8631582Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8631942Z 124 │ return; 2026-10-24T10:41:36.8632138Z ╰──── 2026-10-24T10:41:36.8633384Z  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-24T10:41:36.8634829Z  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-24T10:41:36.8635146Z 2026-10-24T10:41:36.8635537Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8636201Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T10:41:36.8636565Z 292 │ 2026-10-24T10:41:36.8636907Z 293 │ useEffect(() => { 2026-10-24T10:41:36.8637149Z ·  ────┬──── 2026-10-24T10:41:36.8637488Z · ╰── This is the containing effect 2026-10-24T10:41:36.8637799Z 294 │ if ( 2026-10-24T10:41:36.8638025Z 295 │ scene === null || 2026-10-24T10:41:36.8638287Z 296 │ requestedScene === null || 2026-10-24T10:41:36.8638487Z 297 │ scene !== requestedScene || 2026-10-24T10:41:36.8638662Z 298 │ !hasFixture || 2026-10-24T10:41:36.8638823Z 299 │ !orientationSettled || 2026-10-24T10:41:36.8638992Z 300 │ !themeApplied || 2026-10-24T10:41:36.8639199Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T10:41:36.8639477Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T10:41:36.8639687Z 303 │ ) { 2026-10-24T10:41:36.8639831Z 304 │ setReadyScene(null); 2026-10-24T10:41:36.8640003Z ·  ──────┬────── 2026-10-24T10:41:36.8640297Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8640532Z 305 │ return; 2026-10-24T10:41:36.8640672Z ╰──── 2026-10-24T10:41:36.8641344Z  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-24T10:41:36.8642212Z  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-24T10:41:36.8642516Z 2026-10-24T10:41:36.8642798Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8643237Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T10:41:36.8643490Z 127 │ let cancelled = false; 2026-10-24T10:41:36.8643683Z 128 │ let lastOutcome: string | null = null; 2026-10-24T10:41:36.8643877Z ·  ─────┬───── 2026-10-24T10:41:36.8644114Z · ╰── 'lastOutcome' is declared here 2026-10-24T10:41:36.8644464Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T10:41:36.8644706Z ╰──── 2026-10-24T10:41:36.8644875Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8644999Z 2026-10-24T10:41:36.8645210Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T10:41:36.8645545Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T10:41:36.8645769Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T10:41:36.8646098Z 3 │ type AuthSessionState, 2026-10-24T10:41:36.8646324Z ·  ────────┬─────── 2026-10-24T10:41:36.8646577Z · ╰── 'AuthSessionState' is imported here 2026-10-24T10:41:36.8646832Z 4 │ sessionGrantsScope, 2026-10-24T10:41:36.8646979Z ╰──── 2026-10-24T10:41:36.8647137Z  help: Consider removing this import. 2026-10-24T10:41:36.8647256Z 2026-10-24T10:41:36.8647468Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T10:41:36.8647784Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T10:41:36.8648053Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T10:41:36.8648329Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T10:41:36.8648556Z ·  ──────┬────── 2026-10-24T10:41:36.8648812Z · ╰── 'HookForwarder' is imported here 2026-10-24T10:41:36.8649074Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T10:41:36.8649246Z ╰──── 2026-10-24T10:41:36.8649405Z  help: Consider removing this import. 2026-10-24T10:41:36.8649520Z 2026-10-24T10:41:36.8649712Z ⚠ react(static-components): Cannot create components during render 2026-10-24T10:41:36.8650064Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T10:41:36.8650325Z 196 │ const { onInput, onResize } = props; 2026-10-24T10:41:36.8650584Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T10:41:36.8651044Z ·  ────────────────┬─────────────── 2026-10-24T10:41:36.8651542Z · ╰── The component is created during render here 2026-10-24T10:41:36.8651860Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T10:41:36.8652060Z 199 │ 2026-10-24T10:41:36.8652198Z 200 │ useEffect(() => { 2026-10-24T10:41:36.8652376Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T10:41:36.8652578Z 202 │ terminalKey: props.terminalKey, 2026-10-24T10:41:36.8652769Z 203 │ native: hasNativeSurface, 2026-10-24T10:41:36.8653012Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T10:41:36.8653250Z 205 │ bufferLen: props.buffer.length, 2026-10-24T10:41:36.8653439Z 206 │ isRunning: props.isRunning, 2026-10-24T10:41:36.8653599Z 207 │ }); 2026-10-24T10:41:36.8653841Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T10:41:36.8654115Z 209 │ const handleNativeInput = useCallback( 2026-10-24T10:41:36.8654352Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T10:41:36.8655057Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T10:41:36.8655241Z 212 │ return; 2026-10-24T10:41:36.8655384Z 213 │ } 2026-10-24T10:41:36.8655548Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T10:41:36.8655820Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T10:41:36.8656047Z 216 │ }); 2026-10-24T10:41:36.8656216Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T10:41:36.8656383Z 218 │ }, 2026-10-24T10:41:36.8656554Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T10:41:36.8656738Z 220 │ ); 2026-10-24T10:41:36.8657025Z 221 │ const handleNativeResize = useCallback( 2026-10-24T10:41:36.8657308Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T10:41:36.8657509Z 223 │ onResize({ 2026-10-24T10:41:36.8657685Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T10:41:36.8657879Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T10:41:36.8658048Z 226 │ }); 2026-10-24T10:41:36.8658175Z 227 │ }, 2026-10-24T10:41:36.8658475Z 228 │ [onResize], 2026-10-24T10:41:36.8658638Z 229 │ ); 2026-10-24T10:41:36.8658765Z 230 │ 2026-10-24T10:41:36.8658916Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T10:41:36.8659092Z 232 │ return ( 2026-10-24T10:41:36.8659248Z 233 │ 2026-10-24T10:41:36.8659438Z 234 │ { 2026-10-24T10:41:36.8673244Z ·  ────┬──── 2026-10-24T10:41:36.8673469Z · ╰── This is the containing effect 2026-10-24T10:41:36.8673673Z 68 │ setUri(null); 2026-10-24T10:41:36.8673831Z ·  ───┬── 2026-10-24T10:41:36.8674085Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8674321Z 69 │ setError(null); 2026-10-24T10:41:36.8674461Z ╰──── 2026-10-24T10:41:36.8675133Z  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-24T10:41:36.8676003Z  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-24T10:41:36.8676315Z 2026-10-24T10:41:36.8676523Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8677135Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T10:41:36.8677346Z 90 │ }; 2026-10-24T10:41:36.8677492Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T10:41:36.8677718Z ·  ──────┬───── ───┬─── 2026-10-24T10:41:36.8678106Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T10:41:36.8678595Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T10:41:36.8678933Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T10:41:36.8679137Z ╰──── 2026-10-24T10:41:36.8679533Z  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-24T10:41:36.8680472Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8680951Z 2026-10-24T10:41:36.8681291Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T10:41:36.8681648Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T10:41:36.8681875Z 212 │ useEffect(() => { 2026-10-24T10:41:36.8682085Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T10:41:36.8682324Z ·  ──┬── 2026-10-24T10:41:36.8682746Z · ╰── Missing dependency `props` 2026-10-24T10:41:36.8683155Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T10:41:36.8683421Z ·  ──────────┬───────── 2026-10-24T10:41:36.8683777Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T10:41:36.8684071Z 215 │ const { source } = props; 2026-10-24T10:41:36.8684221Z ╰──── 2026-10-24T10:41:36.8684719Z  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-24T10:41:36.8685521Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8685824Z 2026-10-24T10:41:36.8686033Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8686366Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T10:41:36.8686570Z 81 │ }, 2026-10-24T10:41:36.8686706Z 82 │ [draftKey], 2026-10-24T10:41:36.8686915Z ·  ────┬─── 2026-10-24T10:41:36.8687150Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T10:41:36.8687438Z 83 │ ); 2026-10-24T10:41:36.8687619Z ╰──── 2026-10-24T10:41:36.8687969Z  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-24T10:41:36.8688565Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8688867Z 2026-10-24T10:41:36.8689206Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8689688Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T10:41:36.8689911Z 1443 │ 2026-10-24T10:41:36.8690098Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T10:41:36.8690361Z ·  ───────────────────┬─────────────────── 2026-10-24T10:41:36.8690700Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T10:41:36.8691025Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T10:41:36.8691222Z ╰──── 2026-10-24T10:41:36.8691387Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8691510Z 2026-10-24T10:41:36.8691773Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8692181Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T10:41:36.8692408Z 1679 │ 2026-10-24T10:41:36.8692545Z 1680 │ const layer: Layer.Layer< 2026-10-24T10:41:36.8692718Z ·  ──┬── 2026-10-24T10:41:36.8692942Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.8693172Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T10:41:36.8693342Z ╰──── 2026-10-24T10:41:36.8693506Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8693628Z 2026-10-24T10:41:36.8693831Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T10:41:36.8694167Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T10:41:36.8694386Z 1 │ import type { 2026-10-24T10:41:36.8694530Z 2 │ EnvironmentId, 2026-10-24T10:41:36.8694692Z ·  ──────┬────── 2026-10-24T10:41:36.8694922Z · ╰── 'EnvironmentId' is imported here 2026-10-24T10:41:36.8695160Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T10:41:36.8695325Z ╰──── 2026-10-24T10:41:36.8695482Z  help: Consider removing this import. 2026-10-24T10:41:36.8695600Z 2026-10-24T10:41:36.8695860Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T10:41:36.8696290Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T10:41:36.8696535Z 959 │ 2026-10-24T10:41:36.8696711Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T10:41:36.8696997Z ·  ──────────────────┬───────────────── 2026-10-24T10:41:36.8697321Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T10:41:36.8697623Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T10:41:36.8697913Z ╰──── 2026-10-24T10:41:36.8698262Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8698382Z 2026-10-24T10:41:36.8698669Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8699097Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T10:41:36.8699318Z 14 │ 2026-10-24T10:41:36.8699458Z 15 │ const legacyCredentials = { 2026-10-24T10:41:36.8699640Z ·  ────────┬──────── 2026-10-24T10:41:36.8699896Z · ╰── 'legacyCredentials' is declared here 2026-10-24T10:41:36.8700116Z 16 │ version: 1 as const, 2026-10-24T10:41:36.8700259Z ╰──── 2026-10-24T10:41:36.8700424Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8700552Z 2026-10-24T10:41:36.8700837Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T10:41:36.8701237Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T10:41:36.8701439Z 248 │ }, 2026-10-24T10:41:36.8701597Z 249 │ (effect, flow, stopSessions) => 2026-10-24T10:41:36.8701798Z ·  ──────┬───── 2026-10-24T10:41:36.8702058Z · ╰── 'stopSessions' is declared here 2026-10-24T10:41:36.8702276Z 250 │ effect.pipe( 2026-10-24T10:41:36.8702419Z ╰──── 2026-10-24T10:41:36.8702584Z  help: Consider removing this parameter. 2026-10-24T10:41:36.8702707Z 2026-10-24T10:41:36.8702977Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8703396Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T10:41:36.8703628Z 10577 │ 2026-10-24T10:41:36.8703767Z 10578 │ const layer: Layer.Layer< 2026-10-24T10:41:36.8703936Z ·  ──┬── 2026-10-24T10:41:36.8704158Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.8704390Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T10:41:36.8704563Z ╰──── 2026-10-24T10:41:36.8704729Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8704852Z 2026-10-24T10:41:36.8705339Z ⚠ 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-24T10:41:36.8705920Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T10:41:36.8706187Z 1679 │ yield* harness.replaceSession; 2026-10-24T10:41:36.8706515Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.8706910Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T10:41:36.8707161Z 1682 │ │ break; 2026-10-24T10:41:36.8707357Z 1683 │ │ } 2026-10-24T10:41:36.8707569Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8707836Z 1685 │ ╰─▶ } 2026-10-24T10:41:36.8708132Z 1686 │ yield* Queue.offer( 2026-10-24T10:41:36.8708320Z ╰──── 2026-10-24T10:41:36.8708377Z 2026-10-24T10:41:36.8708848Z ⚠ 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-24T10:41:36.8709424Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T10:41:36.8709677Z 1788 │ yield* harness.replaceSession; 2026-10-24T10:41:36.8709999Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.8710356Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T10:41:36.8710640Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8710901Z 1792 │ ╰─▶ } 2026-10-24T10:41:36.8711174Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T10:41:36.8711372Z ╰──── 2026-10-24T10:41:36.8711433Z 2026-10-24T10:41:36.8711667Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T10:41:36.8712060Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T10:41:36.8712307Z 1997 │ assert.equal( 2026-10-24T10:41:36.8712556Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T10:41:36.8712796Z ·  ────── 2026-10-24T10:41:36.8712979Z 1999 │ "authoritative answer", 2026-10-24T10:41:36.8713132Z ╰──── 2026-10-24T10:41:36.8713374Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T10:41:36.8713557Z 2026-10-24T10:41:36.8714022Z ⚠ 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-24T10:41:36.8714613Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T10:41:36.8714972Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T10:41:36.8715371Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T10:41:36.8715681Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8715947Z 3953 │ ╰─▶ } 2026-10-24T10:41:36.8716218Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T10:41:36.8716412Z ╰──── 2026-10-24T10:41:36.8716475Z 2026-10-24T10:41:36.8717128Z ⚠ 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-24T10:41:36.8717728Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T10:41:36.8717995Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T10:41:36.8718301Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T10:41:36.8718698Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8719013Z 6064 │ ╰─▶ } 2026-10-24T10:41:36.8719329Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T10:41:36.8719564Z ╰──── 2026-10-24T10:41:36.8719624Z 2026-10-24T10:41:36.8720088Z ⚠ 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-24T10:41:36.8720688Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T10:41:36.8720950Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T10:41:36.8721254Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T10:41:36.8721549Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8721817Z 6199 │ ╰─▶ } 2026-10-24T10:41:36.8722128Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T10:41:36.8722359Z ╰──── 2026-10-24T10:41:36.8722416Z 2026-10-24T10:41:36.8722568Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8722847Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T10:41:36.8723166Z 53 │ const child = children as ReactElement>; 2026-10-24T10:41:36.8723537Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T10:41:36.8723821Z 55 │ │ onTouchStart: (event) => { 2026-10-24T10:41:36.8724107Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T10:41:36.8724432Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T10:41:36.8724732Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T10:41:36.8725043Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T10:41:36.8725339Z 60 │ │ pendingPress.current = null; 2026-10-24T10:41:36.8725594Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T10:41:36.8725810Z 62 │ │ }, 2026-10-24T10:41:36.8726019Z 63 │ │ onPress: (event) => { 2026-10-24T10:41:36.8726312Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T10:41:36.8726631Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T10:41:36.8726982Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T10:41:36.8727353Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T10:41:36.8727639Z 68 │ │ return; 2026-10-24T10:41:36.8727835Z 69 │ │ } 2026-10-24T10:41:36.8728078Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T10:41:36.8728483Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T10:41:36.8728864Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T10:41:36.8729142Z 73 │ │ event.persist(); 2026-10-24T10:41:36.8729423Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T10:41:36.8729684Z 75 │ │ return; 2026-10-24T10:41:36.8729869Z 76 │ │ } 2026-10-24T10:41:36.8730090Z 77 │ │ child.props.onPress?.(event); 2026-10-24T10:41:36.8730300Z 78 │ │ }, 2026-10-24T10:41:36.8730539Z 79 │ ├─▶ }); 2026-10-24T10:41:36.8730932Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.8731275Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T10:41:36.8731456Z ╰──── 2026-10-24T10:41:36.8731988Z  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-24T10:41:36.8732711Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8732995Z 2026-10-24T10:41:36.8733170Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.8733492Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T10:41:36.8733704Z 185 │ 2026-10-24T10:41:36.8733880Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T10:41:36.8751397Z ·  ── 2026-10-24T10:41:36.8751623Z 187 │ } 2026-10-24T10:41:36.8751744Z ╰──── 2026-10-24T10:41:36.8752045Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.8752271Z 2026-10-24T10:41:36.8752455Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.8752774Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T10:41:36.8753026Z 188 │ 2026-10-24T10:41:36.8753156Z 189 │ for (const {} of [ 2026-10-24T10:41:36.8753314Z ·  ── 2026-10-24T10:41:36.8753498Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T10:41:36.8753659Z ╰──── 2026-10-24T10:41:36.8754085Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.8754344Z 2026-10-24T10:41:36.8754515Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.8754823Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T10:41:36.8755024Z 310 │ 2026-10-24T10:41:36.8755217Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T10:41:36.8755425Z ·  ── 2026-10-24T10:41:36.8755572Z 312 │ } 2026-10-24T10:41:36.8755690Z ╰──── 2026-10-24T10:41:36.8755981Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.8756202Z 2026-10-24T10:41:36.8756379Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.8756877Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T10:41:36.8757187Z 313 │ 2026-10-24T10:41:36.8757384Z 314 │ for (const {} of [ 2026-10-24T10:41:36.8757622Z ·  ── 2026-10-24T10:41:36.8757826Z 315 │ { 2026-10-24T10:41:36.8757950Z ╰──── 2026-10-24T10:41:36.8758237Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.8758461Z 2026-10-24T10:41:36.8758832Z ⚠ 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-24T10:41:36.8759301Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T10:41:36.8759598Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T10:41:36.8759903Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T10:41:36.8760189Z ·  ─────────────────── 2026-10-24T10:41:36.8760382Z 1787 │ cwd, 2026-10-24T10:41:36.8760523Z ╰──── 2026-10-24T10:41:36.8760581Z 2026-10-24T10:41:36.8760830Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T10:41:36.8761191Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T10:41:36.8761430Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T10:41:36.8761693Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T10:41:36.8761939Z ·  ─────────────── 2026-10-24T10:41:36.8762105Z 510 │ ) 2026-10-24T10:41:36.8762229Z ╰──── 2026-10-24T10:41:36.8762445Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T10:41:36.8762609Z 2026-10-24T10:41:36.8762823Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T10:41:36.8763179Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T10:41:36.8763396Z 233 │ 2026-10-24T10:41:36.8763581Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T10:41:36.8763807Z ·  ───────┬────── 2026-10-24T10:41:36.8764063Z · ╰── 'nonEmptyString' is declared here 2026-10-24T10:41:36.8764485Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T10:41:36.8764741Z ╰──── 2026-10-24T10:41:36.8764913Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8765032Z 2026-10-24T10:41:36.8765184Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8765497Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T10:41:36.8765843Z 151 │ 2026-10-24T10:41:36.8766118Z 152 │ {props.children(open)} 2026-10-24T10:41:36.8766317Z ·  ──┬─ 2026-10-24T10:41:36.8766590Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.8766858Z 153 │ 2026-10-24T10:41:36.8766992Z ╰──── 2026-10-24T10:41:36.8767535Z  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-24T10:41:36.8768271Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8768555Z 2026-10-24T10:41:36.8768759Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T10:41:36.8769113Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T10:41:36.8769356Z 139 │ if (action.id !== undefined) { 2026-10-24T10:41:36.8769544Z 140 │ props.onPressAction?.({ 2026-10-24T10:41:36.8769730Z ·  ──┬── 2026-10-24T10:41:36.8769959Z · ╰── Missing dependency `props` 2026-10-24T10:41:36.8770197Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T10:41:36.8770460Z 142 │ } as Parameters>[0]); 2026-10-24T10:41:36.8770681Z 143 │ } 2026-10-24T10:41:36.8770810Z 144 │ }, 2026-10-24T10:41:36.8770968Z 145 │ [close, props.onPressAction], 2026-10-24T10:41:36.8771170Z ·  ─────────┬───────── 2026-10-24T10:41:36.8771501Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T10:41:36.8771766Z 146 │ ); 2026-10-24T10:41:36.8771886Z ╰──── 2026-10-24T10:41:36.8772443Z  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-24T10:41:36.8773199Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8773497Z 2026-10-24T10:41:36.8773970Z ⚠ 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-24T10:41:36.8774532Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T10:41:36.8774739Z 225 │ ) { 2026-10-24T10:41:36.8775106Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.8775461Z 227 │ │ const socket = sockets[index]; 2026-10-24T10:41:36.8775685Z 228 │ │ if (socket) { 2026-10-24T10:41:36.8775891Z 229 │ │ return socket; 2026-10-24T10:41:36.8776084Z 230 │ │ } 2026-10-24T10:41:36.8776290Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8776542Z 232 │ ╰─▶ } 2026-10-24T10:41:36.8776901Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T10:41:36.8777138Z ╰──── 2026-10-24T10:41:36.8777199Z 2026-10-24T10:41:36.8777684Z ⚠ 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-24T10:41:36.8778246Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T10:41:36.8778456Z 239 │ ) { 2026-10-24T10:41:36.8778734Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.8779150Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T10:41:36.8779457Z 242 │ │ if (request) { 2026-10-24T10:41:36.8779668Z 243 │ │ return request; 2026-10-24T10:41:36.8779859Z 244 │ │ } 2026-10-24T10:41:36.8780064Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8780317Z 246 │ ╰─▶ } 2026-10-24T10:41:36.8780629Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T10:41:36.8780859Z ╰──── 2026-10-24T10:41:36.8780921Z 2026-10-24T10:41:36.8781389Z ⚠ 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-24T10:41:36.8781944Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T10:41:36.8782160Z 130 │ ) { 2026-10-24T10:41:36.8782451Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.8782787Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T10:41:36.8783024Z 133 │ │ return; 2026-10-24T10:41:36.8783221Z 134 │ │ } 2026-10-24T10:41:36.8783434Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8783702Z 136 │ ╰─▶ } 2026-10-24T10:41:36.8784011Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T10:41:36.8784242Z ╰──── 2026-10-24T10:41:36.8784301Z 2026-10-24T10:41:36.8784767Z ⚠ 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-24T10:41:36.8785398Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T10:41:36.8785755Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T10:41:36.8786188Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T10:41:36.8786533Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8786827Z 254 │ ╰─▶ } 2026-10-24T10:41:36.8787096Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T10:41:36.8787296Z ╰──── 2026-10-24T10:41:36.8787353Z 2026-10-24T10:41:36.8787827Z ⚠ 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-24T10:41:36.8788384Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T10:41:36.8788585Z 257 │ 2026-10-24T10:41:36.8788911Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T10:41:36.8789254Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8789513Z 260 │ ╰─▶ } 2026-10-24T10:41:36.8789760Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T10:41:36.8789938Z ╰──── 2026-10-24T10:41:36.8790000Z 2026-10-24T10:41:36.8790469Z ⚠ 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-24T10:41:36.8791025Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T10:41:36.8791232Z 321 │ ); 2026-10-24T10:41:36.8791572Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T10:41:36.8791923Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8792175Z 324 │ ╰─▶ } 2026-10-24T10:41:36.8792371Z 325 │ 2026-10-24T10:41:36.8792490Z ╰──── 2026-10-24T10:41:36.8792548Z 2026-10-24T10:41:36.8793018Z ⚠ 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-24T10:41:36.8793572Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T10:41:36.8793887Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T10:41:36.8794313Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T10:41:36.8794658Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8794913Z 332 │ ╰─▶ } 2026-10-24T10:41:36.8795165Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T10:41:36.8795342Z ╰──── 2026-10-24T10:41:36.8795404Z 2026-10-24T10:41:36.8795765Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8796198Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T10:41:36.8796405Z 913 │ 2026-10-24T10:41:36.8796752Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T10:41:36.8797131Z ·  ─────┬───── 2026-10-24T10:41:36.8797367Z · ╰── 'layerDaemon' is declared here 2026-10-24T10:41:36.8797598Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T10:41:36.8797757Z ╰──── 2026-10-24T10:41:36.8797924Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8798042Z 2026-10-24T10:41:36.8798220Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.8798539Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T10:41:36.8798805Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T10:41:36.8799094Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T10:41:36.8799395Z ·  ─────┬──── 2026-10-24T10:41:36.8799698Z · ╰── Cannot call impure function 2026-10-24T10:41:36.8799918Z 179 │ } 2026-10-24T10:41:36.8800033Z ╰──── 2026-10-24T10:41:36.8800373Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T10:41:36.8800939Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.8801225Z 2026-10-24T10:41:36.8801509Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8801919Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T10:41:36.8802126Z 12365 │ 2026-10-24T10:41:36.8802332Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T10:41:36.8802574Z ·  ────────┬─────── 2026-10-24T10:41:36.8802823Z · ╰── 'layerUnavailable' is declared here 2026-10-24T10:41:36.8803045Z 12367 │ OrchestratorV2, 2026-10-24T10:41:36.8803182Z ╰──── 2026-10-24T10:41:36.8803354Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8803475Z 2026-10-24T10:41:36.8803645Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.8803938Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T10:41:36.8804121Z 265 │ 2026-10-24T10:41:36.8804292Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T10:41:36.8804486Z ·  ── 2026-10-24T10:41:36.8804634Z 267 │ } 2026-10-24T10:41:36.8804749Z ╰──── 2026-10-24T10:41:36.8805040Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.8805263Z 2026-10-24T10:41:36.8805463Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.8805907Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T10:41:36.8806223Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T10:41:36.8806517Z 267 │ 2026-10-24T10:41:36.8806886Z ·  ─────────────────────────────────────────────────────── 2026-10-24T10:41:36.8807118Z 268 │ { 2026-10-24T10:41:36.8808809Z ·  ────┬──── 2026-10-24T10:41:36.8809029Z · ╰── This is the containing effect 2026-10-24T10:41:36.8809316Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T10:41:36.8809598Z ·  ───────┬────── 2026-10-24T10:41:36.8809937Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8810208Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T10:41:36.8810359Z ╰──── 2026-10-24T10:41:36.8811024Z  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-24T10:41:36.8811887Z  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-24T10:41:36.8812192Z 2026-10-24T10:41:36.8812453Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8812837Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T10:41:36.8813037Z 57 │ 2026-10-24T10:41:36.8813165Z 58 │ useEffect(() => { 2026-10-24T10:41:36.8813322Z ·  ────┬──── 2026-10-24T10:41:36.8813617Z · ╰── This is the containing effect 2026-10-24T10:41:36.8813883Z 59 │ const controller = new AbortController(); 2026-10-24T10:41:36.8814069Z 60 │ setLoadState("pending"); 2026-10-24T10:41:36.8814239Z ·  ──────┬───── 2026-10-24T10:41:36.8814495Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8814825Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T10:41:36.8815039Z ╰──── 2026-10-24T10:41:36.8815698Z  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-24T10:41:36.8816555Z  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-24T10:41:36.8816895Z 2026-10-24T10:41:36.8817099Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8817431Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T10:41:36.8817660Z 70 │ return () => controller.abort(); 2026-10-24T10:41:36.8817859Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T10:41:36.8818152Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T10:41:36.8818551Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T10:41:36.8818965Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T10:41:36.8819297Z · ╰── Unnecessary dependency `player_0` 2026-10-24T10:41:36.8819494Z 72 │ 2026-10-24T10:41:36.8819603Z ╰──── 2026-10-24T10:41:36.8819953Z  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-24T10:41:36.8820542Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8820841Z 2026-10-24T10:41:36.8821030Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.8821395Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T10:41:36.8821658Z 554 │ assert.deepStrictEqual( 2026-10-24T10:41:36.8821926Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T10:41:36.8822224Z ·  ┬ 2026-10-24T10:41:36.8822520Z · ╰── '_' is declared here 2026-10-24T10:41:36.8822739Z 556 │ [ 2026-10-24T10:41:36.8822866Z ╰──── 2026-10-24T10:41:36.8823027Z  help: Consider removing this parameter. 2026-10-24T10:41:36.8823143Z 2026-10-24T10:41:36.8823329Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.8823776Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T10:41:36.8824074Z 1154 │ assert.deepStrictEqual( 2026-10-24T10:41:36.8824344Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T10:41:36.8824636Z ·  ┬ 2026-10-24T10:41:36.8824931Z · ╰── '_' is declared here 2026-10-24T10:41:36.8825150Z 1156 │ [ 2026-10-24T10:41:36.8825280Z ╰──── 2026-10-24T10:41:36.8825441Z  help: Consider removing this parameter. 2026-10-24T10:41:36.8825556Z 2026-10-24T10:41:36.8825749Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.8826091Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T10:41:36.8826333Z 35 │ (null); 2026-10-24T10:41:36.8828609Z 168 │ useLayoutEffect(() => { 2026-10-24T10:41:36.8828778Z ·  ───────┬─────── 2026-10-24T10:41:36.8829009Z · ╰── This is the containing effect 2026-10-24T10:41:36.8829235Z 169 │ if (faviconRequest === null) return; 2026-10-24T10:41:36.8829392Z 170 │ 2026-10-24T10:41:36.8829590Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T10:41:36.8829834Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T10:41:36.8830043Z ·  ───────────┬─────────── 2026-10-24T10:41:36.8830316Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8830554Z 173 │ return endRequest; 2026-10-24T10:41:36.8830691Z ╰──── 2026-10-24T10:41:36.8831359Z  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-24T10:41:36.8832217Z  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-24T10:41:36.8832521Z 2026-10-24T10:41:36.8832728Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T10:41:36.8833091Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T10:41:36.8833349Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T10:41:36.8833650Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T10:41:36.8833899Z ·  ─────┬───── 2026-10-24T10:41:36.8834138Z · ╰── 'HostProcess' is imported here 2026-10-24T10:41:36.8834333Z 26 │ 2026-10-24T10:41:36.8834446Z ╰──── 2026-10-24T10:41:36.8834604Z  help: Consider removing this import. 2026-10-24T10:41:36.8834716Z 2026-10-24T10:41:36.8834993Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8835417Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T10:41:36.8835669Z 123 │ const path = yield* Path.Path; 2026-10-24T10:41:36.8835891Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T10:41:36.8836111Z ·  ──────┬───── 2026-10-24T10:41:36.8836349Z · ╰── 'serverConfig' is declared here 2026-10-24T10:41:36.8837647Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T10:41:36.8837864Z ╰──── 2026-10-24T10:41:36.8838031Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8838151Z 2026-10-24T10:41:36.8838429Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8838853Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T10:41:36.8839136Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T10:41:36.8839407Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T10:41:36.8839657Z ·  ───────┬────── 2026-10-24T10:41:36.8839907Z · ╰── 'serverSettings' is declared here 2026-10-24T10:41:36.8840193Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T10:41:36.8840400Z ╰──── 2026-10-24T10:41:36.8840562Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8840680Z 2026-10-24T10:41:36.8840941Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8841346Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T10:41:36.8841683Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T10:41:36.8841925Z 113 │ useEffect(() => { 2026-10-24T10:41:36.8842092Z ·  ────┬──── 2026-10-24T10:41:36.8842314Z · ╰── This is the containing effect 2026-10-24T10:41:36.8842619Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T10:41:36.8842849Z 115 │ return; 2026-10-24T10:41:36.8842983Z 116 │ } 2026-10-24T10:41:36.8843171Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T10:41:36.8843377Z ·  ────┬─── 2026-10-24T10:41:36.8843637Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8843926Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T10:41:36.8844116Z ╰──── 2026-10-24T10:41:36.8844868Z  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-24T10:41:36.8845776Z  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-24T10:41:36.8846080Z 2026-10-24T10:41:36.8846264Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T10:41:36.8846634Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T10:41:36.8846929Z 115 │ return [...commands]; 2026-10-24T10:41:36.8847156Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T10:41:36.8847425Z ·  ─────────┬───────── 2026-10-24T10:41:36.8847736Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T10:41:36.8847966Z 117 │ 2026-10-24T10:41:36.8848082Z ╰──── 2026-10-24T10:41:36.8848453Z  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-24T10:41:36.8849060Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8849357Z 2026-10-24T10:41:36.8849617Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8850043Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T10:41:36.8850271Z 638 │ 2026-10-24T10:41:36.8850402Z 639 │ useEffect(() => { 2026-10-24T10:41:36.8850561Z ·  ────┬──── 2026-10-24T10:41:36.8850785Z · ╰── This is the containing effect 2026-10-24T10:41:36.8851035Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T10:41:36.8851227Z 641 │ return; 2026-10-24T10:41:36.8851358Z 642 │ } 2026-10-24T10:41:36.8851500Z 643 │ setPendingLaunchEntry({ 2026-10-24T10:41:36.8851689Z ·  ──────────┬────────── 2026-10-24T10:41:36.8851963Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8852203Z 644 │ key: launchTargetKey, 2026-10-24T10:41:36.8852341Z ╰──── 2026-10-24T10:41:36.8853005Z  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-24T10:41:36.8853864Z  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-24T10:41:36.8854168Z 2026-10-24T10:41:36.8854428Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8854844Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T10:41:36.8855071Z 648 │ 2026-10-24T10:41:36.8855200Z 649 │ useEffect(() => { 2026-10-24T10:41:36.8855442Z ·  ────┬──── 2026-10-24T10:41:36.8855694Z · ╰── This is the containing effect 2026-10-24T10:41:36.8855949Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T10:41:36.8856142Z 651 │ return; 2026-10-24T10:41:36.8856277Z 652 │ } 2026-10-24T10:41:36.8856424Z 653 │ setInitialAttachGridEntry({ 2026-10-24T10:41:36.8856624Z ·  ────────────┬──────────── 2026-10-24T10:41:36.8856935Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8857179Z 654 │ key: launchTargetKey, 2026-10-24T10:41:36.8857325Z ╰──── 2026-10-24T10:41:36.8857984Z  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-24T10:41:36.8858839Z  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-24T10:41:36.8859143Z 2026-10-24T10:41:36.8859402Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8859816Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T10:41:36.8860044Z 743 │ 2026-10-24T10:41:36.8860171Z 744 │ useEffect(() => { 2026-10-24T10:41:36.8860327Z ·  ────┬──── 2026-10-24T10:41:36.8860548Z · ╰── This is the containing effect 2026-10-24T10:41:36.8860790Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T10:41:36.8860984Z 746 │ setLastGridSize({ 2026-10-24T10:41:36.8861156Z ·  ───────┬─────── 2026-10-24T10:41:36.8861427Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8861676Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T10:41:36.8861835Z ╰──── 2026-10-24T10:41:36.8862490Z  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-24T10:41:36.8863426Z  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-24T10:41:36.8863762Z 2026-10-24T10:41:36.8863965Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8864339Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T10:41:36.8864571Z 537 │ }); 2026-10-24T10:41:36.8864767Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T10:41:36.8865017Z ·  ───────────┬────────── 2026-10-24T10:41:36.8865387Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T10:41:36.8865779Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T10:41:36.8866011Z ╰──── 2026-10-24T10:41:36.8866364Z  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-24T10:41:36.8866985Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8867282Z 2026-10-24T10:41:36.8867481Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8867850Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T10:41:36.8868121Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T10:41:36.8868305Z 709 │ }, [terminalKey]); 2026-10-24T10:41:36.8868468Z ·  ─────┬───── 2026-10-24T10:41:36.8868712Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T10:41:36.8868914Z 710 │ 2026-10-24T10:41:36.8869029Z ╰──── 2026-10-24T10:41:36.8869376Z  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-24T10:41:36.8869964Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8870258Z 2026-10-24T10:41:36.8870458Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8870829Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T10:41:36.8871061Z 799 │ }; 2026-10-24T10:41:36.8871317Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T10:41:36.8871687Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T10:41:36.8872092Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T10:41:36.8872511Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T10:41:36.8872765Z 801 │ 2026-10-24T10:41:36.8872880Z ╰──── 2026-10-24T10:41:36.8873229Z  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-24T10:41:36.8874028Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8874381Z 2026-10-24T10:41:36.8874531Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8874852Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T10:41:36.8875082Z 792 │ } 2026-10-24T10:41:36.8875254Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T10:41:36.8875492Z ·  ───────────┬─────────── 2026-10-24T10:41:36.8875780Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.8875993Z 794 │ 2026-10-24T10:41:36.8876108Z ╰──── 2026-10-24T10:41:36.8876731Z  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-24T10:41:36.8877619Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8878003Z 2026-10-24T10:41:36.8878267Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8878676Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T10:41:36.8878901Z 412 │ 2026-10-24T10:41:36.8879090Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T10:41:36.8879304Z ·  ──┬── 2026-10-24T10:41:36.8879526Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.8879715Z ╰──── 2026-10-24T10:41:36.8879878Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8879999Z 2026-10-24T10:41:36.8880258Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8880694Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T10:41:36.8880935Z 117 │ 2026-10-24T10:41:36.8881064Z 118 │ useEffect(() => { 2026-10-24T10:41:36.8881222Z ·  ────┬──── 2026-10-24T10:41:36.8881444Z · ╰── This is the containing effect 2026-10-24T10:41:36.8881661Z 119 │ void refreshNotifications(); 2026-10-24T10:41:36.8881860Z ·  ──────────┬───────── 2026-10-24T10:41:36.8882142Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8882459Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T10:41:36.8882669Z ╰──── 2026-10-24T10:41:36.8883323Z  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-24T10:41:36.8884177Z  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-24T10:41:36.8884482Z 2026-10-24T10:41:36.8884831Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8885302Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T10:41:36.8885543Z 125 │ 2026-10-24T10:41:36.8885669Z 126 │ useEffect(() => { 2026-10-24T10:41:36.8885827Z ·  ────┬──── 2026-10-24T10:41:36.8886043Z · ╰── This is the containing effect 2026-10-24T10:41:36.8886246Z 127 │ if (!isLoaded) { 2026-10-24T10:41:36.8886425Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T10:41:36.8886628Z ·  ──────────┬────────── 2026-10-24T10:41:36.8886943Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8887183Z 129 │ return; 2026-10-24T10:41:36.8887320Z ╰──── 2026-10-24T10:41:36.8887974Z  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-24T10:41:36.8888830Z  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-24T10:41:36.8889135Z 2026-10-24T10:41:36.8889335Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T10:41:36.8889706Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T10:41:36.8889950Z 1782 │ assert.equal( 2026-10-24T10:41:36.8890193Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T10:41:36.8890457Z ·  ────────────────────────── 2026-10-24T10:41:36.8890662Z 1784 │ stored.attachments[0]?.id, 2026-10-24T10:41:36.8890818Z ╰──── 2026-10-24T10:41:36.8891055Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T10:41:36.8891229Z 2026-10-24T10:41:36.8891490Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8891901Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T10:41:36.8892134Z 259 │ .join("|"); 2026-10-24T10:41:36.8892286Z 260 │ useEffect(() => { 2026-10-24T10:41:36.8892453Z ·  ────┬──── 2026-10-24T10:41:36.8892678Z · ╰── This is the containing effect 2026-10-24T10:41:36.8892881Z 261 │ stop(); 2026-10-24T10:41:36.8893026Z ·  ──┬─ 2026-10-24T10:41:36.8893280Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8893511Z 262 │ }, [orderVersion]); 2026-10-24T10:41:36.8893652Z ╰──── 2026-10-24T10:41:36.8894307Z  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-24T10:41:36.8895237Z  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-24T10:41:36.8895659Z 2026-10-24T10:41:36.8895987Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T10:41:36.8896366Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T10:41:36.8896599Z 260 │ useEffect(() => { 2026-10-24T10:41:36.8896748Z 261 │ stop(); 2026-10-24T10:41:36.8896920Z ·  ──┬─ 2026-10-24T10:41:36.8897134Z · ╰── Missing dependency `stop` 2026-10-24T10:41:36.8897336Z 262 │ }, [orderVersion]); 2026-10-24T10:41:36.8897503Z ·  ──────┬───── 2026-10-24T10:41:36.8897747Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T10:41:36.8897967Z 263 │ useEffect( 2026-10-24T10:41:36.8898100Z ╰──── 2026-10-24T10:41:36.8898581Z  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-24T10:41:36.8899279Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8899576Z 2026-10-24T10:41:36.8899726Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8900038Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T10:41:36.8900283Z 95 │ const latest = useRef(props); 2026-10-24T10:41:36.8900452Z 96 │ latest.current = props; 2026-10-24T10:41:36.8900657Z ·  ───┬──────┬─── 2026-10-24T10:41:36.8900953Z · │ ╰── Cannot update ref value during render 2026-10-24T10:41:36.8901241Z · ╰── This value is a ref 2026-10-24T10:41:36.8901437Z 97 │ const gesture = useMemo( 2026-10-24T10:41:36.8901579Z ╰──── 2026-10-24T10:41:36.8902106Z  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-24T10:41:36.8902821Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8903099Z 2026-10-24T10:41:36.8903253Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8903571Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T10:41:36.8903805Z 103 │ .runOnJS(true) 2026-10-24T10:41:36.8903993Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T10:41:36.8904233Z ·  ───────────────┬────────────── 2026-10-24T10:41:36.8904558Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.8904889Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8905088Z ╰──── 2026-10-24T10:41:36.8905706Z  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-24T10:41:36.8906577Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8906899Z 2026-10-24T10:41:36.8907048Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8907357Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T10:41:36.8907624Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T10:41:36.8907876Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8908173Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T10:41:36.8908529Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.8908857Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8909049Z ╰──── 2026-10-24T10:41:36.8909574Z  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-24T10:41:36.8910281Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8910560Z 2026-10-24T10:41:36.8910705Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8911020Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T10:41:36.8911323Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8911592Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8911878Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T10:41:36.8912226Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.8912549Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T10:41:36.8912811Z ╰──── 2026-10-24T10:41:36.8913414Z  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-24T10:41:36.8914156Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8914435Z 2026-10-24T10:41:36.8914581Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8914893Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T10:41:36.8915182Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8915444Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T10:41:36.8915726Z ·  ───────────────────────┬────────────────────── 2026-10-24T10:41:36.8916077Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.8916347Z 108 │ [props.disabled], 2026-10-24T10:41:36.8916487Z ╰──── 2026-10-24T10:41:36.8917131Z  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-24T10:41:36.8917837Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8918114Z 2026-10-24T10:41:36.8918260Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8918572Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T10:41:36.8918855Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T10:41:36.8919095Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T10:41:36.8919326Z ·  ───┬──────┬─── 2026-10-24T10:41:36.8919619Z · │ ╰── Cannot update ref value during render 2026-10-24T10:41:36.8919912Z · ╰── This value is a ref 2026-10-24T10:41:36.8920088Z 250 │ 2026-10-24T10:41:36.8920206Z ╰──── 2026-10-24T10:41:36.8920724Z  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-24T10:41:36.8921437Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8921717Z 2026-10-24T10:41:36.8921861Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.8922173Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T10:41:36.8922460Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T10:41:36.8922711Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T10:41:36.8922974Z ·  ──────────────────┬────────────────── 2026-10-24T10:41:36.8923274Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.8923550Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T10:41:36.8923732Z ╰──── 2026-10-24T10:41:36.8924355Z  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-24T10:41:36.8925119Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.8925396Z 2026-10-24T10:41:36.8925566Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.8925901Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T10:41:36.8926134Z 323 │ update(0); 2026-10-24T10:41:36.8926302Z 324 │ let last = performance.now(); 2026-10-24T10:41:36.8926503Z ·  ────────┬──────── 2026-10-24T10:41:36.8926795Z · ╰── Cannot call impure function 2026-10-24T10:41:36.8927011Z 325 │ const tick = () => { 2026-10-24T10:41:36.8927155Z ╰──── 2026-10-24T10:41:36.8927512Z  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-24T10:41:36.8928092Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.8928373Z 2026-10-24T10:41:36.8928565Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T10:41:36.8928915Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T10:41:36.8929143Z  98 │ () => 2026-10-24T10:41:36.8929292Z  99 │ Gesture.Pan() 2026-10-24T10:41:36.8929458Z ·  ─┬─ 2026-10-24T10:41:36.8929689Z · ╰── `Pan` may be a component 2026-10-24T10:41:36.8929910Z 100 │ .enabled(!props.disabled) 2026-10-24T10:41:36.8930062Z ╰──── 2026-10-24T10:41:36.8930398Z  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-24T10:41:36.8931102Z  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-24T10:41:36.8931506Z 2026-10-24T10:41:36.8931697Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T10:41:36.8932047Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T10:41:36.8932282Z 103 │ .runOnJS(true) 2026-10-24T10:41:36.8932468Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T10:41:36.8932678Z ·  ───┬── 2026-10-24T10:41:36.8933218Z · ╰── 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-24T10:41:36.8933739Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8934010Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T10:41:36.8934277Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T10:41:36.8934562Z 108 │ [props.disabled], 2026-10-24T10:41:36.8934782Z ·  ────────┬─────── 2026-10-24T10:41:36.8935067Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.8935309Z 109 │ ); 2026-10-24T10:41:36.8941337Z ╰──── 2026-10-24T10:41:36.8941626Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T10:41:36.8942151Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8942449Z 2026-10-24T10:41:36.8942668Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T10:41:36.8943020Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T10:41:36.8943243Z 89 │ let cursor = prompt.length; 2026-10-24T10:41:36.8943445Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T10:41:36.8943674Z ·  ─────── 2026-10-24T10:41:36.8943871Z 91 │ let { start, end } = occurrence; 2026-10-24T10:41:36.8944025Z ╰──── 2026-10-24T10:41:36.8944346Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T10:41:36.8944593Z 2026-10-24T10:41:36.8944843Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T10:41:36.8945194Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T10:41:36.8945374Z 55 │ 2026-10-24T10:41:36.8945541Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T10:41:36.8945775Z ·  ────────────────┬──────────────── 2026-10-24T10:41:36.8946089Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T10:41:36.8946363Z 57 │ selection: TerminalContextSelection, 2026-10-24T10:41:36.8946525Z ╰──── 2026-10-24T10:41:36.8946687Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8946837Z 2026-10-24T10:41:36.8947312Z ⚠ 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-24T10:41:36.8947904Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T10:41:36.8948188Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T10:41:36.8948508Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T10:41:36.8948797Z 567 │ │ const nextEvent = { 2026-10-24T10:41:36.8949072Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T10:41:36.8949372Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T10:41:36.8949610Z 570 │ │ threadId, 2026-10-24T10:41:36.8949823Z 571 │ │ providerInstanceId, 2026-10-24T10:41:36.8950043Z 572 │ │ occurredAt: now, 2026-10-24T10:41:36.8950309Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T10:41:36.8950691Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T10:41:36.8950988Z 575 │ │ const reader = yield* eventSink 2026-10-24T10:41:36.8951238Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T10:41:36.8951504Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T10:41:36.8951754Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8952038Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T10:41:36.8952337Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T10:41:36.8952593Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T10:41:36.8952933Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T10:41:36.8953213Z 583 │ │ } 2026-10-24T10:41:36.8953477Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T10:41:36.8953793Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T10:41:36.8954080Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T10:41:36.8954357Z 587 │ ╰─▶ } 2026-10-24T10:41:36.8954558Z 588 │ }), 2026-10-24T10:41:36.8954685Z ╰──── 2026-10-24T10:41:36.8954743Z 2026-10-24T10:41:36.8955220Z ⚠ 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-24T10:41:36.8955816Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T10:41:36.8956073Z 2326 │ let settled = false; 2026-10-24T10:41:36.8956335Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T10:41:36.8956799Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T10:41:36.8957102Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T10:41:36.8957328Z 2330 │ │ ); 2026-10-24T10:41:36.8957556Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T10:41:36.8958058Z 2332 │ ╰─▶ } 2026-10-24T10:41:36.8958384Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T10:41:36.8958569Z ╰──── 2026-10-24T10:41:36.8958626Z 2026-10-24T10:41:36.8958936Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8959384Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T10:41:36.8959606Z 345 │ 2026-10-24T10:41:36.8959713Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T10:41:36.8959815Z ·  ────────────┬─────────── 2026-10-24T10:41:36.8959984Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T10:41:36.8960065Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T10:41:36.8960120Z ╰──── 2026-10-24T10:41:36.8960235Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8960241Z 2026-10-24T10:41:36.8960464Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T10:41:36.8960599Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T10:41:36.8960671Z 113 │ const declared = { 2026-10-24T10:41:36.8960765Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T10:41:36.8960881Z ·  ──────────────────────────────── 2026-10-24T10:41:36.8960988Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T10:41:36.8961045Z ╰──── 2026-10-24T10:41:36.8961317Z  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-24T10:41:36.8961320Z 2026-10-24T10:41:36.8961547Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T10:41:36.8961684Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T10:41:36.8961777Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T10:41:36.8961882Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T10:41:36.8962007Z ·  ──────────────────────────────────────── 2026-10-24T10:41:36.8962109Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T10:41:36.8962163Z ╰──── 2026-10-24T10:41:36.8962430Z  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-24T10:41:36.8962432Z 2026-10-24T10:41:36.8962656Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T10:41:36.8962786Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T10:41:36.8962890Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T10:41:36.8962987Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T10:41:36.8963108Z ·  ──────────────────────────────────── 2026-10-24T10:41:36.8963169Z 117 │ }; 2026-10-24T10:41:36.8963223Z ╰──── 2026-10-24T10:41:36.8963485Z  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-24T10:41:36.8963487Z 2026-10-24T10:41:36.8963749Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8963983Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T10:41:36.8964074Z 55 │ 2026-10-24T10:41:36.8964147Z 56 │ useEffect(() => { 2026-10-24T10:41:36.8964224Z ·  ────┬──── 2026-10-24T10:41:36.8964358Z · ╰── This is the containing effect 2026-10-24T10:41:36.8964430Z 57 │ setDecodedSize(null); 2026-10-24T10:41:36.8964511Z ·  ───────┬────── 2026-10-24T10:41:36.8964684Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8964755Z 58 │ }, [props.sourceKey]); 2026-10-24T10:41:36.8964812Z ╰──── 2026-10-24T10:41:36.8965432Z  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-24T10:41:36.8965764Z  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-24T10:41:36.8965766Z 2026-10-24T10:41:36.8966026Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.8966180Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T10:41:36.8966238Z 59 │ 2026-10-24T10:41:36.8966305Z 60 │ useEffect(() => { 2026-10-24T10:41:36.8966378Z ·  ────┬──── 2026-10-24T10:41:36.8966507Z · ╰── This is the containing effect 2026-10-24T10:41:36.8966584Z 61 │ setFailedUri(null); 2026-10-24T10:41:36.8966666Z ·  ──────┬───── 2026-10-24T10:41:36.8966873Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.8966939Z 62 │ }, [props.uri]); 2026-10-24T10:41:36.8966992Z ╰──── 2026-10-24T10:41:36.8967589Z  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-24T10:41:36.8967912Z  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-24T10:41:36.8967914Z 2026-10-24T10:41:36.8968135Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T10:41:36.8968292Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T10:41:36.8968421Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T10:41:36.8968603Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T10:41:36.8968694Z ·  ────────┬──────── 2026-10-24T10:41:36.8968849Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T10:41:36.8968904Z 8 │ 2026-10-24T10:41:36.8968958Z ╰──── 2026-10-24T10:41:36.8969059Z  help: Consider removing this import. 2026-10-24T10:41:36.8969062Z 2026-10-24T10:41:36.8969341Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8969536Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T10:41:36.8969607Z 57 │ setDecodedSize(null); 2026-10-24T10:41:36.8969677Z 58 │ }, [props.sourceKey]); 2026-10-24T10:41:36.8969761Z ·  ───────┬─────── 2026-10-24T10:41:36.8969922Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T10:41:36.8969975Z 59 │ 2026-10-24T10:41:36.8970028Z ╰──── 2026-10-24T10:41:36.8970319Z  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-24T10:41:36.8970632Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8970641Z 2026-10-24T10:41:36.8970846Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.8970997Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T10:41:36.8971066Z 61 │ setFailedUri(null); 2026-10-24T10:41:36.8971133Z 62 │ }, [props.uri]); 2026-10-24T10:41:36.8971211Z ·  ────┬──── 2026-10-24T10:41:36.8971355Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T10:41:36.8971408Z 63 │ 2026-10-24T10:41:36.8971462Z ╰──── 2026-10-24T10:41:36.8971753Z  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-24T10:41:36.8972070Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8972076Z 2026-10-24T10:41:36.8972270Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T10:41:36.8972366Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T10:41:36.8972459Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T10:41:36.8972546Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T10:41:36.8972624Z ·  ──┬── 2026-10-24T10:41:36.8972756Z · ╰── 'Fiber' is imported here 2026-10-24T10:41:36.8972861Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T10:41:36.8972915Z ╰──── 2026-10-24T10:41:36.8973015Z  help: Consider removing this import. 2026-10-24T10:41:36.8973017Z 2026-10-24T10:41:36.8973222Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T10:41:36.8973320Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T10:41:36.8973403Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T10:41:36.8973497Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T10:41:36.8973575Z ·  ────┬─── 2026-10-24T10:41:36.8973711Z · ╰── 'Schedule' is imported here 2026-10-24T10:41:36.8973799Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T10:41:36.8973853Z ╰──── 2026-10-24T10:41:36.8973950Z  help: Consider removing this import. 2026-10-24T10:41:36.8973952Z 2026-10-24T10:41:36.8974323Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.8974460Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T10:41:36.8974619Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T10:41:36.8974820Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T10:41:36.8974931Z ·  ────────────┬─────────── 2026-10-24T10:41:36.8975107Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T10:41:36.8975280Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T10:41:36.8975335Z ╰──── 2026-10-24T10:41:36.8975440Z  help: Consider removing this declaration. 2026-10-24T10:41:36.8975443Z 2026-10-24T10:41:36.8975619Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.8975787Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T10:41:36.8975970Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T10:41:36.8976142Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T10:41:36.8976286Z ·  ─────┬──── 2026-10-24T10:41:36.8976476Z · ╰── Cannot call impure function 2026-10-24T10:41:36.8976616Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T10:41:36.8976669Z ╰──── 2026-10-24T10:41:36.8976999Z  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-24T10:41:36.8977301Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.8977303Z 2026-10-24T10:41:36.8977473Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.8977631Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T10:41:36.8977714Z 717 │ const snoozePresets = useMemo( 2026-10-24T10:41:36.8977896Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T10:41:36.8978032Z ·  ─────┬──── 2026-10-24T10:41:36.8978291Z · ╰── Cannot call impure function 2026-10-24T10:41:36.8978445Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T10:41:36.8978529Z ╰──── 2026-10-24T10:41:36.8978879Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T10:41:36.8979175Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.8979178Z 2026-10-24T10:41:36.8979359Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T10:41:36.8979518Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T10:41:36.8979705Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T10:41:36.8979825Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T10:41:36.8979922Z ·  ────────────┬─────────── 2026-10-24T10:41:36.8980101Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T10:41:36.8980160Z 720 │ ); 2026-10-24T10:41:36.8980215Z ╰──── 2026-10-24T10:41:36.8980531Z  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-24T10:41:36.8980843Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8980846Z 2026-10-24T10:41:36.8981033Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T10:41:36.8981192Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T10:41:36.8981263Z 764 │ thread.pinnedAt, 2026-10-24T10:41:36.8981327Z 765 │ variant, 2026-10-24T10:41:36.8981403Z ·  ───┬─── 2026-10-24T10:41:36.8981543Z · ╰── Unnecessary dependency `variant` 2026-10-24T10:41:36.8981603Z 766 │ ], 2026-10-24T10:41:36.8981655Z ╰──── 2026-10-24T10:41:36.8981968Z  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-24T10:41:36.8982284Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8982289Z 2026-10-24T10:41:36.8982486Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.8982649Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T10:41:36.8982783Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T10:41:36.8982921Z 1215 │ 2026-10-24T10:41:36.8983038Z ·  ────────────────────────── 2026-10-24T10:41:36.8983152Z 1216 │ 2026-10-24T10:41:36.8983205Z ╰──── 2026-10-24T10:41:36.8983355Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T10:41:36.8983457Z 2026-10-24T10:41:36.8983667Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T10:41:36.8983867Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T10:41:36.8984007Z 219 │ 2026-10-24T10:41:36.8984148Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T10:41:36.8984260Z ·  ──┬─ 2026-10-24T10:41:36.8984430Z · ╰── 'U+001B' is a control character. 2026-10-24T10:41:36.8984498Z 221 │ 2026-10-24T10:41:36.8984550Z ╰──── 2026-10-24T10:41:36.8984790Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T10:41:36.8984796Z 2026-10-24T10:41:36.8984979Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T10:41:36.8985141Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T10:41:36.8985246Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T10:41:36.8985432Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T10:41:36.8985581Z ·  ─────┬───── 2026-10-24T10:41:36.8985786Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T10:41:36.8985875Z 101 │ const readEditor = useCallback( 2026-10-24T10:41:36.8985930Z ╰──── 2026-10-24T10:41:36.8986243Z  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-24T10:41:36.8986558Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8986561Z 2026-10-24T10:41:36.8986741Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T10:41:36.8986935Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T10:41:36.8987001Z 120 │ setEditor, 2026-10-24T10:41:36.8987067Z 121 │ startEditor, 2026-10-24T10:41:36.8987147Z ·  ─────┬───── 2026-10-24T10:41:36.8987297Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T10:41:36.8987364Z 122 │ hasChanges, 2026-10-24T10:41:36.8987417Z ╰──── 2026-10-24T10:41:36.8987726Z  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-24T10:41:36.8988035Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.8988039Z 2026-10-24T10:41:36.8988215Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T10:41:36.8988337Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T10:41:36.8988547Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T10:41:36.8988671Z 194 │ const codes = new Array(count); 2026-10-24T10:41:36.8988781Z ·  ──────────────────────── 2026-10-24T10:41:36.8988887Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T10:41:36.8988940Z ╰──── 2026-10-24T10:41:36.8989359Z  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-24T10:41:36.8989362Z 2026-10-24T10:41:36.8989569Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T10:41:36.8989740Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T10:41:36.8989822Z 14 │ } from "@t3tools/contracts"; 2026-10-24T10:41:36.8989917Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T10:41:36.8989991Z ·  ── 2026-10-24T10:41:36.8990175Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T10:41:36.8990228Z ╰──── 2026-10-24T10:41:36.8990312Z  help: Remove empty braces 2026-10-24T10:41:36.8990315Z 2026-10-24T10:41:36.8990501Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T10:41:36.8990656Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T10:41:36.8990829Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T10:41:36.8990908Z 602 │ const gesture = Gesture.Pan() 2026-10-24T10:41:36.8990996Z ·  ─┬─ 2026-10-24T10:41:36.8991144Z · ╰── `Pan` may be a component 2026-10-24T10:41:36.8991225Z 603 │ .enabled(!props.disabled) 2026-10-24T10:41:36.8991278Z ╰──── 2026-10-24T10:41:36.8991558Z  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-24T10:41:36.8992000Z  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-24T10:41:36.8992003Z 2026-10-24T10:41:36.8992480Z ⚠ 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-24T10:41:36.8992618Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T10:41:36.8992718Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T10:41:36.8992953Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T10:41:36.8993078Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T10:41:36.8993231Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T10:41:36.8993366Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T10:41:36.8993467Z 2619 │ │ flush: () => { 2026-10-24T10:41:36.8993661Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T10:41:36.8993840Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T10:41:36.8993925Z 2622 │ │ }, 2026-10-24T10:41:36.8994007Z 2623 │ │ }; 2026-10-24T10:41:36.8994078Z 2624 │ │ 2026-10-24T10:41:36.8994241Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T10:41:36.8994349Z 2626 │ │ let requestChecks = 0; 2026-10-24T10:41:36.8994482Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T10:41:36.8994593Z 2628 │ │ executionMode: "async", 2026-10-24T10:41:36.8994717Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T10:41:36.8994838Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T10:41:36.8994977Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T10:41:36.8995082Z 2632 │ │ requestChecks += 1; 2026-10-24T10:41:36.8995226Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T10:41:36.8995343Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T10:41:36.8995443Z 2635 │ │ return true; 2026-10-24T10:41:36.8995525Z 2636 │ │ }, 2026-10-24T10:41:36.8995607Z 2637 │ │ }; 2026-10-24T10:41:36.8995679Z 2638 │ │ 2026-10-24T10:41:36.8995802Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T10:41:36.8995902Z 2640 │ │ ...WINDOW, 2026-10-24T10:41:36.8996037Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T10:41:36.8996233Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T10:41:36.8996315Z 2643 │ │ }; 2026-10-24T10:41:36.8996426Z 2644 │ │ const first = yield* service 2026-10-24T10:41:36.8996532Z 2645 │ │ .readSummary(input) 2026-10-24T10:41:36.8996697Z 2646 │ │ .pipe( 2026-10-24T10:41:36.8996832Z 2647 │ │ Effect.exit, 2026-10-24T10:41:36.8996992Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T10:41:36.8997103Z 2649 │ │ Effect.forkChild, 2026-10-24T10:41:36.8997188Z 2650 │ │ ); 2026-10-24T10:41:36.8997292Z 2651 │ │ requestFiber = first; 2026-10-24T10:41:36.8997398Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8997502Z 2653 │ │ dispatcher.flush(); 2026-10-24T10:41:36.8997573Z 2654 │ │ 2026-10-24T10:41:36.8997725Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T10:41:36.8997823Z 2656 │ │ Effect.match({ 2026-10-24T10:41:36.8997948Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T10:41:36.8998073Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T10:41:36.8998159Z 2659 │ │ }), 2026-10-24T10:41:36.8998521Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T10:41:36.8998661Z 2661 │ │ Effect.forkChild, 2026-10-24T10:41:36.8998743Z 2662 │ │ ); 2026-10-24T10:41:36.8998849Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.8998952Z 2664 │ │ dispatcher.flush(); 2026-10-24T10:41:36.8999078Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T10:41:36.8999195Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T10:41:36.8999311Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T10:41:36.8999425Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T10:41:36.8999518Z 2669 │ │ break; 2026-10-24T10:41:36.8999603Z 2670 │ │ } 2026-10-24T10:41:36.8999723Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T10:41:36.8999881Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T10:41:36.8999960Z 2673 │ │ } 2026-10-24T10:41:36.9000115Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T10:41:36.9000250Z 2675 │ ╰─▶ } 2026-10-24T10:41:36.9000307Z 2676 │ 2026-10-24T10:41:36.9000361Z ╰──── 2026-10-24T10:41:36.9000364Z 2026-10-24T10:41:36.9000570Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T10:41:36.9000671Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T10:41:36.9000749Z 21 │ EnvironmentThreadShell, 2026-10-24T10:41:36.9000815Z 22 │ ThreadRunSummary, 2026-10-24T10:41:36.9000898Z ·  ────────┬─────── 2026-10-24T10:41:36.9001041Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T10:41:36.9001113Z 23 │ ThreadRuntimeSummary, 2026-10-24T10:41:36.9001165Z ╰──── 2026-10-24T10:41:36.9001263Z  help: Consider removing this import. 2026-10-24T10:41:36.9001266Z 2026-10-24T10:41:36.9001732Z ⚠ 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-24T10:41:36.9001919Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T10:41:36.9001994Z 222 │ let idlePasses = 0; 2026-10-24T10:41:36.9002138Z 223 │ ╭─▶ for (;;) { 2026-10-24T10:41:36.9002276Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T10:41:36.9002422Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T10:41:36.9002518Z 226 │ │ if (!pending) { 2026-10-24T10:41:36.9002614Z 227 │ │ idlePasses++; 2026-10-24T10:41:36.9002721Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T10:41:36.9002811Z 229 │ │ return; 2026-10-24T10:41:36.9002890Z 230 │ │ } 2026-10-24T10:41:36.9002978Z 231 │ │ continue; 2026-10-24T10:41:36.9003125Z 232 │ │ } 2026-10-24T10:41:36.9003252Z 233 │ │ idlePasses = 0; 2026-10-24T10:41:36.9003369Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T10:41:36.9003585Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T10:41:36.9003664Z 236 │ │ ); 2026-10-24T10:41:36.9003772Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T10:41:36.9003877Z 238 │ │ pending.resolve(exit); 2026-10-24T10:41:36.9003956Z 239 │ │ }); 2026-10-24T10:41:36.9004087Z 240 │ ╰─▶ } 2026-10-24T10:41:36.9004146Z 241 │ }, 2026-10-24T10:41:36.9004198Z ╰──── 2026-10-24T10:41:36.9004207Z 2026-10-24T10:41:36.9004482Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9004601Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T10:41:36.9004657Z 168 │ 2026-10-24T10:41:36.9004735Z 169 │ const layerTest = Layer.succeed( 2026-10-24T10:41:36.9004812Z ·  ────┬──── 2026-10-24T10:41:36.9004949Z · ╰── 'layerTest' is declared here 2026-10-24T10:41:36.9005015Z 170 │ UsageService, 2026-10-24T10:41:36.9005067Z ╰──── 2026-10-24T10:41:36.9005172Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9005174Z 2026-10-24T10:41:36.9005441Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9005611Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T10:41:36.9005667Z 211 │ }; 2026-10-24T10:41:36.9005733Z 212 │ useEffect(() => { 2026-10-24T10:41:36.9005807Z ·  ────┬──── 2026-10-24T10:41:36.9005939Z · ╰── This is the containing effect 2026-10-24T10:41:36.9006113Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T10:41:36.9006179Z 214 │ if (inserted) { 2026-10-24T10:41:36.9006257Z 215 │ setSelection((current) => 2026-10-24T10:41:36.9006337Z ·  ──────┬───── 2026-10-24T10:41:36.9006510Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9006795Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T10:41:36.9006877Z ╰──── 2026-10-24T10:41:36.9007479Z  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-24T10:41:36.9007805Z  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-24T10:41:36.9007808Z 2026-10-24T10:41:36.9008065Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9008234Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T10:41:36.9008315Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T10:41:36.9008380Z 285 │ useEffect(() => { 2026-10-24T10:41:36.9008452Z ·  ────┬──── 2026-10-24T10:41:36.9008583Z · ╰── This is the containing effect 2026-10-24T10:41:36.9008733Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T10:41:36.9008883Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T10:41:36.9008954Z 288 │ const now = Date.now(); 2026-10-24T10:41:36.9009067Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T10:41:36.9009126Z 290 │ if ( 2026-10-24T10:41:36.9009204Z 291 │ lastRequest?.key === key && 2026-10-24T10:41:36.9009348Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T10:41:36.9009407Z 293 │ ) 2026-10-24T10:41:36.9009470Z 294 │ return; 2026-10-24T10:41:36.9009650Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T10:41:36.9009736Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T10:41:36.9009833Z ·  ────────────┬─────────── 2026-10-24T10:41:36.9010012Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9010073Z 297 │ return; 2026-10-24T10:41:36.9010125Z ╰──── 2026-10-24T10:41:36.9010727Z  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-24T10:41:36.9011052Z  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-24T10:41:36.9011055Z 2026-10-24T10:41:36.9011257Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9011422Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T10:41:36.9011478Z 325 │ }, [ 2026-10-24T10:41:36.9011544Z 326 │ draftMessage, 2026-10-24T10:41:36.9011622Z ·  ──────┬───── 2026-10-24T10:41:36.9011772Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T10:41:36.9011838Z 327 │ environmentId, 2026-10-24T10:41:36.9011891Z ╰──── 2026-10-24T10:41:36.9012258Z  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-24T10:41:36.9012600Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9012603Z 2026-10-24T10:41:36.9012835Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T10:41:36.9012953Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T10:41:36.9013007Z 11 │ 2026-10-24T10:41:36.9013107Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T10:41:36.9013211Z ·  ────────────┬──────────── 2026-10-24T10:41:36.9013388Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T10:41:36.9013459Z 13 │ readonly thread: { 2026-10-24T10:41:36.9013512Z ╰──── 2026-10-24T10:41:36.9013618Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9013621Z 2026-10-24T10:41:36.9013989Z ⚠ 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-24T10:41:36.9014117Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T10:41:36.9014254Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T10:41:36.9014387Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T10:41:36.9014495Z ·  ──────────────────────── 2026-10-24T10:41:36.9014641Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T10:41:36.9014698Z ╰──── 2026-10-24T10:41:36.9014700Z 2026-10-24T10:41:36.9015064Z ⚠ 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-24T10:41:36.9015188Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T10:41:36.9015288Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T10:41:36.9015445Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T10:41:36.9015562Z ·  ──────────────────────── 2026-10-24T10:41:36.9015625Z 257 │ return [ 2026-10-24T10:41:36.9015678Z ╰──── 2026-10-24T10:41:36.9015681Z 2026-10-24T10:41:36.9015887Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T10:41:36.9015995Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T10:41:36.9016085Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T10:41:36.9016176Z 28 │ import { identity } from "effect/Function"; 2026-10-24T10:41:36.9016253Z ·  ────┬─── 2026-10-24T10:41:36.9016389Z · ╰── 'identity' is imported here 2026-10-24T10:41:36.9016475Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T10:41:36.9016527Z ╰──── 2026-10-24T10:41:36.9016625Z  help: Consider removing this import. 2026-10-24T10:41:36.9016628Z 2026-10-24T10:41:36.9016897Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T10:41:36.9017112Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T10:41:36.9017270Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T10:41:36.9017515Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T10:41:36.9017640Z 986 │ │ (approval) => approval.requestId, 2026-10-24T10:41:36.9017775Z 987 │ ╰─▶ ); 2026-10-24T10:41:36.9017914Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T10:41:36.9017969Z ╰──── 2026-10-24T10:41:36.9018047Z  help: Switch to `Set` 2026-10-24T10:41:36.9018049Z 2026-10-24T10:41:36.9018313Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9018470Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5] 2026-10-24T10:41:36.9018531Z 521 │ }, []); 2026-10-24T10:41:36.9018598Z 522 │ useEffect(() => { 2026-10-24T10:41:36.9018673Z ·  ────┬──── 2026-10-24T10:41:36.9018804Z · ╰── This is the containing effect 2026-10-24T10:41:36.9018892Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T10:41:36.9018984Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9019160Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9019260Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T10:41:36.9019313Z ╰──── 2026-10-24T10:41:36.9019919Z  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-24T10:41:36.9020242Z  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-24T10:41:36.9020245Z 2026-10-24T10:41:36.9020502Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9020654Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7] 2026-10-24T10:41:36.9020814Z 885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T10:41:36.9020880Z 886 │ useEffect(() => { 2026-10-24T10:41:36.9020958Z ·  ────┬──── 2026-10-24T10:41:36.9021090Z · ╰── This is the containing effect 2026-10-24T10:41:36.9021250Z 887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T10:41:36.9021364Z 888 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T10:41:36.9021463Z ·  ─────────────┬──────────── 2026-10-24T10:41:36.9021640Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9021698Z 889 │ } 2026-10-24T10:41:36.9021751Z ╰──── 2026-10-24T10:41:36.9022416Z  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-24T10:41:36.9022772Z  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-24T10:41:36.9022775Z 2026-10-24T10:41:36.9023030Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9023187Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5] 2026-10-24T10:41:36.9023243Z 1133 │ 2026-10-24T10:41:36.9023313Z 1134 │ useEffect(() => { 2026-10-24T10:41:36.9023387Z ·  ────┬──── 2026-10-24T10:41:36.9023521Z · ╰── This is the containing effect 2026-10-24T10:41:36.9023605Z 1135 │ setAnchorMessageId(null); 2026-10-24T10:41:36.9023695Z ·  ─────────┬──────── 2026-10-24T10:41:36.9023866Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9023950Z 1136 │ setSubmittedMessageId(null); 2026-10-24T10:41:36.9024004Z ╰──── 2026-10-24T10:41:36.9024598Z  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-24T10:41:36.9024918Z  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-24T10:41:36.9024921Z 2026-10-24T10:41:36.9025125Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9025280Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7] 2026-10-24T10:41:36.9025368Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T10:41:36.9025468Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T10:41:36.9025615Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T10:41:36.9025826Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T10:41:36.9025988Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T10:41:36.9026117Z 525 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T10:41:36.9026171Z ╰──── 2026-10-24T10:41:36.9026471Z  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-24T10:41:36.9026811Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9026814Z 2026-10-24T10:41:36.9027014Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9027170Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7] 2026-10-24T10:41:36.9027257Z 1082 │ userInputInsetProgress.set(1); 2026-10-24T10:41:36.9027423Z 1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T10:41:36.9027586Z ·  ────────────┬─────────── 2026-10-24T10:41:36.9027799Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T10:41:36.9027907Z 1084 │ const showContent = props.showContent ?? true; 2026-10-24T10:41:36.9027962Z ╰──── 2026-10-24T10:41:36.9028257Z  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-24T10:41:36.9028565Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9028568Z 2026-10-24T10:41:36.9028768Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9028928Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15] 2026-10-24T10:41:36.9029003Z 1140 │ freeze.set(false); 2026-10-24T10:41:36.9029088Z 1141 │ }, [freeze, selectedThreadKey]); 2026-10-24T10:41:36.9029184Z ·  ────────┬──────── 2026-10-24T10:41:36.9029349Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T10:41:36.9029406Z 1142 │ 2026-10-24T10:41:36.9029459Z ╰──── 2026-10-24T10:41:36.9029750Z  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-24T10:41:36.9030058Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9030060Z 2026-10-24T10:41:36.9030224Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9030379Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5] 2026-10-24T10:41:36.9030491Z 966 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T10:41:36.9030598Z 967 │ const floatingControlCoverage = useSharedValue( 2026-10-24T10:41:36.9030695Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9030860Z · ╰── `floatingControlCoverage` originates here 2026-10-24T10:41:36.9030988Z 968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T10:41:36.9031044Z 969 │ ); 2026-10-24T10:41:36.9031110Z 970 │ useEffect(() => { 2026-10-24T10:41:36.9031217Z 971 │ floatingControlCoverage.value = withTiming( 2026-10-24T10:41:36.9031309Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9031551Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T10:41:36.9031706Z 972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T10:41:36.9031760Z ╰──── 2026-10-24T10:41:36.9032027Z  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-24T10:41:36.9032332Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9032335Z 2026-10-24T10:41:36.9032491Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9032645Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7] 2026-10-24T10:41:36.9032838Z 979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T10:41:36.9032966Z 980 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T10:41:36.9033079Z ·  ────────────────┬──────────────── 2026-10-24T10:41:36.9033268Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T10:41:36.9033398Z 981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T10:41:36.9033455Z 982 │ ); 2026-10-24T10:41:36.9033526Z 983 │ useAnimatedReaction( 2026-10-24T10:41:36.9033587Z 984 │ () => 2026-10-24T10:41:36.9033679Z 985 │ contentInsetEndAdjustment.value + 2026-10-24T10:41:36.9033768Z 986 │ floatingControlCoverage.value + 2026-10-24T10:41:36.9033964Z 987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T10:41:36.9034035Z 988 │ (value) => { 2026-10-24T10:41:36.9034154Z 989 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T10:41:36.9034265Z ·  ────────────────┬──────────────── 2026-10-24T10:41:36.9034456Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T10:41:36.9034514Z 990 │ }, 2026-10-24T10:41:36.9034567Z ╰──── 2026-10-24T10:41:36.9034831Z  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-24T10:41:36.9035135Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9035140Z 2026-10-24T10:41:36.9035299Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T10:41:36.9035430Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T10:41:36.9035545Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T10:41:36.9035644Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T10:41:36.9035741Z ·  ───────────────────────────── 2026-10-24T10:41:36.9035870Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T10:41:36.9035923Z ╰──── 2026-10-24T10:41:36.9036082Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T10:41:36.9036084Z 2026-10-24T10:41:36.9036341Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9036588Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T10:41:36.9036794Z 76 │ 2026-10-24T10:41:36.9036862Z 77 │ useEffect(() => { 2026-10-24T10:41:36.9036934Z ·  ────┬──── 2026-10-24T10:41:36.9037068Z · ╰── This is the containing effect 2026-10-24T10:41:36.9037198Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T10:41:36.9037267Z 79 │ setHostInput(host); 2026-10-24T10:41:36.9037345Z ·  ──────┬───── 2026-10-24T10:41:36.9037514Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9037582Z 80 │ setCodeInput(code); 2026-10-24T10:41:36.9037635Z ╰──── 2026-10-24T10:41:36.9038235Z  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-24T10:41:36.9038557Z  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-24T10:41:36.9038560Z 2026-10-24T10:41:36.9038816Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9038987Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T10:41:36.9039041Z 82 │ 2026-10-24T10:41:36.9039105Z 83 │ useEffect(() => { 2026-10-24T10:41:36.9039178Z ·  ────┬──── 2026-10-24T10:41:36.9039313Z · ╰── This is the containing effect 2026-10-24T10:41:36.9039406Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T10:41:36.9039466Z 85 │ return; 2026-10-24T10:41:36.9039522Z 86 │ } 2026-10-24T10:41:36.9039576Z 87 │ 2026-10-24T10:41:36.9039691Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T10:41:36.9039759Z 89 │ setHostInput(host); 2026-10-24T10:41:36.9039837Z ·  ──────┬───── 2026-10-24T10:41:36.9040006Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9040072Z 90 │ setCodeInput(code); 2026-10-24T10:41:36.9040125Z ╰──── 2026-10-24T10:41:36.9040725Z  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-24T10:41:36.9041046Z  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-24T10:41:36.9041049Z 2026-10-24T10:41:36.9041306Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9041475Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T10:41:36.9041529Z 92 │ 2026-10-24T10:41:36.9041595Z 93 │ useEffect(() => { 2026-10-24T10:41:36.9041667Z ·  ────┬──── 2026-10-24T10:41:36.9041796Z · ╰── This is the containing effect 2026-10-24T10:41:36.9041968Z 94 │ if (pairingConnectionError) { 2026-10-24T10:41:36.9042090Z 95 │ setIsSubmitting(false); 2026-10-24T10:41:36.9042174Z ·  ───────┬─────── 2026-10-24T10:41:36.9042345Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9042403Z 96 │ } 2026-10-24T10:41:36.9042456Z ╰──── 2026-10-24T10:41:36.9043050Z  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-24T10:41:36.9043378Z  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-24T10:41:36.9043383Z 2026-10-24T10:41:36.9043539Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9043697Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T10:41:36.9043796Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T10:41:36.9043890Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T10:41:36.9043971Z ·  ──────┬────── 2026-10-24T10:41:36.9044113Z · ╰── `pulseProgress` originates here 2026-10-24T10:41:36.9044166Z 55 │ 2026-10-24T10:41:36.9044232Z 56 │ useEffect(() => { 2026-10-24T10:41:36.9044296Z 57 │ if (pulse) { 2026-10-24T10:41:36.9044385Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T10:41:36.9044473Z ·  ──────┬────── 2026-10-24T10:41:36.9044620Z · ╰── `pulseProgress` cannot be modified 2026-10-24T10:41:36.9044687Z 59 │ withTiming(1, { 2026-10-24T10:41:36.9044740Z ╰──── 2026-10-24T10:41:36.9045003Z  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-24T10:41:36.9045307Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9045310Z 2026-10-24T10:41:36.9045565Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9045704Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T10:41:36.9045766Z 2137 │ ); 2026-10-24T10:41:36.9045835Z 2138 │ useEffect(() => { 2026-10-24T10:41:36.9045909Z ·  ────┬──── 2026-10-24T10:41:36.9046044Z · ╰── This is the containing effect 2026-10-24T10:41:36.9046120Z 2139 │ setExpandedVideo(null); 2026-10-24T10:41:36.9046203Z ·  ────────┬─────── 2026-10-24T10:41:36.9046373Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9046447Z 2140 │ setExpandedFile(null); 2026-10-24T10:41:36.9046500Z ╰──── 2026-10-24T10:41:36.9047210Z  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-24T10:41:36.9047563Z  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-24T10:41:36.9047566Z 2026-10-24T10:41:36.9047795Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T10:41:36.9047930Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T10:41:36.9048071Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T10:41:36.9048212Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T10:41:36.9048310Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9048485Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T10:41:36.9048647Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T10:41:36.9048700Z ╰──── 2026-10-24T10:41:36.9048798Z  help: Consider removing this import. 2026-10-24T10:41:36.9048802Z 2026-10-24T10:41:36.9049010Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T10:41:36.9049144Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T10:41:36.9049204Z 91 │ import { 2026-10-24T10:41:36.9049269Z 92 │ createContext, 2026-10-24T10:41:36.9049345Z ·  ──────┬────── 2026-10-24T10:41:36.9049483Z · ╰── 'createContext' is imported here 2026-10-24T10:41:36.9049540Z 93 │ memo, 2026-10-24T10:41:36.9049591Z ╰──── 2026-10-24T10:41:36.9049698Z  help: Consider removing this import. 2026-10-24T10:41:36.9049704Z 2026-10-24T10:41:36.9049916Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T10:41:36.9050050Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T10:41:36.9050110Z 107 │ import { 2026-10-24T10:41:36.9050177Z 108 │ ActivityIndicator, 2026-10-24T10:41:36.9050260Z ·  ────────┬──────── 2026-10-24T10:41:36.9050407Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T10:41:36.9050464Z 109 │ Image, 2026-10-24T10:41:36.9050517Z ╰──── 2026-10-24T10:41:36.9050614Z  help: Consider removing this import. 2026-10-24T10:41:36.9050617Z 2026-10-24T10:41:36.9050891Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T10:41:36.9051055Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T10:41:36.9051117Z 114 │ Pressable, 2026-10-24T10:41:36.9051182Z 115 │ ScrollView, 2026-10-24T10:41:36.9051258Z ·  ─────┬──── 2026-10-24T10:41:36.9051390Z · ╰── 'ScrollView' is imported here 2026-10-24T10:41:36.9051452Z 116 │ StyleSheet, 2026-10-24T10:41:36.9051506Z ╰──── 2026-10-24T10:41:36.9051602Z  help: Consider removing this import. 2026-10-24T10:41:36.9051605Z 2026-10-24T10:41:36.9051804Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T10:41:36.9051939Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T10:41:36.9052001Z 116 │ StyleSheet, 2026-10-24T10:41:36.9052077Z 117 │ Text as NativeText, 2026-10-24T10:41:36.9052160Z ·  ─────┬──── 2026-10-24T10:41:36.9052301Z · ╰── 'NativeText' is imported here 2026-10-24T10:41:36.9052370Z 118 │ type ColorValue, 2026-10-24T10:41:36.9052422Z ╰──── 2026-10-24T10:41:36.9052517Z  help: Consider removing this import. 2026-10-24T10:41:36.9052523Z 2026-10-24T10:41:36.9052738Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T10:41:36.9052872Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T10:41:36.9053010Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T10:41:36.9053138Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T10:41:36.9053233Z ·  ─────────┬──────── 2026-10-24T10:41:36.9053392Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T10:41:36.9053542Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T10:41:36.9053596Z ╰──── 2026-10-24T10:41:36.9053691Z  help: Consider removing this import. 2026-10-24T10:41:36.9053693Z 2026-10-24T10:41:36.9053912Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T10:41:36.9054047Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T10:41:36.9054182Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T10:41:36.9054308Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T10:41:36.9054407Z ·  ─────────┬───────── 2026-10-24T10:41:36.9054567Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T10:41:36.9054627Z 144 │ import { 2026-10-24T10:41:36.9054679Z ╰──── 2026-10-24T10:41:36.9054777Z  help: Consider removing this import. 2026-10-24T10:41:36.9054780Z 2026-10-24T10:41:36.9054996Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T10:41:36.9055130Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T10:41:36.9055279Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T10:41:36.9055416Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T10:41:36.9055505Z ·  ────────┬─────── 2026-10-24T10:41:36.9055730Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T10:41:36.9055901Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T10:41:36.9055955Z ╰──── 2026-10-24T10:41:36.9056052Z  help: Consider removing this import. 2026-10-24T10:41:36.9056055Z 2026-10-24T10:41:36.9056275Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T10:41:36.9056408Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T10:41:36.9056491Z 160 │ attachmentVideoPreviewSource, 2026-10-24T10:41:36.9056564Z 161 │ mediaVideoPreviewUri, 2026-10-24T10:41:36.9056650Z ·  ──────────┬───────── 2026-10-24T10:41:36.9056839Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T10:41:36.9056915Z 162 │ mediaVideoThumbnailKey, 2026-10-24T10:41:36.9056967Z ╰──── 2026-10-24T10:41:36.9057063Z  help: Consider removing this import. 2026-10-24T10:41:36.9057065Z 2026-10-24T10:41:36.9057288Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T10:41:36.9057421Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T10:41:36.9057493Z 161 │ mediaVideoPreviewUri, 2026-10-24T10:41:36.9057566Z 162 │ mediaVideoThumbnailKey, 2026-10-24T10:41:36.9057654Z ·  ───────────┬────────── 2026-10-24T10:41:36.9057813Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T10:41:36.9057895Z 163 │ type MediaVideoPreviewSource, 2026-10-24T10:41:36.9057950Z ╰──── 2026-10-24T10:41:36.9058050Z  help: Consider removing this import. 2026-10-24T10:41:36.9058058Z 2026-10-24T10:41:36.9058271Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T10:41:36.9058405Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T10:41:36.9058478Z 162 │ mediaVideoThumbnailKey, 2026-10-24T10:41:36.9058557Z 163 │ type MediaVideoPreviewSource, 2026-10-24T10:41:36.9058653Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9058818Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T10:41:36.9058905Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T10:41:36.9058957Z ╰──── 2026-10-24T10:41:36.9059051Z  help: Consider removing this import. 2026-10-24T10:41:36.9059054Z 2026-10-24T10:41:36.9059261Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T10:41:36.9059397Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T10:41:36.9059574Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T10:41:36.9059713Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T10:41:36.9059806Z ·  ───────┬─────── 2026-10-24T10:41:36.9059957Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T10:41:36.9060017Z 172 │ import { 2026-10-24T10:41:36.9060068Z ╰──── 2026-10-24T10:41:36.9060164Z  help: Consider removing this import. 2026-10-24T10:41:36.9060166Z 2026-10-24T10:41:36.9060474Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T10:41:36.9060644Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T10:41:36.9060703Z 185 │ import { 2026-10-24T10:41:36.9060780Z 186 │ resolveMarkdownFontSizes, 2026-10-24T10:41:36.9060873Z ·  ────────────┬─────────── 2026-10-24T10:41:36.9061035Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T10:41:36.9061123Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T10:41:36.9061176Z ╰──── 2026-10-24T10:41:36.9061273Z  help: Consider removing this import. 2026-10-24T10:41:36.9061275Z 2026-10-24T10:41:36.9061499Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T10:41:36.9061637Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T10:41:36.9061775Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T10:41:36.9061912Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T10:41:36.9062009Z ·  ───────────┬────────── 2026-10-24T10:41:36.9062173Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T10:41:36.9062232Z 192 │ import { 2026-10-24T10:41:36.9062285Z ╰──── 2026-10-24T10:41:36.9062380Z  help: Consider removing this import. 2026-10-24T10:41:36.9062383Z 2026-10-24T10:41:36.9062642Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T10:41:36.9062780Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T10:41:36.9062863Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T10:41:36.9062961Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T10:41:36.9063073Z ·  ──────────────────┬────────────────── 2026-10-24T10:41:36.9063268Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T10:41:36.9063343Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T10:41:36.9063395Z ╰──── 2026-10-24T10:41:36.9063490Z  help: Consider removing this import. 2026-10-24T10:41:36.9063493Z 2026-10-24T10:41:36.9063719Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T10:41:36.9063851Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T10:41:36.9063953Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T10:41:36.9064031Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T10:41:36.9064119Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9064278Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T10:41:36.9064366Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T10:41:36.9064420Z ╰──── 2026-10-24T10:41:36.9064514Z  help: Consider removing this import. 2026-10-24T10:41:36.9064517Z 2026-10-24T10:41:36.9064746Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T10:41:36.9064879Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T10:41:36.9064983Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T10:41:36.9065204Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T10:41:36.9065339Z ·  ────────────┬─────────── 2026-10-24T10:41:36.9065510Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T10:41:36.9065571Z 235 │ import { 2026-10-24T10:41:36.9065623Z ╰──── 2026-10-24T10:41:36.9065721Z  help: Consider removing this import. 2026-10-24T10:41:36.9065723Z 2026-10-24T10:41:36.9065935Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T10:41:36.9066066Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T10:41:36.9066131Z 237 │ useAssetUrl, 2026-10-24T10:41:36.9066200Z 238 │ useAssetUrlState, 2026-10-24T10:41:36.9066282Z ·  ────────┬─────── 2026-10-24T10:41:36.9066433Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T10:41:36.9066505Z 239 │ useRefreshAssetUrl, 2026-10-24T10:41:36.9066557Z ╰──── 2026-10-24T10:41:36.9066655Z  help: Consider removing this import. 2026-10-24T10:41:36.9066657Z 2026-10-24T10:41:36.9066891Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9067028Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T10:41:36.9067104Z 2140 │ setExpandedFile(null); 2026-10-24T10:41:36.9067264Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T10:41:36.9067492Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T10:41:36.9067793Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T10:41:36.9067998Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T10:41:36.9068165Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T10:41:36.9068310Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T10:41:36.9068364Z ╰──── 2026-10-24T10:41:36.9068658Z  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-24T10:41:36.9069044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9069203Z 2026-10-24T10:41:36.9069404Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9069544Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T10:41:36.9069644Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T10:41:36.9069760Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T10:41:36.9069844Z ·  ──────┬────── 2026-10-24T10:41:36.9069998Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T10:41:36.9070054Z 2610 │ 2026-10-24T10:41:36.9070106Z ╰──── 2026-10-24T10:41:36.9070403Z  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-24T10:41:36.9070718Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9070721Z 2026-10-24T10:41:36.9070922Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9071056Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T10:41:36.9071115Z 2624 │ } 2026-10-24T10:41:36.9071248Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T10:41:36.9071329Z ·  ──────┬───── 2026-10-24T10:41:36.9071478Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T10:41:36.9071533Z 2626 │ 2026-10-24T10:41:36.9071587Z ╰──── 2026-10-24T10:41:36.9071882Z  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-24T10:41:36.9072192Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9072197Z 2026-10-24T10:41:36.9072394Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9072530Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T10:41:36.9072589Z 2781 │ } 2026-10-24T10:41:36.9072773Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T10:41:36.9072981Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T10:41:36.9073238Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T10:41:36.9073444Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T10:41:36.9073601Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T10:41:36.9073654Z 2783 │ 2026-10-24T10:41:36.9073707Z ╰──── 2026-10-24T10:41:36.9073997Z  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-24T10:41:36.9074377Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9074426Z 2026-10-24T10:41:36.9074609Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T10:41:36.9074744Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T10:41:36.9074803Z 612 │ }; 2026-10-24T10:41:36.9074921Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T10:41:36.9075116Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T10:41:36.9075358Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T10:41:36.9075563Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T10:41:36.9075734Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T10:41:36.9075791Z 614 │ ); 2026-10-24T10:41:36.9075843Z ╰──── 2026-10-24T10:41:36.9076157Z  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-24T10:41:36.9076466Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9076469Z 2026-10-24T10:41:36.9076857Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9077030Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T10:41:36.9077153Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T10:41:36.9077220Z 284 │ useEffect(() => { 2026-10-24T10:41:36.9077295Z ·  ────┬──── 2026-10-24T10:41:36.9077431Z · ╰── This is the containing effect 2026-10-24T10:41:36.9077518Z 285 │ setNow(new Date().toISOString()); 2026-10-24T10:41:36.9077589Z ·  ───┬── 2026-10-24T10:41:36.9077756Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9077898Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T10:41:36.9077949Z ╰──── 2026-10-24T10:41:36.9078552Z  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-24T10:41:36.9078877Z  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-24T10:41:36.9078880Z 2026-10-24T10:41:36.9079081Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9079246Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T10:41:36.9079378Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T10:41:36.9079473Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T10:41:36.9079667Z ·  ───────┬────── 2026-10-24T10:41:36.9079892Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T10:41:36.9080004Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T10:41:36.9080057Z ╰──── 2026-10-24T10:41:36.9080352Z  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-24T10:41:36.9080660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9080663Z 2026-10-24T10:41:36.9080831Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.9080999Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T10:41:36.9081090Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T10:41:36.9081248Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T10:41:36.9081371Z ·  ─────┬──── 2026-10-24T10:41:36.9081538Z · ╰── Cannot call impure function 2026-10-24T10:41:36.9081617Z 357 │ const id = setTimeout(() => { 2026-10-24T10:41:36.9081669Z ╰──── 2026-10-24T10:41:36.9081955Z  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-24T10:41:36.9082254Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.9082261Z 2026-10-24T10:41:36.9082517Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9082695Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T10:41:36.9082749Z 58 │ 2026-10-24T10:41:36.9082816Z 59 │ useEffect(() => { 2026-10-24T10:41:36.9082888Z ·  ────┬──── 2026-10-24T10:41:36.9083018Z · ╰── This is the containing effect 2026-10-24T10:41:36.9083100Z 60 │ setMountedModes((current) => { 2026-10-24T10:41:36.9083181Z ·  ───────┬─────── 2026-10-24T10:41:36.9083350Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9083438Z 61 │ if (current.has(props.mode)) { 2026-10-24T10:41:36.9083494Z ╰──── 2026-10-24T10:41:36.9084091Z  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-24T10:41:36.9084408Z  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-24T10:41:36.9084411Z 2026-10-24T10:41:36.9084597Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9084734Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T10:41:36.9084965Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T10:41:36.9085086Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T10:41:36.9085172Z ·  ┬ 2026-10-24T10:41:36.9085305Z · ╰── '_' is declared here 2026-10-24T10:41:36.9085409Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T10:41:36.9085461Z ╰──── 2026-10-24T10:41:36.9085563Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9085567Z 2026-10-24T10:41:36.9085750Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9085887Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T10:41:36.9085943Z 133 │ ); 2026-10-24T10:41:36.9086057Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T10:41:36.9086158Z ·  ┬ 2026-10-24T10:41:36.9086298Z · ╰── '_' is declared here 2026-10-24T10:41:36.9086366Z 135 │ Effect.succeed( 2026-10-24T10:41:36.9086417Z ╰──── 2026-10-24T10:41:36.9086519Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9086521Z 2026-10-24T10:41:36.9086702Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9086876Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T10:41:36.9086932Z 177 │ }); 2026-10-24T10:41:36.9087031Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T10:41:36.9087120Z ·  ┬ 2026-10-24T10:41:36.9087262Z · ╰── '_' is declared here 2026-10-24T10:41:36.9087364Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T10:41:36.9087416Z ╰──── 2026-10-24T10:41:36.9087517Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9087520Z 2026-10-24T10:41:36.9087701Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9087832Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T10:41:36.9087888Z 202 │ ); 2026-10-24T10:41:36.9087989Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T10:41:36.9088080Z ·  ┬ 2026-10-24T10:41:36.9088216Z · ╰── '_' is declared here 2026-10-24T10:41:36.9088366Z 204 │ options.removeWorktreeFails 2026-10-24T10:41:36.9088450Z ╰──── 2026-10-24T10:41:36.9088550Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9088552Z 2026-10-24T10:41:36.9088731Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9088866Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T10:41:36.9088921Z 207 │ ); 2026-10-24T10:41:36.9089025Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T10:41:36.9089118Z ·  ┬ 2026-10-24T10:41:36.9089258Z · ╰── '_' is declared here 2026-10-24T10:41:36.9089346Z 209 │ options.deleteLocalBranchFails 2026-10-24T10:41:36.9089399Z ╰──── 2026-10-24T10:41:36.9089502Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9089507Z 2026-10-24T10:41:36.9089687Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9089822Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T10:41:36.9089877Z 212 │ ); 2026-10-24T10:41:36.9089991Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T10:41:36.9090092Z ·  ┬ 2026-10-24T10:41:36.9090237Z · ╰── '_' is declared here 2026-10-24T10:41:36.9090324Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T10:41:36.9090376Z ╰──── 2026-10-24T10:41:36.9090476Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9090478Z 2026-10-24T10:41:36.9090664Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9090800Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T10:41:36.9090854Z 253 │ ); 2026-10-24T10:41:36.9090947Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T10:41:36.9091035Z ·  ┬ 2026-10-24T10:41:36.9091168Z · ╰── '_' is declared here 2026-10-24T10:41:36.9091236Z 255 │ Effect.succeed({ 2026-10-24T10:41:36.9091290Z ╰──── 2026-10-24T10:41:36.9091389Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9091392Z 2026-10-24T10:41:36.9091571Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9091709Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T10:41:36.9091766Z 263 │ ); 2026-10-24T10:41:36.9091919Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T10:41:36.9092010Z ·  ┬ 2026-10-24T10:41:36.9092148Z · ╰── '_' is declared here 2026-10-24T10:41:36.9092296Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T10:41:36.9092349Z ╰──── 2026-10-24T10:41:36.9092450Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9092452Z 2026-10-24T10:41:36.9092608Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9092754Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T10:41:36.9092975Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T10:41:36.9093148Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T10:41:36.9093228Z ·  ────┬─── 2026-10-24T10:41:36.9093360Z · ╰── `rotation` originates here 2026-10-24T10:41:36.9093414Z 172 │ 2026-10-24T10:41:36.9093486Z 173 │ useLayoutEffect(() => { 2026-10-24T10:41:36.9093622Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T10:41:36.9093695Z ·  ────┬─── 2026-10-24T10:41:36.9093829Z · ╰── `rotation` cannot be modified 2026-10-24T10:41:36.9093930Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T10:41:36.9093982Z ╰──── 2026-10-24T10:41:36.9094254Z  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-24T10:41:36.9094562Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9094565Z 2026-10-24T10:41:36.9094760Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.9094911Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T10:41:36.9094979Z 1245 │ => 2026-10-24T10:41:36.9096193Z ·  ──────────┬────────── 2026-10-24T10:41:36.9096352Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T10:41:36.9096541Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T10:41:36.9096600Z ╰──── 2026-10-24T10:41:36.9096708Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9096710Z 2026-10-24T10:41:36.9097049Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9097175Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T10:41:36.9097227Z 220 │ 2026-10-24T10:41:36.9097361Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T10:41:36.9097465Z ·  ──────────────┬────────────── 2026-10-24T10:41:36.9097642Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T10:41:36.9097805Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T10:41:36.9097923Z ╰──── 2026-10-24T10:41:36.9098060Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9098063Z 2026-10-24T10:41:36.9098278Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T10:41:36.9098421Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T10:41:36.9098525Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T10:41:36.9098657Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T10:41:36.9098753Z ·  ────────────┬──────────── 2026-10-24T10:41:36.9098923Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T10:41:36.9098981Z 774 │ } 2026-10-24T10:41:36.9099191Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T10:41:36.9099307Z ·  ────────────────┬──────────────── 2026-10-24T10:41:36.9099590Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T10:41:36.9099645Z 776 │ 2026-10-24T10:41:36.9099697Z ╰──── 2026-10-24T10:41:36.9100119Z  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-24T10:41:36.9100432Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9100434Z 2026-10-24T10:41:36.9100596Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9100743Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T10:41:36.9100903Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T10:41:36.9101040Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T10:41:36.9101132Z ·  ──────────┬───────── 2026-10-24T10:41:36.9101288Z · ╰── `animatedBorderRadius` originates here 2026-10-24T10:41:36.9101447Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T10:41:36.9101519Z 390 │ useLayoutEffect(() => { 2026-10-24T10:41:36.9101618Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T10:41:36.9101707Z ·  ──────────┬───────── 2026-10-24T10:41:36.9101873Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T10:41:36.9101967Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T10:41:36.9102018Z ╰──── 2026-10-24T10:41:36.9102282Z  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-24T10:41:36.9102587Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9102590Z 2026-10-24T10:41:36.9102850Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9103013Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T10:41:36.9103194Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T10:41:36.9103300Z 38 │ useLayoutEffect(() => { 2026-10-24T10:41:36.9103380Z ·  ───────┬─────── 2026-10-24T10:41:36.9103512Z · ╰── This is the containing effect 2026-10-24T10:41:36.9103573Z 39 │ reset(); 2026-10-24T10:41:36.9103643Z 40 │ setInitialized(true); 2026-10-24T10:41:36.9103723Z ·  ───────┬────── 2026-10-24T10:41:36.9103892Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9103954Z 41 │ }, [reset]); 2026-10-24T10:41:36.9104006Z ╰──── 2026-10-24T10:41:36.9104609Z  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-24T10:41:36.9104932Z  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-24T10:41:36.9104934Z 2026-10-24T10:41:36.9105192Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9105351Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T10:41:36.9105406Z 88 │ 2026-10-24T10:41:36.9105472Z 89 │ useEffect(() => { 2026-10-24T10:41:36.9105546Z ·  ────┬──── 2026-10-24T10:41:36.9105676Z · ╰── This is the containing effect 2026-10-24T10:41:36.9105841Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T10:41:36.9105949Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T10:41:36.9106016Z 92 │ let active = true; 2026-10-24T10:41:36.9106111Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T10:41:36.9106196Z ·  ─────────┬───────── 2026-10-24T10:41:36.9106368Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9106526Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T10:41:36.9106579Z ╰──── 2026-10-24T10:41:36.9107204Z  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-24T10:41:36.9107529Z  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-24T10:41:36.9107531Z 2026-10-24T10:41:36.9145486Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9145791Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T10:41:36.9145861Z 434 │ : null; 2026-10-24T10:41:36.9145930Z 435 │ useEffect(() => { 2026-10-24T10:41:36.9146010Z ·  ────┬──── 2026-10-24T10:41:36.9146171Z · ╰── This is the containing effect 2026-10-24T10:41:36.9146413Z 436 │ if ( 2026-10-24T10:41:36.9146547Z 437 │ props.active === false || 2026-10-24T10:41:36.9146627Z 438 │ activeDraftKey !== null || 2026-10-24T10:41:36.9146710Z 439 │ editingPendingTask !== null || 2026-10-24T10:41:36.9146821Z 440 │ selectedProject === null 2026-10-24T10:41:36.9146877Z 441 │ ) { 2026-10-24T10:41:36.9146940Z 442 │ return; 2026-10-24T10:41:36.9146994Z 443 │ } 2026-10-24T10:41:36.9147065Z 444 │ setActiveDraftKey( 2026-10-24T10:41:36.9147150Z ·  ────────┬──────── 2026-10-24T10:41:36.9147328Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9147401Z 445 │ createNewTaskDraft({ 2026-10-24T10:41:36.9147456Z ╰──── 2026-10-24T10:41:36.9148077Z  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-24T10:41:36.9148417Z  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-24T10:41:36.9148421Z 2026-10-24T10:41:36.9148673Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T10:41:36.9148847Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T10:41:36.9148959Z 1243 │ 2026-10-24T10:41:36.9149161Z 1244 │ {props.children} 2026-10-24T10:41:36.9149279Z ·  ───────────── 2026-10-24T10:41:36.9149353Z 1245 │ 2026-10-24T10:41:36.9149407Z ╰──── 2026-10-24T10:41:36.9149633Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T10:41:36.9149774Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T10:41:36.9149777Z 2026-10-24T10:41:36.9150038Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9150165Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T10:41:36.9150220Z 727 │ 2026-10-24T10:41:36.9150372Z 728 │ const layer = layerWithOptions(); 2026-10-24T10:41:36.9150470Z ·  ──┬── 2026-10-24T10:41:36.9150598Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.9150651Z ╰──── 2026-10-24T10:41:36.9150759Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9150762Z 2026-10-24T10:41:36.9150976Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T10:41:36.9151101Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T10:41:36.9151206Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T10:41:36.9151293Z 259 │ for (const edit of edits.reverse()) 2026-10-24T10:41:36.9151388Z ·  ─────── 2026-10-24T10:41:36.9151561Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T10:41:36.9151618Z ╰──── 2026-10-24T10:41:36.9151879Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T10:41:36.9151882Z 2026-10-24T10:41:36.9152090Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T10:41:36.9152211Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T10:41:36.9152292Z 289 │ visit(parser.parse(markdown)); 2026-10-24T10:41:36.9152377Z 290 │ for (const edit of edits.reverse()) 2026-10-24T10:41:36.9152470Z ·  ─────── 2026-10-24T10:41:36.9152631Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T10:41:36.9152683Z ╰──── 2026-10-24T10:41:36.9152947Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T10:41:36.9152951Z 2026-10-24T10:41:36.9153160Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T10:41:36.9153279Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T10:41:36.9153358Z 343 │ visit(parser.parse(markdown)); 2026-10-24T10:41:36.9153463Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T10:41:36.9153568Z ·  ─────── 2026-10-24T10:41:36.9153732Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T10:41:36.9153783Z ╰──── 2026-10-24T10:41:36.9154049Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T10:41:36.9154053Z 2026-10-24T10:41:36.9154244Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T10:41:36.9154359Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T10:41:36.9154418Z 7 │ () => 2026-10-24T10:41:36.9154486Z 8 │ Gesture.Hover() 2026-10-24T10:41:36.9154564Z ·  ──┬── 2026-10-24T10:41:36.9154699Z · ╰── `Hover` may be a component 2026-10-24T10:41:36.9154775Z 9 │ .manualActivation(true) 2026-10-24T10:41:36.9154828Z ╰──── 2026-10-24T10:41:36.9155110Z  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-24T10:41:36.9155650Z  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-24T10:41:36.9155683Z 2026-10-24T10:41:36.9155885Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9156048Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T10:41:36.9156146Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T10:41:36.9156244Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T10:41:36.9156350Z ·  ──────┬───── 2026-10-24T10:41:36.9156522Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T10:41:36.9156722Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T10:41:36.9156841Z ╰──── 2026-10-24T10:41:36.9157178Z  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-24T10:41:36.9157494Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9157496Z 2026-10-24T10:41:36.9157700Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T10:41:36.9157825Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T10:41:36.9157895Z 37 │ get isConnected() { 2026-10-24T10:41:36.9157987Z 38 │ let current: FakeElement | null = this; 2026-10-24T10:41:36.9158066Z ·  ─────── 2026-10-24T10:41:36.9158141Z 39 │ while (current?.parent) { 2026-10-24T10:41:36.9158192Z ╰──── 2026-10-24T10:41:36.9158465Z  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-24T10:41:36.9158468Z 2026-10-24T10:41:36.9158919Z ⚠ 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-24T10:41:36.9159051Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T10:41:36.9159191Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T10:41:36.9159385Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T10:41:36.9159504Z ·  ─────────────────── 2026-10-24T10:41:36.9159599Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T10:41:36.9159652Z ╰──── 2026-10-24T10:41:36.9159655Z 2026-10-24T10:41:36.9159913Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9160066Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T10:41:36.9160119Z 398 │ 2026-10-24T10:41:36.9160186Z 399 │ useEffect(() => { 2026-10-24T10:41:36.9160258Z ·  ────┬──── 2026-10-24T10:41:36.9160390Z · ╰── This is the containing effect 2026-10-24T10:41:36.9160482Z 400 │ setInspectorSelection((current) => { 2026-10-24T10:41:36.9160668Z ·  ──────────┬────────── 2026-10-24T10:41:36.9160888Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9160989Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T10:41:36.9161041Z ╰──── 2026-10-24T10:41:36.9161643Z  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-24T10:41:36.9161967Z  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-24T10:41:36.9161969Z 2026-10-24T10:41:36.9162187Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T10:41:36.9162341Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T10:41:36.9162502Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T10:41:36.9162674Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T10:41:36.9162770Z 529 │ │ 2026-10-24T10:41:36.9163397Z 534 │ ╰─▶ ); 2026-10-24T10:41:36.9163481Z 535 │ const FilesInspector = () => 2026-10-24T10:41:36.9163535Z ╰──── 2026-10-24T10:41:36.9163756Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T10:41:36.9163759Z 2026-10-24T10:41:36.9163970Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T10:41:36.9164123Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T10:41:36.9164182Z 534 │ ); 2026-10-24T10:41:36.9164350Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T10:41:36.9164504Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T10:41:36.9164614Z 537 │ │ 2026-10-24T10:41:36.9165649Z 545 │ ╰─▶ ) : null; 2026-10-24T10:41:36.9165830Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T10:41:36.9165883Z ╰──── 2026-10-24T10:41:36.9166099Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T10:41:36.9166103Z 2026-10-24T10:41:36.9166578Z ⚠ 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-24T10:41:36.9166727Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T10:41:36.9166892Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T10:41:36.9167039Z 133 │ ╭─▶ for ( 2026-10-24T10:41:36.9167143Z 134 │ │ let attempt = 0; 2026-10-24T10:41:36.9167311Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T10:41:36.9167410Z 136 │ │ attempt += 1 2026-10-24T10:41:36.9167492Z 137 │ │ ) { 2026-10-24T10:41:36.9167603Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9167737Z 139 │ ╰─▶ } 2026-10-24T10:41:36.9167861Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T10:41:36.9167913Z ╰──── 2026-10-24T10:41:36.9167916Z 2026-10-24T10:41:36.9168166Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T10:41:36.9168323Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T10:41:36.9168385Z 289 │ return ( 2026-10-24T10:41:36.9168520Z 290 │ 2026-10-24T10:41:36.9168642Z ·  ───────────── 2026-10-24T10:41:36.9168712Z 291 │ {props.children} 2026-10-24T10:41:36.9168762Z ╰──── 2026-10-24T10:41:36.9168986Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T10:41:36.9169125Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T10:41:36.9169128Z 2026-10-24T10:41:36.9169373Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T10:41:36.9169529Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T10:41:36.9169589Z 653 │ return ( 2026-10-24T10:41:36.9169710Z 654 │ 2026-10-24T10:41:36.9169824Z ·  ───────────── 2026-10-24T10:41:36.9169893Z 655 │ {props.children} 2026-10-24T10:41:36.9169945Z ╰──── 2026-10-24T10:41:36.9170165Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T10:41:36.9170299Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T10:41:36.9170301Z 2026-10-24T10:41:36.9170606Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T10:41:36.9170794Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T10:41:36.9170856Z 1461 │ return ( 2026-10-24T10:41:36.9171017Z 1462 │ 2026-10-24T10:41:36.9171152Z ·  ──────────────────── 2026-10-24T10:41:36.9171250Z 1463 │ { 2026-10-24T10:41:36.9172750Z  92 │ if (!cardCoverage) { 2026-10-24T10:41:36.9172812Z  93 │ return; 2026-10-24T10:41:36.9172867Z  94 │ } 2026-10-24T10:41:36.9173025Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T10:41:36.9173115Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T10:41:36.9173179Z  97 │ return; 2026-10-24T10:41:36.9173235Z  98 │ } 2026-10-24T10:41:36.9173316Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T10:41:36.9173398Z 100 │ cardCoverage.value = coverage; 2026-10-24T10:41:36.9173477Z ·  ──────┬───── 2026-10-24T10:41:36.9173620Z · ╰── `cardCoverage` cannot be modified 2026-10-24T10:41:36.9173681Z 101 │ return; 2026-10-24T10:41:36.9173732Z ╰──── 2026-10-24T10:41:36.9174029Z  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-24T10:41:36.9174341Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9174346Z 2026-10-24T10:41:36.9174502Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9174657Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T10:41:36.9174736Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T10:41:36.9174821Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T10:41:36.9174899Z ·  ─────┬──── 2026-10-24T10:41:36.9175032Z · ╰── `cardHeight` originates here 2026-10-24T10:41:36.9175125Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T10:41:36.9175193Z  92 │ if (!cardCoverage) { 2026-10-24T10:41:36.9175322Z  93 │ return; 2026-10-24T10:41:36.9175405Z  94 │ } 2026-10-24T10:41:36.9175555Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T10:41:36.9175641Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T10:41:36.9175700Z  97 │ return; 2026-10-24T10:41:36.9175754Z  98 │ } 2026-10-24T10:41:36.9175834Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T10:41:36.9175916Z 100 │ cardCoverage.value = coverage; 2026-10-24T10:41:36.9175975Z 101 │ return; 2026-10-24T10:41:36.9176028Z 102 │ } 2026-10-24T10:41:36.9176130Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T10:41:36.9176226Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T10:41:36.9176311Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T10:41:36.9176365Z 106 │ }); 2026-10-24T10:41:36.9176437Z 107 │ }, [cardCoverage]); 2026-10-24T10:41:36.9176524Z 108 │ const handleBarLayout = useCallback( 2026-10-24T10:41:36.9176604Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9176730Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T10:41:36.9176829Z 111 │ notifyCoverage(); 2026-10-24T10:41:36.9176886Z 112 │ }, 2026-10-24T10:41:36.9176951Z 113 │ [notifyCoverage], 2026-10-24T10:41:36.9177007Z 114 │ ); 2026-10-24T10:41:36.9177090Z 115 │ const handleCardLayout = useCallback( 2026-10-24T10:41:36.9177171Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9177297Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T10:41:36.9177411Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T10:41:36.9177489Z ·  ─────┬──── 2026-10-24T10:41:36.9177634Z · ╰── `cardHeight` cannot be modified 2026-10-24T10:41:36.9177704Z 119 │ notifyCoverage(); 2026-10-24T10:41:36.9177756Z ╰──── 2026-10-24T10:41:36.9178024Z  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-24T10:41:36.9178331Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9178334Z 2026-10-24T10:41:36.9178535Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T10:41:36.9178689Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T10:41:36.9178775Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T10:41:36.9178938Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T10:41:36.9179074Z ·  ───┬─── 2026-10-24T10:41:36.9179313Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T10:41:36.9179382Z  92 │ if (!cardCoverage) { 2026-10-24T10:41:36.9179442Z  93 │ return; 2026-10-24T10:41:36.9179496Z  94 │ } 2026-10-24T10:41:36.9179645Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T10:41:36.9179732Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T10:41:36.9179790Z  97 │ return; 2026-10-24T10:41:36.9179844Z  98 │ } 2026-10-24T10:41:36.9179923Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T10:41:36.9180004Z 100 │ cardCoverage.value = coverage; 2026-10-24T10:41:36.9180089Z ·  ──────┬───── 2026-10-24T10:41:36.9180229Z · ╰── This modifies `cardCoverage` 2026-10-24T10:41:36.9180287Z 101 │ return; 2026-10-24T10:41:36.9180341Z ╰──── 2026-10-24T10:41:36.9180684Z  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-24T10:41:36.9180988Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9180991Z 2026-10-24T10:41:36.9181189Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T10:41:36.9181349Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T10:41:36.9181433Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T10:41:36.9181515Z 100 │ cardCoverage.value = coverage; 2026-10-24T10:41:36.9181591Z ·  ──────┬───── 2026-10-24T10:41:36.9181725Z · ╰── This modifies `cardCoverage` 2026-10-24T10:41:36.9181785Z 101 │ return; 2026-10-24T10:41:36.9181839Z 102 │ } 2026-10-24T10:41:36.9181939Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T10:41:36.9182035Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T10:41:36.9182119Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T10:41:36.9182175Z 106 │ }); 2026-10-24T10:41:36.9182240Z 107 │ }, [cardCoverage]); 2026-10-24T10:41:36.9182323Z 108 │ const handleBarLayout = useCallback( 2026-10-24T10:41:36.9182410Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9182519Z ·  ───────────────┬─────────────── 2026-10-24T10:41:36.9182745Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T10:41:36.9182870Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T10:41:36.9182922Z ╰──── 2026-10-24T10:41:36.9183260Z  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-24T10:41:36.9183562Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9183565Z 2026-10-24T10:41:36.9183834Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T10:41:36.9184016Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T10:41:36.9184103Z 115 │ const handleCardLayout = useCallback( 2026-10-24T10:41:36.9184184Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9184291Z ·  ───────────────┬─────────────── 2026-10-24T10:41:36.9184511Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T10:41:36.9184639Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T10:41:36.9184754Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T10:41:36.9184829Z ·  ─────┬──── 2026-10-24T10:41:36.9184961Z · ╰── This modifies `cardHeight` 2026-10-24T10:41:36.9185035Z 119 │ notifyCoverage(); 2026-10-24T10:41:36.9185090Z ╰──── 2026-10-24T10:41:36.9185425Z  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-24T10:41:36.9185731Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9185734Z 2026-10-24T10:41:36.9185890Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9186054Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T10:41:36.9186108Z 107 │ ); 2026-10-24T10:41:36.9186264Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T10:41:36.9186358Z ·  ─────────┬──────── 2026-10-24T10:41:36.9186512Z · ╰── `separationProgress` originates here 2026-10-24T10:41:36.9186565Z 109 │ 2026-10-24T10:41:36.9186632Z 110 │ useEffect(() => { 2026-10-24T10:41:36.9186846Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T10:41:36.9186930Z ·  ─────────┬──────── 2026-10-24T10:41:36.9187083Z · ╰── `separationProgress` cannot be modified 2026-10-24T10:41:36.9187192Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T10:41:36.9187243Z ╰──── 2026-10-24T10:41:36.9187508Z  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-24T10:41:36.9187817Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9187823Z 2026-10-24T10:41:36.9187977Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9188141Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T10:41:36.9188252Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T10:41:36.9188369Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T10:41:36.9188449Z ·  ──────┬───── 2026-10-24T10:41:36.9188586Z · ╰── `capsuleWidth` originates here 2026-10-24T10:41:36.9188699Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T10:41:36.9188885Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9189014Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T10:41:36.9189110Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T10:41:36.9189171Z 134 │ return; 2026-10-24T10:41:36.9189225Z 135 │ } 2026-10-24T10:41:36.9189331Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T10:41:36.9189419Z 137 │ measuredWidthRef.current = width; 2026-10-24T10:41:36.9189563Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T10:41:36.9189641Z ·  ──────┬───── 2026-10-24T10:41:36.9189780Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T10:41:36.9189835Z 139 │ }; 2026-10-24T10:41:36.9189887Z ╰──── 2026-10-24T10:41:36.9190157Z  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-24T10:41:36.9190461Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9190463Z 2026-10-24T10:41:36.9190620Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9190785Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T10:41:36.9190896Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T10:41:36.9191009Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T10:41:36.9191091Z ·  ──────┬───── 2026-10-24T10:41:36.9191232Z · ╰── `capsuleWidth` originates here 2026-10-24T10:41:36.9191344Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T10:41:36.9191458Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9191562Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T10:41:36.9191658Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T10:41:36.9191718Z 134 │ return; 2026-10-24T10:41:36.9191771Z 135 │ } 2026-10-24T10:41:36.9191877Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T10:41:36.9191963Z 137 │ measuredWidthRef.current = width; 2026-10-24T10:41:36.9192105Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T10:41:36.9192158Z 139 │ }; 2026-10-24T10:41:36.9192250Z 140 │ const hasStatus = props.status !== null; 2026-10-24T10:41:36.9192387Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T10:41:36.9192457Z 142 │ useEffect(() => { 2026-10-24T10:41:36.9192521Z 143 │ if (!hasStatus) { 2026-10-24T10:41:36.9192609Z 144 │ measuredWidthRef.current = null; 2026-10-24T10:41:36.9192687Z 145 │ capsuleWidth.value = null; 2026-10-24T10:41:36.9192764Z ·  ──────┬───── 2026-10-24T10:41:36.9192906Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T10:41:36.9192960Z 146 │ } 2026-10-24T10:41:36.9193013Z ╰──── 2026-10-24T10:41:36.9193274Z  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-24T10:41:36.9193644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9193676Z 2026-10-24T10:41:36.9193877Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T10:41:36.9194040Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T10:41:36.9194175Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T10:41:36.9194240Z 142 │ useEffect(() => { 2026-10-24T10:41:36.9194318Z ·  ───┬─── 2026-10-24T10:41:36.9194539Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T10:41:36.9194606Z 143 │ if (!hasStatus) { 2026-10-24T10:41:36.9194692Z 144 │ measuredWidthRef.current = null; 2026-10-24T10:41:36.9194769Z 145 │ capsuleWidth.value = null; 2026-10-24T10:41:36.9194851Z ·  ──────┬───── 2026-10-24T10:41:36.9194989Z · ╰── This modifies `capsuleWidth` 2026-10-24T10:41:36.9195043Z 146 │ } 2026-10-24T10:41:36.9195096Z ╰──── 2026-10-24T10:41:36.9195434Z  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-24T10:41:36.9195737Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9195740Z 2026-10-24T10:41:36.9195939Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T10:41:36.9196104Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T10:41:36.9196218Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T10:41:36.9196335Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T10:41:36.9196459Z ·  ───────────────┬─────────────── 2026-10-24T10:41:36.9196844Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T10:41:36.9196974Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T10:41:36.9197072Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T10:41:36.9197132Z 134 │ return; 2026-10-24T10:41:36.9197186Z 135 │ } 2026-10-24T10:41:36.9197291Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T10:41:36.9197377Z 137 │ measuredWidthRef.current = width; 2026-10-24T10:41:36.9197524Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T10:41:36.9197604Z ·  ──────┬───── 2026-10-24T10:41:36.9197739Z · ╰── This modifies `capsuleWidth` 2026-10-24T10:41:36.9197793Z 139 │ }; 2026-10-24T10:41:36.9197846Z ╰──── 2026-10-24T10:41:36.9198182Z  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-24T10:41:36.9198488Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9198490Z 2026-10-24T10:41:36.9199031Z ⚠ 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-24T10:41:36.9199199Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T10:41:36.9199375Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T10:41:36.9199563Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T10:41:36.9199677Z ·  ─────────────────── 2026-10-24T10:41:36.9199786Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T10:41:36.9199840Z ╰──── 2026-10-24T10:41:36.9199843Z 2026-10-24T10:41:36.9200290Z ⚠ 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-24T10:41:36.9200416Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T10:41:36.9200601Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T10:41:36.9200709Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T10:41:36.9200825Z ·  ─────────────────── 2026-10-24T10:41:36.9200943Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T10:41:36.9200997Z ╰──── 2026-10-24T10:41:36.9200999Z 2026-10-24T10:41:36.9201259Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9201416Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T10:41:36.9201580Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T10:41:36.9201647Z 29 │ useEffect(() => { 2026-10-24T10:41:36.9201718Z ·  ────┬──── 2026-10-24T10:41:36.9201850Z · ╰── This is the containing effect 2026-10-24T10:41:36.9201971Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T10:41:36.9202077Z ·  ───┬─── 2026-10-24T10:41:36.9202269Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9202343Z 31 │ }, [key, live, snapshot]); 2026-10-24T10:41:36.9202394Z ╰──── 2026-10-24T10:41:36.9203066Z  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-24T10:41:36.9203426Z  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-24T10:41:36.9203429Z 2026-10-24T10:41:36.9203645Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T10:41:36.9203819Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T10:41:36.9203899Z 248 │ mountedRef.current = false; 2026-10-24T10:41:36.9203978Z 249 │ flow.setBranchQuery(""); 2026-10-24T10:41:36.9204047Z ·  ──┬─ 2026-10-24T10:41:36.9204179Z · ╰── Missing dependency `flow` 2026-10-24T10:41:36.9204236Z 250 │ }; 2026-10-24T10:41:36.9204310Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T10:41:36.9204399Z ·  ─────────┬───────── 2026-10-24T10:41:36.9204604Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T10:41:36.9204657Z 252 │ 2026-10-24T10:41:36.9204709Z ╰──── 2026-10-24T10:41:36.9205132Z  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-24T10:41:36.9205451Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9205456Z 2026-10-24T10:41:36.9205716Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9205868Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T10:41:36.9206007Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T10:41:36.9206074Z 356 │ useEffect(() => { 2026-10-24T10:41:36.9206145Z ·  ────┬──── 2026-10-24T10:41:36.9206273Z · ╰── This is the containing effect 2026-10-24T10:41:36.9206364Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T10:41:36.9206425Z 358 │ return; 2026-10-24T10:41:36.9206480Z 359 │ } 2026-10-24T10:41:36.9206582Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T10:41:36.9206679Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T10:41:36.9206825Z ·  ──────────────┬────────────── 2026-10-24T10:41:36.9207002Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9207062Z 362 │ return; 2026-10-24T10:41:36.9207113Z ╰──── 2026-10-24T10:41:36.9207710Z  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-24T10:41:36.9208098Z  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-24T10:41:36.9208129Z 2026-10-24T10:41:36.9208384Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9208537Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T10:41:36.9208591Z 447 │ 2026-10-24T10:41:36.9208657Z 448 │ useEffect(() => { 2026-10-24T10:41:36.9208727Z ·  ────┬──── 2026-10-24T10:41:36.9208856Z · ╰── This is the containing effect 2026-10-24T10:41:36.9208960Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T10:41:36.9209020Z 450 │ return; 2026-10-24T10:41:36.9209073Z 451 │ } 2026-10-24T10:41:36.9209215Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T10:41:36.9209353Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T10:41:36.9209463Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T10:41:36.9209516Z 455 │ } 2026-10-24T10:41:36.9209658Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T10:41:36.9209786Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T10:41:36.9209891Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T10:41:36.9209962Z 459 │ const directProject = 2026-10-24T10:41:36.9210029Z 460 │ projects.find( 2026-10-24T10:41:36.9210095Z 461 │ (project) => 2026-10-24T10:41:36.9210270Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T10:41:36.9210332Z 463 │ ) ?? null; 2026-10-24T10:41:36.9210385Z 464 │ 2026-10-24T10:41:36.9210460Z 465 │ if (directProject) { 2026-10-24T10:41:36.9210602Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T10:41:36.9210739Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T10:41:36.9210901Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T10:41:36.9211039Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T10:41:36.9211101Z 470 │ return; 2026-10-24T10:41:36.9211158Z 471 │ } 2026-10-24T10:41:36.9211256Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T10:41:36.9211318Z 473 │ if ( 2026-10-24T10:41:36.9211463Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T10:41:36.9211563Z 475 │ selectedProject.id !== directProject.id 2026-10-24T10:41:36.9211628Z 476 │ ) { 2026-10-24T10:41:36.9211714Z 477 │ setProject(directProject); 2026-10-24T10:41:36.9211777Z 478 │ return; 2026-10-24T10:41:36.9211836Z 479 │ } 2026-10-24T10:41:36.9211918Z 480 │ if (!flow.draftKey) return; 2026-10-24T10:41:36.9212057Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T10:41:36.9212202Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T10:41:36.9212310Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T10:41:36.9212390Z 484 │ workspaceSelection: { 2026-10-24T10:41:36.9212460Z 485 │ mode: "local", 2026-10-24T10:41:36.9212566Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T10:41:36.9212769Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T10:41:36.9212886Z 488 │ startFromOrigin: false, 2026-10-24T10:41:36.9212946Z 489 │ }, 2026-10-24T10:41:36.9213005Z 490 │ }); 2026-10-24T10:41:36.9213061Z 491 │ } 2026-10-24T10:41:36.9213191Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T10:41:36.9213251Z 493 │ if ( 2026-10-24T10:41:36.9213391Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T10:41:36.9213490Z 495 │ selectedProject.id === directProject.id 2026-10-24T10:41:36.9213548Z 496 │ ) { 2026-10-24T10:41:36.9213609Z 497 │ return; 2026-10-24T10:41:36.9213665Z 498 │ } 2026-10-24T10:41:36.9213745Z 499 │ setProject(directProject); 2026-10-24T10:41:36.9213807Z 500 │ return; 2026-10-24T10:41:36.9213863Z 501 │ } 2026-10-24T10:41:36.9213920Z 502 │ 2026-10-24T10:41:36.9214001Z 503 │ if (projects.length > 0) { 2026-10-24T10:41:36.9214098Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T10:41:36.9214207Z ·  ──────────────┬────────────── 2026-10-24T10:41:36.9214386Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9214443Z 505 │ } 2026-10-24T10:41:36.9214495Z ╰──── 2026-10-24T10:41:36.9215094Z  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-24T10:41:36.9215421Z  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-24T10:41:36.9215427Z 2026-10-24T10:41:36.9215685Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9215839Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T10:41:36.9215892Z 545 │ 2026-10-24T10:41:36.9215957Z 546 │ useEffect(() => { 2026-10-24T10:41:36.9216028Z ·  ────┬──── 2026-10-24T10:41:36.9216158Z · ╰── This is the containing effect 2026-10-24T10:41:36.9216253Z 547 │ const shareId = props.incomingShareId; 2026-10-24T10:41:36.9216334Z 548 │ const draftKey = flow.draftKey; 2026-10-24T10:41:36.9216438Z 549 │ const destinationProject = selectedProject; 2026-10-24T10:41:36.9216581Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T10:41:36.9216709Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T10:41:36.9216832Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T10:41:36.9216908Z 553 │ !initialEnvironmentId || 2026-10-24T10:41:36.9216979Z 554 │ !initialProjectId || 2026-10-24T10:41:36.9217111Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T10:41:36.9217216Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T10:41:36.9217273Z 557 │ if ( 2026-10-24T10:41:36.9217337Z 558 │ !shareId || 2026-10-24T10:41:36.9217402Z 559 │ !draftKey || 2026-10-24T10:41:36.9217473Z 560 │ !destinationProject || 2026-10-24T10:41:36.9217560Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T10:41:36.9217716Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T10:41:36.9217800Z 563 │ ) { 2026-10-24T10:41:36.9217860Z 564 │ return; 2026-10-24T10:41:36.9217915Z 565 │ } 2026-10-24T10:41:36.9218012Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T10:41:36.9218069Z 567 │ if ( 2026-10-24T10:41:36.9218180Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T10:41:36.9218292Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T10:41:36.9218347Z 570 │ ) { 2026-10-24T10:41:36.9218407Z 571 │ return; 2026-10-24T10:41:36.9218460Z 572 │ } 2026-10-24T10:41:36.9218512Z 573 │ 2026-10-24T10:41:36.9218581Z 574 │ if (!incomingShare) { 2026-10-24T10:41:36.9218779Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T10:41:36.9218915Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T10:41:36.9218984Z 577 │ Dialog.alert( 2026-10-24T10:41:36.9219068Z 578 │ "Shared content unavailable", 2026-10-24T10:41:36.9219247Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T10:41:36.9219305Z 580 │ ); 2026-10-24T10:41:36.9219361Z 581 │ } 2026-10-24T10:41:36.9219420Z 582 │ return; 2026-10-24T10:41:36.9219474Z 583 │ } 2026-10-24T10:41:36.9219526Z 584 │ 2026-10-24T10:41:36.9219582Z 585 │ if ( 2026-10-24T10:41:36.9219744Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T10:41:36.9219845Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T10:41:36.9219899Z 588 │ ) { 2026-10-24T10:41:36.9219958Z 589 │ return; 2026-10-24T10:41:36.9220019Z 590 │ } 2026-10-24T10:41:36.9220072Z 591 │ 2026-10-24T10:41:36.9220212Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T10:41:36.9220335Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T10:41:36.9220388Z 594 │ } 2026-10-24T10:41:36.9220493Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T10:41:36.9220562Z 596 │ const draftBackup = 2026-10-24T10:41:36.9220751Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T10:41:36.9220891Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T10:41:36.9220980Z 599 │ const importToken = Symbol(importKey); 2026-10-24T10:41:36.9221058Z 600 │ let didReserveShare = false; 2026-10-24T10:41:36.9221135Z 601 │ let didConsumeShare = false; 2026-10-24T10:41:36.9221222Z 602 │ let needsDraftRestore = false; 2026-10-24T10:41:36.9221336Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T10:41:36.9221419Z 604 │ setImportingShareKey(importKey); 2026-10-24T10:41:36.9221509Z ·  ──────────┬───────── 2026-10-24T10:41:36.9221686Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9221753Z 605 │ void (async () => { 2026-10-24T10:41:36.9221806Z ╰──── 2026-10-24T10:41:36.9222404Z  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-24T10:41:36.9222795Z  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-24T10:41:36.9222824Z 2026-10-24T10:41:36.9223029Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9223182Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T10:41:36.9223258Z 523 │ props.initialProjectRef, 2026-10-24T10:41:36.9223331Z 524 │ props.incomingShareId, 2026-10-24T10:41:36.9223421Z ·  ──────────┬────────── 2026-10-24T10:41:36.9223591Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T10:41:36.9223662Z 525 │ props.pendingTaskId, 2026-10-24T10:41:36.9223716Z ╰──── 2026-10-24T10:41:36.9224017Z  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-24T10:41:36.9224330Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9224332Z 2026-10-24T10:41:36.9224548Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T10:41:36.9224701Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T10:41:36.9224817Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T10:41:36.9224886Z 543 │ flow.loadBranches(); 2026-10-24T10:41:36.9224955Z ·  ──┬─ 2026-10-24T10:41:36.9225082Z · ╰── Missing dependency `flow` 2026-10-24T10:41:36.9225181Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T10:41:36.9225269Z ·  ────────┬──────── 2026-10-24T10:41:36.9225470Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T10:41:36.9225523Z 545 │ 2026-10-24T10:41:36.9225577Z ╰──── 2026-10-24T10:41:36.9225996Z  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-24T10:41:36.9226308Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9226310Z 2026-10-24T10:41:36.9226516Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9226670Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T10:41:36.9226735Z 765 │ flow.draftKey, 2026-10-24T10:41:36.9226861Z 766 │ hasImportedIncomingShare, 2026-10-24T10:41:36.9226954Z ·  ────────────┬─────────── 2026-10-24T10:41:36.9227130Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T10:41:36.9227195Z 767 │ incomingShare, 2026-10-24T10:41:36.9227276Z 768 │ isIncomingShareInboxLoading, 2026-10-24T10:41:36.9227373Z ·  ─────────────┬───────────── 2026-10-24T10:41:36.9227556Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T10:41:36.9227702Z 769 │ isIncomingShareUnavailable, 2026-10-24T10:41:36.9227804Z 770 │ props.incomingShareId, 2026-10-24T10:41:36.9227898Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T10:41:36.9227987Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T10:41:36.9228060Z 773 │ releaseShareReservation, 2026-10-24T10:41:36.9228123Z 774 │ reserveShare, 2026-10-24T10:41:36.9228209Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T10:41:36.9228275Z 776 │ selectedProject, 2026-10-24T10:41:36.9228344Z 777 │ shareImportAttempt, 2026-10-24T10:41:36.9228431Z ·  ─────────┬──────── 2026-10-24T10:41:36.9228595Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T10:41:36.9228651Z 778 │ ]); 2026-10-24T10:41:36.9228701Z ╰──── 2026-10-24T10:41:36.9228999Z  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-24T10:41:36.9229314Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9229317Z 2026-10-24T10:41:36.9229462Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9229622Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T10:41:36.9229676Z 276 │ 2026-10-24T10:41:36.9229861Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T10:41:36.9229955Z 278 │ │ ...nativeProps, 2026-10-24T10:41:36.9230106Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T10:41:36.9230198Z 280 │ │ ref: nativeRef, 2026-10-24T10:41:36.9230328Z 281 │ ├─▶ }); 2026-10-24T10:41:36.9230566Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9230621Z 282 │ } 2026-10-24T10:41:36.9230672Z ╰──── 2026-10-24T10:41:36.9231143Z  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-24T10:41:36.9231435Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9231504Z 2026-10-24T10:41:36.9231806Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9231939Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T10:41:36.9231991Z 339 │ 2026-10-24T10:41:36.9232092Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T10:41:36.9232169Z ·  ────┬──── 2026-10-24T10:41:36.9232305Z · ╰── 'layerTest' is declared here 2026-10-24T10:41:36.9232355Z ╰──── 2026-10-24T10:41:36.9232462Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9232465Z 2026-10-24T10:41:36.9232665Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9232819Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T10:41:36.9232917Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T10:41:36.9232997Z 257 │ }, [props.path, targetIndex]); 2026-10-24T10:41:36.9233073Z ·  ─────┬──── 2026-10-24T10:41:36.9233221Z · ╰── Unnecessary dependency `props.path` 2026-10-24T10:41:36.9233274Z 258 │ 2026-10-24T10:41:36.9233326Z ╰──── 2026-10-24T10:41:36.9233617Z  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-24T10:41:36.9233927Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9233930Z 2026-10-24T10:41:36.9234128Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.9234277Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T10:41:36.9234350Z 292 │ 2026-10-24T10:41:36.9235445Z ·  ─────────── 2026-10-24T10:41:36.9235509Z 310 │ {body} 2026-10-24T10:41:36.9235560Z ╰──── 2026-10-24T10:41:36.9235706Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T10:41:36.9235708Z 2026-10-24T10:41:36.9235908Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9236035Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T10:41:36.9236166Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T10:41:36.9236257Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T10:41:36.9236427Z ·  ───────┬────── 2026-10-24T10:41:36.9236672Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T10:41:36.9236839Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T10:41:36.9236890Z ╰──── 2026-10-24T10:41:36.9237182Z  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-24T10:41:36.9237492Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9237496Z 2026-10-24T10:41:36.9237663Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.9237798Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T10:41:36.9237885Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T10:41:36.9238043Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T10:41:36.9238162Z ·  ─────┬──── 2026-10-24T10:41:36.9238330Z · ╰── Cannot call impure function 2026-10-24T10:41:36.9238411Z 525 │ const id = setTimeout(() => { 2026-10-24T10:41:36.9238463Z ╰──── 2026-10-24T10:41:36.9238745Z  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-24T10:41:36.9239044Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.9239049Z 2026-10-24T10:41:36.9239214Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T10:41:36.9239369Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T10:41:36.9239422Z 1525 │ 2026-10-24T10:41:36.9239490Z 1526 │ for (const [] of [ 2026-10-24T10:41:36.9239563Z ·  ── 2026-10-24T10:41:36.9239637Z 1527 │ ["github", "github.com"], 2026-10-24T10:41:36.9239690Z ╰──── 2026-10-24T10:41:36.9239969Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T10:41:36.9239972Z 2026-10-24T10:41:36.9240236Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9240381Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T10:41:36.9240435Z 150 │ 2026-10-24T10:41:36.9240500Z 151 │ useEffect(() => { 2026-10-24T10:41:36.9240572Z ·  ────┬──── 2026-10-24T10:41:36.9240702Z · ╰── This is the containing effect 2026-10-24T10:41:36.9240787Z 152 │ if (!controlledSelectedPath) { 2026-10-24T10:41:36.9240848Z 153 │ return; 2026-10-24T10:41:36.9240903Z 154 │ } 2026-10-24T10:41:36.9240986Z 155 │ setExpandedPaths((current) => { 2026-10-24T10:41:36.9241067Z ·  ────────┬─────── 2026-10-24T10:41:36.9241237Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9241446Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T10:41:36.9241536Z ╰──── 2026-10-24T10:41:36.9242137Z  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-24T10:41:36.9242459Z  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-24T10:41:36.9242462Z 2026-10-24T10:41:36.9242691Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T10:41:36.9242819Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T10:41:36.9242880Z 730 │ ); 2026-10-24T10:41:36.9243051Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T10:41:36.9243151Z ·  ────── 2026-10-24T10:41:36.9243268Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T10:41:36.9243320Z ╰──── 2026-10-24T10:41:36.9243487Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T10:41:36.9243491Z 2026-10-24T10:41:36.9243692Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9243856Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T10:41:36.9243912Z 154 │ } 2026-10-24T10:41:36.9243982Z 155 │ }, [wrappedRender]); 2026-10-24T10:41:36.9244068Z ·  ──────┬────── 2026-10-24T10:41:36.9244222Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T10:41:36.9244277Z 156 │ 2026-10-24T10:41:36.9244327Z ╰──── 2026-10-24T10:41:36.9244619Z  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-24T10:41:36.9244930Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9244933Z 2026-10-24T10:41:36.9245178Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T10:41:36.9245348Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T10:41:36.9245405Z 799 │ > 2026-10-24T10:41:36.9245536Z 800 │ 2026-10-24T10:41:36.9245658Z ·  ──────────────────── 2026-10-24T10:41:36.9245759Z 801 │ 2026-10-24T10:41:36.9245809Z ╰──── 2026-10-24T10:41:36.9246035Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T10:41:36.9246174Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T10:41:36.9246177Z 2026-10-24T10:41:36.9246332Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9246494Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T10:41:36.9246745Z 35 │ 2026-10-24T10:41:36.9246975Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T10:41:36.9247063Z ·  ────────┬──────── 2026-10-24T10:41:36.9247211Z · ╰── `inspectorProgress` originates here 2026-10-24T10:41:36.9247304Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T10:41:36.9247440Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T10:41:36.9247493Z 39 │ 2026-10-24T10:41:36.9247573Z 40 │ const onClosed = props.onClosed; 2026-10-24T10:41:36.9247639Z 41 │ useEffect(() => { 2026-10-24T10:41:36.9247729Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T10:41:36.9247813Z ·  ────────┬──────── 2026-10-24T10:41:36.9247969Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T10:41:36.9248049Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T10:41:36.9248102Z ╰──── 2026-10-24T10:41:36.9248370Z  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-24T10:41:36.9248674Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9248678Z 2026-10-24T10:41:36.9248832Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9248991Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T10:41:36.9249085Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T10:41:36.9249222Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T10:41:36.9249315Z ·  ──────────┬───────── 2026-10-24T10:41:36.9249470Z · ╰── `renderedContentWidth` originates here 2026-10-24T10:41:36.9249524Z 39 │ 2026-10-24T10:41:36.9249606Z 40 │ const onClosed = props.onClosed; 2026-10-24T10:41:36.9249669Z 41 │ useEffect(() => { 2026-10-24T10:41:36.9249759Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T10:41:36.9249835Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T10:41:36.9249907Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T10:41:36.9249971Z 45 │ (finished) => { 2026-10-24T10:41:36.9250113Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T10:41:36.9250186Z 47 │ runOnJS(onClosed)(); 2026-10-24T10:41:36.9250243Z 48 │ } 2026-10-24T10:41:36.9250377Z 49 │ }, 2026-10-24T10:41:36.9250461Z 50 │ ); 2026-10-24T10:41:36.9250596Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T10:41:36.9250674Z 52 │ renderedInspectorWidth.set( 2026-10-24T10:41:36.9250818Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T10:41:36.9250873Z 54 │ ); 2026-10-24T10:41:36.9250928Z 55 │ }, [ 2026-10-24T10:41:36.9250997Z 56 │ inspectorProgress, 2026-10-24T10:41:36.9251066Z 57 │ inspectorVisible, 2026-10-24T10:41:36.9251131Z 58 │ inspectorWidth, 2026-10-24T10:41:36.9251192Z 59 │ onClosed, 2026-10-24T10:41:36.9251265Z 60 │ renderedInspectorWidth, 2026-10-24T10:41:36.9251324Z 61 │ resizing, 2026-10-24T10:41:36.9251380Z 62 │ ]); 2026-10-24T10:41:36.9251435Z 63 │ 2026-10-24T10:41:36.9251496Z 64 │ useEffect(() => { 2026-10-24T10:41:36.9251597Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T10:41:36.9251686Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T10:41:36.9251784Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T10:41:36.9251873Z ·  ──────────┬───────── 2026-10-24T10:41:36.9252034Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T10:41:36.9252093Z 68 │ return; 2026-10-24T10:41:36.9252145Z ╰──── 2026-10-24T10:41:36.9252408Z  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-24T10:41:36.9252713Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9252716Z 2026-10-24T10:41:36.9252867Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9253023Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T10:41:36.9253080Z 493 │ > 2026-10-24T10:41:36.9253159Z 494 │ {props.children(close)} 2026-10-24T10:41:36.9253251Z ·  ──┬── 2026-10-24T10:41:36.9253412Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9253489Z 495 │ 2026-10-24T10:41:36.9253542Z ╰──── 2026-10-24T10:41:36.9254008Z  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-24T10:41:36.9254306Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9254310Z 2026-10-24T10:41:36.9254525Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T10:41:36.9254629Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T10:41:36.9254694Z 1078 │ } 2026-10-24T10:41:36.9254967Z ·  ───────────────────────────────────────────── 2026-10-24T10:41:36.9255051Z 1080 │ screenOptions={({ route }) => 2026-10-24T10:41:36.9255106Z ╰──── 2026-10-24T10:41:36.9255545Z  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-24T10:41:36.9255578Z 2026-10-24T10:41:36.9256048Z ⚠ 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-24T10:41:36.9256232Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T10:41:36.9256305Z 520 │ })).delivery; 2026-10-24T10:41:36.9256505Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T10:41:36.9256622Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9256807Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T10:41:36.9256911Z 524 │ │ id: task.id, 2026-10-24T10:41:36.9257029Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T10:41:36.9257133Z 526 │ │ })).delivery; 2026-10-24T10:41:36.9257273Z 527 │ ╰─▶ } 2026-10-24T10:41:36.9257391Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T10:41:36.9257443Z ╰──── 2026-10-24T10:41:36.9257446Z 2026-10-24T10:41:36.9257658Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T10:41:36.9257783Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T10:41:36.9257834Z 78 │ 2026-10-24T10:41:36.9257978Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T10:41:36.9258069Z ·  ────────┬─────── 2026-10-24T10:41:36.9258221Z · ╰── 'describeSchedule' is declared here 2026-10-24T10:41:36.9258327Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T10:41:36.9258381Z ╰──── 2026-10-24T10:41:36.9258485Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9258488Z 2026-10-24T10:41:36.9258772Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T10:41:36.9258927Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T10:41:36.9258985Z 162 │ keys, 2026-10-24T10:41:36.9259065Z 163 │ overridingProjects = [], 2026-10-24T10:41:36.9259151Z ·  ── 2026-10-24T10:41:36.9259218Z 164 │ onClearOverrides, 2026-10-24T10:41:36.9259270Z ╰──── 2026-10-24T10:41:36.9259589Z  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-24T10:41:36.9259592Z 2026-10-24T10:41:36.9259959Z ⚠ 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-24T10:41:36.9260073Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T10:41:36.9260230Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T10:41:36.9260472Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T10:41:36.9260607Z ·  ──────────────────────── 2026-10-24T10:41:36.9260676Z 18 │ "review:write", 2026-10-24T10:41:36.9260726Z ╰──── 2026-10-24T10:41:36.9260729Z 2026-10-24T10:41:36.9261091Z ⚠ 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-24T10:41:36.9261204Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T10:41:36.9261263Z 19 │ ]); 2026-10-24T10:41:36.9261427Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T10:41:36.9261536Z ·  ──────────────────────── 2026-10-24T10:41:36.9261668Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T10:41:36.9261729Z ╰──── 2026-10-24T10:41:36.9261735Z 2026-10-24T10:41:36.9262095Z ⚠ 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-24T10:41:36.9262212Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T10:41:36.9262387Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T10:41:36.9262517Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T10:41:36.9262630Z ·  ──────────────────────── 2026-10-24T10:41:36.9262702Z 59 │ authenticated: true, 2026-10-24T10:41:36.9262759Z ╰──── 2026-10-24T10:41:36.9262762Z 2026-10-24T10:41:36.9263227Z ⚠ 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-24T10:41:36.9263361Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T10:41:36.9263429Z 38 │ JSON.stringify( 2026-10-24T10:41:36.9263550Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T10:41:36.9263651Z ·  ──────────────────────── 2026-10-24T10:41:36.9263719Z 40 │ { name: "a" }, 2026-10-24T10:41:36.9263771Z ╰──── 2026-10-24T10:41:36.9263773Z 2026-10-24T10:41:36.9264247Z ⚠ 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-24T10:41:36.9264390Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T10:41:36.9264453Z 93 │ ) { 2026-10-24T10:41:36.9264654Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.9264832Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T10:41:36.9264957Z 96 │ │ if (predicate(project)) return project; 2026-10-24T10:41:36.9265061Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9265189Z 98 │ ╰─▶ } 2026-10-24T10:41:36.9265339Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T10:41:36.9265396Z ╰──── 2026-10-24T10:41:36.9265399Z 2026-10-24T10:41:36.9265642Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.9265796Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T10:41:36.9265900Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T10:41:36.9266062Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T10:41:36.9266192Z ·  ─────┬──── 2026-10-24T10:41:36.9266366Z · ╰── Cannot call impure function 2026-10-24T10:41:36.9266447Z 822 │ return AsyncResult.failure( 2026-10-24T10:41:36.9266503Z ╰──── 2026-10-24T10:41:36.9266824Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T10:41:36.9267130Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.9267134Z 2026-10-24T10:41:36.9267341Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.9267500Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T10:41:36.9267660Z 708 │ const wokeAt = resolved 2026-10-24T10:41:36.9267838Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T10:41:36.9267973Z ·  ─────┬──── 2026-10-24T10:41:36.9268171Z · ╰── Cannot call impure function 2026-10-24T10:41:36.9268259Z 710 │ : null; 2026-10-24T10:41:36.9268374Z ╰──── 2026-10-24T10:41:36.9268673Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T10:41:36.9269002Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.9269005Z 2026-10-24T10:41:36.9269240Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9269396Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T10:41:36.9269630Z 28 │ getPendingThreadOrder(); 2026-10-24T10:41:36.9269727Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T10:41:36.9269885Z ·  ────┬──── ───────┬────── 2026-10-24T10:41:36.9270113Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T10:41:36.9270317Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T10:41:36.9270397Z 30 │ return pending; 2026-10-24T10:41:36.9270484Z ╰──── 2026-10-24T10:41:36.9270814Z  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-24T10:41:36.9271164Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9271167Z 2026-10-24T10:41:36.9271746Z ⚠ 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-24T10:41:36.9271950Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T10:41:36.9272042Z 27 │ ) { 2026-10-24T10:41:36.9272272Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T10:41:36.9272476Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T10:41:36.9272620Z 30 │ │ if (predicate(available)) return available; 2026-10-24T10:41:36.9272758Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9272921Z 32 │ ╰─▶ } 2026-10-24T10:41:36.9273246Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T10:41:36.9273326Z ╰──── 2026-10-24T10:41:36.9273350Z 2026-10-24T10:41:36.9273566Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T10:41:36.9273742Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T10:41:36.9273862Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T10:41:36.9274010Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T10:41:36.9274105Z ·  ────┬─── 2026-10-24T10:41:36.9274275Z · ╰── 'Duration' is imported here 2026-10-24T10:41:36.9274400Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T10:41:36.9274488Z ╰──── 2026-10-24T10:41:36.9274611Z  help: Consider removing this import. 2026-10-24T10:41:36.9274614Z 2026-10-24T10:41:36.9274854Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T10:41:36.9275058Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T10:41:36.9275160Z 3 │ AuthProvidersManageScope, 2026-10-24T10:41:36.9275259Z 4 │ type AuthSessionState, 2026-10-24T10:41:36.9275387Z ·  ────────┬─────── 2026-10-24T10:41:36.9275571Z · ╰── 'AuthSessionState' is imported here 2026-10-24T10:41:36.9275784Z 5 │ type EnvironmentId, 2026-10-24T10:41:36.9275845Z ╰──── 2026-10-24T10:41:36.9275996Z  help: Consider removing this import. 2026-10-24T10:41:36.9275999Z 2026-10-24T10:41:36.9276567Z ⚠ 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-24T10:41:36.9276919Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T10:41:36.9277082Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T10:41:36.9277296Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T10:41:36.9277453Z ·  ──────────────────────── 2026-10-24T10:41:36.9277555Z 182 │ version: 1, 2026-10-24T10:41:36.9277644Z ╰──── 2026-10-24T10:41:36.9277647Z 2026-10-24T10:41:36.9277917Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9278106Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T10:41:36.9278202Z 3404 │ 2026-10-24T10:41:36.9278428Z 3405 │ const layer: Layer.Layer = 2026-10-24T10:41:36.9278517Z ·  ──┬── 2026-10-24T10:41:36.9278686Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.9278793Z 3406 │ Layer.effect( 2026-10-24T10:41:36.9278990Z ╰──── 2026-10-24T10:41:36.9279112Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9279115Z 2026-10-24T10:41:36.9279352Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T10:41:36.9279550Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T10:41:36.9279708Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T10:41:36.9279855Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T10:41:36.9279985Z ·  ─────── 2026-10-24T10:41:36.9280138Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T10:41:36.9280232Z ╰──── 2026-10-24T10:41:36.9280527Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T10:41:36.9280530Z 2026-10-24T10:41:36.9280751Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T10:41:36.9280887Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T10:41:36.9281008Z 296 │ } from "./device.ts"; 2026-10-24T10:41:36.9281137Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T10:41:36.9281224Z ·  ── 2026-10-24T10:41:36.9281330Z 298 │ import { 2026-10-24T10:41:36.9281423Z ╰──── 2026-10-24T10:41:36.9281548Z  help: Remove empty braces 2026-10-24T10:41:36.9281550Z 2026-10-24T10:41:36.9281950Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9282097Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T10:41:36.9282177Z 35 │ 2026-10-24T10:41:36.9282361Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T10:41:36.9282456Z ·  ─────┬──── 2026-10-24T10:41:36.9282627Z · ╰── 'claudeCaps' is declared here 2026-10-24T10:41:36.9282734Z 37 │ optionDescriptors: [ 2026-10-24T10:41:36.9282823Z ╰──── 2026-10-24T10:41:36.9283047Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9283114Z 2026-10-24T10:41:36.9283597Z ⚠ 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-24T10:41:36.9283757Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T10:41:36.9283860Z 138 │ Effect.gen(function* () { 2026-10-24T10:41:36.9284106Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T10:41:36.9284251Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T10:41:36.9284615Z 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-24T10:41:36.9284839Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T10:41:36.9285015Z 143 │ ╰─▶ } 2026-10-24T10:41:36.9285259Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T10:41:36.9285328Z ╰──── 2026-10-24T10:41:36.9285331Z 2026-10-24T10:41:36.9285585Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T10:41:36.9285754Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T10:41:36.9285883Z 20 │ [instanceId]: { 2026-10-24T10:41:36.9285979Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T10:41:36.9286118Z ·  ──────────────────────────── 2026-10-24T10:41:36.9286222Z 22 │ [model]: options, 2026-10-24T10:41:36.9286322Z ╰──── 2026-10-24T10:41:36.9286622Z  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-24T10:41:36.9286625Z 2026-10-24T10:41:36.9286930Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T10:41:36.9287090Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T10:41:36.9287298Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T10:41:36.9287451Z 35 │ instanceId === configured ? true : false, 2026-10-24T10:41:36.9287585Z ·  ──────────────────────────────────────── 2026-10-24T10:41:36.9287675Z 36 │ ); 2026-10-24T10:41:36.9287760Z ╰──── 2026-10-24T10:41:36.9287906Z  help: Remove this ternary operator 2026-10-24T10:41:36.9287912Z 2026-10-24T10:41:36.9288255Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T10:41:36.9288423Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T10:41:36.9288526Z 1021 │ instanceId, 2026-10-24T10:41:36.9288702Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T10:41:36.9288881Z ·  ────────────────────────────────────────────────── 2026-10-24T10:41:36.9288989Z 1023 │ ]), 2026-10-24T10:41:36.9289076Z ╰──── 2026-10-24T10:41:36.9289379Z  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-24T10:41:36.9289382Z 2026-10-24T10:41:36.9289958Z ⚠ 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-24T10:41:36.9290172Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T10:41:36.9290320Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T10:41:36.9290575Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T10:41:36.9290738Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T10:41:36.9290876Z 137 │ │ if (predicate(lastState)) { 2026-10-24T10:41:36.9291016Z 138 │ │ return lastState; 2026-10-24T10:41:36.9291136Z 139 │ │ } 2026-10-24T10:41:36.9291374Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9291508Z 141 │ ╰─▶ } 2026-10-24T10:41:36.9291636Z 142 │ return yield* Effect.die( 2026-10-24T10:41:36.9291727Z ╰──── 2026-10-24T10:41:36.9291729Z 2026-10-24T10:41:36.9292139Z ⚠ 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-24T10:41:36.9292288Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T10:41:36.9292377Z 145 │ name, 2026-10-24T10:41:36.9292562Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T10:41:36.9292710Z ·  ────────────────────────── 2026-10-24T10:41:36.9292867Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T10:41:36.9292928Z ╰──── 2026-10-24T10:41:36.9292931Z 2026-10-24T10:41:36.9293185Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9293368Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T10:41:36.9293481Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T10:41:36.9293561Z 1315 │ retryTick, 2026-10-24T10:41:36.9293672Z ·  ────┬──── 2026-10-24T10:41:36.9293865Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T10:41:36.9293972Z 1316 │ restoreQueuedMessage, 2026-10-24T10:41:36.9294155Z ╰──── 2026-10-24T10:41:36.9294486Z  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-24T10:41:36.9294860Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9294863Z 2026-10-24T10:41:36.9295101Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T10:41:36.9295259Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T10:41:36.9295377Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T10:41:36.9295577Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T10:41:36.9295752Z 159 │ │ constructor(data: Record) { 2026-10-24T10:41:36.9295972Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T10:41:36.9296093Z 161 │ │ } 2026-10-24T10:41:36.9296251Z 162 │ ╰─▶ }, 2026-10-24T10:41:36.9296369Z 163 │ clipboard: { 2026-10-24T10:41:36.9296458Z ╰──── 2026-10-24T10:41:36.9296642Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T10:41:36.9296645Z 2026-10-24T10:41:36.9296974Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9297138Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T10:41:36.9297289Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T10:41:36.9297496Z 84 │ useEffect(() => { 2026-10-24T10:41:36.9297595Z ·  ────┬──── 2026-10-24T10:41:36.9297752Z · ╰── This is the containing effect 2026-10-24T10:41:36.9297896Z 85 │ if (!actionState.isRunning) return; 2026-10-24T10:41:36.9297998Z 86 │ setNowMs(Date.now()); 2026-10-24T10:41:36.9298091Z ·  ────┬─── 2026-10-24T10:41:36.9298295Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9298463Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T10:41:36.9298557Z ╰──── 2026-10-24T10:41:36.9299182Z  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-24T10:41:36.9299543Z  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-24T10:41:36.9299546Z 2026-10-24T10:41:36.9300041Z ⚠ 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-24T10:41:36.9300242Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T10:41:36.9300344Z 168 │ }); 2026-10-24T10:41:36.9300559Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T10:41:36.9300793Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T10:41:36.9300939Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9301214Z 172 │ ╰─▶ } 2026-10-24T10:41:36.9301291Z 173 │ 2026-10-24T10:41:36.9301380Z ╰──── 2026-10-24T10:41:36.9301383Z 2026-10-24T10:41:36.9301874Z ⚠ 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-24T10:41:36.9302077Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T10:41:36.9302231Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T10:41:36.9302511Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T10:41:36.9302719Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T10:41:36.9302867Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9303042Z 181 │ ╰─▶ } 2026-10-24T10:41:36.9303112Z 182 │ 2026-10-24T10:41:36.9303198Z ╰──── 2026-10-24T10:41:36.9303201Z 2026-10-24T10:41:36.9303684Z ⚠ 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-24T10:41:36.9303891Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T10:41:36.9304062Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T10:41:36.9304273Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T10:41:36.9304430Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T10:41:36.9304777Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T10:41:36.9304911Z 310 │ │ break; 2026-10-24T10:41:36.9305008Z 311 │ │ } 2026-10-24T10:41:36.9305148Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T10:41:36.9305310Z 313 │ ╰─▶ } 2026-10-24T10:41:36.9305420Z 314 │ 2026-10-24T10:41:36.9305488Z ╰──── 2026-10-24T10:41:36.9305516Z 2026-10-24T10:41:36.9305704Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T10:41:36.9305890Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T10:41:36.9305984Z 465 │ 2026-10-24T10:41:36.9306135Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T10:41:36.9306226Z ·  ── 2026-10-24T10:41:36.9306318Z 467 │ } 2026-10-24T10:41:36.9306396Z ╰──── 2026-10-24T10:41:36.9306684Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T10:41:36.9306687Z 2026-10-24T10:41:36.9306905Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.9307144Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T10:41:36.9307434Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T10:41:36.9307569Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T10:41:36.9307685Z ·  ─────┬──── 2026-10-24T10:41:36.9307870Z · ╰── Cannot call impure function 2026-10-24T10:41:36.9308012Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T10:41:36.9308093Z ╰──── 2026-10-24T10:41:36.9308402Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T10:41:36.9308748Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.9308750Z 2026-10-24T10:41:36.9309055Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T10:41:36.9309234Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T10:41:36.9309430Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T10:41:36.9309538Z 12 │ this.onmessage = listener; 2026-10-24T10:41:36.9309652Z ·  ───────── 2026-10-24T10:41:36.9309744Z 13 │ } 2026-10-24T10:41:36.9309825Z ╰──── 2026-10-24T10:41:36.9310170Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T10:41:36.9310173Z 2026-10-24T10:41:36.9310432Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T10:41:36.9310611Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T10:41:36.9310805Z 15 │ constructor() { 2026-10-24T10:41:36.9310908Z 16 │ source = this; 2026-10-24T10:41:36.9311011Z ·  ────── 2026-10-24T10:41:36.9311100Z 17 │ } 2026-10-24T10:41:36.9311187Z ╰──── 2026-10-24T10:41:36.9311476Z  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-24T10:41:36.9311489Z 2026-10-24T10:41:36.9311705Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T10:41:36.9311882Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T10:41:36.9312011Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T10:41:36.9312140Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T10:41:36.9315516Z ·  ──┬── 2026-10-24T10:41:36.9315678Z · ╰── 'Scope' is imported here 2026-10-24T10:41:36.9315765Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T10:41:36.9315819Z ╰──── 2026-10-24T10:41:36.9315919Z  help: Consider removing this import. 2026-10-24T10:41:36.9315922Z 2026-10-24T10:41:36.9316113Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T10:41:36.9316240Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T10:41:36.9316353Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T10:41:36.9316423Z 187 │ let next = initial; 2026-10-24T10:41:36.9316601Z ·  ──┬─ 2026-10-24T10:41:36.9316863Z · ╰── From this accumulator 2026-10-24T10:41:36.9316946Z 188 │ let receivedSnapshot = false; 2026-10-24T10:41:36.9317024Z 189 │ for (const item of items) { 2026-10-24T10:41:36.9317094Z ·  ─┬─ 2026-10-24T10:41:36.9317200Z · ╰── For this loop 2026-10-24T10:41:36.9317291Z 190 │ if (item.kind === "synchronized") { 2026-10-24T10:41:36.9317360Z 191 │ waiting = false; 2026-10-24T10:41:36.9317453Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T10:41:36.9317572Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T10:41:36.9317660Z ·  ───┬─── 2026-10-24T10:41:36.9317794Z · ╰── From this spread 2026-10-24T10:41:36.9317863Z 194 │ } 2026-10-24T10:41:36.9317917Z ╰──── 2026-10-24T10:41:36.9318075Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T10:41:36.9318236Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T10:41:36.9318239Z 2026-10-24T10:41:36.9318429Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T10:41:36.9318538Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T10:41:36.9318606Z 457 │ ): Array { 2026-10-24T10:41:36.9318713Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T10:41:36.9318816Z ·  ┬ 2026-10-24T10:41:36.9318966Z · ╰── '_' is declared here 2026-10-24T10:41:36.9319041Z 459 │ for (const b of data) { 2026-10-24T10:41:36.9319096Z ╰──── 2026-10-24T10:41:36.9319199Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9319202Z 2026-10-24T10:41:36.9319482Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T10:41:36.9319613Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T10:41:36.9319672Z 284 │ }, 2026-10-24T10:41:36.9319758Z 285 │ (effect, flow, stopSessions) => 2026-10-24T10:41:36.9319851Z ·  ──────┬───── 2026-10-24T10:41:36.9320004Z · ╰── 'stopSessions' is declared here 2026-10-24T10:41:36.9320071Z 286 │ effect.pipe( 2026-10-24T10:41:36.9320130Z ╰──── 2026-10-24T10:41:36.9320233Z  help: Consider removing this parameter. 2026-10-24T10:41:36.9320236Z 2026-10-24T10:41:36.9320459Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T10:41:36.9320579Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T10:41:36.9320683Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T10:41:36.9320813Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T10:41:36.9320970Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T10:41:36.9321030Z 347 │ }; 2026-10-24T10:41:36.9321082Z ╰──── 2026-10-24T10:41:36.9321450Z  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-24T10:41:36.9321491Z 2026-10-24T10:41:36.9321710Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T10:41:36.9321832Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T10:41:36.9321901Z 447 │ const favorites = 2026-10-24T10:41:36.9322008Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T10:41:36.9322096Z ·  ───┬── 2026-10-24T10:41:36.9322222Z · ╰── For this reduce 2026-10-24T10:41:36.9322304Z 449 │ const exists = current.some( 2026-10-24T10:41:36.9322479Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T10:41:36.9322537Z 451 │ ); 2026-10-24T10:41:36.9322617Z 452 │ return change.favorite 2026-10-24T10:41:36.9322683Z 453 │ ? exists 2026-10-24T10:41:36.9322747Z 454 │ ? current 2026-10-24T10:41:36.9322884Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T10:41:36.9322971Z ·  ─────┬──── 2026-10-24T10:41:36.9323092Z · ╰── From this spread 2026-10-24T10:41:36.9323161Z 456 │ : current.filter( 2026-10-24T10:41:36.9323213Z ╰──── 2026-10-24T10:41:36.9323419Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T10:41:36.9323578Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T10:41:36.9323581Z 2026-10-24T10:41:36.9323768Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T10:41:36.9323890Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T10:41:36.9323954Z 464 │ null; 2026-10-24T10:41:36.9324070Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T10:41:36.9324160Z ·  ──────────┬───────── 2026-10-24T10:41:36.9324289Z · ╰── From this accumulator 2026-10-24T10:41:36.9324390Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T10:41:36.9324458Z ·  ─┬─ 2026-10-24T10:41:36.9324566Z · ╰── For this loop 2026-10-24T10:41:36.9324701Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T10:41:36.9324770Z 468 │ hiddenModels: [], 2026-10-24T10:41:36.9324837Z 469 │ modelOrder: [], 2026-10-24T10:41:36.9324892Z 470 │ }; 2026-10-24T10:41:36.9325080Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T10:41:36.9325194Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T10:41:36.9325268Z 473 │ nextModelPreferences = { 2026-10-24T10:41:36.9325345Z 474 │ ...nextModelPreferences, 2026-10-24T10:41:36.9325443Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9325570Z · ╰── From this spread 2026-10-24T10:41:36.9325684Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T10:41:36.9325736Z ╰──── 2026-10-24T10:41:36.9325891Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T10:41:36.9326047Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T10:41:36.9326049Z 2026-10-24T10:41:36.9326555Z ⚠ 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-24T10:41:36.9326738Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T10:41:36.9326859Z 262 │ ...(update._meta !== undefined 2026-10-24T10:41:36.9327026Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T10:41:36.9327119Z ·  ───────── 2026-10-24T10:41:36.9327184Z 264 │ : {}), 2026-10-24T10:41:36.9327235Z ╰──── 2026-10-24T10:41:36.9327238Z 2026-10-24T10:41:36.9327405Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T10:41:36.9327547Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T10:41:36.9327683Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T10:41:36.9327828Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T10:41:36.9327954Z ·  ─────┬──── 2026-10-24T10:41:36.9328129Z · ╰── Cannot call impure function 2026-10-24T10:41:36.9328229Z 141 │ onSelect={(selected) => { 2026-10-24T10:41:36.9328279Z ╰──── 2026-10-24T10:41:36.9328559Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T10:41:36.9328866Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T10:41:36.9328871Z 2026-10-24T10:41:36.9329208Z ⚠ 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-24T10:41:36.9329353Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T10:41:36.9329514Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T10:41:36.9329685Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T10:41:36.9329771Z ·  ───────── 2026-10-24T10:41:36.9329956Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T10:41:36.9330009Z ╰──── 2026-10-24T10:41:36.9330014Z 2026-10-24T10:41:36.9330346Z ⚠ 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-24T10:41:36.9330491Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T10:41:36.9330662Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T10:41:36.9330839Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T10:41:36.9330924Z ·  ───────── 2026-10-24T10:41:36.9330979Z 52 │ } 2026-10-24T10:41:36.9331032Z ╰──── 2026-10-24T10:41:36.9331034Z 2026-10-24T10:41:36.9331434Z ⚠ 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-24T10:41:36.9331604Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T10:41:36.9331669Z 54 │ assert.equal( 2026-10-24T10:41:36.9331844Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T10:41:36.9331918Z ·  ───────── 2026-10-24T10:41:36.9331975Z 56 │ true, 2026-10-24T10:41:36.9332029Z ╰──── 2026-10-24T10:41:36.9332032Z 2026-10-24T10:41:36.9332362Z ⚠ 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-24T10:41:36.9332502Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T10:41:36.9332570Z 58 │ assert.equal( 2026-10-24T10:41:36.9332756Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T10:41:36.9332829Z ·  ───────── 2026-10-24T10:41:36.9332888Z 60 │ true, 2026-10-24T10:41:36.9332939Z ╰──── 2026-10-24T10:41:36.9332941Z 2026-10-24T10:41:36.9333270Z ⚠ 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-24T10:41:36.9333420Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T10:41:36.9333475Z 102 │ 2026-10-24T10:41:36.9333642Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T10:41:36.9333726Z ·  ───────── 2026-10-24T10:41:36.9333781Z 104 │ }); 2026-10-24T10:41:36.9333839Z ╰──── 2026-10-24T10:41:36.9333844Z 2026-10-24T10:41:36.9334035Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T10:41:36.9334181Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T10:41:36.9334237Z  80 │ 2026-10-24T10:41:36.9334510Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T10:41:36.9334634Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T10:41:36.9334758Z  83 │ │ ): Effect.fn.Return { 2026-10-24T10:41:36.9334929Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T10:41:36.9335144Z  85 │ │ const connections = new Map(); 2026-10-24T10:41:36.9335246Z  86 │ │ 2026-10-24T10:41:36.9335460Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T10:41:36.9335563Z  88 │ │ Effect.suspend(() => { 2026-10-24T10:41:36.9335702Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T10:41:36.9335815Z  90 │ │ return connection === undefined 2026-10-24T10:41:36.9336029Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T10:41:36.9336142Z  92 │ │ : Effect.succeed(connection); 2026-10-24T10:41:36.9336219Z  93 │ │ }); 2026-10-24T10:41:36.9336288Z  94 │ │ 2026-10-24T10:41:36.9336379Z  95 │ │ const send = ( 2026-10-24T10:41:36.9336481Z  96 │ │ connection: Connection, 2026-10-24T10:41:36.9336573Z  97 │ │ message: unknown, 2026-10-24T10:41:36.9336735Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T10:41:36.9336886Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T10:41:36.9336994Z 100 │ │ Effect.gen(function* () { 2026-10-24T10:41:36.9337118Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T10:41:36.9337260Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T10:41:36.9337482Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T10:41:36.9337563Z 104 │ │ } 2026-10-24T10:41:36.9337698Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T10:41:36.9337798Z 106 │ │ try: (signal) => 2026-10-24T10:41:36.9337932Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T10:41:36.9338033Z 108 │ │ method: "POST", 2026-10-24T10:41:36.9338127Z 109 │ │ signal, 2026-10-24T10:41:36.9338225Z 110 │ │ headers: { 2026-10-24T10:41:36.9338353Z 111 │ │ "content-type": "application/json", 2026-10-24T10:41:36.9338496Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T10:41:36.9338635Z 113 │ │ authorization: options.authorization, 2026-10-24T10:41:36.9338764Z 114 │ │ ...(connection.sessionId === null 2026-10-24T10:41:36.9338859Z 115 │ │ ? {} 2026-10-24T10:41:36.9339002Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T10:41:36.9339138Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T10:41:36.9339232Z 118 │ │ ? {} 2026-10-24T10:41:36.9339397Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T10:41:36.9339482Z 120 │ │ }, 2026-10-24T10:41:36.9339574Z 121 │ │ body, 2026-10-24T10:41:36.9339732Z 122 │ │ }), 2026-10-24T10:41:36.9339865Z 123 │ │ catch: bridgeError, 2026-10-24T10:41:36.9339945Z 124 │ │ }); 2026-10-24T10:41:36.9340160Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T10:41:36.9340261Z 126 │ │ if (!response.ok) { 2026-10-24T10:41:36.9340369Z 127 │ │ yield* Effect.promise( 2026-10-24T10:41:36.9340551Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T10:41:36.9340633Z 129 │ │ ); 2026-10-24T10:41:36.9340746Z 130 │ │ return yield* Effect.fail( 2026-10-24T10:41:36.9340963Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T10:41:36.9341046Z 132 │ │ ); 2026-10-24T10:41:36.9341125Z 133 │ │ } 2026-10-24T10:41:36.9341336Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T10:41:36.9341459Z 135 │ │ for (const payload of payloads) { 2026-10-24T10:41:36.9341675Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T10:41:36.9341753Z 137 │ │ } 2026-10-24T10:41:36.9341852Z 138 │ │ return payloads; 2026-10-24T10:41:36.9341976Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T10:41:36.9342057Z 140 │ │ ); 2026-10-24T10:41:36.9342131Z 141 │ │ 2026-10-24T10:41:36.9342308Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T10:41:36.9342435Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T10:41:36.9342622Z 144 │ │ ): Effect.fn.Return { 2026-10-24T10:41:36.9342782Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T10:41:36.9342908Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T10:41:36.9343032Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T10:41:36.9343135Z 148 │ │ if (sessionId !== null) { 2026-10-24T10:41:36.9343271Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T10:41:36.9343371Z 150 │ │ try: (signal) => 2026-10-24T10:41:36.9343502Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T10:41:36.9343603Z 152 │ │ method: "DELETE", 2026-10-24T10:41:36.9343693Z 153 │ │ signal, 2026-10-24T10:41:36.9343788Z 154 │ │ headers: { 2026-10-24T10:41:36.9343919Z 155 │ │ authorization: options.authorization, 2026-10-24T10:41:36.9344038Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T10:41:36.9344171Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T10:41:36.9344263Z 158 │ │ ? {} 2026-10-24T10:41:36.9344500Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T10:41:36.9344720Z 160 │ │ }, 2026-10-24T10:41:36.9344801Z 161 │ │ }), 2026-10-24T10:41:36.9344903Z 162 │ │ catch: bridgeError, 2026-10-24T10:41:36.9344982Z 163 │ │ }); 2026-10-24T10:41:36.9345117Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T10:41:36.9345226Z 165 │ │ return yield* Effect.fail( 2026-10-24T10:41:36.9345338Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T10:41:36.9345521Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T10:41:36.9345609Z 168 │ │ ), 2026-10-24T10:41:36.9345689Z 169 │ │ ); 2026-10-24T10:41:36.9345767Z 170 │ │ } 2026-10-24T10:41:36.9345873Z 171 │ │ yield* Effect.promise( 2026-10-24T10:41:36.9346053Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T10:41:36.9346130Z 173 │ │ ); 2026-10-24T10:41:36.9346206Z 174 │ │ } 2026-10-24T10:41:36.9346291Z 175 │ │ return {}; 2026-10-24T10:41:36.9346365Z 176 │ │ }); 2026-10-24T10:41:36.9346434Z 177 │ │ 2026-10-24T10:41:36.9346514Z 178 │ │ return { 2026-10-24T10:41:36.9346694Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T10:41:36.9346851Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T10:41:36.9346960Z 181 │ │ return yield* Effect.fail( 2026-10-24T10:41:36.9347146Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T10:41:36.9347225Z 183 │ │ ); 2026-10-24T10:41:36.9347301Z 184 │ │ } 2026-10-24T10:41:36.9347428Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T10:41:36.9347639Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T10:41:36.9347715Z 187 │ │ } 2026-10-24T10:41:36.9347878Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T10:41:36.9347997Z 189 │ │ connections.set(connectionId, { 2026-10-24T10:41:36.9348115Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T10:41:36.9348214Z 191 │ │ sessionId: null, 2026-10-24T10:41:36.9348320Z 192 │ │ protocolVersion: null, 2026-10-24T10:41:36.9348420Z 193 │ │ nextRequestId: 0, 2026-10-24T10:41:36.9348500Z 194 │ │ }); 2026-10-24T10:41:36.9348604Z 195 │ │ return { connectionId }; 2026-10-24T10:41:36.9348680Z 196 │ │ }), 2026-10-24T10:41:36.9348851Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T10:41:36.9349084Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T10:41:36.9349244Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T10:41:36.9349371Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T10:41:36.9349469Z 201 │ │ jsonrpc: "2.0", 2026-10-24T10:41:36.9349550Z 202 │ │ id, 2026-10-24T10:41:36.9349654Z 203 │ │ method: request.method, 2026-10-24T10:41:36.9349815Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T10:41:36.9349893Z 205 │ │ }); 2026-10-24T10:41:36.9350079Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T10:41:36.9350208Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T10:41:36.9350314Z 208 │ │ if (envelope === null) { 2026-10-24T10:41:36.9350423Z 209 │ │ return yield* Effect.fail( 2026-10-24T10:41:36.9350608Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T10:41:36.9350688Z 211 │ │ ); 2026-10-24T10:41:36.9350764Z 212 │ │ } 2026-10-24T10:41:36.9350883Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T10:41:36.9351078Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T10:41:36.9351153Z 215 │ │ } 2026-10-24T10:41:36.9351330Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T10:41:36.9351408Z 217 │ │ }), 2026-10-24T10:41:36.9351599Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T10:41:36.9351761Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T10:41:36.9351868Z 220 │ │ yield* send(connection, { 2026-10-24T10:41:36.9351964Z 221 │ │ jsonrpc: "2.0", 2026-10-24T10:41:36.9352065Z 222 │ │ method: request.method, 2026-10-24T10:41:36.9352223Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T10:41:36.9352302Z 224 │ │ }); 2026-10-24T10:41:36.9352377Z 225 │ │ }), 2026-10-24T10:41:36.9352469Z 226 │ │ disconnect, 2026-10-24T10:41:36.9352582Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T10:41:36.9352678Z 228 │ │ Effect.forEach( 2026-10-24T10:41:36.9352783Z 229 │ │ [...connections.keys()], 2026-10-24T10:41:36.9352953Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T10:41:36.9353053Z 231 │ │ { discard: true }, 2026-10-24T10:41:36.9353130Z 232 │ │ ), 2026-10-24T10:41:36.9353206Z 233 │ │ ), 2026-10-24T10:41:36.9353279Z 234 │ │ }; 2026-10-24T10:41:36.9353408Z 235 │ ╰─▶ }); 2026-10-24T10:41:36.9353461Z ╰──── 2026-10-24T10:41:36.9353799Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T10:41:36.9353834Z 2026-10-24T10:41:36.9354029Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.9354182Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T10:41:36.9354287Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T10:41:36.9354380Z 223 │ 2026-10-24T10:41:36.9354489Z ·  ─────────────── 2026-10-24T10:41:36.9354582Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T10:41:36.9354636Z ╰──── 2026-10-24T10:41:36.9354784Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T10:41:36.9354793Z 2026-10-24T10:41:36.9354988Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.9355139Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T10:41:36.9355214Z 226 │ > { 2026-10-24T10:41:36.9356332Z ·  ────────┬─────── 2026-10-24T10:41:36.9356482Z · ╰── 'summarizePayload' is declared here 2026-10-24T10:41:36.9356588Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T10:41:36.9356732Z ╰──── 2026-10-24T10:41:36.9356912Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9356916Z 2026-10-24T10:41:36.9357108Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T10:41:36.9357250Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T10:41:36.9357392Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T10:41:36.9357510Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T10:41:36.9357582Z ·  ──┬── 2026-10-24T10:41:36.9357710Z · ╰── 'Image' is imported here 2026-10-24T10:41:36.9357764Z 18 │ 2026-10-24T10:41:36.9357816Z ╰──── 2026-10-24T10:41:36.9357913Z  help: Consider removing this import. 2026-10-24T10:41:36.9357916Z 2026-10-24T10:41:36.9358120Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T10:41:36.9358261Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T10:41:36.9358425Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T10:41:36.9358603Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T10:41:36.9358737Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9359206Z · ╰── 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-24T10:41:36.9359280Z 227 │ mostRecentEventCount, 2026-10-24T10:41:36.9359339Z 228 │ ); 2026-10-24T10:41:36.9359461Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T10:41:36.9359596Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T10:41:36.9359797Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9359889Z 230 │ const assumedValue = props.value; 2026-10-24T10:41:36.9359944Z ╰──── 2026-10-24T10:41:36.9360112Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T10:41:36.9360435Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9360438Z 2026-10-24T10:41:36.9360652Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T10:41:36.9360793Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T10:41:36.9360938Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T10:41:36.9361029Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T10:41:36.9361121Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9361584Z · ╰── 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-24T10:41:36.9361659Z 238 │ controlledEventCount, 2026-10-24T10:41:36.9361726Z 239 │ assumedValue, 2026-10-24T10:41:36.9361782Z 240 │ ); 2026-10-24T10:41:36.9361938Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T10:41:36.9362075Z ·  ───────────┬────────── 2026-10-24T10:41:36.9362297Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T10:41:36.9362457Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T10:41:36.9362540Z ╰──── 2026-10-24T10:41:36.9362960Z  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-24T10:41:36.9363275Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9363278Z 2026-10-24T10:41:36.9363426Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9363573Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T10:41:36.9363697Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T10:41:36.9363815Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T10:41:36.9363936Z ·  ─────────────┬──────────── 2026-10-24T10:41:36.9364105Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9364163Z 163 │ }); 2026-10-24T10:41:36.9364214Z ╰──── 2026-10-24T10:41:36.9364680Z  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-24T10:41:36.9364973Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9364975Z 2026-10-24T10:41:36.9365126Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9365274Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T10:41:36.9365398Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T10:41:36.9365509Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T10:41:36.9365626Z ·  ─────────────┬──────────── 2026-10-24T10:41:36.9365833Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9365891Z 163 │ }); 2026-10-24T10:41:36.9365944Z ╰──── 2026-10-24T10:41:36.9366413Z  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-24T10:41:36.9366708Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9366711Z 2026-10-24T10:41:36.9366892Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9367036Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T10:41:36.9367093Z 163 │ }); 2026-10-24T10:41:36.9367183Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T10:41:36.9367308Z ·  ─────────┬────────────┬─── 2026-10-24T10:41:36.9367498Z · │ ╰── Cannot update ref value during render 2026-10-24T10:41:36.9367685Z · ╰── This value is a ref 2026-10-24T10:41:36.9367793Z 165 │ return JSON.stringify( 2026-10-24T10:41:36.9367844Z ╰──── 2026-10-24T10:41:36.9368306Z  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-24T10:41:36.9368596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9368598Z 2026-10-24T10:41:36.9368742Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9368884Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T10:41:36.9368955Z 205 │ mostRecentEventCount, 2026-10-24T10:41:36.9369047Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T10:41:36.9369155Z ·  ───────────────┬─────────────── 2026-10-24T10:41:36.9369345Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9369400Z 207 │ ); 2026-10-24T10:41:36.9369452Z ╰──── 2026-10-24T10:41:36.9369917Z  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-24T10:41:36.9370207Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9370210Z 2026-10-24T10:41:36.9370358Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9370501Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T10:41:36.9370572Z 211 │ mostRecentEventCount, 2026-10-24T10:41:36.9370660Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T10:41:36.9370764Z ·  ───────────────┬─────────────── 2026-10-24T10:41:36.9370951Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9371007Z 213 │ ); 2026-10-24T10:41:36.9371058Z ╰──── 2026-10-24T10:41:36.9371518Z  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-24T10:41:36.9371811Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9371817Z 2026-10-24T10:41:36.9372006Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T10:41:36.9372146Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T10:41:36.9372270Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T10:41:36.9372384Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T10:41:36.9372493Z ·  ─────────┬──────── 2026-10-24T10:41:36.9373030Z · ╰── 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-24T10:41:36.9373120Z 163 │ }); 2026-10-24T10:41:36.9373211Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T10:41:36.9373280Z 165 │ return JSON.stringify( 2026-10-24T10:41:36.9373446Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T10:41:36.9373514Z 167 │ const record = 2026-10-24T10:41:36.9373594Z 168 │ token.type === "context" 2026-10-24T10:41:36.9373758Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T10:41:36.9373825Z 170 │ : undefined; 2026-10-24T10:41:36.9373933Z 171 │ const presentation = contextChipPresentation( 2026-10-24T10:41:36.9374044Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T10:41:36.9374113Z 173 │ record, 2026-10-24T10:41:36.9374175Z 174 │ ); 2026-10-24T10:41:36.9374260Z 175 │ const icon = contextChipIcon( 2026-10-24T10:41:36.9374328Z 176 │ presentation, 2026-10-24T10:41:36.9374470Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T10:41:36.9374530Z 178 │ ); 2026-10-24T10:41:36.9374594Z 179 │ return { 2026-10-24T10:41:36.9374665Z 180 │ type: token.type, 2026-10-24T10:41:36.9374740Z 181 │ source: token.source, 2026-10-24T10:41:36.9374812Z 182 │ start: token.start, 2026-10-24T10:41:36.9374880Z 183 │ end: token.end, 2026-10-24T10:41:36.9375027Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T10:41:36.9375088Z 185 │ label: 2026-10-24T10:41:36.9375173Z 186 │ token.type === "skill" 2026-10-24T10:41:36.9375284Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T10:41:36.9375367Z 188 │ : token.type === "context" 2026-10-24T10:41:36.9375604Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T10:41:36.9375688Z 190 │ : basename(token.value), 2026-10-24T10:41:36.9375833Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T10:41:36.9375928Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T10:41:36.9376017Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T10:41:36.9376075Z 194 │ }; 2026-10-24T10:41:36.9376133Z 195 │ }), 2026-10-24T10:41:36.9376189Z 196 │ ); 2026-10-24T10:41:36.9376329Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T10:41:36.9376488Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T10:41:36.9376696Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9376863Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T10:41:36.9376916Z ╰──── 2026-10-24T10:41:36.9377122Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T10:41:36.9377437Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9377440Z 2026-10-24T10:41:36.9377696Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T10:41:36.9377869Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T10:41:36.9378004Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T10:41:36.9378107Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T10:41:36.9378199Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9378659Z · ╰── 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-24T10:41:36.9378752Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T10:41:36.9378815Z 254 │ value, 2026-10-24T10:41:36.9378893Z 255 │ selection: nextSelection, 2026-10-24T10:41:36.9378952Z 256 │ }); 2026-10-24T10:41:36.9379041Z 257 │ return acknowledgedEventCount; 2026-10-24T10:41:36.9379100Z 258 │ }, 2026-10-24T10:41:36.9379156Z 259 │ [], 2026-10-24T10:41:36.9379224Z ·  ─┬ 2026-10-24T10:41:36.9379405Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9379460Z 260 │ ); 2026-10-24T10:41:36.9379512Z ╰──── 2026-10-24T10:41:36.9379714Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T10:41:36.9380027Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9380030Z 2026-10-24T10:41:36.9380235Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9380372Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T10:41:36.9380456Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T10:41:36.9380564Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T10:41:36.9380708Z ·  ──────┬────── ────┬─── 2026-10-24T10:41:36.9380907Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T10:41:36.9381054Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T10:41:36.9381113Z 455 │ const { 2026-10-24T10:41:36.9381166Z ╰──── 2026-10-24T10:41:36.9381532Z  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-24T10:41:36.9381874Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9381876Z 2026-10-24T10:41:36.9382062Z ⚠ react(static-components): Cannot create components during render 2026-10-24T10:41:36.9382197Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T10:41:36.9382261Z 492 │ // same check. 2026-10-24T10:41:36.9382389Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T10:41:36.9382509Z ·  ─────────────┬───────────── 2026-10-24T10:41:36.9382690Z · ╰── The component is created during render here 2026-10-24T10:41:36.9382847Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T10:41:36.9382970Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T10:41:36.9383099Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T10:41:36.9383192Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T10:41:36.9383271Z 498 │ setIsPullRefreshing(true); 2026-10-24T10:41:36.9383355Z 499 │ await refreshSelectedSection(); 2026-10-24T10:41:36.9383432Z 500 │ setIsPullRefreshing(false); 2026-10-24T10:41:36.9383487Z 501 │ }; 2026-10-24T10:41:36.9383630Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T10:41:36.9383771Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T10:41:36.9383878Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T10:41:36.9383969Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T10:41:36.9384062Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T10:41:36.9384132Z 507 │ files: reviewFiles, 2026-10-24T10:41:36.9384230Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T10:41:36.9384364Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T10:41:36.9384430Z 510 │ : undefined, 2026-10-24T10:41:36.9384525Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T10:41:36.9384648Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T10:41:36.9384712Z 513 │ : undefined, 2026-10-24T10:41:36.9384767Z 514 │ }); 2026-10-24T10:41:36.9384961Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T10:41:36.9385097Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T10:41:36.9385164Z 517 │ environmentId, 2026-10-24T10:41:36.9385227Z 518 │ threadId, 2026-10-24T10:41:36.9385294Z 519 │ selectedSection, 2026-10-24T10:41:36.9385363Z 520 │ nativeReviewDiffData, 2026-10-24T10:41:36.9385419Z 521 │ }); 2026-10-24T10:41:36.9385525Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T10:41:36.9385612Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T10:41:36.9385701Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T10:41:36.9385780Z 525 │ diff: selectedSection?.diff, 2026-10-24T10:41:36.9385856Z 526 │ data: nativeReviewDiffData, 2026-10-24T10:41:36.9385926Z 527 │ collapsedFileIds, 2026-10-24T10:41:36.9385989Z 528 │ viewedFileIds, 2026-10-24T10:41:36.9386099Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T10:41:36.9386275Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T10:41:36.9386359Z 531 │ }); 2026-10-24T10:41:36.9386433Z 532 │ const showcaseReviewKey = 2026-10-24T10:41:36.9386566Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T10:41:36.9386802Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T10:41:36.9386863Z 535 │ : null; 2026-10-24T10:41:36.9387031Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T10:41:36.9387110Z 537 │ nativeBridge.onDebug(event); 2026-10-24T10:41:36.9387167Z 538 │ if ( 2026-10-24T10:41:36.9387246Z 539 │ showcaseReviewKey === null || 2026-10-24T10:41:36.9387368Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T10:41:36.9387484Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T10:41:36.9387543Z 542 │ ) { 2026-10-24T10:41:36.9387602Z 543 │ return; 2026-10-24T10:41:36.9387658Z 544 │ } 2026-10-24T10:41:36.9387771Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T10:41:36.9387935Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T10:41:36.9387988Z 547 │ }; 2026-10-24T10:41:36.9388041Z 548 │ 2026-10-24T10:41:36.9388158Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T10:41:36.9388237Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T10:41:36.9388326Z 551 │ commentSelection.clearSelection(); 2026-10-24T10:41:36.9388448Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T10:41:36.9388527Z 553 │ toggleExpandedFile(fileId); 2026-10-24T10:41:36.9388583Z 554 │ } 2026-10-24T10:41:36.9388699Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T10:41:36.9388775Z 556 │ if (!nativeView) return; 2026-10-24T10:41:36.9388868Z 557 │ const result = await settlePromise(() => 2026-10-24T10:41:36.9389044Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T10:41:36.9389101Z 559 │ ); 2026-10-24T10:41:36.9389188Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T10:41:36.9389369Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T10:41:36.9389424Z 562 │ } 2026-10-24T10:41:36.9389477Z 563 │ }; 2026-10-24T10:41:36.9389560Z 564 │ const handleVisibleFileChange = ( 2026-10-24T10:41:36.9389693Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T10:41:36.9389748Z 566 │ ) => { 2026-10-24T10:41:36.9389863Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T10:41:36.9390034Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T10:41:36.9390090Z 569 │ }; 2026-10-24T10:41:36.9390169Z 570 │ const renderInspector = () => ( 2026-10-24T10:41:36.9390240Z 571 │ void handleSelectFile(fileId)} 2026-10-24T10:41:36.9390754Z 577 │ /> 2026-10-24T10:41:36.9390806Z 578 │ ); 2026-10-24T10:41:36.9390859Z 579 │ 2026-10-24T10:41:36.9391116Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T10:41:36.9391236Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T10:41:36.9391299Z 582 │ if (fileId) { 2026-10-24T10:41:36.9391381Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T10:41:36.9391461Z 584 │ toggleExpandedFile(fileId); 2026-10-24T10:41:36.9391516Z 585 │ } 2026-10-24T10:41:36.9391569Z 586 │ }; 2026-10-24T10:41:36.9391622Z 587 │ 2026-10-24T10:41:36.9391711Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T10:41:36.9391830Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T10:41:36.9391886Z 590 │ ) => { 2026-10-24T10:41:36.9391974Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T10:41:36.9392037Z 592 │ if (fileId) { 2026-10-24T10:41:36.9392111Z 593 │ toggleViewedFile(fileId); 2026-10-24T10:41:36.9392171Z 594 │ } 2026-10-24T10:41:36.9392227Z 595 │ }; 2026-10-24T10:41:36.9392279Z 596 │ 2026-10-24T10:41:36.9392350Z 597 │ const parsedDiffNotice = 2026-10-24T10:41:36.9392512Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T10:41:36.9392634Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T10:41:36.9392791Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T10:41:36.9392911Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T10:41:36.9393070Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T10:41:36.9393185Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T10:41:36.9393288Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T10:41:36.9393365Z 605 │ hasCachedSelectedDiff, 2026-10-24T10:41:36.9393435Z 606 │ hasAnyCachedDiff, 2026-10-24T10:41:36.9393490Z 607 │ }); 2026-10-24T10:41:36.9393578Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T10:41:36.9393664Z 609 │ void retryEnvironment(environmentId); 2026-10-24T10:41:36.9393719Z 610 │ }; 2026-10-24T10:41:36.9393805Z 611 │ const handleReturnToThread = () => { 2026-10-24T10:41:36.9393884Z 612 │ if (navigation.canGoBack()) { 2026-10-24T10:41:36.9393954Z 613 │ navigation.goBack(); 2026-10-24T10:41:36.9394015Z 614 │ return; 2026-10-24T10:41:36.9394069Z 615 │ } 2026-10-24T10:41:36.9394149Z 616 │ navigation.navigate("Thread", { 2026-10-24T10:41:36.9394239Z 617 │ environmentId: String(environmentId), 2026-10-24T10:41:36.9394317Z 618 │ threadId: String(threadId), 2026-10-24T10:41:36.9394375Z 619 │ }); 2026-10-24T10:41:36.9394432Z 620 │ }; 2026-10-24T10:41:36.9394515Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T10:41:36.9394588Z 622 │ selectedSection?.title, 2026-10-24T10:41:36.9394669Z 623 │ headerDiffSummary.additions, 2026-10-24T10:41:36.9394747Z 624 │ headerDiffSummary.deletions, 2026-10-24T10:41:36.9394802Z 625 │ ] 2026-10-24T10:41:36.9394908Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T10:41:36.9394973Z 627 │ .join(" · "); 2026-10-24T10:41:36.9395024Z 628 │ 2026-10-24T10:41:36.9395102Z 629 │ const showChangedFilesPane = 2026-10-24T10:41:36.9395177Z 630 │ !showConnectionNotice && 2026-10-24T10:41:36.9395251Z 631 │ selectedSection !== null && 2026-10-24T10:41:36.9395331Z 632 │ parsedDiff.kind === "files" && 2026-10-24T10:41:36.9395411Z 633 │ NativeReviewDiffView !== null; 2026-10-24T10:41:36.9395657Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T10:41:36.9395864Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T10:41:36.9395915Z 636 │ 2026-10-24T10:41:36.9395989Z 637 │ const listHeader = (() => { 2026-10-24T10:41:36.9396076Z 638 │ const children: ReactElement[] = []; 2026-10-24T10:41:36.9396128Z 639 │ 2026-10-24T10:41:36.9396191Z 640 │ if (error) { 2026-10-24T10:41:36.9396258Z 641 │ children.push( 2026-10-24T10:41:36.9396318Z 642 │ 2026-10-24T10:41:36.9397287Z 649 │ Review unavailable 2026-10-24T10:41:36.9397446Z 650 │ {error} 2026-10-24T10:41:36.9397507Z 651 │ , 2026-10-24T10:41:36.9397563Z 652 │ ); 2026-10-24T10:41:36.9397617Z 653 │ } 2026-10-24T10:41:36.9397669Z 654 │ 2026-10-24T10:41:36.9397741Z 655 │ if (parsedDiffNotice) { 2026-10-24T10:41:36.9397901Z 656 │ children.push(); 2026-10-24T10:41:36.9397956Z 657 │ } 2026-10-24T10:41:36.9398009Z 658 │ 2026-10-24T10:41:36.9398085Z 659 │ if (children.length === 0) { 2026-10-24T10:41:36.9398150Z 660 │ return null; 2026-10-24T10:41:36.9398210Z 661 │ } 2026-10-24T10:41:36.9398263Z 662 │ 2026-10-24T10:41:36.9398335Z 663 │ return <>{children}; 2026-10-24T10:41:36.9398390Z 664 │ })(); 2026-10-24T10:41:36.9398461Z 665 │ const headerSubtitle = [ 2026-10-24T10:41:36.9398539Z 666 │ headerDiffSummary.additions, 2026-10-24T10:41:36.9398618Z 667 │ headerDiffSummary.deletions, 2026-10-24T10:41:36.9398700Z 668 │ pendingReviewCommentCount > 0 2026-10-24T10:41:36.9398874Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T10:41:36.9398933Z 670 │ : null, 2026-10-24T10:41:36.9398987Z 671 │ ] 2026-10-24T10:41:36.9399053Z 672 │ .filter(Boolean) 2026-10-24T10:41:36.9399118Z 673 │ .join(" · "); 2026-10-24T10:41:36.9399252Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T10:41:36.9399309Z 675 │ 2026-10-24T10:41:36.9399372Z 676 │ return ( 2026-10-24T10:41:36.9399427Z 677 │ <> 2026-10-24T10:41:36.9399492Z 678 │ 2026-10-24T10:41:36.9400941Z 694 │ 2026-10-24T10:41:36.9401007Z 695 │ 2026-10-24T10:41:36.9401130Z 696 │ 2026-10-24T10:41:36.9401210Z 697 │ {showConnectionNotice ? ( 2026-10-24T10:41:36.9401350Z 698 │ 2026-10-24T10:41:36.9401444Z 699 │ 2026-10-24T10:41:36.9402460Z 711 │ 2026-10-24T10:41:36.9402617Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T10:41:36.9402685Z 713 │ 2026-10-24T10:41:36.9403124Z 719 │ 2026-10-24T10:41:36.9403482Z 723 │ {listHeader} 2026-10-24T10:41:36.9403600Z 724 │ 2026-10-24T10:41:36.9403684Z 725 │ { 2026-10-24T10:41:36.9421389Z 169 │ const record = 2026-10-24T10:41:36.9421469Z 170 │ token.type === "context" 2026-10-24T10:41:36.9421632Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T10:41:36.9421698Z 172 │ : undefined; 2026-10-24T10:41:36.9421807Z 173 │ const presentation = contextChipPresentation( 2026-10-24T10:41:36.9421922Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T10:41:36.9421986Z 175 │ record, 2026-10-24T10:41:36.9422047Z 176 │ ); 2026-10-24T10:41:36.9422132Z 177 │ const icon = contextChipIcon( 2026-10-24T10:41:36.9422200Z 178 │ presentation, 2026-10-24T10:41:36.9422341Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T10:41:36.9422400Z 180 │ ); 2026-10-24T10:41:36.9422462Z 181 │ return { 2026-10-24T10:41:36.9422533Z 182 │ type: token.type, 2026-10-24T10:41:36.9422607Z 183 │ source: token.source, 2026-10-24T10:41:36.9422680Z 184 │ start: token.start, 2026-10-24T10:41:36.9422747Z 185 │ end: token.end, 2026-10-24T10:41:36.9422895Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T10:41:36.9422961Z 187 │ label: 2026-10-24T10:41:36.9423042Z 188 │ token.type === "skill" 2026-10-24T10:41:36.9423149Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T10:41:36.9423232Z 190 │ : token.type === "context" 2026-10-24T10:41:36.9423469Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T10:41:36.9423552Z 192 │ : basename(token.value), 2026-10-24T10:41:36.9423696Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T10:41:36.9423789Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T10:41:36.9423875Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T10:41:36.9423934Z 196 │ }; 2026-10-24T10:41:36.9423991Z 197 │ }), 2026-10-24T10:41:36.9424049Z 198 │ ); 2026-10-24T10:41:36.9424251Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T10:41:36.9424435Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T10:41:36.9424640Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9424779Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T10:41:36.9424830Z ╰──── 2026-10-24T10:41:36.9425035Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T10:41:36.9425350Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9425353Z 2026-10-24T10:41:36.9425544Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T10:41:36.9425685Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T10:41:36.9425815Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T10:41:36.9425921Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T10:41:36.9426013Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9426471Z · ╰── 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-24T10:41:36.9426562Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T10:41:36.9426624Z 256 │ value, 2026-10-24T10:41:36.9426708Z 257 │ selection: nextSelection, 2026-10-24T10:41:36.9426796Z 258 │ }); 2026-10-24T10:41:36.9426880Z 259 │ return acknowledgedEventCount; 2026-10-24T10:41:36.9426936Z 260 │ }, 2026-10-24T10:41:36.9426993Z 261 │ [], 2026-10-24T10:41:36.9427062Z ·  ─┬ 2026-10-24T10:41:36.9427241Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9427296Z 262 │ ); 2026-10-24T10:41:36.9427350Z ╰──── 2026-10-24T10:41:36.9427554Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T10:41:36.9427867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9427870Z 2026-10-24T10:41:36.9428019Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9428141Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T10:41:36.9428207Z 184 │ "options", 2026-10-24T10:41:36.9428300Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T10:41:36.9428411Z ·  ────────────────┬─────────────── 2026-10-24T10:41:36.9428604Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9428700Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T10:41:36.9428750Z ╰──── 2026-10-24T10:41:36.9429285Z  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-24T10:41:36.9429607Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9429609Z 2026-10-24T10:41:36.9429756Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9429874Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T10:41:36.9429967Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T10:41:36.9430061Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T10:41:36.9430171Z ·  ────────────────┬──────────────── 2026-10-24T10:41:36.9430363Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9430454Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T10:41:36.9430514Z ╰──── 2026-10-24T10:41:36.9430977Z  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-24T10:41:36.9431267Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9431269Z 2026-10-24T10:41:36.9431414Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9431573Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T10:41:36.9431734Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T10:41:36.9431860Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T10:41:36.9431985Z ·  ───────────┬────────── 2026-10-24T10:41:36.9432158Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9432278Z 123 │ const sessionRef = useRef(null); 2026-10-24T10:41:36.9432331Z ╰──── 2026-10-24T10:41:36.9432796Z  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-24T10:41:36.9433085Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9433156Z 2026-10-24T10:41:36.9433343Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9433504Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T10:41:36.9433559Z 125 │ 2026-10-24T10:41:36.9433668Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T10:41:36.9433757Z ·  ─────────┬──────── 2026-10-24T10:41:36.9433908Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9434011Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T10:41:36.9434064Z ╰──── 2026-10-24T10:41:36.9434528Z  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-24T10:41:36.9434818Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9434821Z 2026-10-24T10:41:36.9434963Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9435120Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T10:41:36.9435173Z 125 │ 2026-10-24T10:41:36.9435281Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T10:41:36.9435369Z ·  ─────────┬───────── 2026-10-24T10:41:36.9435519Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9435618Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T10:41:36.9435676Z ╰──── 2026-10-24T10:41:36.9436141Z  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-24T10:41:36.9436429Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9436432Z 2026-10-24T10:41:36.9436574Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9436873Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T10:41:36.9436928Z 125 │ 2026-10-24T10:41:36.9437038Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T10:41:36.9437158Z ·  ─────────┬───────── 2026-10-24T10:41:36.9437327Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9437426Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T10:41:36.9437479Z ╰──── 2026-10-24T10:41:36.9437940Z  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-24T10:41:36.9438228Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9438230Z 2026-10-24T10:41:36.9438372Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9438619Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T10:41:36.9438714Z 125 │ 2026-10-24T10:41:36.9438822Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T10:41:36.9438935Z ·  ──────────┬───────── 2026-10-24T10:41:36.9439102Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9439202Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T10:41:36.9439254Z ╰──── 2026-10-24T10:41:36.9439713Z  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-24T10:41:36.9440006Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9440011Z 2026-10-24T10:41:36.9440154Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9440312Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T10:41:36.9440426Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T10:41:36.9440617Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T10:41:36.9440792Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T10:41:36.9440918Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T10:41:36.9441077Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T10:41:36.9441197Z 131 │ │ isFinished: status.isFinished, 2026-10-24T10:41:36.9441374Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T10:41:36.9441479Z 133 │ │ error: status.error, 2026-10-24T10:41:36.9441578Z 134 │ │ url: status.url, 2026-10-24T10:41:36.9441659Z 135 │ │ }); 2026-10-24T10:41:36.9441738Z 136 │ │ }, 2026-10-24T10:41:36.9441935Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T10:41:36.9442042Z 138 │ │ selectInput: (inputs) => { 2026-10-24T10:41:36.9442202Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T10:41:36.9442351Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T10:41:36.9442519Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T10:41:36.9442660Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T10:41:36.9442763Z 143 │ │ if (order !== known) { 2026-10-24T10:41:36.9442901Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T10:41:36.9443016Z 145 │ │ transform: (current) => ({ 2026-10-24T10:41:36.9443222Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T10:41:36.9443389Z 147 │ │ }), 2026-10-24T10:41:36.9443504Z 148 │ │ }); 2026-10-24T10:41:36.9443584Z 149 │ │ } 2026-10-24T10:41:36.9443724Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T10:41:36.9443802Z 151 │ │ }, 2026-10-24T10:41:36.9443934Z 152 │ ├─▶ }); 2026-10-24T10:41:36.9444172Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T10:41:36.9444259Z 153 │ recorderRef.current = recorder; 2026-10-24T10:41:36.9444313Z ╰──── 2026-10-24T10:41:36.9444783Z  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-24T10:41:36.9445077Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9445080Z 2026-10-24T10:41:36.9445224Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9445384Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T10:41:36.9445441Z 152 │ }); 2026-10-24T10:41:36.9445523Z 153 │ recorderRef.current = recorder; 2026-10-24T10:41:36.9445638Z ·  ─────┬─────────┬─── 2026-10-24T10:41:36.9445821Z · │ ╰── Cannot update ref value during render 2026-10-24T10:41:36.9445945Z · ╰── This value is a ref 2026-10-24T10:41:36.9446052Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T10:41:36.9446105Z ╰──── 2026-10-24T10:41:36.9446566Z  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-24T10:41:36.9446901Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9446903Z 2026-10-24T10:41:36.9447048Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9447209Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T10:41:36.9447297Z 153 │ recorderRef.current = recorder; 2026-10-24T10:41:36.9447493Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T10:41:36.9447579Z 155 │ │ recorder, 2026-10-24T10:41:36.9447707Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T10:41:36.9447825Z 157 │ │ requestPermission: async () => { 2026-10-24T10:41:36.9447990Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T10:41:36.9448182Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T10:41:36.9448260Z 160 │ │ }, 2026-10-24T10:41:36.9448473Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T10:41:36.9448646Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T10:41:36.9448781Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T10:41:36.9448892Z 164 │ │ onStateChange: (nextState) => 2026-10-24T10:41:36.9448983Z 165 │ │ setState({ 2026-10-24T10:41:36.9449085Z 166 │ │ state: nextState, 2026-10-24T10:41:36.9449223Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T10:41:36.9449352Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T10:41:36.9449433Z 169 │ │ }), 2026-10-24T10:41:36.9449568Z 170 │ ├─▶ }); 2026-10-24T10:41:36.9449771Z · ╰──── Cannot access ref value during render 2026-10-24T10:41:36.9449827Z 171 │ } 2026-10-24T10:41:36.9449881Z ╰──── 2026-10-24T10:41:36.9450344Z  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-24T10:41:36.9450636Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9450638Z 2026-10-24T10:41:36.9450783Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9450946Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T10:41:36.9451032Z 153 │ recorderRef.current = recorder; 2026-10-24T10:41:36.9451135Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T10:41:36.9451246Z ·  ─────┬────────┬─── 2026-10-24T10:41:36.9451428Z · │ ╰── Cannot update ref value during render 2026-10-24T10:41:36.9451545Z · ╰── This value is a ref 2026-10-24T10:41:36.9451610Z 155 │ recorder, 2026-10-24T10:41:36.9451663Z ╰──── 2026-10-24T10:41:36.9452131Z  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-24T10:41:36.9452422Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9452424Z 2026-10-24T10:41:36.9452568Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9452726Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T10:41:36.9452814Z 184 │ return () => subscription.remove(); 2026-10-24T10:41:36.9452879Z 185 │ }, [controller]); 2026-10-24T10:41:36.9452958Z ·  ─────┬──── 2026-10-24T10:41:36.9453104Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9453158Z 186 │ 2026-10-24T10:41:36.9453209Z ╰──── 2026-10-24T10:41:36.9453741Z  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-24T10:41:36.9454061Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9454063Z 2026-10-24T10:41:36.9454206Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9454363Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T10:41:36.9454449Z 184 │ return () => subscription.remove(); 2026-10-24T10:41:36.9454515Z 185 │ }, [controller]); 2026-10-24T10:41:36.9454592Z ·  ──────┬───── 2026-10-24T10:41:36.9454739Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9454796Z 186 │ 2026-10-24T10:41:36.9454849Z ╰──── 2026-10-24T10:41:36.9455309Z  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-24T10:41:36.9455599Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9455601Z 2026-10-24T10:41:36.9455743Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9455901Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T10:41:36.9455957Z 191 │ }, 2026-10-24T10:41:36.9456033Z 192 │ [controller, recorder], 2026-10-24T10:41:36.9456110Z ·  ─────┬──── 2026-10-24T10:41:36.9456253Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9456309Z 193 │ ); 2026-10-24T10:41:36.9456361Z ╰──── 2026-10-24T10:41:36.9456851Z  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-24T10:41:36.9457141Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9457143Z 2026-10-24T10:41:36.9457285Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9457447Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T10:41:36.9457541Z 174 │ const controller = session.controller; 2026-10-24T10:41:36.9457628Z 175 │ const recorder = recorderRef.current; 2026-10-24T10:41:36.9457733Z ·  ─────────┬───────── 2026-10-24T10:41:36.9457892Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9457945Z 176 │ 2026-10-24T10:41:36.9457995Z ╰──── 2026-10-24T10:41:36.9458456Z  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-24T10:41:36.9458817Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9458852Z 2026-10-24T10:41:36.9458996Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9459153Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T10:41:36.9459209Z 191 │ }, 2026-10-24T10:41:36.9459281Z 192 │ [controller, recorder], 2026-10-24T10:41:36.9459372Z ·  ───────────┬────────── 2026-10-24T10:41:36.9459518Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9459574Z 193 │ ); 2026-10-24T10:41:36.9459626Z ╰──── 2026-10-24T10:41:36.9460097Z  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-24T10:41:36.9460388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9460390Z 2026-10-24T10:41:36.9460532Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9460690Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T10:41:36.9460784Z 245 │ return () => clearInterval(intervalId); 2026-10-24T10:41:36.9460896Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T10:41:36.9460985Z ·  ─────┬──── 2026-10-24T10:41:36.9461144Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9461200Z 247 │ 2026-10-24T10:41:36.9461252Z ╰──── 2026-10-24T10:41:36.9461712Z  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-24T10:41:36.9462001Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9462003Z 2026-10-24T10:41:36.9462146Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9462302Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T10:41:36.9462393Z 245 │ return () => clearInterval(intervalId); 2026-10-24T10:41:36.9462567Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T10:41:36.9462731Z ·  ────────────────────────┬─────────────────────── 2026-10-24T10:41:36.9462890Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9462943Z 247 │ 2026-10-24T10:41:36.9462994Z ╰──── 2026-10-24T10:41:36.9463456Z  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-24T10:41:36.9463744Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9463746Z 2026-10-24T10:41:36.9463895Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9464055Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T10:41:36.9464123Z 260 │ setOwnerFocused, 2026-10-24T10:41:36.9464185Z 261 │ session, 2026-10-24T10:41:36.9464258Z ·  ───┬─── 2026-10-24T10:41:36.9464397Z · ╰── Cannot access ref value during render 2026-10-24T10:41:36.9464456Z 262 │ stop, 2026-10-24T10:41:36.9464508Z ╰──── 2026-10-24T10:41:36.9464971Z  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-24T10:41:36.9465264Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9465269Z 2026-10-24T10:41:36.9465411Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9465569Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T10:41:36.9465625Z 250 │ 2026-10-24T10:41:36.9465765Z 251 │ ╭─▶ return { 2026-10-24T10:41:36.9465976Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T10:41:36.9466058Z 253 │ │ state, 2026-10-24T10:41:36.9466147Z 254 │ │ audioLevels, 2026-10-24T10:41:36.9466241Z 255 │ │ elapsedSeconds, 2026-10-24T10:41:36.9466376Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T10:41:36.9466461Z 257 │ │ ownerKey, 2026-10-24T10:41:36.9466541Z 258 │ │ label, 2026-10-24T10:41:36.9466633Z 259 │ │ focusedOwners, 2026-10-24T10:41:36.9466727Z 260 │ │ setOwnerFocused, 2026-10-24T10:41:36.9466841Z 261 │ │ session, 2026-10-24T10:41:36.9466919Z 262 │ │ stop, 2026-10-24T10:41:36.9466999Z 263 │ │ cancel, 2026-10-24T10:41:36.9467127Z 264 │ ├─▶ }; 2026-10-24T10:41:36.9467325Z · ╰──── Cannot access ref value during render 2026-10-24T10:41:36.9467381Z 265 │ } 2026-10-24T10:41:36.9467507Z ╰──── 2026-10-24T10:41:36.9468009Z  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-24T10:41:36.9468297Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9468300Z 2026-10-24T10:41:36.9468457Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9468617Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T10:41:36.9468779Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T10:41:36.9468906Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T10:41:36.9468989Z ·  ─────┬───── 2026-10-24T10:41:36.9469123Z · ╰── `audioLevels` originates here 2026-10-24T10:41:36.9469243Z 123 │ const sessionRef = useRef(null); 2026-10-24T10:41:36.9469388Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T10:41:36.9469443Z 125 │ 2026-10-24T10:41:36.9470597Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T10:41:36.9470707Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T10:41:36.9470845Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T10:41:36.9470942Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T10:41:36.9471069Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T10:41:36.9471158Z 131 │ isFinished: status.isFinished, 2026-10-24T10:41:36.9471301Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T10:41:36.9471377Z 133 │ error: status.error, 2026-10-24T10:41:36.9471445Z 134 │ url: status.url, 2026-10-24T10:41:36.9471506Z 135 │ }); 2026-10-24T10:41:36.9471563Z 136 │ }, 2026-10-24T10:41:36.9471730Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T10:41:36.9471808Z 138 │ selectInput: (inputs) => { 2026-10-24T10:41:36.9471931Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T10:41:36.9472045Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T10:41:36.9472177Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T10:41:36.9472290Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T10:41:36.9472367Z 143 │ if (order !== known) { 2026-10-24T10:41:36.9472473Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T10:41:36.9472557Z 145 │ transform: (current) => ({ 2026-10-24T10:41:36.9472732Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T10:41:36.9472795Z 147 │ }), 2026-10-24T10:41:36.9472856Z 148 │ }); 2026-10-24T10:41:36.9472914Z 149 │ } 2026-10-24T10:41:36.9473023Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T10:41:36.9473081Z 151 │ }, 2026-10-24T10:41:36.9473135Z 152 │ }); 2026-10-24T10:41:36.9473218Z 153 │ recorderRef.current = recorder; 2026-10-24T10:41:36.9473410Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T10:41:36.9473509Z 155 │ recorder, 2026-10-24T10:41:36.9473609Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T10:41:36.9473694Z 157 │ requestPermission: async () => { 2026-10-24T10:41:36.9473824Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T10:41:36.9473982Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T10:41:36.9474038Z 160 │ }, 2026-10-24T10:41:36.9474150Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T10:41:36.9474256Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T10:41:36.9474360Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T10:41:36.9474441Z 164 │ onStateChange: (nextState) => 2026-10-24T10:41:36.9474506Z 165 │ setState({ 2026-10-24T10:41:36.9474581Z 166 │ state: nextState, 2026-10-24T10:41:36.9474688Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T10:41:36.9474787Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T10:41:36.9474845Z 169 │ }), 2026-10-24T10:41:36.9474901Z 170 │ }); 2026-10-24T10:41:36.9474954Z 171 │ } 2026-10-24T10:41:36.9475007Z 172 │ 2026-10-24T10:41:36.9475093Z 173 │ const session = sessionRef.current; 2026-10-24T10:41:36.9475181Z 174 │ const controller = session.controller; 2026-10-24T10:41:36.9475265Z 175 │ const recorder = recorderRef.current; 2026-10-24T10:41:36.9475318Z 176 │ 2026-10-24T10:41:36.9475384Z 177 │ useEffect(() => { 2026-10-24T10:41:36.9475535Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T10:41:36.9475681Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T10:41:36.9475823Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T10:41:36.9475927Z 181 │ // calls and route interruptions during capture. 2026-10-24T10:41:36.9476062Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T10:41:36.9476116Z 183 │ }); 2026-10-24T10:41:36.9476202Z 184 │ return () => subscription.remove(); 2026-10-24T10:41:36.9476266Z 185 │ }, [controller]); 2026-10-24T10:41:36.9476319Z 186 │ 2026-10-24T10:41:36.9476379Z 187 │ useEffect( 2026-10-24T10:41:36.9476441Z 188 │ () => () => { 2026-10-24T10:41:36.9476515Z 189 │ controller.dispose(); 2026-10-24T10:41:36.9476583Z 190 │ recorder.release(); 2026-10-24T10:41:36.9476956Z 191 │ }, 2026-10-24T10:41:36.9477062Z 192 │ [controller, recorder], 2026-10-24T10:41:36.9477117Z 193 │ ); 2026-10-24T10:41:36.9477175Z 194 │ 2026-10-24T10:41:36.9477242Z 195 │ useEffect(() => { 2026-10-24T10:41:36.9477336Z 196 │ if (state.phase !== "recording") return; 2026-10-24T10:41:36.9477389Z 197 │ 2026-10-24T10:41:36.9477538Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T10:41:36.9477645Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T10:41:36.9477727Z 200 │ void activation.catch(() => {}); 2026-10-24T10:41:36.9477791Z 201 │ return () => { 2026-10-24T10:41:36.9477940Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T10:41:36.9478081Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T10:41:36.9478136Z 204 │ }; 2026-10-24T10:41:36.9478216Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T10:41:36.9478364Z 206 │ 2026-10-24T10:41:36.9478469Z 207 │ useEffect(() => { 2026-10-24T10:41:36.9478604Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T10:41:36.9478655Z 209 │ 2026-10-24T10:41:36.9478777Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T10:41:36.9478932Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T10:41:36.9479036Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T10:41:36.9479114Z ·  ─────┬───── 2026-10-24T10:41:36.9479257Z · ╰── `audioLevels` cannot be modified 2026-10-24T10:41:36.9479313Z 213 │ } 2026-10-24T10:41:36.9479365Z ╰──── 2026-10-24T10:41:36.9479641Z  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-24T10:41:36.9479952Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9479956Z 2026-10-24T10:41:36.9480157Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T10:41:36.9480319Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T10:41:36.9480372Z 206 │ 2026-10-24T10:41:36.9480435Z 207 │ useEffect(() => { 2026-10-24T10:41:36.9480514Z ·  ───┬─── 2026-10-24T10:41:36.9480733Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T10:41:36.9480876Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T10:41:36.9480930Z 209 │ 2026-10-24T10:41:36.9481051Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T10:41:36.9481205Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T10:41:36.9481307Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T10:41:36.9481383Z ·  ─────┬───── 2026-10-24T10:41:36.9481516Z · ╰── This modifies `audioLevels` 2026-10-24T10:41:36.9481571Z 213 │ } 2026-10-24T10:41:36.9481623Z ╰──── 2026-10-24T10:41:36.9481962Z  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-24T10:41:36.9482273Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9482278Z 2026-10-24T10:41:36.9482505Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T10:41:36.9482650Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T10:41:36.9482711Z 227 │ ): string { 2026-10-24T10:41:36.9482864Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T10:41:36.9482978Z ·  ────── 2026-10-24T10:41:36.9483109Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T10:41:36.9483160Z ╰──── 2026-10-24T10:41:36.9483330Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T10:41:36.9483410Z 2026-10-24T10:41:36.9483600Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9483771Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T10:41:36.9483826Z 90 │ }) { 2026-10-24T10:41:36.9483939Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T10:41:36.9484015Z ·  ────┬─── 2026-10-24T10:41:36.9484147Z · ╰── `rotation` originates here 2026-10-24T10:41:36.9484217Z 92 │ useLayoutEffect(() => { 2026-10-24T10:41:36.9484358Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T10:41:36.9484431Z ·  ────┬─── 2026-10-24T10:41:36.9484565Z · ╰── `rotation` cannot be modified 2026-10-24T10:41:36.9484648Z 94 │ }, [props.hidden, rotation]); 2026-10-24T10:41:36.9484702Z ╰──── 2026-10-24T10:41:36.9484968Z  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-24T10:41:36.9485274Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9485276Z 2026-10-24T10:41:36.9485434Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9485603Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T10:41:36.9485698Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T10:41:36.9485832Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T10:41:36.9485923Z ·  ────────┬──────── 2026-10-24T10:41:36.9486072Z · ╰── `loadingVisibility` originates here 2026-10-24T10:41:36.9486143Z 268 │ useLayoutEffect(() => { 2026-10-24T10:41:36.9486301Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T10:41:36.9486383Z ·  ────────┬──────── 2026-10-24T10:41:36.9486532Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T10:41:36.9486624Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T10:41:36.9486676Z ╰──── 2026-10-24T10:41:36.9486975Z  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-24T10:41:36.9487284Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9487290Z 2026-10-24T10:41:36.9487443Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9487611Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T10:41:36.9487666Z 325 │ }) { 2026-10-24T10:41:36.9487826Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T10:41:36.9487913Z ·  ─────────┬───────── 2026-10-24T10:41:36.9488067Z · ╰── `recordingVisibility` originates here 2026-10-24T10:41:36.9488137Z 327 │ useLayoutEffect(() => { 2026-10-24T10:41:36.9488326Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T10:41:36.9488485Z ·  ─────────┬───────── 2026-10-24T10:41:36.9488673Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T10:41:36.9488764Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T10:41:36.9488816Z ╰──── 2026-10-24T10:41:36.9489078Z  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-24T10:41:36.9489380Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9489383Z 2026-10-24T10:41:36.9489537Z ⚠ react(immutability): This value cannot be modified 2026-10-24T10:41:36.9489709Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T10:41:36.9489814Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T10:41:36.9489896Z 66 │ const progress = useSharedValue(0); 2026-10-24T10:41:36.9489970Z ·  ────┬─── 2026-10-24T10:41:36.9490101Z · ╰── `progress` originates here 2026-10-24T10:41:36.9490167Z 67 │ useEffect(() => { 2026-10-24T10:41:36.9490292Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T10:41:36.9490363Z ·  ────┬─── 2026-10-24T10:41:36.9490493Z · ╰── `progress` cannot be modified 2026-10-24T10:41:36.9490565Z 69 │ }, [expanded, progress]); 2026-10-24T10:41:36.9490617Z ╰──── 2026-10-24T10:41:36.9490885Z  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-24T10:41:36.9491192Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T10:41:36.9491195Z 2026-10-24T10:41:36.9491341Z ⚠ react(refs): Cannot access refs during render 2026-10-24T10:41:36.9491506Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T10:41:36.9491590Z 26 │ const latestInput = useRef(input); 2026-10-24T10:41:36.9491665Z 27 │ latestInput.current = input; 2026-10-24T10:41:36.9491777Z ·  ─────┬─────────┬─── 2026-10-24T10:41:36.9491961Z · │ ╰── Cannot update ref value during render 2026-10-24T10:41:36.9492151Z · ╰── This value is a ref 2026-10-24T10:41:36.9492264Z 28 │ const mounted = useRef(true); 2026-10-24T10:41:36.9492316Z ╰──── 2026-10-24T10:41:36.9492782Z  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-24T10:41:36.9493073Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T10:41:36.9493076Z 2026-10-24T10:41:36.9493310Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T10:41:36.9493475Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T10:41:36.9493542Z 264 │ ): boolean { 2026-10-24T10:41:36.9493693Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T10:41:36.9493861Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T10:41:36.9494008Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T10:41:36.9494061Z ╰──── 2026-10-24T10:41:36.9494136Z  help: Switch to `Set` 2026-10-24T10:41:36.9494139Z 2026-10-24T10:41:36.9494401Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9494576Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T10:41:36.9494630Z 55 │ 2026-10-24T10:41:36.9494694Z 56 │ useEffect(() => { 2026-10-24T10:41:36.9494774Z ·  ────┬──── 2026-10-24T10:41:36.9494905Z · ╰── This is the containing effect 2026-10-24T10:41:36.9494974Z 57 │ scheduler.reset(); 2026-10-24T10:41:36.9495072Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T10:41:36.9495160Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T10:41:36.9495277Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T10:41:36.9495357Z ·  ───────┬─────── 2026-10-24T10:41:36.9495526Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9495640Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T10:41:36.9495691Z ╰──── 2026-10-24T10:41:36.9496298Z  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-24T10:41:36.9496623Z  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-24T10:41:36.9496626Z 2026-10-24T10:41:36.9496857Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9497031Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T10:41:36.9497113Z 62 │ return () => scheduler.cancel(); 2026-10-24T10:41:36.9497213Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T10:41:36.9497513Z ·  ───┬─── ─────┬───── 2026-10-24T10:41:36.9497738Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T10:41:36.9497875Z · ╰── Unnecessary dependency `enabled` 2026-10-24T10:41:36.9497928Z 64 │ 2026-10-24T10:41:36.9497979Z ╰──── 2026-10-24T10:41:36.9498274Z  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-24T10:41:36.9498586Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9498589Z 2026-10-24T10:41:36.9498782Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.9498954Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T10:41:36.9499020Z 813 │
{ 2026-10-24T10:41:36.9500284Z ·  ────┬──── 2026-10-24T10:41:36.9500415Z · ╰── This is the containing effect 2026-10-24T10:41:36.9500494Z 106 │ clearReviewCommentTarget(); 2026-10-24T10:41:36.9500593Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T10:41:36.9500701Z ·  ────────────────┬─────────────── 2026-10-24T10:41:36.9500876Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9500949Z 108 │ }, [selectedSection?.id]); 2026-10-24T10:41:36.9501001Z ╰──── 2026-10-24T10:41:36.9501605Z  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-24T10:41:36.9501929Z  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-24T10:41:36.9501932Z 2026-10-24T10:41:36.9502188Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9502372Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T10:41:36.9502425Z 109 │ 2026-10-24T10:41:36.9502490Z 110 │ useEffect(() => { 2026-10-24T10:41:36.9502561Z ·  ────┬──── 2026-10-24T10:41:36.9502757Z · ╰── This is the containing effect 2026-10-24T10:41:36.9502873Z 111 │ if (activeCommentTarget === null) { 2026-10-24T10:41:36.9502976Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T10:41:36.9503085Z ·  ────────────────┬─────────────── 2026-10-24T10:41:36.9503260Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9503317Z 113 │ } 2026-10-24T10:41:36.9503368Z ╰──── 2026-10-24T10:41:36.9503965Z  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-24T10:41:36.9504290Z  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-24T10:41:36.9504295Z 2026-10-24T10:41:36.9504493Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T10:41:36.9504678Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T10:41:36.9504777Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T10:41:36.9504850Z 108 │ }, [selectedSection?.id]); 2026-10-24T10:41:36.9504937Z ·  ─────────┬───────── 2026-10-24T10:41:36.9505101Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T10:41:36.9505154Z 109 │ 2026-10-24T10:41:36.9505206Z ╰──── 2026-10-24T10:41:36.9505501Z  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-24T10:41:36.9505814Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9505817Z 2026-10-24T10:41:36.9506009Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T10:41:36.9506179Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T10:41:36.9506242Z 87 │
  • { 2026-10-24T10:41:36.9507527Z ·  ────┬──── 2026-10-24T10:41:36.9507656Z · ╰── This is the containing effect 2026-10-24T10:41:36.9507759Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T10:41:36.9507847Z 103 │ setHighlightedLinesById({}); 2026-10-24T10:41:36.9507942Z ·  ───────────┬─────────── 2026-10-24T10:41:36.9508114Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9508177Z 104 │ return; 2026-10-24T10:41:36.9508228Z ╰──── 2026-10-24T10:41:36.9508823Z  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-24T10:41:36.9509142Z  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-24T10:41:36.9509144Z 2026-10-24T10:41:36.9509611Z ⚠ 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-24T10:41:36.9509736Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T10:41:36.9509828Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T10:41:36.9509941Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T10:41:36.9510061Z ·  ────────────────────────── 2026-10-24T10:41:36.9510131Z 130 │ Schema.Struct({ 2026-10-24T10:41:36.9510181Z ╰──── 2026-10-24T10:41:36.9510184Z 2026-10-24T10:41:36.9510474Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T10:41:36.9510644Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T10:41:36.9510707Z 472 │ onFilters, 2026-10-24T10:41:36.9510774Z 473 │ authorOptions = [], 2026-10-24T10:41:36.9510851Z ·  ── 2026-10-24T10:41:36.9510919Z 474 │ labelOptions = [], 2026-10-24T10:41:36.9510970Z ╰──── 2026-10-24T10:41:36.9511286Z  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-24T10:41:36.9511290Z 2026-10-24T10:41:36.9511569Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T10:41:36.9511809Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T10:41:36.9511906Z 473 │ authorOptions = [], 2026-10-24T10:41:36.9511972Z 474 │ labelOptions = [], 2026-10-24T10:41:36.9512048Z ·  ── 2026-10-24T10:41:36.9512112Z 475 │ optionScope, 2026-10-24T10:41:36.9512163Z ╰──── 2026-10-24T10:41:36.9512476Z  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-24T10:41:36.9512479Z 2026-10-24T10:41:36.9512940Z ⚠ 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-24T10:41:36.9513065Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T10:41:36.9513122Z 499 │ 2026-10-24T10:41:36.9513240Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T10:41:36.9513358Z ·  ────────────────────────── 2026-10-24T10:41:36.9513468Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T10:41:36.9513520Z ╰──── 2026-10-24T10:41:36.9513522Z 2026-10-24T10:41:36.9513892Z ⚠ 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-24T10:41:36.9514009Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T10:41:36.9514161Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T10:41:36.9514334Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T10:41:36.9514447Z ·  ────────────────────────── 2026-10-24T10:41:36.9514598Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T10:41:36.9514650Z ╰──── 2026-10-24T10:41:36.9514652Z 2026-10-24T10:41:36.9514983Z ⚠ 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-24T10:41:36.9515101Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T10:41:36.9515262Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T10:41:36.9515384Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T10:41:36.9515464Z ·  ───────── 2026-10-24T10:41:36.9515524Z 19 │ expect( 2026-10-24T10:41:36.9515577Z ╰──── 2026-10-24T10:41:36.9515585Z 2026-10-24T10:41:36.9515916Z ⚠ 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-24T10:41:36.9516034Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T10:41:36.9516093Z 19 │ expect( 2026-10-24T10:41:36.9516262Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T10:41:36.9516336Z ·  ───────── 2026-10-24T10:41:36.9516400Z 21 │ ).toBe(true); 2026-10-24T10:41:36.9516453Z ╰──── 2026-10-24T10:41:36.9516455Z 2026-10-24T10:41:36.9516875Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9517117Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T10:41:36.9517212Z 3754 │ 2026-10-24T10:41:36.9517414Z 3755 │ const layer: Layer.Layer = 2026-10-24T10:41:36.9517487Z ·  ──┬── 2026-10-24T10:41:36.9517611Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.9517676Z 3756 │ Layer.effect( 2026-10-24T10:41:36.9517728Z ╰──── 2026-10-24T10:41:36.9517833Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9517836Z 2026-10-24T10:41:36.9518111Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9518256Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T10:41:36.9518311Z 60 │ ) { 2026-10-24T10:41:36.9518484Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T10:41:36.9518569Z ·  ──────┬────── 2026-10-24T10:41:36.9518710Z · ╰── 'useDragRegion' is declared here 2026-10-24T10:41:36.9518802Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T10:41:36.9518854Z ╰──── 2026-10-24T10:41:36.9518957Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9518960Z 2026-10-24T10:41:36.9519216Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T10:41:36.9519389Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:7] 2026-10-24T10:41:36.9519445Z 324 │ }; 2026-10-24T10:41:36.9519517Z 325 │ useEffect(() => { 2026-10-24T10:41:36.9519591Z ·  ────┬──── 2026-10-24T10:41:36.9519719Z · ╰── This is the containing effect 2026-10-24T10:41:36.9519820Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T10:41:36.9519916Z 327 │ requestedSection.current = "overview"; 2026-10-24T10:41:36.9520085Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T10:41:36.9520159Z 329 │ setSection("overview"); 2026-10-24T10:41:36.9520235Z ·  ─────┬──── 2026-10-24T10:41:36.9520406Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T10:41:36.9520461Z 330 │ } 2026-10-24T10:41:36.9520514Z ╰──── 2026-10-24T10:41:36.9521118Z  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-24T10:41:36.9521444Z  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-24T10:41:36.9521447Z 2026-10-24T10:41:36.9521650Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T10:41:36.9521820Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:331:6] 2026-10-24T10:41:36.9521919Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T10:41:36.9522014Z 327 │ requestedSection.current = "overview"; 2026-10-24T10:41:36.9522168Z ·  ────────┬─────── 2026-10-24T10:41:36.9522648Z · ╰── 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-24T10:41:36.9522813Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T10:41:36.9522963Z ·  ─────────┬───────── ──────┬────── 2026-10-24T10:41:36.9523460Z · │ ╰── 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-24T10:41:36.9523913Z · ╰── 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-24T10:41:36.9523990Z 329 │ setSection("overview"); 2026-10-24T10:41:36.9524046Z 330 │ } 2026-10-24T10:41:36.9524138Z 331 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T10:41:36.9524251Z ·  ──────────────────┬───────────────── 2026-10-24T10:41:36.9524443Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9524530Z 332 │ const tabContent = activityContent; 2026-10-24T10:41:36.9524582Z ╰──── 2026-10-24T10:41:36.9524750Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T10:41:36.9525068Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9525074Z 2026-10-24T10:41:36.9525278Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T10:41:36.9525448Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:868:6] 2026-10-24T10:41:36.9525506Z 851 │ if ( 2026-10-24T10:41:36.9525624Z 852 │ lastSelection.current.path === route.params.path && 2026-10-24T10:41:36.9525703Z ·  ──────┬────── 2026-10-24T10:41:36.9526139Z · ╰── 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-24T10:41:36.9526270Z 853 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T10:41:36.9526326Z 854 │ ) 2026-10-24T10:41:36.9526387Z 855 │ return; 2026-10-24T10:41:36.9526564Z 856 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T10:41:36.9526701Z 857 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T10:41:36.9526828Z 858 │ setJumpPath(route.params.path); 2026-10-24T10:41:36.9526902Z 859 │ setSelectedRowId(null); 2026-10-24T10:41:36.9526982Z 860 │ jumpStarted.current = false; 2026-10-24T10:41:36.9527129Z 861 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T10:41:36.9527223Z 862 │ if (!file || !nativeView.current) return; 2026-10-24T10:41:36.9527311Z ·  ─────┬──── 2026-10-24T10:41:36.9527817Z · ╰── 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-24T10:41:36.9527975Z 863 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T10:41:36.9528054Z 864 │ jumpStarted.current = true; 2026-10-24T10:41:36.9528191Z 865 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T10:41:36.9528272Z 866 │ jumpStarted.current = false; 2026-10-24T10:41:36.9528329Z 867 │ }); 2026-10-24T10:41:36.9528525Z 868 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T10:41:36.9528728Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T10:41:36.9528955Z · ╰── This dependency list is missing values used by the callback 2026-10-24T10:41:36.9529072Z 869 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T10:41:36.9529125Z ╰──── 2026-10-24T10:41:36.9529290Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T10:41:36.9529603Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T10:41:36.9529606Z 2026-10-24T10:41:36.9529863Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T10:41:36.9529994Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T10:41:36.9530054Z 407 │ 2026-10-24T10:41:36.9530125Z 408 │ const layer: Layer.Layer< 2026-10-24T10:41:36.9530197Z ·  ──┬── 2026-10-24T10:41:36.9530321Z · ╰── 'layer' is declared here 2026-10-24T10:41:36.9530413Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T10:41:36.9530464Z ╰──── 2026-10-24T10:41:36.9530567Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9530569Z 2026-10-24T10:41:36.9530827Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T10:41:36.9530979Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T10:41:36.9531032Z 1619 │ 2026-10-24T10:41:36.9531315Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T10:41:36.9531468Z ·  ──────────────────┬────────────────── 2026-10-24T10:41:36.9531672Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T10:41:36.9531749Z 1621 │ const meta = response._meta; 2026-10-24T10:41:36.9531803Z ╰──── 2026-10-24T10:41:36.9531905Z  help: Consider removing this declaration. 2026-10-24T10:41:36.9531908Z 2026-10-24T10:41:36.9531991Z Found 0 errors and 362 warnings in 5420 files (5.4s, 8 threads) 2026-10-24T10:41:36.9994197Z Post job cleanup. 2026-10-24T10:41:37.0640405Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T10:41:37.0717888Z Post job cleanup. 2026-10-24T10:41:37.0731636Z ##[start-action display=Cache full pnpm store;id=__706d9fd2-a58c-44a0-9bd8-944ab8abb637.__actions_cache] 2026-10-24T10:41:37.1075120Z Post job cleanup. 2026-10-24T10:41:37.1717181Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, not saving cache. 2026-10-24T10:41:37.1751475Z ##[end-action id=__706d9fd2-a58c-44a0-9bd8-944ab8abb637.__actions_cache;outcome=success;conclusion=success;duration_ms=101] 2026-10-24T10:41:37.1753352Z ##[start-action display=Cache Vite+;id=__706d9fd2-a58c-44a0-9bd8-944ab8abb637.vp_cache] 2026-10-24T10:41:37.1773476Z Post job cleanup. 2026-10-24T10:41:37.2416363Z 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-24T10:41:37.2451721Z ##[end-action id=__706d9fd2-a58c-44a0-9bd8-944ab8abb637.vp_cache;outcome=success;conclusion=success;duration_ms=69] 2026-10-24T10:41:37.2491000Z Post job cleanup. 2026-10-24T10:41:37.2912930Z [command]/usr/local/bin/git version 2026-10-24T10:41:37.2946037Z git version 2.55.0 2026-10-24T10:41:37.2964025Z Temporarily overriding HOME='/home/runner/_work/_temp/f8f446e9-534e-4729-8c61-30812c7ed679' before making global git config changes 2026-10-24T10:41:37.2964395Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T10:41:37.2967038Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T10:41:37.2993036Z Removing SSH command configuration 2026-10-24T10:41:37.2995964Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T10:41:37.3031775Z [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-24T10:41:37.3173093Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T10:41:37.3194009Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T10:41:37.3235067Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T10:41:37.3258689Z ##[group]Run '/job_completed.sh' 2026-10-24T10:41:37.3270687Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T10:41:37.3270918Z env: 2026-10-24T10:41:37.3271033Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 152 2026-10-24T10:41:37.3271183Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 360 2026-10-24T10:41:37.3271324Z BLACKSMITH_CHECK_RUN_ID: 120851488754 2026-10-24T10:41:37.3271467Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T10:41:37.3271610Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T10:41:37.3271747Z ##[endgroup] 2026-10-24T10:41:37.3356293Z Docker container cache not activated, skipping hash computation. 2026-10-24T10:41:37.3659575Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T10:41:37.3707532Z Cleaning up orphan processes