2026-10-24T03:19:44.1293180Z Current runner version: '2.338.1' 2026-10-24T03:19:44.1296654Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-aucaay3knxnj2n4u' 2026-10-24T03:19:44.1297408Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T03:19:44.1298098Z Machine name: 'ip-172-31-73-130' 2026-10-24T03:19:44.1300015Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T03:19:44.1301391Z Contents: read 2026-10-24T03:19:44.1301919Z Metadata: read 2026-10-24T03:19:44.1302329Z ##[endgroup] 2026-10-24T03:19:44.1303681Z Secret source: Actions 2026-10-24T03:19:44.1304389Z Cache mode: write 2026-10-24T03:19:44.1304879Z Prepare workflow directory 2026-10-24T03:19:44.1486494Z Prepare all required actions 2026-10-24T03:19:44.1513476Z Getting action download info 2026-10-24T03:19:44.2921717Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T03:19:44.3283038Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T03:19:44.4503138Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T03:19:44.4540973Z Complete job name: Lint 2026-10-24T03:19:44.4921128Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T03:19:44.4981014Z ##[group]Run '/setup.sh' 2026-10-24T03:19:44.4989119Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:19:44.4989539Z env: 2026-10-24T03:19:44.4989772Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:44.4990069Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:44.4990354Z BLACKSMITH_CHECK_RUN_ID: 120764668263 2026-10-24T03:19:44.4990638Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T03:19:44.4990963Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T03:19:44.4991226Z ##[endgroup] 2026-10-24T03:19:44.5223627Z Logging daemon started (blacksmithd for logs) 2026-10-24T03:19:44.5352095Z Results daemon started (blacksmithd for results) 2026-10-24T03:19:44.5494586Z Background adoption and SSH setup started (PID: 3071) 2026-10-24T03:19:44.5497488Z 2026-10-24T03:19:44.5497604Z ---------------------------------------- 2026-10-24T03:19:44.5498097Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40057841465/jobs/120764668263 2026-10-24T03:19:44.5498530Z SSH Access (using your GitHub SSH key): 2026-10-24T03:19:44.5499063Z ssh -p 64002 runner@blacksmith-8vcpu-ubuntu-2404-aucaay3knxnj2n4u.vm.blacksmith.sh 2026-10-24T03:19:44.5499372Z 2026-10-24T03:19:44.5499482Z No GitHub SSH key? Add one at: 2026-10-24T03:19:44.5499967Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T03:19:44.5500361Z 2026-10-24T03:19:44.5500467Z ---------------------------------------- 2026-10-24T03:19:44.5500644Z 2026-10-24T03:19:44.5500786Z VM ID: blacksmith-8vcpu-ubuntu-2404-aucaay3knxnj2n4u 2026-10-24T03:19:44.5501162Z Host: production-152.236.41.221-x8664 2026-10-24T03:19:44.5501442Z Host Agent PID: 1028930 2026-10-24T03:19:44.5501687Z Host Agent Git SHA: 1637818df 2026-10-24T03:19:44.5501961Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T03:19:44.5502243Z Blacksmith Host Generation: gen 2 2026-10-24T03:19:44.5502536Z Petname: production-winning-monkfish-a5518bbe 2026-10-24T03:19:44.5502838Z Region: us-east 2026-10-24T03:19:44.5503075Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T03:19:44.5511116Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T03:19:44.5511606Z 2026-10-24T03:19:44.5560985Z Enabling Blacksmith transparent cache 2026-10-24T03:19:44.5722871Z ##[group]Run actions/checkout@v6 2026-10-24T03:19:44.5723169Z with: 2026-10-24T03:19:44.5723498Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T03:19:44.5723893Z sparse-checkout-cone-mode: false 2026-10-24T03:19:44.5724172Z repository: pingdotgg/t3code 2026-10-24T03:19:44.5725937Z token: *** 2026-10-24T03:19:44.5726152Z ssh-strict: true 2026-10-24T03:19:44.5726375Z ssh-user: git 2026-10-24T03:19:44.5726602Z persist-credentials: true 2026-10-24T03:19:44.5727026Z clean: true 2026-10-24T03:19:44.5727243Z fetch-depth: 1 2026-10-24T03:19:44.5727461Z fetch-tags: false 2026-10-24T03:19:44.5727689Z show-progress: true 2026-10-24T03:19:44.5727917Z lfs: false 2026-10-24T03:19:44.5728131Z submodules: false 2026-10-24T03:19:44.5728358Z set-safe-directory: true 2026-10-24T03:19:44.5728612Z allow-unsafe-pr-checkout: false 2026-10-24T03:19:44.5728873Z env: 2026-10-24T03:19:44.5729117Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:44.5729405Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:44.5729688Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:44.5729951Z ##[endgroup] 2026-10-24T03:19:44.6728948Z Syncing repository: pingdotgg/t3code 2026-10-24T03:19:44.6729822Z ##[group]Getting Git version info 2026-10-24T03:19:44.6730154Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T03:19:44.6742364Z [command]/usr/local/bin/git version 2026-10-24T03:19:44.6844344Z git version 2.55.0 2026-10-24T03:19:44.6856190Z ##[endgroup] 2026-10-24T03:19:44.6862939Z Temporarily overriding HOME='/home/runner/_work/_temp/ca43c4b9-dffa-4e52-84fe-42b6c54cf1ea' before making global git config changes 2026-10-24T03:19:44.6863585Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T03:19:44.6866576Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T03:19:44.6898716Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T03:19:44.6900660Z ##[group]Determining repository object format 2026-10-24T03:19:44.6901886Z ##[endgroup] 2026-10-24T03:19:44.6902252Z ##[group]Initializing the repository 2026-10-24T03:19:44.6904239Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T03:19:44.6942818Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T03:19:44.6943287Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T03:19:44.6943745Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T03:19:44.6944105Z hint: call: 2026-10-24T03:19:44.6944316Z hint: 2026-10-24T03:19:44.6944581Z hint: git config --global init.defaultBranch 2026-10-24T03:19:44.6944884Z hint: 2026-10-24T03:19:44.6945172Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T03:19:44.6945620Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T03:19:44.6945985Z hint: 2026-10-24T03:19:44.6946198Z hint: git branch -m 2026-10-24T03:19:44.6946441Z hint: 2026-10-24T03:19:44.6946751Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T03:19:44.6947221Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T03:19:44.6948448Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T03:19:44.6978798Z ##[endgroup] 2026-10-24T03:19:44.6979175Z ##[group]Disabling automatic garbage collection 2026-10-24T03:19:44.6981593Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T03:19:44.7003614Z ##[endgroup] 2026-10-24T03:19:44.7003966Z ##[group]Setting up auth 2026-10-24T03:19:44.7004245Z Removing SSH command configuration 2026-10-24T03:19:44.7007944Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T03:19:44.7034294Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-24T03:19:44.7182103Z Removing HTTP extra header 2026-10-24T03:19:44.7184931Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T03:19:44.7213439Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" 2026-10-24T03:19:44.7336910Z Removing includeIf entries pointing to credentials config files 2026-10-24T03:19:44.7339029Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T03:19:44.7367566Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T03:19:44.7483398Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-a132a6d5-48b3-4fbc-bfa8-322679746d74.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T03:19:44.7511428Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-a132a6d5-48b3-4fbc-bfa8-322679746d74.config 2026-10-24T03:19:44.7533006Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-a132a6d5-48b3-4fbc-bfa8-322679746d74.config 2026-10-24T03:19:44.7555347Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-a132a6d5-48b3-4fbc-bfa8-322679746d74.config 2026-10-24T03:19:44.7577479Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-a132a6d5-48b3-4fbc-bfa8-322679746d74.config 2026-10-24T03:19:44.7597384Z ##[endgroup] 2026-10-24T03:19:44.7597749Z ##[group]Fetching the repository 2026-10-24T03:19:44.7601888Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +3f3a1bf419f07b4dcbb3be9f9fbb4ed54055ee4f:refs/remotes/origin/main 2026-10-24T03:19:45.0361246Z From https://github.com/pingdotgg/t3code 2026-10-24T03:19:45.0362201Z * [new ref] 3f3a1bf419f07b4dcbb3be9f9fbb4ed54055ee4f -> origin/main 2026-10-24T03:19:45.0389017Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T03:19:45.0409786Z origin/main 2026-10-24T03:19:45.0413856Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T03:19:45.0438282Z 3f3a1bf419f07b4dcbb3be9f9fbb4ed54055ee4f 2026-10-24T03:19:45.0440222Z ##[endgroup] 2026-10-24T03:19:45.0441043Z ##[group]Determining the checkout info 2026-10-24T03:19:45.0441920Z ##[endgroup] 2026-10-24T03:19:45.0442725Z ##[group]Setting up sparse checkout 2026-10-24T03:19:45.0443514Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T03:19:45.0465702Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T03:19:45.0483645Z .git/info/sparse-checkout 2026-10-24T03:19:45.0487430Z ##[endgroup] 2026-10-24T03:19:45.0488399Z ##[group]Checking out the ref 2026-10-24T03:19:45.0489765Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T03:19:51.6466400Z Updating files: 0% (1/6323) 2026-10-24T03:19:51.6495721Z Updating files: 1% (64/6323) 2026-10-24T03:19:51.6514367Z Updating files: 2% (127/6323) 2026-10-24T03:19:51.6533666Z Updating files: 3% (190/6323) 2026-10-24T03:19:51.6558400Z Updating files: 4% (253/6323) 2026-10-24T03:19:51.6589823Z Updating files: 5% (317/6323) 2026-10-24T03:19:51.6611615Z Updating files: 6% (380/6323) 2026-10-24T03:19:51.6673235Z Updating files: 7% (443/6323) 2026-10-24T03:19:51.6704380Z Updating files: 8% (506/6323) 2026-10-24T03:19:51.6729338Z Updating files: 9% (570/6323) 2026-10-24T03:19:51.7046522Z Updating files: 10% (633/6323) 2026-10-24T03:19:51.7063744Z Updating files: 11% (696/6323) 2026-10-24T03:19:51.7075456Z Updating files: 12% (759/6323) 2026-10-24T03:19:51.7090986Z Updating files: 13% (822/6323) 2026-10-24T03:19:51.7108228Z Updating files: 14% (886/6323) 2026-10-24T03:19:51.7127345Z Updating files: 15% (949/6323) 2026-10-24T03:19:51.7147837Z Updating files: 16% (1012/6323) 2026-10-24T03:19:51.7164166Z Updating files: 17% (1075/6323) 2026-10-24T03:19:51.7183102Z Updating files: 18% (1139/6323) 2026-10-24T03:19:51.7197293Z Updating files: 19% (1202/6323) 2026-10-24T03:19:51.7218326Z Updating files: 20% (1265/6323) 2026-10-24T03:19:51.7235586Z Updating files: 21% (1328/6323) 2026-10-24T03:19:51.7252889Z Updating files: 22% (1392/6323) 2026-10-24T03:19:51.7266712Z Updating files: 23% (1455/6323) 2026-10-24T03:19:51.7279606Z Updating files: 24% (1518/6323) 2026-10-24T03:19:51.7293742Z Updating files: 25% (1581/6323) 2026-10-24T03:19:51.7308615Z Updating files: 26% (1644/6323) 2026-10-24T03:19:51.7323317Z Updating files: 27% (1708/6323) 2026-10-24T03:19:51.7344286Z Updating files: 28% (1771/6323) 2026-10-24T03:19:51.7381427Z Updating files: 29% (1834/6323) 2026-10-24T03:19:51.7403154Z Updating files: 30% (1897/6323) 2026-10-24T03:19:51.7428513Z Updating files: 31% (1961/6323) 2026-10-24T03:19:51.7460993Z Updating files: 32% (2024/6323) 2026-10-24T03:19:51.7494270Z Updating files: 33% (2087/6323) 2026-10-24T03:19:51.7570223Z Updating files: 34% (2150/6323) 2026-10-24T03:19:51.7639419Z Updating files: 35% (2214/6323) 2026-10-24T03:19:51.7681292Z Updating files: 36% (2277/6323) 2026-10-24T03:19:51.7714878Z Updating files: 37% (2340/6323) 2026-10-24T03:19:51.7764697Z Updating files: 38% (2403/6323) 2026-10-24T03:19:51.7792924Z Updating files: 39% (2466/6323) 2026-10-24T03:19:51.7826276Z Updating files: 40% (2530/6323) 2026-10-24T03:19:51.7859792Z Updating files: 41% (2593/6323) 2026-10-24T03:19:51.7876988Z Updating files: 42% (2656/6323) 2026-10-24T03:19:51.7887489Z Updating files: 43% (2719/6323) 2026-10-24T03:19:51.7917011Z Updating files: 44% (2783/6323) 2026-10-24T03:19:51.7948155Z Updating files: 45% (2846/6323) 2026-10-24T03:19:51.7974985Z Updating files: 46% (2909/6323) 2026-10-24T03:19:51.8004179Z Updating files: 47% (2972/6323) 2026-10-24T03:19:51.8035787Z Updating files: 48% (3036/6323) 2026-10-24T03:19:51.8068833Z Updating files: 49% (3099/6323) 2026-10-24T03:19:51.8108704Z Updating files: 50% (3162/6323) 2026-10-24T03:19:51.8125365Z Updating files: 51% (3225/6323) 2026-10-24T03:19:51.8164002Z Updating files: 52% (3288/6323) 2026-10-24T03:19:51.8190291Z Updating files: 53% (3352/6323) 2026-10-24T03:19:51.8211920Z Updating files: 54% (3415/6323) 2026-10-24T03:19:51.8237624Z Updating files: 55% (3478/6323) 2026-10-24T03:19:51.8256652Z Updating files: 56% (3541/6323) 2026-10-24T03:19:51.8276104Z Updating files: 57% (3605/6323) 2026-10-24T03:19:51.8296097Z Updating files: 58% (3668/6323) 2026-10-24T03:19:51.8690849Z Updating files: 59% (3731/6323) 2026-10-24T03:19:51.8705892Z Updating files: 60% (3794/6323) 2026-10-24T03:19:51.8723447Z Updating files: 61% (3858/6323) 2026-10-24T03:19:51.8743079Z Updating files: 62% (3921/6323) 2026-10-24T03:19:51.8765520Z Updating files: 63% (3984/6323) 2026-10-24T03:19:51.8795116Z Updating files: 64% (4047/6323) 2026-10-24T03:19:51.8818228Z Updating files: 65% (4110/6323) 2026-10-24T03:19:51.8835619Z Updating files: 66% (4174/6323) 2026-10-24T03:19:51.8862653Z Updating files: 67% (4237/6323) 2026-10-24T03:19:51.8876370Z Updating files: 68% (4300/6323) 2026-10-24T03:19:51.8896883Z Updating files: 69% (4363/6323) 2026-10-24T03:19:51.8911025Z Updating files: 70% (4427/6323) 2026-10-24T03:19:51.8928520Z Updating files: 71% (4490/6323) 2026-10-24T03:19:51.8946219Z Updating files: 72% (4553/6323) 2026-10-24T03:19:51.8974107Z Updating files: 73% (4616/6323) 2026-10-24T03:19:51.9247912Z Updating files: 74% (4680/6323) 2026-10-24T03:19:51.9450459Z Updating files: 75% (4743/6323) 2026-10-24T03:19:51.9473301Z Updating files: 76% (4806/6323) 2026-10-24T03:19:51.9495992Z Updating files: 77% (4869/6323) 2026-10-24T03:19:51.9523015Z Updating files: 78% (4932/6323) 2026-10-24T03:19:51.9543306Z Updating files: 79% (4996/6323) 2026-10-24T03:19:51.9563080Z Updating files: 80% (5059/6323) 2026-10-24T03:19:51.9582249Z Updating files: 81% (5122/6323) 2026-10-24T03:19:51.9603239Z Updating files: 82% (5185/6323) 2026-10-24T03:19:51.9623113Z Updating files: 83% (5249/6323) 2026-10-24T03:19:51.9646319Z Updating files: 84% (5312/6323) 2026-10-24T03:19:51.9670780Z Updating files: 85% (5375/6323) 2026-10-24T03:19:51.9695840Z Updating files: 86% (5438/6323) 2026-10-24T03:19:51.9770102Z Updating files: 87% (5502/6323) 2026-10-24T03:19:51.9804281Z Updating files: 88% (5565/6323) 2026-10-24T03:19:51.9824984Z Updating files: 89% (5628/6323) 2026-10-24T03:19:51.9851926Z Updating files: 90% (5691/6323) 2026-10-24T03:19:51.9889278Z Updating files: 91% (5754/6323) 2026-10-24T03:19:51.9906197Z Updating files: 92% (5818/6323) 2026-10-24T03:19:51.9924200Z Updating files: 93% (5881/6323) 2026-10-24T03:19:51.9946727Z Updating files: 94% (5944/6323) 2026-10-24T03:19:51.9972331Z Updating files: 95% (6007/6323) 2026-10-24T03:19:52.0029807Z Updating files: 96% (6071/6323) 2026-10-24T03:19:52.0058141Z Updating files: 97% (6134/6323) 2026-10-24T03:19:52.0108023Z Updating files: 98% (6197/6323) 2026-10-24T03:19:52.0128713Z Updating files: 99% (6260/6323) 2026-10-24T03:19:52.0128931Z Updating files: 100% (6323/6323) 2026-10-24T03:19:52.0129250Z Updating files: 100% (6323/6323), done. 2026-10-24T03:19:52.0293711Z Switched to a new branch 'main' 2026-10-24T03:19:52.0294538Z branch 'main' set up to track 'origin/main'. 2026-10-24T03:19:52.0307906Z ##[endgroup] 2026-10-24T03:19:52.0343502Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T03:19:52.0361229Z 3f3a1bf419f07b4dcbb3be9f9fbb4ed54055ee4f 2026-10-24T03:19:52.0448428Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T03:19:52.0448756Z files="$(git ls-files .github/pr-assets)" 2026-10-24T03:19:52.0449010Z if test -n "$files"; then 2026-10-24T03:19:52.0449321Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T03:19:52.0449616Z  exit 1 2026-10-24T03:19:52.0449781Z fi 2026-10-24T03:19:52.0459164Z shell: /usr/bin/bash -e {0} 2026-10-24T03:19:52.0459352Z env: 2026-10-24T03:19:52.0459523Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:52.0459754Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:52.0459963Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:52.0460158Z ##[endgroup] 2026-10-24T03:19:52.0616689Z Prepare all required actions 2026-10-24T03:19:52.0617132Z Getting action download info 2026-10-24T03:19:52.1611285Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T03:19:52.2707679Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T03:19:52.2707923Z env: 2026-10-24T03:19:52.2708119Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:52.2708347Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:52.2708578Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:52.2708789Z ##[endgroup] 2026-10-24T03:19:52.2789750Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T03:19:52.2804299Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T03:19:52.2804740Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T03:19:52.2805124Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T03:19:52.2805446Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T03:19:52.2814504Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:19:52.2814735Z env: 2026-10-24T03:19:52.2814916Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:52.2815131Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:52.2815343Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:52.2815546Z ##[endgroup] 2026-10-24T03:19:52.2885469Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T03:19:52.2887033Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T03:19:52.2930694Z ##[group]Run actions/cache@v6 2026-10-24T03:19:52.2930899Z with: 2026-10-24T03:19:52.2931262Z path: ~/.vite-plus 2026-10-24T03:19:52.2931496Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T03:19:52.2931762Z enableCrossOsArchive: false 2026-10-24T03:19:52.2931964Z fail-on-cache-miss: false 2026-10-24T03:19:52.2932153Z lookup-only: false 2026-10-24T03:19:52.2932327Z save-always: false 2026-10-24T03:19:52.2932498Z env: 2026-10-24T03:19:52.2932671Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:52.2932888Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:52.2933102Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:52.2933300Z ##[endgroup] 2026-10-24T03:19:52.4924533Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T03:19:52.8764085Z Received 170349591 of 170349591 (100.0%), 448.8 MBs/sec 2026-10-24T03:19:52.8764730Z Cache Size: ~162 MB (170349591 B) 2026-10-24T03:19:52.8791032Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/fc7146d6-1a7a-4843-888c-5c3a1f12b668/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T03:19:53.6624954Z Cache restored successfully 2026-10-24T03:19:53.6767540Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T03:19:53.6854316Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1396] 2026-10-24T03:19:53.6856904Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T03:19:53.6876012Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T03:19:53.6876241Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T03:19:53.6876419Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T03:19:53.6885780Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:19:53.6885956Z env: 2026-10-24T03:19:53.6886078Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:53.6886230Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:53.6886385Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:53.6886523Z ##[endgroup] 2026-10-24T03:19:53.6926063Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T03:19:53.6934201Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=7] 2026-10-24T03:19:53.6935647Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T03:19:53.6940341Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T03:19:53.6941542Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T03:19:53.6950678Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T03:19:53.6950859Z store_path="$(vp pm cache dir)" 2026-10-24T03:19:53.6951030Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T03:19:53.6960211Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:19:53.6960390Z env: 2026-10-24T03:19:53.6960516Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:53.6960671Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:53.6960827Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:53.6960977Z ##[endgroup] 2026-10-24T03:19:53.7090794Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=14] 2026-10-24T03:19:53.7092174Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T03:19:53.7441017Z ##[group]Run actions/cache@v6 2026-10-24T03:19:53.7441291Z with: 2026-10-24T03:19:53.7441465Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T03:19:53.7441805Z key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T03:19:53.7442120Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T03:19:53.7442328Z enableCrossOsArchive: false 2026-10-24T03:19:53.7442541Z fail-on-cache-miss: false 2026-10-24T03:19:53.7442727Z lookup-only: false 2026-10-24T03:19:53.7442886Z save-always: false 2026-10-24T03:19:53.7443040Z env: 2026-10-24T03:19:53.7443213Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:19:53.7443577Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:19:53.7443769Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:19:53.7443966Z ##[endgroup] 2026-10-24T03:19:53.9323723Z Cache hit for: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T03:19:54.9913916Z Received 671088640 of 995020926 (67.4%), 617.2 MBs/sec 2026-10-24T03:19:55.4419479Z Received 995020926 of 995020926 (100.0%), 638.1 MBs/sec 2026-10-24T03:19:55.4420366Z Cache Size: ~949 MB (995020926 B) 2026-10-24T03:19:55.4448905Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/eab51708-6868-4d7a-a180-b50b9c1b957b/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T03:20:01.2011221Z Cache restored successfully 2026-10-24T03:20:01.2492146Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T03:20:01.2561344Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7546] 2026-10-24T03:20:01.2563517Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T03:20:01.2574151Z ##[group]Run vp install 2026-10-24T03:20:01.2574302Z vp install 2026-10-24T03:20:01.2583471Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T03:20:01.2583640Z env: 2026-10-24T03:20:01.2583762Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:01.2583915Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:01.2584068Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:01.2584207Z ##[endgroup] 2026-10-24T03:20:01.2918204Z Scope: all 33 workspace projects 2026-10-24T03:20:01.3932295Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T03:20:01.6792063Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T03:20:01.6792404Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T03:20:01.6793128Z Virtual store is at: node_modules/.pnpm 2026-10-24T03:20:03.9789308Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.6s) 2026-10-24T03:20:03.9789574Z Lockfile is up to date, resolution step is skipped 2026-10-24T03:20:03.9960585Z Packages: +1721 2026-10-24T03:20:03.9960821Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T03:20:04.0319182Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T03:20:05.0885412Z . prepare$ vp config --no-agent 2026-10-24T03:20:05.1934116Z . prepare: Done 2026-10-24T03:20:05.1951452Z 2026-10-24T03:20:05.1951875Z devDependencies: 2026-10-24T03:20:05.1952138Z + @coderabbitai/config 1.1.0 2026-10-24T03:20:05.1952438Z + @shadcn/lint 0.1.5 2026-10-24T03:20:05.1952676Z + @types/node 24.12.4 2026-10-24T03:20:05.1952873Z + knip 6.34.0 2026-10-24T03:20:05.1953078Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T03:20:05.1953341Z + vite-plus 1.3.0 2026-10-24T03:20:05.1953450Z 2026-10-24T03:20:05.1977113Z Done in 3.9s using pnpm v12.14.0 2026-10-24T03:20:05.2212458Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3964] 2026-10-24T03:20:05.2922893Z ##[group]Run actions/cache@v6 2026-10-24T03:20:05.2923078Z with: 2026-10-24T03:20:05.2923203Z path: ~/.cache/electron 2026-10-24T03:20:05.2923447Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T03:20:05.2923693Z enableCrossOsArchive: false 2026-10-24T03:20:05.2923853Z fail-on-cache-miss: false 2026-10-24T03:20:05.2924068Z lookup-only: false 2026-10-24T03:20:05.2924266Z save-always: false 2026-10-24T03:20:05.2924453Z env: 2026-10-24T03:20:05.2924634Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:05.2924881Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:05.2925150Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:05.2925372Z ##[endgroup] 2026-10-24T03:20:05.4876778Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T03:20:05.6428487Z Received 122906203 of 122906203 (100.0%), 837.2 MBs/sec 2026-10-24T03:20:05.6428846Z Cache Size: ~117 MB (122906203 B) 2026-10-24T03:20:05.6461865Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/fab89a17-91e7-44d5-8d31-e83b6c8ca597/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T03:20:05.7120342Z Cache restored successfully 2026-10-24T03:20:05.7269715Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T03:20:05.7361117Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T03:20:05.7361506Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T03:20:05.7371602Z shell: /usr/bin/bash -e {0} 2026-10-24T03:20:05.7371743Z env: 2026-10-24T03:20:05.7372048Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:05.7372205Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:05.7372352Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:05.7372495Z ##[endgroup] 2026-10-24T03:20:05.9093784Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T03:20:06.5056690Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T03:20:06.5073869Z 2026-10-24T03:20:06.5162647Z ##[group]Run vp run knip:check 2026-10-24T03:20:06.5162837Z vp run knip:check 2026-10-24T03:20:06.5171906Z shell: /usr/bin/bash -e {0} 2026-10-24T03:20:06.5172031Z env: 2026-10-24T03:20:06.5172151Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:06.5172300Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:06.5172447Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:06.5172584Z ##[endgroup] 2026-10-24T03:20:06.6683395Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T03:20:10.5852204Z 2026-10-24T03:20:10.5855750Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-24T03:20:19.4132020Z 2026-10-24T03:20:19.4132755Z --- 2026-10-24T03:20:19.4133138Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T03:20:19.4221588Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T03:20:19.4221901Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T03:20:19.4231193Z shell: /usr/bin/bash -e {0} 2026-10-24T03:20:19.4231330Z env: 2026-10-24T03:20:19.4231449Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:19.4231604Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:19.4231751Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:19.4231899Z ##[endgroup] 2026-10-24T03:20:19.5770836Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T03:20:19.7763747Z 2026-10-24T03:20:19.7868038Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T03:20:19.7868392Z vp run --filter t3 generate --check 2026-10-24T03:20:19.7878292Z shell: /usr/bin/bash -e {0} 2026-10-24T03:20:19.7878487Z env: 2026-10-24T03:20:19.7878648Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:19.7878801Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:19.7878947Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:19.7879086Z ##[endgroup] 2026-10-24T03:20:19.9376150Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T03:20:20.1039770Z 2026-10-24T03:20:20.1152451Z ##[group]Run vp check 2026-10-24T03:20:20.1152615Z vp check 2026-10-24T03:20:20.1161755Z shell: /usr/bin/bash -e {0} 2026-10-24T03:20:20.1161886Z env: 2026-10-24T03:20:20.1161998Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 137 2026-10-24T03:20:20.1162150Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 392 2026-10-24T03:20:20.1162295Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T03:20:20.1162435Z ##[endgroup] 2026-10-24T03:20:20.6866502Z pass: All 5678 files are correctly formatted (419ms, 8 threads) 2026-10-24T03:20:25.9816591Z warn: Lint warnings found 2026-10-24T03:20:25.9818211Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T03:20:25.9818920Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T03:20:25.9819337Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T03:20:25.9819817Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T03:20:25.9820279Z 159 │ │ constructor(data: Record) { 2026-10-24T03:20:25.9820675Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T03:20:25.9821008Z 161 │ │ } 2026-10-24T03:20:25.9821367Z 162 │ ╰─▶ }, 2026-10-24T03:20:25.9821707Z 163 │ clipboard: { 2026-10-24T03:20:25.9821922Z ╰──── 2026-10-24T03:20:25.9822307Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T03:20:25.9822648Z 2026-10-24T03:20:25.9823158Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:25.9823888Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T03:20:25.9824248Z 345 │ 2026-10-24T03:20:25.9824505Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T03:20:25.9824868Z ·  ────────────┬─────────── 2026-10-24T03:20:25.9825297Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T03:20:25.9825681Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T03:20:25.9825922Z ╰──── 2026-10-24T03:20:25.9826189Z  help: Consider removing this declaration. 2026-10-24T03:20:25.9826389Z 2026-10-24T03:20:25.9826701Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T03:20:25.9827151Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T03:20:25.9827462Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T03:20:25.9827761Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T03:20:25.9828044Z ·  ──┬── 2026-10-24T03:20:25.9828395Z · ╰── 'Fiber' is imported here 2026-10-24T03:20:25.9828776Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T03:20:25.9829043Z ╰──── 2026-10-24T03:20:25.9829285Z  help: Consider removing this import. 2026-10-24T03:20:25.9829463Z 2026-10-24T03:20:25.9829792Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T03:20:25.9830260Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T03:20:25.9830830Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T03:20:25.9831138Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T03:20:25.9831432Z ·  ────┬─── 2026-10-24T03:20:25.9831795Z · ╰── 'Schedule' is imported here 2026-10-24T03:20:25.9832149Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T03:20:25.9832398Z ╰──── 2026-10-24T03:20:25.9832668Z  help: Consider removing this import. 2026-10-24T03:20:25.9832851Z 2026-10-24T03:20:25.9833335Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:25.9834278Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T03:20:25.9834797Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T03:20:25.9835388Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T03:20:25.9835878Z ·  ────────────┬─────────── 2026-10-24T03:20:25.9836326Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T03:20:25.9836861Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T03:20:25.9837235Z ╰──── 2026-10-24T03:20:25.9837484Z  help: Consider removing this declaration. 2026-10-24T03:20:25.9837677Z 2026-10-24T03:20:25.9838106Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T03:20:25.9838750Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T03:20:25.9839097Z 1619 │ 2026-10-24T03:20:25.9839531Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T03:20:25.9840064Z ·  ──────────────────┬────────────────── 2026-10-24T03:20:25.9840574Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T03:20:25.9841024Z 1621 │ const meta = response._meta; 2026-10-24T03:20:25.9841261Z ╰──── 2026-10-24T03:20:25.9841513Z  help: Consider removing this declaration. 2026-10-24T03:20:25.9841704Z 2026-10-24T03:20:25.9842144Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:25.9842645Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T03:20:25.9842844Z 407 │ 2026-10-24T03:20:25.9842984Z 408 │ const layer: Layer.Layer< 2026-10-24T03:20:25.9843149Z ·  ──┬── 2026-10-24T03:20:25.9843365Z · ╰── 'layer' is declared here 2026-10-24T03:20:25.9843595Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T03:20:25.9843761Z ╰──── 2026-10-24T03:20:25.9843925Z  help: Consider removing this declaration. 2026-10-24T03:20:25.9844047Z 2026-10-24T03:20:25.9844284Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T03:20:25.9844593Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T03:20:25.9844863Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T03:20:25.9845139Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T03:20:25.9845424Z ·  ──────┬────── 2026-10-24T03:20:25.9845785Z · ╰── 'HookForwarder' is imported here 2026-10-24T03:20:25.9846114Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T03:20:25.9846389Z ╰──── 2026-10-24T03:20:25.9846553Z  help: Consider removing this import. 2026-10-24T03:20:25.9846668Z 2026-10-24T03:20:25.9846883Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T03:20:25.9847197Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T03:20:25.9847386Z 296 │ } from "./device.ts"; 2026-10-24T03:20:25.9847706Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T03:20:25.9848061Z ·  ── 2026-10-24T03:20:25.9848291Z 298 │ import { 2026-10-24T03:20:25.9848448Z ╰──── 2026-10-24T03:20:25.9848591Z  help: Remove empty braces 2026-10-24T03:20:25.9848697Z 2026-10-24T03:20:25.9848891Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T03:20:25.9849214Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T03:20:25.9849453Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T03:20:25.9849651Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T03:20:25.9849844Z ·  ──┬── 2026-10-24T03:20:25.9850081Z · ╰── 'Scope' is imported here 2026-10-24T03:20:25.9850309Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T03:20:25.9850475Z ╰──── 2026-10-24T03:20:25.9850633Z  help: Consider removing this import. 2026-10-24T03:20:25.9850751Z 2026-10-24T03:20:25.9851244Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:25.9851856Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T03:20:25.9852138Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T03:20:25.9852534Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T03:20:25.9852878Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T03:20:25.9853140Z 137 │ │ if (predicate(lastState)) { 2026-10-24T03:20:25.9853369Z 138 │ │ return lastState; 2026-10-24T03:20:25.9853562Z 139 │ │ } 2026-10-24T03:20:25.9853767Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:25.9854012Z 141 │ ╰─▶ } 2026-10-24T03:20:25.9854229Z 142 │ return yield* Effect.die( 2026-10-24T03:20:25.9854383Z ╰──── 2026-10-24T03:20:25.9854442Z 2026-10-24T03:20:25.9854737Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T03:20:25.9855136Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T03:20:25.9855339Z 284 │ }, 2026-10-24T03:20:25.9855496Z 285 │ (effect, flow, stopSessions) => 2026-10-24T03:20:25.9855704Z ·  ──────┬───── 2026-10-24T03:20:25.9855963Z · ╰── 'stopSessions' is declared here 2026-10-24T03:20:25.9856181Z 286 │ effect.pipe( 2026-10-24T03:20:25.9856323Z ╰──── 2026-10-24T03:20:25.9856485Z  help: Consider removing this parameter. 2026-10-24T03:20:25.9856606Z 2026-10-24T03:20:25.9857044Z ⚠ 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-24T03:20:25.9857599Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T03:20:25.9857844Z 262 │ ...(update._meta !== undefined 2026-10-24T03:20:25.9858232Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T03:20:25.9858976Z ·  ───────── 2026-10-24T03:20:25.9859146Z 264 │ : {}), 2026-10-24T03:20:25.9859279Z ╰──── 2026-10-24T03:20:25.9859336Z 2026-10-24T03:20:25.9859532Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:25.9859833Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T03:20:25.9860020Z 457 │ ): Array { 2026-10-24T03:20:25.9860264Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T03:20:25.9860603Z ·  ┬ 2026-10-24T03:20:25.9861016Z · ╰── '_' is declared here 2026-10-24T03:20:25.9861274Z 459 │ for (const b of data) { 2026-10-24T03:20:25.9861427Z ╰──── 2026-10-24T03:20:25.9861596Z  help: Consider removing this parameter. 2026-10-24T03:20:25.9861792Z 2026-10-24T03:20:25.9862074Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T03:20:25.9862535Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T03:20:25.9862854Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T03:20:25.9863099Z 12 │ this.onmessage = listener; 2026-10-24T03:20:25.9863289Z ·  ───────── 2026-10-24T03:20:25.9863443Z 13 │ } 2026-10-24T03:20:25.9863568Z ╰──── 2026-10-24T03:20:25.9863959Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T03:20:25.9864264Z 2026-10-24T03:20:25.9864475Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T03:20:25.9864818Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T03:20:25.9865044Z 15 │ constructor() { 2026-10-24T03:20:25.9865198Z 16 │ source = this; 2026-10-24T03:20:25.9865360Z ·  ────── 2026-10-24T03:20:25.9865504Z 17 │ } 2026-10-24T03:20:25.9865626Z ╰──── 2026-10-24T03:20:25.9865978Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T03:20:25.9866242Z 2026-10-24T03:20:25.9866468Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:20:25.9866817Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T03:20:25.9867097Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T03:20:25.9867351Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T03:20:25.9867591Z ·  ─────── 2026-10-24T03:20:25.9867830Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T03:20:25.9868012Z ╰──── 2026-10-24T03:20:25.9868345Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:20:25.9868600Z 2026-10-24T03:20:25.9868817Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T03:20:25.9869341Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T03:20:25.9869684Z 21 │ 2026-10-24T03:20:25.9869911Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T03:20:25.9870169Z ·  ────────┬─────── 2026-10-24T03:20:25.9870424Z · ╰── 'summarizePayload' is declared here 2026-10-24T03:20:25.9870681Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T03:20:25.9870859Z ╰──── 2026-10-24T03:20:25.9871022Z  help: Consider removing this declaration. 2026-10-24T03:20:25.9871144Z 2026-10-24T03:20:25.9871428Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T03:20:25.9871831Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T03:20:25.9872037Z 248 │ }, 2026-10-24T03:20:25.9872187Z 249 │ (effect, flow, stopSessions) => 2026-10-24T03:20:25.9872386Z ·  ──────┬───── 2026-10-24T03:20:25.9872685Z · ╰── 'stopSessions' is declared here 2026-10-24T03:20:25.9872901Z 250 │ effect.pipe( 2026-10-24T03:20:25.9873042Z ╰──── 2026-10-24T03:20:25.9873202Z  help: Consider removing this parameter. 2026-10-24T03:20:25.9873323Z 2026-10-24T03:20:25.9873519Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T03:20:25.9873859Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T03:20:25.9874074Z  80 │ 2026-10-24T03:20:25.9874419Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T03:20:25.9874801Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T03:20:25.9875059Z  83 │ │ ): Effect.fn.Return { 2026-10-24T03:20:25.9875366Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T03:20:25.9875676Z  85 │ │ const connections = new Map(); 2026-10-24T03:20:25.9875895Z  86 │ │ 2026-10-24T03:20:25.9876202Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T03:20:25.9876518Z  88 │ │ Effect.suspend(() => { 2026-10-24T03:20:25.9876778Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T03:20:25.9877046Z  90 │ │ return connection === undefined 2026-10-24T03:20:25.9877389Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T03:20:25.9877719Z  92 │ │ : Effect.succeed(connection); 2026-10-24T03:20:25.9877924Z  93 │ │ }); 2026-10-24T03:20:25.9878090Z  94 │ │ 2026-10-24T03:20:25.9878271Z  95 │ │ const send = ( 2026-10-24T03:20:25.9878476Z  96 │ │ connection: Connection, 2026-10-24T03:20:25.9878689Z  97 │ │ message: unknown, 2026-10-24T03:20:25.9878959Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T03:20:25.9879328Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T03:20:25.9879755Z 100 │ │ Effect.gen(function* () { 2026-10-24T03:20:25.9880023Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T03:20:25.9880304Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T03:20:25.9880681Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T03:20:25.9880976Z 104 │ │ } 2026-10-24T03:20:25.9881217Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T03:20:25.9881467Z 106 │ │ try: (signal) => 2026-10-24T03:20:25.9881720Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T03:20:25.9881976Z 108 │ │ method: "POST", 2026-10-24T03:20:25.9882193Z 109 │ │ signal, 2026-10-24T03:20:25.9882407Z 110 │ │ headers: { 2026-10-24T03:20:25.9882689Z 111 │ │ "content-type": "application/json", 2026-10-24T03:20:25.9882981Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T03:20:25.9883266Z 113 │ │ authorization: options.authorization, 2026-10-24T03:20:25.9883543Z 114 │ │ ...(connection.sessionId === null 2026-10-24T03:20:25.9883779Z 115 │ │ ? {} 2026-10-24T03:20:25.9884043Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T03:20:25.9884333Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T03:20:25.9884577Z 118 │ │ ? {} 2026-10-24T03:20:25.9884855Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T03:20:25.9885132Z 120 │ │ }, 2026-10-24T03:20:25.9885330Z 121 │ │ body, 2026-10-24T03:20:25.9885527Z 122 │ │ }), 2026-10-24T03:20:25.9885733Z 123 │ │ catch: bridgeError, 2026-10-24T03:20:25.9885937Z 124 │ │ }); 2026-10-24T03:20:25.9886253Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T03:20:25.9886570Z 126 │ │ if (!response.ok) { 2026-10-24T03:20:25.9886867Z 127 │ │ yield* Effect.promise( 2026-10-24T03:20:25.9887313Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T03:20:25.9887583Z 129 │ │ ); 2026-10-24T03:20:25.9887797Z 130 │ │ return yield* Effect.fail( 2026-10-24T03:20:25.9888143Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T03:20:25.9888435Z 132 │ │ ); 2026-10-24T03:20:25.9888617Z 133 │ │ } 2026-10-24T03:20:25.9888930Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T03:20:25.9889273Z 135 │ │ for (const payload of payloads) { 2026-10-24T03:20:25.9889632Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T03:20:25.9889927Z 137 │ │ } 2026-10-24T03:20:25.9890126Z 138 │ │ return payloads; 2026-10-24T03:20:25.9890369Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T03:20:25.9890584Z 140 │ │ ); 2026-10-24T03:20:25.9890754Z 141 │ │ 2026-10-24T03:20:25.9891022Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T03:20:25.9891338Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T03:20:25.9891674Z 144 │ │ ): Effect.fn.Return { 2026-10-24T03:20:25.9892030Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T03:20:25.9892326Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T03:20:25.9892622Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T03:20:25.9892866Z 148 │ │ if (sessionId !== null) { 2026-10-24T03:20:25.9893120Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T03:20:25.9893367Z 150 │ │ try: (signal) => 2026-10-24T03:20:25.9893616Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T03:20:25.9893865Z 152 │ │ method: "DELETE", 2026-10-24T03:20:25.9894075Z 153 │ │ signal, 2026-10-24T03:20:25.9894289Z 154 │ │ headers: { 2026-10-24T03:20:25.9894538Z 155 │ │ authorization: options.authorization, 2026-10-24T03:20:25.9894805Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T03:20:25.9895075Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T03:20:25.9895316Z 158 │ │ ? {} 2026-10-24T03:20:25.9895592Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T03:20:25.9895851Z 160 │ │ }, 2026-10-24T03:20:25.9896036Z 161 │ │ }), 2026-10-24T03:20:25.9896243Z 162 │ │ catch: bridgeError, 2026-10-24T03:20:25.9896523Z 163 │ │ }); 2026-10-24T03:20:25.9896954Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T03:20:25.9897219Z 165 │ │ return yield* Effect.fail( 2026-10-24T03:20:25.9897457Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T03:20:25.9897779Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T03:20:25.9898050Z 168 │ │ ), 2026-10-24T03:20:25.9898234Z 169 │ │ ); 2026-10-24T03:20:25.9898410Z 170 │ │ } 2026-10-24T03:20:25.9898877Z 171 │ │ yield* Effect.promise( 2026-10-24T03:20:25.9899196Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T03:20:25.9899466Z 173 │ │ ); 2026-10-24T03:20:25.9899644Z 174 │ │ } 2026-10-24T03:20:25.9899829Z 175 │ │ return {}; 2026-10-24T03:20:25.9900005Z 176 │ │ }); 2026-10-24T03:20:25.9900168Z 177 │ │ 2026-10-24T03:20:25.9900343Z 178 │ │ return { 2026-10-24T03:20:25.9900618Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T03:20:25.9900925Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T03:20:25.9901174Z 181 │ │ return yield* Effect.fail( 2026-10-24T03:20:25.9901492Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T03:20:25.9901763Z 183 │ │ ); 2026-10-24T03:20:25.9901946Z 184 │ │ } 2026-10-24T03:20:25.9902176Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T03:20:25.9902573Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T03:20:25.9902865Z 187 │ │ } 2026-10-24T03:20:25.9903128Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T03:20:25.9903413Z 189 │ │ connections.set(connectionId, { 2026-10-24T03:20:25.9903669Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T03:20:25.9903901Z 191 │ │ sessionId: null, 2026-10-24T03:20:25.9904129Z 192 │ │ protocolVersion: null, 2026-10-24T03:20:25.9904360Z 193 │ │ nextRequestId: 0, 2026-10-24T03:20:25.9904561Z 194 │ │ }); 2026-10-24T03:20:25.9904771Z 195 │ │ return { connectionId }; 2026-10-24T03:20:25.9904969Z 196 │ │ }), 2026-10-24T03:20:25.9905243Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T03:20:25.9905590Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T03:20:25.9905891Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T03:20:25.9906162Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T03:20:25.9906408Z 201 │ │ jsonrpc: "2.0", 2026-10-24T03:20:25.9906604Z 202 │ │ id, 2026-10-24T03:20:25.9906944Z 203 │ │ method: request.method, 2026-10-24T03:20:25.9907368Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T03:20:25.9907618Z 205 │ │ }); 2026-10-24T03:20:25.9907911Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T03:20:25.9908232Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T03:20:25.9908476Z 208 │ │ if (envelope === null) { 2026-10-24T03:20:25.9908711Z 209 │ │ return yield* Effect.fail( 2026-10-24T03:20:25.9909034Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T03:20:25.9909304Z 211 │ │ ); 2026-10-24T03:20:25.9909489Z 212 │ │ } 2026-10-24T03:20:25.9909708Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T03:20:25.9910047Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T03:20:25.9910323Z 215 │ │ } 2026-10-24T03:20:25.9910597Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T03:20:25.9910854Z 217 │ │ }), 2026-10-24T03:20:25.9911151Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T03:20:25.9911515Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T03:20:25.9911802Z 220 │ │ yield* send(connection, { 2026-10-24T03:20:25.9912027Z 221 │ │ jsonrpc: "2.0", 2026-10-24T03:20:25.9912249Z 222 │ │ method: request.method, 2026-10-24T03:20:25.9912557Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T03:20:25.9912808Z 224 │ │ }); 2026-10-24T03:20:25.9912982Z 225 │ │ }), 2026-10-24T03:20:25.9913170Z 226 │ │ disconnect, 2026-10-24T03:20:25.9913388Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T03:20:25.9913613Z 228 │ │ Effect.forEach( 2026-10-24T03:20:25.9913840Z 229 │ │ [...connections.keys()], 2026-10-24T03:20:25.9914148Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T03:20:25.9914432Z 231 │ │ { discard: true }, 2026-10-24T03:20:25.9914626Z 232 │ │ ), 2026-10-24T03:20:25.9914805Z 233 │ │ ), 2026-10-24T03:20:25.9914977Z 234 │ │ }; 2026-10-24T03:20:25.9915209Z 235 │ ╰─▶ }); 2026-10-24T03:20:25.9915403Z ╰──── 2026-10-24T03:20:25.9915723Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T03:20:25.9915966Z 2026-10-24T03:20:25.9916201Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:20:25.9916552Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T03:20:25.9916870Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T03:20:25.9917306Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T03:20:25.9917650Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T03:20:25.9917873Z 347 │ }; 2026-10-24T03:20:25.9917998Z ╰──── 2026-10-24T03:20:25.9918332Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T03:20:25.9918592Z 2026-10-24T03:20:25.9918821Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T03:20:25.9919160Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T03:20:25.9919365Z 447 │ const favorites = 2026-10-24T03:20:25.9919570Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T03:20:25.9919793Z ·  ───┬── 2026-10-24T03:20:25.9920028Z · ╰── For this reduce 2026-10-24T03:20:25.9920246Z 449 │ const exists = current.some( 2026-10-24T03:20:25.9920524Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T03:20:25.9920765Z 451 │ ); 2026-10-24T03:20:25.9920909Z 452 │ return change.favorite 2026-10-24T03:20:25.9921072Z 453 │ ? exists 2026-10-24T03:20:25.9921216Z 454 │ ? current 2026-10-24T03:20:25.9921437Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T03:20:25.9921673Z ·  ─────┬──── 2026-10-24T03:20:25.9921905Z · ╰── From this spread 2026-10-24T03:20:25.9922115Z 456 │ : current.filter( 2026-10-24T03:20:25.9922256Z ╰──── 2026-10-24T03:20:25.9922560Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T03:20:25.9922931Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T03:20:25.9923100Z 2026-10-24T03:20:25.9923297Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T03:20:25.9923608Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T03:20:25.9923815Z 464 │ null; 2026-10-24T03:20:25.9924006Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T03:20:25.9924235Z ·  ──────────┬───────── 2026-10-24T03:20:25.9924476Z · ╰── From this accumulator 2026-10-24T03:20:25.9924722Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T03:20:25.9924914Z ·  ─┬─ 2026-10-24T03:20:25.9925105Z · ╰── For this loop 2026-10-24T03:20:25.9925365Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T03:20:25.9925587Z 468 │ hiddenModels: [], 2026-10-24T03:20:25.9925748Z 469 │ modelOrder: [], 2026-10-24T03:20:25.9925893Z 470 │ }; 2026-10-24T03:20:25.9926149Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T03:20:25.9926452Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T03:20:25.9926660Z 473 │ nextModelPreferences = { 2026-10-24T03:20:25.9926835Z 474 │ ...nextModelPreferences, 2026-10-24T03:20:25.9927118Z ·  ───────────┬─────────── 2026-10-24T03:20:25.9927464Z · ╰── From this spread 2026-10-24T03:20:25.9927713Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T03:20:25.9927906Z ╰──── 2026-10-24T03:20:25.9928122Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T03:20:25.9928447Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T03:20:25.9928616Z 2026-10-24T03:20:25.9928844Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:20:25.9929200Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T03:20:25.9951510Z 113 │ const declared = { 2026-10-24T03:20:25.9951822Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T03:20:25.9952259Z ·  ──────────────────────────────── 2026-10-24T03:20:25.9952668Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T03:20:25.9952935Z ╰──── 2026-10-24T03:20:25.9953457Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T03:20:25.9953869Z 2026-10-24T03:20:25.9954244Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:20:25.9954791Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T03:20:25.9955152Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T03:20:25.9955478Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T03:20:25.9955862Z ·  ──────────────────────────────────────── 2026-10-24T03:20:25.9956211Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T03:20:25.9956469Z ╰──── 2026-10-24T03:20:25.9957016Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T03:20:25.9957462Z 2026-10-24T03:20:25.9957844Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:20:25.9958448Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T03:20:25.9958853Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T03:20:25.9959192Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T03:20:25.9959550Z ·  ──────────────────────────────────── 2026-10-24T03:20:25.9959840Z 117 │ }; 2026-10-24T03:20:25.9960245Z ╰──── 2026-10-24T03:20:25.9960819Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T03:20:25.9961228Z 2026-10-24T03:20:25.9961505Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:20:25.9962028Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T03:20:25.9962369Z 465 │ 2026-10-24T03:20:25.9962790Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T03:20:25.9963124Z ·  ── 2026-10-24T03:20:25.9963356Z 467 │ } 2026-10-24T03:20:25.9963541Z ╰──── 2026-10-24T03:20:25.9964020Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:20:25.9964336Z 2026-10-24T03:20:25.9964645Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:25.9965093Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T03:20:25.9965317Z 14 │ 2026-10-24T03:20:25.9965457Z 15 │ const legacyCredentials = { 2026-10-24T03:20:25.9965652Z ·  ────────┬──────── 2026-10-24T03:20:25.9965915Z · ╰── 'legacyCredentials' is declared here 2026-10-24T03:20:25.9966148Z 16 │ version: 1 as const, 2026-10-24T03:20:25.9966291Z ╰──── 2026-10-24T03:20:25.9966465Z  help: Consider removing this declaration. 2026-10-24T03:20:25.9966586Z 2026-10-24T03:20:25.9966945Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:25.9967393Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T03:20:25.9967696Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T03:20:25.9967997Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T03:20:25.9968221Z ·  ───────── 2026-10-24T03:20:25.9968387Z 19 │ expect( 2026-10-24T03:20:25.9968517Z ╰──── 2026-10-24T03:20:25.9968577Z 2026-10-24T03:20:25.9968921Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:25.9969355Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T03:20:25.9969556Z 19 │ expect( 2026-10-24T03:20:25.9969814Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T03:20:25.9970070Z ·  ───────── 2026-10-24T03:20:25.9970237Z 21 │ ).toBe(true); 2026-10-24T03:20:25.9970372Z ╰──── 2026-10-24T03:20:25.9970432Z 2026-10-24T03:20:25.9970816Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:25.9971287Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T03:20:25.9971580Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T03:20:25.9971923Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T03:20:25.9972323Z ·  ────────────────────────── 2026-10-24T03:20:25.9972679Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T03:20:25.9972900Z ╰──── 2026-10-24T03:20:25.9972958Z 2026-10-24T03:20:25.9973439Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:25.9974010Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T03:20:25.9974205Z 499 │ 2026-10-24T03:20:25.9974397Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T03:20:25.9974664Z ·  ────────────────────────── 2026-10-24T03:20:25.9974912Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T03:20:25.9975104Z ╰──── 2026-10-24T03:20:25.9975171Z 2026-10-24T03:20:25.9975353Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:25.9975670Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T03:20:25.9975964Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T03:20:25.9976261Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T03:20:25.9976555Z ·  ─────┬──── 2026-10-24T03:20:25.9976871Z · ╰── Cannot call impure function 2026-10-24T03:20:25.9977150Z 141 │ onSelect={(selected) => { 2026-10-24T03:20:25.9977323Z ╰──── 2026-10-24T03:20:25.9977679Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:25.9978283Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:25.9978580Z 2026-10-24T03:20:25.9979519Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:25.9980074Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T03:20:25.9980317Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T03:20:25.9980551Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T03:20:25.9980818Z ·  ────────────────────────── 2026-10-24T03:20:25.9981023Z 130 │ Schema.Struct({ 2026-10-24T03:20:25.9981166Z ╰──── 2026-10-24T03:20:25.9981230Z 2026-10-24T03:20:25.9981501Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:25.9981946Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T03:20:25.9982200Z 117 │ 2026-10-24T03:20:25.9982333Z 118 │ useEffect(() => { 2026-10-24T03:20:25.9982529Z ·  ────┬──── 2026-10-24T03:20:25.9982763Z · ╰── This is the containing effect 2026-10-24T03:20:25.9982995Z 119 │ void refreshNotifications(); 2026-10-24T03:20:25.9983299Z ·  ──────────┬───────── 2026-10-24T03:20:25.9983641Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:25.9983972Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T03:20:25.9984190Z ╰──── 2026-10-24T03:20:25.9984867Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:25.9985748Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:25.9986064Z 2026-10-24T03:20:25.9986332Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:25.9986784Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T03:20:25.9987036Z 125 │ 2026-10-24T03:20:25.9987172Z 126 │ useEffect(() => { 2026-10-24T03:20:25.9987338Z ·  ────┬──── 2026-10-24T03:20:25.9987572Z · ╰── This is the containing effect 2026-10-24T03:20:25.9987783Z 127 │ if (!isLoaded) { 2026-10-24T03:20:25.9987968Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T03:20:25.9988175Z ·  ──────────┬────────── 2026-10-24T03:20:25.9988459Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:25.9988707Z 129 │ return; 2026-10-24T03:20:25.9988849Z ╰──── 2026-10-24T03:20:25.9989526Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:25.9990400Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:25.9990712Z 2026-10-24T03:20:25.9990958Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T03:20:25.9991336Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T03:20:25.9991624Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T03:20:25.9992023Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T03:20:25.9992384Z 986 │ │ (approval) => approval.requestId, 2026-10-24T03:20:25.9992699Z 987 │ ╰─▶ ); 2026-10-24T03:20:25.9992989Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T03:20:25.9993201Z ╰──── 2026-10-24T03:20:25.9993349Z  help: Switch to `Set` 2026-10-24T03:20:25.9993455Z 2026-10-24T03:20:25.9993839Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:25.9994395Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T03:20:25.9994636Z 145 │ name, 2026-10-24T03:20:25.9994860Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T03:20:25.9995132Z ·  ────────────────────────── 2026-10-24T03:20:25.9995384Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T03:20:25.9995577Z ╰──── 2026-10-24T03:20:25.9995635Z 2026-10-24T03:20:25.9995870Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T03:20:25.9996236Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T03:20:25.9996457Z 1021 │ instanceId, 2026-10-24T03:20:25.9996699Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T03:20:25.9997021Z ·  ────────────────────────────────────────────────── 2026-10-24T03:20:25.9997237Z 1023 │ ]), 2026-10-24T03:20:25.9997377Z ╰──── 2026-10-24T03:20:25.9997714Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T03:20:25.9997979Z 2026-10-24T03:20:25.9998460Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:25.9999008Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T03:20:25.9999228Z 138 │ Effect.gen(function* () { 2026-10-24T03:20:25.9999537Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T03:20:25.9999863Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T03:20:26.0000335Z 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-24T03:20:26.0000837Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T03:20:26.0001164Z 143 │ ╰─▶ } 2026-10-24T03:20:26.0001398Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T03:20:26.0001571Z ╰──── 2026-10-24T03:20:26.0001633Z 2026-10-24T03:20:26.0001927Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0002423Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T03:20:26.0002698Z 12365 │ 2026-10-24T03:20:26.0002909Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T03:20:26.0003161Z ·  ────────┬─────── 2026-10-24T03:20:26.0003419Z · ╰── 'layerUnavailable' is declared here 2026-10-24T03:20:26.0003643Z 12367 │ OrchestratorV2, 2026-10-24T03:20:26.0003787Z ╰──── 2026-10-24T03:20:26.0003956Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0004081Z 2026-10-24T03:20:26.0004320Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T03:20:26.0004677Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T03:20:26.0005012Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T03:20:26.0005303Z 35 │ instanceId === configured ? true : false, 2026-10-24T03:20:26.0005545Z ·  ──────────────────────────────────────── 2026-10-24T03:20:26.0005727Z 36 │ ); 2026-10-24T03:20:26.0005851Z ╰──── 2026-10-24T03:20:26.0006007Z  help: Remove this ternary operator 2026-10-24T03:20:26.0006122Z 2026-10-24T03:20:26.0006390Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0006807Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T03:20:26.0007039Z 412 │ 2026-10-24T03:20:26.0007232Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T03:20:26.0007455Z ·  ──┬── 2026-10-24T03:20:26.0007681Z · ╰── 'layer' is declared here 2026-10-24T03:20:26.0007870Z ╰──── 2026-10-24T03:20:26.0008038Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0008159Z 2026-10-24T03:20:26.0008432Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0008833Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T03:20:26.0009034Z 913 │ 2026-10-24T03:20:26.0009291Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T03:20:26.0009567Z ·  ─────┬───── 2026-10-24T03:20:26.0009813Z · ╰── 'layerDaemon' is declared here 2026-10-24T03:20:26.0010049Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T03:20:26.0010215Z ╰──── 2026-10-24T03:20:26.0010377Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0010498Z 2026-10-24T03:20:26.0010772Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0011141Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T03:20:26.0011323Z 35 │ 2026-10-24T03:20:26.0011519Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T03:20:26.0011744Z ·  ─────┬──── 2026-10-24T03:20:26.0011980Z · ╰── 'claudeCaps' is declared here 2026-10-24T03:20:26.0012196Z 37 │ optionDescriptors: [ 2026-10-24T03:20:26.0012342Z ╰──── 2026-10-24T03:20:26.0012627Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0012780Z 2026-10-24T03:20:26.0012932Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0013252Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T03:20:26.0013482Z 276 │ 2026-10-24T03:20:26.0013736Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T03:20:26.0014017Z 278 │ │ ...nativeProps, 2026-10-24T03:20:26.0014280Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T03:20:26.0014536Z 280 │ │ ref: nativeRef, 2026-10-24T03:20:26.0014779Z 281 │ ├─▶ }); 2026-10-24T03:20:26.0015169Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0015455Z 282 │ } 2026-10-24T03:20:26.0015576Z ╰──── 2026-10-24T03:20:26.0016115Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0016849Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0017131Z 2026-10-24T03:20:26.0017306Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T03:20:26.0017688Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T03:20:26.0018034Z 219 │ 2026-10-24T03:20:26.0018336Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T03:20:26.0018599Z ·  ──┬─ 2026-10-24T03:20:26.0019015Z · ╰── 'U+001B' is a control character. 2026-10-24T03:20:26.0019243Z 221 │ 2026-10-24T03:20:26.0019381Z ╰──── 2026-10-24T03:20:26.0019678Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T03:20:26.0019912Z 2026-10-24T03:20:26.0020107Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:20:26.0020461Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T03:20:26.0020739Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T03:20:26.0021051Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T03:20:26.0021390Z ·  ─────┬───── 2026-10-24T03:20:26.0021748Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T03:20:26.0022021Z 101 │ const readEditor = useCallback( 2026-10-24T03:20:26.0022181Z ╰──── 2026-10-24T03:20:26.0022690Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0023354Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0023660Z 2026-10-24T03:20:26.0023847Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:20:26.0024197Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T03:20:26.0024432Z 120 │ setEditor, 2026-10-24T03:20:26.0024582Z 121 │ startEditor, 2026-10-24T03:20:26.0024746Z ·  ─────┬───── 2026-10-24T03:20:26.0024991Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T03:20:26.0025206Z 122 │ hasChanges, 2026-10-24T03:20:26.0025341Z ╰──── 2026-10-24T03:20:26.0025719Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0026338Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0026636Z 2026-10-24T03:20:26.0026810Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0027110Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T03:20:26.0027351Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T03:20:26.0027640Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T03:20:26.0027935Z ·  ─────┬──── 2026-10-24T03:20:26.0028241Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0028487Z 822 │ return AsyncResult.failure( 2026-10-24T03:20:26.0028644Z ╰──── 2026-10-24T03:20:26.0028986Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0029555Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0029840Z 2026-10-24T03:20:26.0030013Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0030309Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T03:20:26.0030521Z 708 │ const wokeAt = resolved 2026-10-24T03:20:26.0030759Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T03:20:26.0031026Z ·  ─────┬──── 2026-10-24T03:20:26.0031313Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0031539Z 710 │ : null; 2026-10-24T03:20:26.0031668Z ╰──── 2026-10-24T03:20:26.0032009Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0032611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0032897Z 2026-10-24T03:20:26.0033343Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0033850Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T03:20:26.0034175Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T03:20:26.0034520Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T03:20:26.0034792Z ·  ───────── 2026-10-24T03:20:26.0035079Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T03:20:26.0035322Z ╰──── 2026-10-24T03:20:26.0035382Z 2026-10-24T03:20:26.0035729Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0036192Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T03:20:26.0036518Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T03:20:26.0036880Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T03:20:26.0037154Z ·  ───────── 2026-10-24T03:20:26.0037314Z 52 │ } 2026-10-24T03:20:26.0037430Z ╰──── 2026-10-24T03:20:26.0037489Z 2026-10-24T03:20:26.0037828Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0038282Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T03:20:26.0038510Z 54 │ assert.equal( 2026-10-24T03:20:26.0038767Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T03:20:26.0039104Z ·  ───────── 2026-10-24T03:20:26.0039252Z 56 │ true, 2026-10-24T03:20:26.0039377Z ╰──── 2026-10-24T03:20:26.0039432Z 2026-10-24T03:20:26.0039772Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0040227Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T03:20:26.0040446Z 58 │ assert.equal( 2026-10-24T03:20:26.0040713Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T03:20:26.0040974Z ·  ───────── 2026-10-24T03:20:26.0041126Z 60 │ true, 2026-10-24T03:20:26.0041253Z ╰──── 2026-10-24T03:20:26.0041311Z 2026-10-24T03:20:26.0041647Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0042112Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T03:20:26.0042327Z 102 │ 2026-10-24T03:20:26.0042589Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T03:20:26.0042856Z ·  ───────── 2026-10-24T03:20:26.0043016Z 104 │ }); 2026-10-24T03:20:26.0043134Z ╰──── 2026-10-24T03:20:26.0043194Z 2026-10-24T03:20:26.0043459Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T03:20:26.0043972Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T03:20:26.0044252Z 959 │ 2026-10-24T03:20:26.0044424Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T03:20:26.0044676Z ·  ──────────────────┬───────────────── 2026-10-24T03:20:26.0045007Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T03:20:26.0045306Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T03:20:26.0045487Z ╰──── 2026-10-24T03:20:26.0045652Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0045776Z 2026-10-24T03:20:26.0046007Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T03:20:26.0046412Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T03:20:26.0046666Z 1997 │ assert.equal( 2026-10-24T03:20:26.0046908Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T03:20:26.0047152Z ·  ────── 2026-10-24T03:20:26.0047332Z 1999 │ "authoritative answer", 2026-10-24T03:20:26.0047488Z ╰──── 2026-10-24T03:20:26.0047723Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T03:20:26.0047903Z 2026-10-24T03:20:26.0048389Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0049002Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T03:20:26.0049371Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T03:20:26.0049775Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T03:20:26.0050092Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0050356Z 3953 │ ╰─▶ } 2026-10-24T03:20:26.0050626Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T03:20:26.0050816Z ╰──── 2026-10-24T03:20:26.0050877Z 2026-10-24T03:20:26.0051434Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0052062Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T03:20:26.0052331Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T03:20:26.0052660Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T03:20:26.0052958Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0053225Z 6064 │ ╰─▶ } 2026-10-24T03:20:26.0053546Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T03:20:26.0053779Z ╰──── 2026-10-24T03:20:26.0053839Z 2026-10-24T03:20:26.0054322Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0054918Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T03:20:26.0055186Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T03:20:26.0055483Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T03:20:26.0055780Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0056044Z 6199 │ ╰─▶ } 2026-10-24T03:20:26.0056356Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T03:20:26.0056583Z ╰──── 2026-10-24T03:20:26.0056643Z 2026-10-24T03:20:26.0056920Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0057345Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T03:20:26.0057577Z 10577 │ 2026-10-24T03:20:26.0057716Z 10578 │ const layer: Layer.Layer< 2026-10-24T03:20:26.0057884Z ·  ──┬── 2026-10-24T03:20:26.0058112Z · ╰── 'layer' is declared here 2026-10-24T03:20:26.0058344Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T03:20:26.0058517Z ╰──── 2026-10-24T03:20:26.0058810Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0058937Z 2026-10-24T03:20:26.0059288Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0059770Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T03:20:26.0059997Z 1443 │ 2026-10-24T03:20:26.0060179Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T03:20:26.0060439Z ·  ───────────────────┬─────────────────── 2026-10-24T03:20:26.0060776Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T03:20:26.0061105Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T03:20:26.0061296Z ╰──── 2026-10-24T03:20:26.0061462Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0061582Z 2026-10-24T03:20:26.0061949Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0062407Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T03:20:26.0062662Z 1679 │ 2026-10-24T03:20:26.0062801Z 1680 │ const layer: Layer.Layer< 2026-10-24T03:20:26.0062965Z ·  ──┬── 2026-10-24T03:20:26.0063181Z · ╰── 'layer' is declared here 2026-10-24T03:20:26.0063416Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T03:20:26.0063581Z ╰──── 2026-10-24T03:20:26.0063747Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0063868Z 2026-10-24T03:20:26.0064077Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0064434Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T03:20:26.0064698Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T03:20:26.0064904Z 257 │ }, [props.path, targetIndex]); 2026-10-24T03:20:26.0065085Z ·  ─────┬──── 2026-10-24T03:20:26.0065333Z · ╰── Unnecessary dependency `props.path` 2026-10-24T03:20:26.0065540Z 258 │ 2026-10-24T03:20:26.0065654Z ╰──── 2026-10-24T03:20:26.0066016Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0066622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0066928Z 2026-10-24T03:20:26.0067131Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0067486Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T03:20:26.0067725Z 292 │ 2026-10-24T03:20:26.0070045Z ·  ─────────── 2026-10-24T03:20:26.0070224Z 310 │ {body} 2026-10-24T03:20:26.0070365Z ╰──── 2026-10-24T03:20:26.0070569Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T03:20:26.0070727Z 2026-10-24T03:20:26.0070960Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T03:20:26.0071329Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T03:20:26.0071545Z 227 │ ): string { 2026-10-24T03:20:26.0071779Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T03:20:26.0072058Z ·  ────── 2026-10-24T03:20:26.0072413Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T03:20:26.0072679Z ╰──── 2026-10-24T03:20:26.0072918Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T03:20:26.0073099Z 2026-10-24T03:20:26.0073307Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0073642Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T03:20:26.0073919Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T03:20:26.0074162Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T03:20:26.0074377Z ·  ───────┬────── 2026-10-24T03:20:26.0074672Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T03:20:26.0074982Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T03:20:26.0075194Z ╰──── 2026-10-24T03:20:26.0075551Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0076154Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0076453Z 2026-10-24T03:20:26.0076628Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0076934Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T03:20:26.0077166Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T03:20:26.0077446Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T03:20:26.0077736Z ·  ─────┬──── 2026-10-24T03:20:26.0078040Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0078286Z 525 │ const id = setTimeout(() => { 2026-10-24T03:20:26.0078445Z ╰──── 2026-10-24T03:20:26.0078795Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0079371Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0079655Z 2026-10-24T03:20:26.0079927Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0080328Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T03:20:26.0080537Z 150 │ 2026-10-24T03:20:26.0080670Z 151 │ useEffect(() => { 2026-10-24T03:20:26.0080830Z ·  ────┬──── 2026-10-24T03:20:26.0081056Z · ╰── This is the containing effect 2026-10-24T03:20:26.0081284Z 152 │ if (!controlledSelectedPath) { 2026-10-24T03:20:26.0081453Z 153 │ return; 2026-10-24T03:20:26.0081591Z 154 │ } 2026-10-24T03:20:26.0081743Z 155 │ setExpandedPaths((current) => { 2026-10-24T03:20:26.0081933Z ·  ────────┬─────── 2026-10-24T03:20:26.0082207Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0082628Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T03:20:26.0082858Z ╰──── 2026-10-24T03:20:26.0083530Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0084405Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0084718Z 2026-10-24T03:20:26.0085205Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0085778Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T03:20:26.0085989Z 225 │ ) { 2026-10-24T03:20:26.0086272Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0086588Z 227 │ │ const socket = sockets[index]; 2026-10-24T03:20:26.0086807Z 228 │ │ if (socket) { 2026-10-24T03:20:26.0087018Z 229 │ │ return socket; 2026-10-24T03:20:26.0087207Z 230 │ │ } 2026-10-24T03:20:26.0087414Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0087666Z 232 │ ╰─▶ } 2026-10-24T03:20:26.0087991Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T03:20:26.0088233Z ╰──── 2026-10-24T03:20:26.0088293Z 2026-10-24T03:20:26.0088769Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0089336Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T03:20:26.0089546Z 239 │ ) { 2026-10-24T03:20:26.0089824Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0090242Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T03:20:26.0090557Z 242 │ │ if (request) { 2026-10-24T03:20:26.0090775Z 243 │ │ return request; 2026-10-24T03:20:26.0090967Z 244 │ │ } 2026-10-24T03:20:26.0091168Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0091423Z 246 │ ╰─▶ } 2026-10-24T03:20:26.0091729Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T03:20:26.0091965Z ╰──── 2026-10-24T03:20:26.0092026Z 2026-10-24T03:20:26.0092529Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0093167Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T03:20:26.0093407Z 130 │ ) { 2026-10-24T03:20:26.0093702Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0094029Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T03:20:26.0094269Z 133 │ │ return; 2026-10-24T03:20:26.0094463Z 134 │ │ } 2026-10-24T03:20:26.0094680Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0094944Z 136 │ ╰─▶ } 2026-10-24T03:20:26.0095259Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T03:20:26.0095488Z ╰──── 2026-10-24T03:20:26.0095550Z 2026-10-24T03:20:26.0096033Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0096598Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T03:20:26.0096914Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T03:20:26.0097347Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T03:20:26.0097696Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0097955Z 254 │ ╰─▶ } 2026-10-24T03:20:26.0098225Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T03:20:26.0098415Z ╰──── 2026-10-24T03:20:26.0098473Z 2026-10-24T03:20:26.0099217Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0100089Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T03:20:26.0100408Z 257 │ 2026-10-24T03:20:26.0100755Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T03:20:26.0101096Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0101354Z 260 │ ╰─▶ } 2026-10-24T03:20:26.0101703Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T03:20:26.0101921Z ╰──── 2026-10-24T03:20:26.0101980Z 2026-10-24T03:20:26.0102452Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0103042Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T03:20:26.0103250Z 321 │ ); 2026-10-24T03:20:26.0103585Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T03:20:26.0103932Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0104192Z 324 │ ╰─▶ } 2026-10-24T03:20:26.0104392Z 325 │ 2026-10-24T03:20:26.0104508Z ╰──── 2026-10-24T03:20:26.0104567Z 2026-10-24T03:20:26.0105035Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0105587Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T03:20:26.0105902Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T03:20:26.0106327Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T03:20:26.0106665Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0106920Z 332 │ ╰─▶ } 2026-10-24T03:20:26.0107168Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T03:20:26.0107341Z ╰──── 2026-10-24T03:20:26.0107399Z 2026-10-24T03:20:26.0107611Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T03:20:26.0107985Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T03:20:26.0108245Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T03:20:26.0108475Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T03:20:26.0108693Z ·  ─────┬───── 2026-10-24T03:20:26.0108939Z · ╰── 'HostProcess' is imported here 2026-10-24T03:20:26.0109139Z 26 │ 2026-10-24T03:20:26.0109260Z ╰──── 2026-10-24T03:20:26.0109417Z  help: Consider removing this import. 2026-10-24T03:20:26.0109535Z 2026-10-24T03:20:26.0109817Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0110248Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T03:20:26.0110506Z 123 │ const path = yield* Path.Path; 2026-10-24T03:20:26.0110730Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T03:20:26.0110949Z ·  ──────┬───── 2026-10-24T03:20:26.0111191Z · ╰── 'serverConfig' is declared here 2026-10-24T03:20:26.0111485Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T03:20:26.0111695Z ╰──── 2026-10-24T03:20:26.0111938Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0112088Z 2026-10-24T03:20:26.0112368Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0112832Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T03:20:26.0113124Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T03:20:26.0113396Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T03:20:26.0113644Z ·  ───────┬────── 2026-10-24T03:20:26.0113890Z · ╰── 'serverSettings' is declared here 2026-10-24T03:20:26.0114257Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T03:20:26.0114468Z ╰──── 2026-10-24T03:20:26.0114635Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0114758Z 2026-10-24T03:20:26.0114905Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0115220Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T03:20:26.0115440Z 493 │ > 2026-10-24T03:20:26.0115594Z 494 │ {props.children(close)} 2026-10-24T03:20:26.0115787Z ·  ──┬── 2026-10-24T03:20:26.0116060Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0116297Z 495 │ 2026-10-24T03:20:26.0116448Z ╰──── 2026-10-24T03:20:26.0116990Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0117723Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0118005Z 2026-10-24T03:20:26.0118272Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0118702Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T03:20:26.0118934Z 118 │ 2026-10-24T03:20:26.0119065Z 119 │ useEffect(() => { 2026-10-24T03:20:26.0119225Z ·  ────┬──── 2026-10-24T03:20:26.0119453Z · ╰── This is the containing effect 2026-10-24T03:20:26.0119682Z 120 │ if (orientationSettled) return; 2026-10-24T03:20:26.0119901Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T03:20:26.0120111Z 122 │ if (orientation === null) { 2026-10-24T03:20:26.0120289Z 123 │ setOrientationSettled(true); 2026-10-24T03:20:26.0120485Z ·  ──────────┬────────── 2026-10-24T03:20:26.0120763Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0120998Z 124 │ return; 2026-10-24T03:20:26.0121125Z ╰──── 2026-10-24T03:20:26.0121879Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0122802Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0123112Z 2026-10-24T03:20:26.0123373Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0123792Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T03:20:26.0124027Z 292 │ 2026-10-24T03:20:26.0124155Z 293 │ useEffect(() => { 2026-10-24T03:20:26.0124316Z ·  ────┬──── 2026-10-24T03:20:26.0124537Z · ╰── This is the containing effect 2026-10-24T03:20:26.0124737Z 294 │ if ( 2026-10-24T03:20:26.0124877Z 295 │ scene === null || 2026-10-24T03:20:26.0125042Z 296 │ requestedScene === null || 2026-10-24T03:20:26.0125221Z 297 │ scene !== requestedScene || 2026-10-24T03:20:26.0125387Z 298 │ !hasFixture || 2026-10-24T03:20:26.0125548Z 299 │ !orientationSettled || 2026-10-24T03:20:26.0125711Z 300 │ !themeApplied || 2026-10-24T03:20:26.0125919Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T03:20:26.0126192Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T03:20:26.0126400Z 303 │ ) { 2026-10-24T03:20:26.0126537Z 304 │ setReadyScene(null); 2026-10-24T03:20:26.0126710Z ·  ──────┬────── 2026-10-24T03:20:26.0126979Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0127209Z 305 │ return; 2026-10-24T03:20:26.0127343Z ╰──── 2026-10-24T03:20:26.0128010Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0128874Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0129185Z 2026-10-24T03:20:26.0129463Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0129896Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T03:20:26.0130148Z 127 │ let cancelled = false; 2026-10-24T03:20:26.0130335Z 128 │ let lastOutcome: string | null = null; 2026-10-24T03:20:26.0130525Z ·  ─────┬───── 2026-10-24T03:20:26.0130763Z · ╰── 'lastOutcome' is declared here 2026-10-24T03:20:26.0131089Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T03:20:26.0131330Z ╰──── 2026-10-24T03:20:26.0131495Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0131618Z 2026-10-24T03:20:26.0131832Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T03:20:26.0132189Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T03:20:26.0132405Z 233 │ 2026-10-24T03:20:26.0132691Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T03:20:26.0132946Z ·  ───────┬────── 2026-10-24T03:20:26.0133193Z · ╰── 'nonEmptyString' is declared here 2026-10-24T03:20:26.0133493Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T03:20:26.0133702Z ╰──── 2026-10-24T03:20:26.0141222Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0141368Z 2026-10-24T03:20:26.0141556Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0141884Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T03:20:26.0142152Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T03:20:26.0142359Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T03:20:26.0142593Z ·  ──────┬────── 2026-10-24T03:20:26.0142838Z · ╰── `pulseProgress` originates here 2026-10-24T03:20:26.0143037Z 55 │ 2026-10-24T03:20:26.0143161Z 56 │ useEffect(() => { 2026-10-24T03:20:26.0143308Z 57 │ if (pulse) { 2026-10-24T03:20:26.0143471Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T03:20:26.0143658Z ·  ──────┬────── 2026-10-24T03:20:26.0143898Z · ╰── `pulseProgress` cannot be modified 2026-10-24T03:20:26.0144109Z 59 │ withTiming(1, { 2026-10-24T03:20:26.0144247Z ╰──── 2026-10-24T03:20:26.0144572Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0145153Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0145452Z 2026-10-24T03:20:26.0145706Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T03:20:26.0146062Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T03:20:26.0146246Z 55 │ 2026-10-24T03:20:26.0146407Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T03:20:26.0146640Z ·  ────────────────┬──────────────── 2026-10-24T03:20:26.0146959Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T03:20:26.0147237Z 57 │ selection: TerminalContextSelection, 2026-10-24T03:20:26.0147399Z ╰──── 2026-10-24T03:20:26.0147562Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0147693Z 2026-10-24T03:20:26.0147887Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T03:20:26.0148192Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T03:20:26.0148458Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T03:20:26.0148690Z 194 │ const codes = new Array(count); 2026-10-24T03:20:26.0148917Z ·  ──────────────────────── 2026-10-24T03:20:26.0149142Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T03:20:26.0149320Z ╰──── 2026-10-24T03:20:26.0149809Z  help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`. 2026-10-24T03:20:26.0150323Z 2026-10-24T03:20:26.0150642Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0151073Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T03:20:26.0151311Z 76 │ 2026-10-24T03:20:26.0151439Z 77 │ useEffect(() => { 2026-10-24T03:20:26.0151596Z ·  ────┬──── 2026-10-24T03:20:26.0151822Z · ╰── This is the containing effect 2026-10-24T03:20:26.0152096Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T03:20:26.0152312Z 79 │ setHostInput(host); 2026-10-24T03:20:26.0152512Z ·  ──────┬───── 2026-10-24T03:20:26.0152784Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0153032Z 80 │ setCodeInput(code); 2026-10-24T03:20:26.0153177Z ╰──── 2026-10-24T03:20:26.0153851Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0154736Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0155051Z 2026-10-24T03:20:26.0155314Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0155747Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T03:20:26.0155982Z 82 │ 2026-10-24T03:20:26.0156111Z 83 │ useEffect(() => { 2026-10-24T03:20:26.0156267Z ·  ────┬──── 2026-10-24T03:20:26.0156490Z · ╰── This is the containing effect 2026-10-24T03:20:26.0156720Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T03:20:26.0156893Z 85 │ return; 2026-10-24T03:20:26.0157024Z 86 │ } 2026-10-24T03:20:26.0157141Z 87 │ 2026-10-24T03:20:26.0157322Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T03:20:26.0157396Z 89 │ setHostInput(host); 2026-10-24T03:20:26.0157474Z ·  ──────┬───── 2026-10-24T03:20:26.0157653Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0157724Z 90 │ setCodeInput(code); 2026-10-24T03:20:26.0157857Z ╰──── 2026-10-24T03:20:26.0158494Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0158826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0158829Z 2026-10-24T03:20:26.0159095Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0159271Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T03:20:26.0159332Z 92 │ 2026-10-24T03:20:26.0159399Z 93 │ useEffect(() => { 2026-10-24T03:20:26.0159474Z ·  ────┬──── 2026-10-24T03:20:26.0159608Z · ╰── This is the containing effect 2026-10-24T03:20:26.0159692Z 94 │ if (pairingConnectionError) { 2026-10-24T03:20:26.0159765Z 95 │ setIsSubmitting(false); 2026-10-24T03:20:26.0159851Z ·  ───────┬─────── 2026-10-24T03:20:26.0160028Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0160087Z 96 │ } 2026-10-24T03:20:26.0160140Z ╰──── 2026-10-24T03:20:26.0160753Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0161082Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0161085Z 2026-10-24T03:20:26.0161304Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:20:26.0161445Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T03:20:26.0161521Z 89 │ let cursor = prompt.length; 2026-10-24T03:20:26.0161631Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T03:20:26.0161744Z ·  ─────── 2026-10-24T03:20:26.0161828Z 91 │ let { start, end } = occurrence; 2026-10-24T03:20:26.0161881Z ╰──── 2026-10-24T03:20:26.0162155Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:20:26.0162160Z 2026-10-24T03:20:26.0162353Z ⚠ react(static-components): Cannot create components during render 2026-10-24T03:20:26.0162550Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T03:20:26.0162639Z 196 │ const { onInput, onResize } = props; 2026-10-24T03:20:26.0162793Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T03:20:26.0162933Z ·  ────────────────┬─────────────── 2026-10-24T03:20:26.0163130Z · ╰── The component is created during render here 2026-10-24T03:20:26.0163348Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T03:20:26.0163437Z 199 │ 2026-10-24T03:20:26.0163507Z 200 │ useEffect(() => { 2026-10-24T03:20:26.0163601Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T03:20:26.0163688Z 202 │ terminalKey: props.terminalKey, 2026-10-24T03:20:26.0163770Z 203 │ native: hasNativeSurface, 2026-10-24T03:20:26.0163910Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T03:20:26.0164000Z 205 │ bufferLen: props.buffer.length, 2026-10-24T03:20:26.0164080Z 206 │ isRunning: props.isRunning, 2026-10-24T03:20:26.0164141Z 207 │ }); 2026-10-24T03:20:26.0164307Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T03:20:26.0164400Z 209 │ const handleNativeInput = useCallback( 2026-10-24T03:20:26.0164523Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T03:20:26.0164629Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T03:20:26.0164695Z 212 │ return; 2026-10-24T03:20:26.0164755Z 213 │ } 2026-10-24T03:20:26.0164847Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T03:20:26.0165003Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T03:20:26.0165065Z 216 │ }); 2026-10-24T03:20:26.0165156Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T03:20:26.0165213Z 218 │ }, 2026-10-24T03:20:26.0165317Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T03:20:26.0165375Z 220 │ ); 2026-10-24T03:20:26.0165469Z 221 │ const handleNativeResize = useCallback( 2026-10-24T03:20:26.0165586Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T03:20:26.0165660Z 223 │ onResize({ 2026-10-24T03:20:26.0165751Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T03:20:26.0165834Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T03:20:26.0165895Z 226 │ }); 2026-10-24T03:20:26.0165953Z 227 │ }, 2026-10-24T03:20:26.0166019Z 228 │ [onResize], 2026-10-24T03:20:26.0166073Z 229 │ ); 2026-10-24T03:20:26.0166130Z 230 │ 2026-10-24T03:20:26.0166218Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T03:20:26.0166281Z 232 │ return ( 2026-10-24T03:20:26.0166359Z 233 │ 2026-10-24T03:20:26.0166444Z 234 │ { 2026-10-24T03:20:26.0168109Z ·  ────┬──── 2026-10-24T03:20:26.0168329Z · ╰── This is the containing effect 2026-10-24T03:20:26.0168475Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T03:20:26.0168540Z 641 │ return; 2026-10-24T03:20:26.0168596Z 642 │ } 2026-10-24T03:20:26.0168675Z 643 │ setPendingLaunchEntry({ 2026-10-24T03:20:26.0168768Z ·  ──────────┬────────── 2026-10-24T03:20:26.0168945Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0169017Z 644 │ key: launchTargetKey, 2026-10-24T03:20:26.0169073Z ╰──── 2026-10-24T03:20:26.0169689Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0170020Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0170022Z 2026-10-24T03:20:26.0170284Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0170457Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T03:20:26.0170515Z 648 │ 2026-10-24T03:20:26.0170584Z 649 │ useEffect(() => { 2026-10-24T03:20:26.0170659Z ·  ────┬──── 2026-10-24T03:20:26.0170793Z · ╰── This is the containing effect 2026-10-24T03:20:26.0170918Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T03:20:26.0170985Z 651 │ return; 2026-10-24T03:20:26.0171044Z 652 │ } 2026-10-24T03:20:26.0171126Z 653 │ setInitialAttachGridEntry({ 2026-10-24T03:20:26.0171225Z ·  ────────────┬──────────── 2026-10-24T03:20:26.0171405Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0171480Z 654 │ key: launchTargetKey, 2026-10-24T03:20:26.0171533Z ╰──── 2026-10-24T03:20:26.0172139Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0172499Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0172505Z 2026-10-24T03:20:26.0172767Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0172942Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T03:20:26.0172995Z 743 │ 2026-10-24T03:20:26.0173064Z 744 │ useEffect(() => { 2026-10-24T03:20:26.0173139Z ·  ────┬──── 2026-10-24T03:20:26.0173273Z · ╰── This is the containing effect 2026-10-24T03:20:26.0173377Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T03:20:26.0173450Z 746 │ setLastGridSize({ 2026-10-24T03:20:26.0173603Z ·  ───────┬─────── 2026-10-24T03:20:26.0173816Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0173899Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T03:20:26.0173956Z ╰──── 2026-10-24T03:20:26.0174567Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0174894Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0174897Z 2026-10-24T03:20:26.0175110Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0175287Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T03:20:26.0175348Z 537 │ }); 2026-10-24T03:20:26.0175481Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T03:20:26.0175597Z ·  ───────────┬────────── 2026-10-24T03:20:26.0175848Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T03:20:26.0176016Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T03:20:26.0176072Z ╰──── 2026-10-24T03:20:26.0176380Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0176700Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0176706Z 2026-10-24T03:20:26.0176908Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0177082Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T03:20:26.0177182Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T03:20:26.0177253Z 709 │ }, [terminalKey]); 2026-10-24T03:20:26.0177332Z ·  ─────┬───── 2026-10-24T03:20:26.0177482Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T03:20:26.0177540Z 710 │ 2026-10-24T03:20:26.0177591Z ╰──── 2026-10-24T03:20:26.0177896Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0178216Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0178219Z 2026-10-24T03:20:26.0178424Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0178598Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T03:20:26.0178770Z 799 │ }; 2026-10-24T03:20:26.0178974Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T03:20:26.0179250Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T03:20:26.0179534Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T03:20:26.0179751Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T03:20:26.0179805Z 801 │ 2026-10-24T03:20:26.0179858Z ╰──── 2026-10-24T03:20:26.0180155Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0180473Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0180476Z 2026-10-24T03:20:26.0180629Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0180806Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T03:20:26.0180863Z 792 │ } 2026-10-24T03:20:26.0180973Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T03:20:26.0181091Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0181260Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0181316Z 794 │ 2026-10-24T03:20:26.0181371Z ╰──── 2026-10-24T03:20:26.0181850Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0182153Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0182155Z 2026-10-24T03:20:26.0182365Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T03:20:26.0182568Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T03:20:26.0182645Z 14 │ } from "@t3tools/contracts"; 2026-10-24T03:20:26.0182737Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T03:20:26.0182813Z ·  ── 2026-10-24T03:20:26.0182999Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T03:20:26.0183054Z ╰──── 2026-10-24T03:20:26.0183139Z  help: Remove empty braces 2026-10-24T03:20:26.0183211Z 2026-10-24T03:20:26.0183499Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0183664Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T03:20:26.0183838Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T03:20:26.0183909Z 113 │ useEffect(() => { 2026-10-24T03:20:26.0183985Z ·  ────┬──── 2026-10-24T03:20:26.0184120Z · ╰── This is the containing effect 2026-10-24T03:20:26.0184290Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T03:20:26.0184356Z 115 │ return; 2026-10-24T03:20:26.0184412Z 116 │ } 2026-10-24T03:20:26.0184541Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T03:20:26.0184619Z ·  ────┬─── 2026-10-24T03:20:26.0184793Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0184917Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T03:20:26.0184972Z ╰──── 2026-10-24T03:20:26.0185577Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0185904Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0185912Z 2026-10-24T03:20:26.0186115Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0186276Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T03:20:26.0186346Z 71 │ rest), 2026-10-24T03:20:26.0189643Z ·  ┬ 2026-10-24T03:20:26.0189820Z · ╰── '_' is declared here 2026-10-24T03:20:26.0189884Z 556 │ [ 2026-10-24T03:20:26.0189940Z ╰──── 2026-10-24T03:20:26.0190049Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0190052Z 2026-10-24T03:20:26.0190239Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0190416Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T03:20:26.0190500Z 1154 │ assert.deepStrictEqual( 2026-10-24T03:20:26.0190667Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T03:20:26.0190791Z ·  ┬ 2026-10-24T03:20:26.0190966Z · ╰── '_' is declared here 2026-10-24T03:20:26.0191029Z 1156 │ [ 2026-10-24T03:20:26.0191082Z ╰──── 2026-10-24T03:20:26.0191186Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0191188Z 2026-10-24T03:20:26.0191423Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T03:20:26.0191544Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T03:20:26.0191601Z 11 │ 2026-10-24T03:20:26.0191701Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T03:20:26.0191808Z ·  ────────────┬──────────── 2026-10-24T03:20:26.0191986Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T03:20:26.0192057Z 13 │ readonly thread: { 2026-10-24T03:20:26.0192112Z ╰──── 2026-10-24T03:20:26.0192219Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0192222Z 2026-10-24T03:20:26.0192729Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0192866Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-24T03:20:26.0192966Z 2382 │ let orphanedAt: number | undefined; 2026-10-24T03:20:26.0193205Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T03:20:26.0193414Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-24T03:20:26.0193598Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T03:20:26.0193738Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T03:20:26.0193842Z 2387 │ │ flush: () => { 2026-10-24T03:20:26.0193968Z 2388 │ │ let task: (() => void) | undefined; 2026-10-24T03:20:26.0194121Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T03:20:26.0194207Z 2390 │ │ }, 2026-10-24T03:20:26.0194292Z 2391 │ │ }; 2026-10-24T03:20:26.0194364Z 2392 │ │ 2026-10-24T03:20:26.0194535Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T03:20:26.0194649Z 2394 │ │ let requestChecks = 0; 2026-10-24T03:20:26.0194783Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T03:20:26.0194897Z 2396 │ │ executionMode: "async", 2026-10-24T03:20:26.0195020Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-24T03:20:26.0195136Z 2398 │ │ shouldYield: (fiber) => { 2026-10-24T03:20:26.0195276Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-24T03:20:26.0195385Z 2400 │ │ requestChecks += 1; 2026-10-24T03:20:26.0195530Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T03:20:26.0195649Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-24T03:20:26.0195758Z 2403 │ │ return true; 2026-10-24T03:20:26.0195844Z 2404 │ │ }, 2026-10-24T03:20:26.0195924Z 2405 │ │ }; 2026-10-24T03:20:26.0195996Z 2406 │ │ 2026-10-24T03:20:26.0196121Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-24T03:20:26.0196218Z 2408 │ │ ...WINDOW, 2026-10-24T03:20:26.0196347Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T03:20:26.0196548Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T03:20:26.0196631Z 2411 │ │ }; 2026-10-24T03:20:26.0196745Z 2412 │ │ const first = yield* service 2026-10-24T03:20:26.0196857Z 2413 │ │ .readSummary(input) 2026-10-24T03:20:26.0196951Z 2414 │ │ .pipe( 2026-10-24T03:20:26.0197054Z 2415 │ │ Effect.exit, 2026-10-24T03:20:26.0197216Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T03:20:26.0197320Z 2417 │ │ Effect.forkChild, 2026-10-24T03:20:26.0197404Z 2418 │ │ ); 2026-10-24T03:20:26.0197510Z 2419 │ │ requestFiber = first; 2026-10-24T03:20:26.0197619Z 2420 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0197724Z 2421 │ │ dispatcher.flush(); 2026-10-24T03:20:26.0197797Z 2422 │ │ 2026-10-24T03:20:26.0198025Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T03:20:26.0198158Z 2424 │ │ Effect.match({ 2026-10-24T03:20:26.0198285Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-24T03:20:26.0198413Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-24T03:20:26.0198501Z 2427 │ │ }), 2026-10-24T03:20:26.0198659Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T03:20:26.0198763Z 2429 │ │ Effect.forkChild, 2026-10-24T03:20:26.0198846Z 2430 │ │ ); 2026-10-24T03:20:26.0198954Z 2431 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0199060Z 2432 │ │ dispatcher.flush(); 2026-10-24T03:20:26.0199195Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T03:20:26.0199320Z 2434 │ │ if (secondExit === undefined) { 2026-10-24T03:20:26.0199439Z 2435 │ │ second.interruptUnsafe(); 2026-10-24T03:20:26.0199553Z 2436 │ │ orphanedAt = interruptAt; 2026-10-24T03:20:26.0199642Z 2437 │ │ break; 2026-10-24T03:20:26.0199724Z 2438 │ │ } 2026-10-24T03:20:26.0199847Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T03:20:26.0200010Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T03:20:26.0200089Z 2441 │ │ } 2026-10-24T03:20:26.0200251Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T03:20:26.0200392Z 2443 │ ╰─▶ } 2026-10-24T03:20:26.0200451Z 2444 │ 2026-10-24T03:20:26.0200505Z ╰──── 2026-10-24T03:20:26.0200507Z 2026-10-24T03:20:26.0200781Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0200904Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T03:20:26.0200960Z 168 │ 2026-10-24T03:20:26.0201038Z 169 │ const layerTest = Layer.succeed( 2026-10-24T03:20:26.0201115Z ·  ────┬──── 2026-10-24T03:20:26.0201250Z · ╰── 'layerTest' is declared here 2026-10-24T03:20:26.0201318Z 170 │ UsageService, 2026-10-24T03:20:26.0201370Z ╰──── 2026-10-24T03:20:26.0201484Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0201490Z 2026-10-24T03:20:26.0201720Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T03:20:26.0201848Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T03:20:26.0201907Z 730 │ ); 2026-10-24T03:20:26.0202084Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T03:20:26.0202184Z ·  ────── 2026-10-24T03:20:26.0202302Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T03:20:26.0202355Z ╰──── 2026-10-24T03:20:26.0202561Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T03:20:26.0202564Z 2026-10-24T03:20:26.0202808Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0202988Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T03:20:26.0203104Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T03:20:26.0203272Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T03:20:26.0203399Z ·  ─────┬──── 2026-10-24T03:20:26.0203574Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0203632Z 179 │ } 2026-10-24T03:20:26.0203684Z ╰──── 2026-10-24T03:20:26.0203977Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0204287Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0204290Z 2026-10-24T03:20:26.0204461Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:20:26.0204603Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T03:20:26.0204660Z 185 │ 2026-10-24T03:20:26.0204765Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T03:20:26.0204838Z ·  ── 2026-10-24T03:20:26.0204892Z 187 │ } 2026-10-24T03:20:26.0204947Z ╰──── 2026-10-24T03:20:26.0205180Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:20:26.0205183Z 2026-10-24T03:20:26.0205361Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:20:26.0205503Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T03:20:26.0205558Z 188 │ 2026-10-24T03:20:26.0205625Z 189 │ for (const {} of [ 2026-10-24T03:20:26.0205695Z ·  ── 2026-10-24T03:20:26.0205787Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T03:20:26.0205842Z ╰──── 2026-10-24T03:20:26.0206071Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:20:26.0206074Z 2026-10-24T03:20:26.0206242Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:20:26.0206383Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T03:20:26.0206441Z 310 │ 2026-10-24T03:20:26.0206578Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T03:20:26.0206650Z ·  ── 2026-10-24T03:20:26.0206703Z 312 │ } 2026-10-24T03:20:26.0206756Z ╰──── 2026-10-24T03:20:26.0206987Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:20:26.0206990Z 2026-10-24T03:20:26.0207157Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:20:26.0207298Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T03:20:26.0207351Z 313 │ 2026-10-24T03:20:26.0207417Z 314 │ for (const {} of [ 2026-10-24T03:20:26.0207489Z ·  ── 2026-10-24T03:20:26.0207543Z 315 │ { 2026-10-24T03:20:26.0207667Z ╰──── 2026-10-24T03:20:26.0207927Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:20:26.0207930Z 2026-10-24T03:20:26.0208196Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0208322Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T03:20:26.0208375Z 727 │ 2026-10-24T03:20:26.0208459Z 728 │ const layer = layerWithOptions(); 2026-10-24T03:20:26.0208529Z ·  ──┬── 2026-10-24T03:20:26.0208659Z · ╰── 'layer' is declared here 2026-10-24T03:20:26.0208710Z ╰──── 2026-10-24T03:20:26.0208815Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0208818Z 2026-10-24T03:20:26.0209276Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:26.0209413Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T03:20:26.0209553Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T03:20:26.0209748Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T03:20:26.0209867Z ·  ─────────────────── 2026-10-24T03:20:26.0209965Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T03:20:26.0210017Z ╰──── 2026-10-24T03:20:26.0210020Z 2026-10-24T03:20:26.0210275Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T03:20:26.0210406Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T03:20:26.0210511Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T03:20:26.0210650Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T03:20:26.0210739Z ·  ─────────────── 2026-10-24T03:20:26.0210797Z 510 │ ) 2026-10-24T03:20:26.0210849Z ╰──── 2026-10-24T03:20:26.0211005Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T03:20:26.0211008Z 2026-10-24T03:20:26.0211214Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0211380Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-24T03:20:26.0211509Z 214 │ } 2026-10-24T03:20:26.0211609Z 215 │ }, [wrappedRender]); 2026-10-24T03:20:26.0211690Z ·  ──────┬────── 2026-10-24T03:20:26.0211846Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T03:20:26.0211902Z 216 │ 2026-10-24T03:20:26.0211954Z ╰──── 2026-10-24T03:20:26.0212256Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0212603Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0212606Z 2026-10-24T03:20:26.0212853Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:20:26.0213024Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-24T03:20:26.0213085Z 816 │ > 2026-10-24T03:20:26.0213203Z 817 │ 2026-10-24T03:20:26.0213325Z ·  ──────────────────── 2026-10-24T03:20:26.0213422Z 818 │ 2026-10-24T03:20:26.0214449Z 832 │ 2026-10-24T03:20:26.0214575Z ·  ──────────────────── 2026-10-24T03:20:26.0214676Z 833 │ 2026-10-24T03:20:26.0214730Z ╰──── 2026-10-24T03:20:26.0214956Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:20:26.0215095Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:20:26.0215098Z 2026-10-24T03:20:26.0215368Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0215544Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:327:7] 2026-10-24T03:20:26.0215600Z 322 │ }; 2026-10-24T03:20:26.0215670Z 323 │ useEffect(() => { 2026-10-24T03:20:26.0215742Z ·  ────┬──── 2026-10-24T03:20:26.0215874Z · ╰── This is the containing effect 2026-10-24T03:20:26.0215974Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T03:20:26.0216069Z 325 │ requestedSection.current = "overview"; 2026-10-24T03:20:26.0216238Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T03:20:26.0216312Z 327 │ setSection("overview"); 2026-10-24T03:20:26.0216393Z ·  ─────┬──── 2026-10-24T03:20:26.0216643Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0216728Z 328 │ } 2026-10-24T03:20:26.0216780Z ╰──── 2026-10-24T03:20:26.0217388Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0217715Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0217718Z 2026-10-24T03:20:26.0217929Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:20:26.0218108Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:6] 2026-10-24T03:20:26.0218210Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T03:20:26.0218308Z 325 │ requestedSection.current = "overview"; 2026-10-24T03:20:26.0218396Z ·  ────────┬─────── 2026-10-24T03:20:26.0218958Z · ╰── Missing dependency `requestedSection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0219125Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T03:20:26.0219282Z ·  ─────────┬───────── ──────┬────── 2026-10-24T03:20:26.0219798Z · │ ╰── Missing dependency `scrollOffsets`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0220259Z · ╰── Missing dependency `currentScrollOffset`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0220337Z 327 │ setSection("overview"); 2026-10-24T03:20:26.0220392Z 328 │ } 2026-10-24T03:20:26.0220488Z 329 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T03:20:26.0220605Z ·  ──────────────────┬───────────────── 2026-10-24T03:20:26.0220802Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0220896Z 330 │ const tabContent = activityContent; 2026-10-24T03:20:26.0220954Z ╰──── 2026-10-24T03:20:26.0221125Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:20:26.0221445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0221448Z 2026-10-24T03:20:26.0221657Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:20:26.0221832Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:864:6] 2026-10-24T03:20:26.0221894Z 847 │ if ( 2026-10-24T03:20:26.0222015Z 848 │ lastSelection.current.path === route.params.path && 2026-10-24T03:20:26.0222099Z ·  ──────┬────── 2026-10-24T03:20:26.0222658Z · ╰── Missing dependency `lastSelection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0222830Z 849 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T03:20:26.0222889Z 850 │ ) 2026-10-24T03:20:26.0222956Z 851 │ return; 2026-10-24T03:20:26.0223135Z 852 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T03:20:26.0223276Z 853 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T03:20:26.0223367Z 854 │ setJumpPath(route.params.path); 2026-10-24T03:20:26.0223444Z 855 │ setSelectedRowId(null); 2026-10-24T03:20:26.0223523Z 856 │ jumpStarted.current = false; 2026-10-24T03:20:26.0223681Z 857 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T03:20:26.0223781Z 858 │ if (!file || !nativeView.current) return; 2026-10-24T03:20:26.0223874Z ·  ─────┬──── 2026-10-24T03:20:26.0224319Z · ╰── Missing dependency `nativeView`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0224449Z 859 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T03:20:26.0224531Z 860 │ jumpStarted.current = true; 2026-10-24T03:20:26.0224671Z 861 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T03:20:26.0224754Z 862 │ jumpStarted.current = false; 2026-10-24T03:20:26.0224813Z 863 │ }); 2026-10-24T03:20:26.0225021Z 864 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T03:20:26.0225235Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T03:20:26.0225459Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0225576Z 865 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T03:20:26.0225632Z ╰──── 2026-10-24T03:20:26.0225803Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:20:26.0226122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0226125Z 2026-10-24T03:20:26.0226288Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0226461Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T03:20:26.0226519Z 35 │ 2026-10-24T03:20:26.0226661Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T03:20:26.0226751Z ·  ────────┬──────── 2026-10-24T03:20:26.0226902Z · ╰── `inspectorProgress` originates here 2026-10-24T03:20:26.0227000Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T03:20:26.0227139Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T03:20:26.0227192Z 39 │ 2026-10-24T03:20:26.0227276Z 40 │ const onClosed = props.onClosed; 2026-10-24T03:20:26.0227344Z 41 │ useEffect(() => { 2026-10-24T03:20:26.0227511Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T03:20:26.0227628Z ·  ────────┬──────── 2026-10-24T03:20:26.0227781Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T03:20:26.0227862Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T03:20:26.0227917Z ╰──── 2026-10-24T03:20:26.0228189Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0228503Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0228505Z 2026-10-24T03:20:26.0228665Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0228838Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T03:20:26.0228933Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T03:20:26.0229070Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T03:20:26.0229167Z ·  ──────────┬───────── 2026-10-24T03:20:26.0229326Z · ╰── `renderedContentWidth` originates here 2026-10-24T03:20:26.0229379Z 39 │ 2026-10-24T03:20:26.0229464Z 40 │ const onClosed = props.onClosed; 2026-10-24T03:20:26.0229533Z 41 │ useEffect(() => { 2026-10-24T03:20:26.0229626Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T03:20:26.0229702Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T03:20:26.0229778Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T03:20:26.0229847Z 45 │ (finished) => { 2026-10-24T03:20:26.0230000Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T03:20:26.0230077Z 47 │ runOnJS(onClosed)(); 2026-10-24T03:20:26.0230138Z 48 │ } 2026-10-24T03:20:26.0230197Z 49 │ }, 2026-10-24T03:20:26.0230255Z 50 │ ); 2026-10-24T03:20:26.0230390Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T03:20:26.0230472Z 52 │ renderedInspectorWidth.set( 2026-10-24T03:20:26.0230623Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T03:20:26.0230682Z 54 │ ); 2026-10-24T03:20:26.0230736Z 55 │ }, [ 2026-10-24T03:20:26.0230807Z 56 │ inspectorProgress, 2026-10-24T03:20:26.0230877Z 57 │ inspectorVisible, 2026-10-24T03:20:26.0230941Z 58 │ inspectorWidth, 2026-10-24T03:20:26.0231006Z 59 │ onClosed, 2026-10-24T03:20:26.0231081Z 60 │ renderedInspectorWidth, 2026-10-24T03:20:26.0231213Z 61 │ resizing, 2026-10-24T03:20:26.0231296Z 62 │ ]); 2026-10-24T03:20:26.0231352Z 63 │ 2026-10-24T03:20:26.0231418Z 64 │ useEffect(() => { 2026-10-24T03:20:26.0231515Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T03:20:26.0231601Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T03:20:26.0231703Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T03:20:26.0231797Z ·  ──────────┬───────── 2026-10-24T03:20:26.0231962Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T03:20:26.0232023Z 68 │ return; 2026-10-24T03:20:26.0232078Z ╰──── 2026-10-24T03:20:26.0232349Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0232691Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0232697Z 2026-10-24T03:20:26.0233064Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0233209Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T03:20:26.0233349Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T03:20:26.0233502Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T03:20:26.0233624Z ·  ─────────────────── 2026-10-24T03:20:26.0233688Z 1787 │ cwd, 2026-10-24T03:20:26.0233751Z ╰──── 2026-10-24T03:20:26.0233756Z 2026-10-24T03:20:26.0234242Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0234404Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T03:20:26.0234462Z 27 │ ) { 2026-10-24T03:20:26.0234673Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0234824Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T03:20:26.0234957Z 30 │ │ if (predicate(available)) return available; 2026-10-24T03:20:26.0235067Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0235199Z 32 │ ╰─▶ } 2026-10-24T03:20:26.0235381Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T03:20:26.0235436Z ╰──── 2026-10-24T03:20:26.0235439Z 2026-10-24T03:20:26.0235915Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0236049Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T03:20:26.0236109Z 93 │ ) { 2026-10-24T03:20:26.0236312Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0236557Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T03:20:26.0236709Z 96 │ │ if (predicate(project)) return project; 2026-10-24T03:20:26.0236813Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0236940Z 98 │ ╰─▶ } 2026-10-24T03:20:26.0237093Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T03:20:26.0237145Z ╰──── 2026-10-24T03:20:26.0237148Z 2026-10-24T03:20:26.0237360Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T03:20:26.0237490Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T03:20:26.0237560Z 37 │ get isConnected() { 2026-10-24T03:20:26.0237659Z 38 │ let current: FakeElement | null = this; 2026-10-24T03:20:26.0237740Z ·  ─────── 2026-10-24T03:20:26.0237816Z 39 │ while (current?.parent) { 2026-10-24T03:20:26.0237871Z ╰──── 2026-10-24T03:20:26.0238150Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T03:20:26.0238153Z 2026-10-24T03:20:26.0238625Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0238812Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T03:20:26.0238888Z 222 │ let idlePasses = 0; 2026-10-24T03:20:26.0239042Z 223 │ ╭─▶ for (;;) { 2026-10-24T03:20:26.0239183Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T03:20:26.0239331Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T03:20:26.0239431Z 226 │ │ if (!pending) { 2026-10-24T03:20:26.0239530Z 227 │ │ idlePasses++; 2026-10-24T03:20:26.0239636Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T03:20:26.0239727Z 229 │ │ return; 2026-10-24T03:20:26.0239810Z 230 │ │ } 2026-10-24T03:20:26.0239901Z 231 │ │ continue; 2026-10-24T03:20:26.0239978Z 232 │ │ } 2026-10-24T03:20:26.0240077Z 233 │ │ idlePasses = 0; 2026-10-24T03:20:26.0240204Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T03:20:26.0240426Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T03:20:26.0240504Z 236 │ │ ); 2026-10-24T03:20:26.0240617Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T03:20:26.0240726Z 238 │ │ pending.resolve(exit); 2026-10-24T03:20:26.0240807Z 239 │ │ }); 2026-10-24T03:20:26.0240939Z 240 │ ╰─▶ } 2026-10-24T03:20:26.0241001Z 241 │ }, 2026-10-24T03:20:26.0241057Z ╰──── 2026-10-24T03:20:26.0241060Z 2026-10-24T03:20:26.0241596Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:26.0241756Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T03:20:26.0241932Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T03:20:26.0242123Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T03:20:26.0242243Z ·  ─────────────────── 2026-10-24T03:20:26.0242356Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T03:20:26.0242410Z ╰──── 2026-10-24T03:20:26.0242413Z 2026-10-24T03:20:26.0242904Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:26.0243033Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T03:20:26.0243222Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T03:20:26.0243331Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T03:20:26.0243453Z ·  ─────────────────── 2026-10-24T03:20:26.0243575Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T03:20:26.0243630Z ╰──── 2026-10-24T03:20:26.0243633Z 2026-10-24T03:20:26.0243842Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:20:26.0243984Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T03:20:26.0244158Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T03:20:26.0244258Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0244353Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0244828Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0244906Z 229 │ mostRecentEventCount, 2026-10-24T03:20:26.0244967Z 230 │ ); 2026-10-24T03:20:26.0245094Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T03:20:26.0245232Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T03:20:26.0245447Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0245537Z 232 │ const assumedValue = props.value; 2026-10-24T03:20:26.0245593Z ╰──── 2026-10-24T03:20:26.0245763Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:20:26.0246084Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0246087Z 2026-10-24T03:20:26.0246309Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0246452Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T03:20:26.0246601Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T03:20:26.0246777Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0246910Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0247378Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0247455Z 240 │ controlledEventCount, 2026-10-24T03:20:26.0247522Z 241 │ assumedValue, 2026-10-24T03:20:26.0247581Z 242 │ ); 2026-10-24T03:20:26.0247742Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T03:20:26.0247884Z ·  ───────────┬────────── 2026-10-24T03:20:26.0248104Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T03:20:26.0248202Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T03:20:26.0248258Z ╰──── 2026-10-24T03:20:26.0248690Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0249007Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0249013Z 2026-10-24T03:20:26.0249161Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0249305Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T03:20:26.0249439Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:20:26.0249559Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:20:26.0249680Z ·  ─────────────┬──────────── 2026-10-24T03:20:26.0249854Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0249915Z 165 │ }); 2026-10-24T03:20:26.0249971Z ╰──── 2026-10-24T03:20:26.0250447Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0250750Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0250756Z 2026-10-24T03:20:26.0250905Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0251046Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T03:20:26.0251174Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:20:26.0251287Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:20:26.0251408Z ·  ─────────────┬──────────── 2026-10-24T03:20:26.0251621Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0251682Z 165 │ }); 2026-10-24T03:20:26.0251734Z ╰──── 2026-10-24T03:20:26.0252273Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0252637Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0252640Z 2026-10-24T03:20:26.0252790Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0252929Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T03:20:26.0252989Z 165 │ }); 2026-10-24T03:20:26.0253084Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T03:20:26.0253213Z ·  ─────────┬────────────┬─── 2026-10-24T03:20:26.0253412Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0253535Z · ╰── This value is a ref 2026-10-24T03:20:26.0253611Z 167 │ return JSON.stringify( 2026-10-24T03:20:26.0253666Z ╰──── 2026-10-24T03:20:26.0254141Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0254435Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0254437Z 2026-10-24T03:20:26.0254586Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0254730Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T03:20:26.0254807Z 207 │ mostRecentEventCount, 2026-10-24T03:20:26.0254895Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0255005Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0255200Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0255259Z 209 │ ); 2026-10-24T03:20:26.0255311Z ╰──── 2026-10-24T03:20:26.0255785Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0256152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0256187Z 2026-10-24T03:20:26.0256335Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0256475Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T03:20:26.0256547Z 213 │ mostRecentEventCount, 2026-10-24T03:20:26.0256637Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0256746Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0256938Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0256994Z 215 │ ); 2026-10-24T03:20:26.0257050Z ╰──── 2026-10-24T03:20:26.0257527Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0257826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0257829Z 2026-10-24T03:20:26.0258022Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:20:26.0258159Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T03:20:26.0258287Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:20:26.0258403Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:20:26.0258518Z ·  ─────────┬──────── 2026-10-24T03:20:26.0259322Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0259386Z 165 │ }); 2026-10-24T03:20:26.0259482Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T03:20:26.0259555Z 167 │ return JSON.stringify( 2026-10-24T03:20:26.0259721Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T03:20:26.0259794Z 169 │ const record = 2026-10-24T03:20:26.0259878Z 170 │ token.type === "context" 2026-10-24T03:20:26.0260049Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T03:20:26.0260116Z 172 │ : undefined; 2026-10-24T03:20:26.0260229Z 173 │ const presentation = contextChipPresentation( 2026-10-24T03:20:26.0260350Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T03:20:26.0260419Z 175 │ record, 2026-10-24T03:20:26.0260478Z 176 │ ); 2026-10-24T03:20:26.0260567Z 177 │ const icon = contextChipIcon( 2026-10-24T03:20:26.0260637Z 178 │ presentation, 2026-10-24T03:20:26.0260787Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T03:20:26.0260846Z 180 │ ); 2026-10-24T03:20:26.0260913Z 181 │ return { 2026-10-24T03:20:26.0260987Z 182 │ type: token.type, 2026-10-24T03:20:26.0261066Z 183 │ source: token.source, 2026-10-24T03:20:26.0261139Z 184 │ start: token.start, 2026-10-24T03:20:26.0261210Z 185 │ end: token.end, 2026-10-24T03:20:26.0261364Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T03:20:26.0261520Z 187 │ label: 2026-10-24T03:20:26.0261641Z 188 │ token.type === "skill" 2026-10-24T03:20:26.0261754Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T03:20:26.0261841Z 190 │ : token.type === "context" 2026-10-24T03:20:26.0262084Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T03:20:26.0262167Z 192 │ : basename(token.value), 2026-10-24T03:20:26.0262316Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T03:20:26.0262414Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T03:20:26.0262531Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T03:20:26.0262590Z 196 │ }; 2026-10-24T03:20:26.0262651Z 197 │ }), 2026-10-24T03:20:26.0262717Z 198 │ ); 2026-10-24T03:20:26.0262855Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T03:20:26.0263013Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T03:20:26.0263227Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0263372Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T03:20:26.0263427Z ╰──── 2026-10-24T03:20:26.0263638Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:20:26.0263958Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0263961Z 2026-10-24T03:20:26.0264163Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:20:26.0264307Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T03:20:26.0264439Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T03:20:26.0264546Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T03:20:26.0264646Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0265116Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0265211Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T03:20:26.0265274Z 256 │ value, 2026-10-24T03:20:26.0265362Z 257 │ selection: nextSelection, 2026-10-24T03:20:26.0265425Z 258 │ }); 2026-10-24T03:20:26.0265511Z 259 │ return acknowledgedEventCount; 2026-10-24T03:20:26.0265571Z 260 │ }, 2026-10-24T03:20:26.0265630Z 261 │ [], 2026-10-24T03:20:26.0265702Z ·  ─┬ 2026-10-24T03:20:26.0265887Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0265945Z 262 │ ); 2026-10-24T03:20:26.0266000Z ╰──── 2026-10-24T03:20:26.0266210Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:20:26.0266527Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0266533Z 2026-10-24T03:20:26.0266818Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T03:20:26.0266955Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T03:20:26.0267048Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T03:20:26.0267144Z 28 │ import { identity } from "effect/Function"; 2026-10-24T03:20:26.0267223Z ·  ────┬─── 2026-10-24T03:20:26.0267363Z · ╰── 'identity' is imported here 2026-10-24T03:20:26.0267452Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T03:20:26.0267506Z ╰──── 2026-10-24T03:20:26.0267608Z  help: Consider removing this import. 2026-10-24T03:20:26.0267611Z 2026-10-24T03:20:26.0268096Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0268278Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T03:20:26.0268385Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T03:20:26.0268587Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T03:20:26.0268694Z 567 │ │ const nextEvent = { 2026-10-24T03:20:26.0268861Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T03:20:26.0268999Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T03:20:26.0269091Z 570 │ │ threadId, 2026-10-24T03:20:26.0269208Z 571 │ │ providerInstanceId, 2026-10-24T03:20:26.0269314Z 572 │ │ occurredAt: now, 2026-10-24T03:20:26.0269469Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T03:20:26.0269599Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T03:20:26.0269719Z 575 │ │ const reader = yield* eventSink 2026-10-24T03:20:26.0269843Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T03:20:26.0269978Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T03:20:26.0270089Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0270254Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T03:20:26.0270394Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T03:20:26.0270516Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T03:20:26.0270722Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T03:20:26.0270802Z 583 │ │ } 2026-10-24T03:20:26.0270970Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T03:20:26.0271121Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T03:20:26.0271255Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T03:20:26.0271388Z 587 │ ╰─▶ } 2026-10-24T03:20:26.0271451Z 588 │ }), 2026-10-24T03:20:26.0271578Z ╰──── 2026-10-24T03:20:26.0271609Z 2026-10-24T03:20:26.0272083Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0272260Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T03:20:26.0272343Z 2326 │ let settled = false; 2026-10-24T03:20:26.0272543Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T03:20:26.0272709Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T03:20:26.0272845Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T03:20:26.0272934Z 2330 │ │ ); 2026-10-24T03:20:26.0273067Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T03:20:26.0273207Z 2332 │ ╰─▶ } 2026-10-24T03:20:26.0273330Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T03:20:26.0273384Z ╰──── 2026-10-24T03:20:26.0273387Z 2026-10-24T03:20:26.0273582Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T03:20:26.0273741Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T03:20:26.0273916Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T03:20:26.0273995Z 602 │ const gesture = Gesture.Pan() 2026-10-24T03:20:26.0274094Z ·  ─┬─ 2026-10-24T03:20:26.0274246Z · ╰── `Pan` may be a component 2026-10-24T03:20:26.0274325Z 603 │ .enabled(!props.disabled) 2026-10-24T03:20:26.0274378Z ╰──── 2026-10-24T03:20:26.0274665Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T03:20:26.0275121Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T03:20:26.0275123Z 2026-10-24T03:20:26.0275324Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T03:20:26.0275477Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T03:20:26.0275617Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T03:20:26.0275739Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T03:20:26.0275815Z ·  ──┬── 2026-10-24T03:20:26.0275947Z · ╰── 'Image' is imported here 2026-10-24T03:20:26.0276001Z 18 │ 2026-10-24T03:20:26.0276056Z ╰──── 2026-10-24T03:20:26.0276159Z  help: Consider removing this import. 2026-10-24T03:20:26.0276162Z 2026-10-24T03:20:26.0276373Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T03:20:26.0276517Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T03:20:26.0276755Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T03:20:26.0276883Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0276980Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0277447Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0277524Z 227 │ mostRecentEventCount, 2026-10-24T03:20:26.0277585Z 228 │ ); 2026-10-24T03:20:26.0277714Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T03:20:26.0277852Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T03:20:26.0278066Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0278158Z 230 │ const assumedValue = props.value; 2026-10-24T03:20:26.0278215Z ╰──── 2026-10-24T03:20:26.0278384Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T03:20:26.0278705Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0278708Z 2026-10-24T03:20:26.0278928Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0279077Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T03:20:26.0279227Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T03:20:26.0279317Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0279417Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0279884Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0279961Z 238 │ controlledEventCount, 2026-10-24T03:20:26.0280027Z 239 │ assumedValue, 2026-10-24T03:20:26.0280087Z 240 │ ); 2026-10-24T03:20:26.0280249Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T03:20:26.0280392Z ·  ───────────┬────────── 2026-10-24T03:20:26.0280606Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T03:20:26.0280769Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T03:20:26.0280854Z ╰──── 2026-10-24T03:20:26.0281284Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0281604Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0281607Z 2026-10-24T03:20:26.0281754Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0281907Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T03:20:26.0282037Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:20:26.0282159Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:20:26.0282283Z ·  ─────────────┬──────────── 2026-10-24T03:20:26.0282456Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0282537Z 163 │ }); 2026-10-24T03:20:26.0282592Z ╰──── 2026-10-24T03:20:26.0283068Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0283367Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0283369Z 2026-10-24T03:20:26.0283523Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0283676Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T03:20:26.0283803Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:20:26.0283916Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:20:26.0284037Z ·  ─────────────┬──────────── 2026-10-24T03:20:26.0284252Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0284314Z 163 │ }); 2026-10-24T03:20:26.0284367Z ╰──── 2026-10-24T03:20:26.0284842Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0285140Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0285142Z 2026-10-24T03:20:26.0285291Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0285442Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T03:20:26.0285499Z 163 │ }); 2026-10-24T03:20:26.0285593Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T03:20:26.0285722Z ·  ─────────┬────────────┬─── 2026-10-24T03:20:26.0285918Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0286115Z · ╰── This value is a ref 2026-10-24T03:20:26.0286243Z 165 │ return JSON.stringify( 2026-10-24T03:20:26.0286299Z ╰──── 2026-10-24T03:20:26.0286773Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0287066Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0287072Z 2026-10-24T03:20:26.0287218Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0287367Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T03:20:26.0287446Z 205 │ mostRecentEventCount, 2026-10-24T03:20:26.0287539Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0287647Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0287840Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0287899Z 207 │ ); 2026-10-24T03:20:26.0287954Z ╰──── 2026-10-24T03:20:26.0288425Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0288723Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0288730Z 2026-10-24T03:20:26.0288881Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0289028Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T03:20:26.0289101Z 211 │ mostRecentEventCount, 2026-10-24T03:20:26.0289191Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T03:20:26.0289300Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0289493Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0289549Z 213 │ ); 2026-10-24T03:20:26.0289605Z ╰──── 2026-10-24T03:20:26.0290079Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0290379Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0290382Z 2026-10-24T03:20:26.0290573Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:20:26.0290717Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T03:20:26.0290843Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T03:20:26.0290959Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T03:20:26.0291074Z ·  ─────────┬──────── 2026-10-24T03:20:26.0291618Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0291712Z 163 │ }); 2026-10-24T03:20:26.0291808Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T03:20:26.0291882Z 165 │ return JSON.stringify( 2026-10-24T03:20:26.0292052Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T03:20:26.0292121Z 167 │ const record = 2026-10-24T03:20:26.0292204Z 168 │ token.type === "context" 2026-10-24T03:20:26.0292374Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T03:20:26.0292444Z 170 │ : undefined; 2026-10-24T03:20:26.0292585Z 171 │ const presentation = contextChipPresentation( 2026-10-24T03:20:26.0292704Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T03:20:26.0292773Z 173 │ record, 2026-10-24T03:20:26.0292832Z 174 │ ); 2026-10-24T03:20:26.0292920Z 175 │ const icon = contextChipIcon( 2026-10-24T03:20:26.0292990Z 176 │ presentation, 2026-10-24T03:20:26.0293139Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T03:20:26.0293198Z 178 │ ); 2026-10-24T03:20:26.0293263Z 179 │ return { 2026-10-24T03:20:26.0293338Z 180 │ type: token.type, 2026-10-24T03:20:26.0293416Z 181 │ source: token.source, 2026-10-24T03:20:26.0293488Z 182 │ start: token.start, 2026-10-24T03:20:26.0293559Z 183 │ end: token.end, 2026-10-24T03:20:26.0293714Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T03:20:26.0293785Z 185 │ label: 2026-10-24T03:20:26.0293866Z 186 │ token.type === "skill" 2026-10-24T03:20:26.0293978Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T03:20:26.0294066Z 188 │ : token.type === "context" 2026-10-24T03:20:26.0294308Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T03:20:26.0294391Z 190 │ : basename(token.value), 2026-10-24T03:20:26.0294540Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T03:20:26.0294637Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T03:20:26.0294728Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T03:20:26.0294787Z 194 │ }; 2026-10-24T03:20:26.0294849Z 195 │ }), 2026-10-24T03:20:26.0294907Z 196 │ ); 2026-10-24T03:20:26.0295050Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T03:20:26.0295209Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T03:20:26.0295422Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0295564Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T03:20:26.0295620Z ╰──── 2026-10-24T03:20:26.0295830Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:20:26.0296152Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0296155Z 2026-10-24T03:20:26.0296426Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:20:26.0296607Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T03:20:26.0296744Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T03:20:26.0296848Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T03:20:26.0296945Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0297411Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0297506Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T03:20:26.0297569Z 254 │ value, 2026-10-24T03:20:26.0297658Z 255 │ selection: nextSelection, 2026-10-24T03:20:26.0297722Z 256 │ }); 2026-10-24T03:20:26.0297810Z 257 │ return acknowledgedEventCount; 2026-10-24T03:20:26.0297865Z 258 │ }, 2026-10-24T03:20:26.0297924Z 259 │ [], 2026-10-24T03:20:26.0297995Z ·  ─┬ 2026-10-24T03:20:26.0298182Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0298237Z 260 │ ); 2026-10-24T03:20:26.0298291Z ╰──── 2026-10-24T03:20:26.0298502Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:20:26.0298937Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0298940Z 2026-10-24T03:20:26.0299093Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0299222Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T03:20:26.0299290Z 184 │ "options", 2026-10-24T03:20:26.0299390Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T03:20:26.0299502Z ·  ────────────────┬─────────────── 2026-10-24T03:20:26.0299701Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0299801Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T03:20:26.0299856Z ╰──── 2026-10-24T03:20:26.0300412Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0300753Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0300756Z 2026-10-24T03:20:26.0300907Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0301031Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T03:20:26.0301129Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T03:20:26.0301223Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T03:20:26.0301339Z ·  ────────────────┬──────────────── 2026-10-24T03:20:26.0301535Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0301630Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T03:20:26.0301688Z ╰──── 2026-10-24T03:20:26.0302161Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0302455Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0302458Z 2026-10-24T03:20:26.0302865Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0302996Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T03:20:26.0303142Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T03:20:26.0303282Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T03:20:26.0303394Z ·  ──────────────────────── 2026-10-24T03:20:26.0303537Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T03:20:26.0303589Z ╰──── 2026-10-24T03:20:26.0303592Z 2026-10-24T03:20:26.0303967Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0304095Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T03:20:26.0304200Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T03:20:26.0304360Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T03:20:26.0304486Z ·  ──────────────────────── 2026-10-24T03:20:26.0304553Z 257 │ return [ 2026-10-24T03:20:26.0304607Z ╰──── 2026-10-24T03:20:26.0304610Z 2026-10-24T03:20:26.0304818Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T03:20:26.0304912Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T03:20:26.0304987Z 21 │ EnvironmentThreadShell, 2026-10-24T03:20:26.0305057Z 22 │ ThreadRunSummary, 2026-10-24T03:20:26.0305138Z ·  ────────┬─────── 2026-10-24T03:20:26.0305285Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T03:20:26.0305358Z 23 │ ThreadRuntimeSummary, 2026-10-24T03:20:26.0305414Z ╰──── 2026-10-24T03:20:26.0305512Z  help: Consider removing this import. 2026-10-24T03:20:26.0305518Z 2026-10-24T03:20:26.0305855Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0306044Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T03:20:26.0306102Z 398 │ 2026-10-24T03:20:26.0306172Z 399 │ useEffect(() => { 2026-10-24T03:20:26.0306245Z ·  ────┬──── 2026-10-24T03:20:26.0306379Z · ╰── This is the containing effect 2026-10-24T03:20:26.0306472Z 400 │ setInspectorSelection((current) => { 2026-10-24T03:20:26.0306561Z ·  ──────────┬────────── 2026-10-24T03:20:26.0306739Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0306846Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T03:20:26.0306909Z ╰──── 2026-10-24T03:20:26.0307526Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0307854Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0307857Z 2026-10-24T03:20:26.0308078Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T03:20:26.0308237Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T03:20:26.0308406Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T03:20:26.0308583Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T03:20:26.0308681Z 529 │ │ 2026-10-24T03:20:26.0309315Z 534 │ ╰─▶ ); 2026-10-24T03:20:26.0309400Z 535 │ const FilesInspector = () => 2026-10-24T03:20:26.0309455Z ╰──── 2026-10-24T03:20:26.0309685Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T03:20:26.0309690Z 2026-10-24T03:20:26.0350698Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T03:20:26.0350992Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T03:20:26.0351055Z 534 │ ); 2026-10-24T03:20:26.0351259Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T03:20:26.0351422Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T03:20:26.0351541Z 537 │ │ 2026-10-24T03:20:26.0352829Z 545 │ ╰─▶ ) : null; 2026-10-24T03:20:26.0352985Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T03:20:26.0353042Z ╰──── 2026-10-24T03:20:26.0353282Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T03:20:26.0353289Z 2026-10-24T03:20:26.0353500Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T03:20:26.0353676Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T03:20:26.0353747Z 1782 │ assert.equal( 2026-10-24T03:20:26.0353895Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T03:20:26.0354004Z ·  ────────────────────────── 2026-10-24T03:20:26.0354084Z 1784 │ stored.attachments[0]?.id, 2026-10-24T03:20:26.0354140Z ╰──── 2026-10-24T03:20:26.0354316Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T03:20:26.0354320Z 2026-10-24T03:20:26.0354592Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0354762Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T03:20:26.0354826Z 434 │ : null; 2026-10-24T03:20:26.0354894Z 435 │ useEffect(() => { 2026-10-24T03:20:26.0354969Z ·  ────┬──── 2026-10-24T03:20:26.0355107Z · ╰── This is the containing effect 2026-10-24T03:20:26.0355165Z 436 │ if ( 2026-10-24T03:20:26.0355244Z 437 │ props.active === false || 2026-10-24T03:20:26.0355323Z 438 │ activeDraftKey !== null || 2026-10-24T03:20:26.0355405Z 439 │ editingPendingTask !== null || 2026-10-24T03:20:26.0355481Z 440 │ selectedProject === null 2026-10-24T03:20:26.0355538Z 441 │ ) { 2026-10-24T03:20:26.0355599Z 442 │ return; 2026-10-24T03:20:26.0355653Z 443 │ } 2026-10-24T03:20:26.0355732Z 444 │ setActiveDraftKey( 2026-10-24T03:20:26.0355819Z ·  ────────┬──────── 2026-10-24T03:20:26.0355992Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0356063Z 445 │ createNewTaskDraft({ 2026-10-24T03:20:26.0356117Z ╰──── 2026-10-24T03:20:26.0356727Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0357063Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0357134Z 2026-10-24T03:20:26.0357414Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:20:26.0357580Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T03:20:26.0357688Z 1243 │ 2026-10-24T03:20:26.0357884Z 1244 │ {props.children} 2026-10-24T03:20:26.0358001Z ·  ───────────── 2026-10-24T03:20:26.0358075Z 1245 │ 2026-10-24T03:20:26.0358128Z ╰──── 2026-10-24T03:20:26.0358356Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:20:26.0358504Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:20:26.0358509Z 2026-10-24T03:20:26.0358679Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0358811Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T03:20:26.0358932Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T03:20:26.0359027Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T03:20:26.0359120Z ·  ─────┬──── 2026-10-24T03:20:26.0359266Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0359376Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T03:20:26.0359428Z ╰──── 2026-10-24T03:20:26.0359721Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0360025Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0360028Z 2026-10-24T03:20:26.0360510Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0360661Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T03:20:26.0360723Z 168 │ }); 2026-10-24T03:20:26.0360926Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T03:20:26.0361127Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T03:20:26.0361236Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0361369Z 172 │ ╰─▶ } 2026-10-24T03:20:26.0361425Z 173 │ 2026-10-24T03:20:26.0361477Z ╰──── 2026-10-24T03:20:26.0361480Z 2026-10-24T03:20:26.0361948Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0362099Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T03:20:26.0362210Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T03:20:26.0362498Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T03:20:26.0362661Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T03:20:26.0362766Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0362900Z 181 │ ╰─▶ } 2026-10-24T03:20:26.0362953Z 182 │ 2026-10-24T03:20:26.0363007Z ╰──── 2026-10-24T03:20:26.0363010Z 2026-10-24T03:20:26.0363473Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0363626Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T03:20:26.0363759Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T03:20:26.0363952Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T03:20:26.0364076Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T03:20:26.0364271Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T03:20:26.0364359Z 310 │ │ break; 2026-10-24T03:20:26.0364437Z 311 │ │ } 2026-10-24T03:20:26.0364545Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0364676Z 313 │ ╰─▶ } 2026-10-24T03:20:26.0364732Z 314 │ 2026-10-24T03:20:26.0364791Z ╰──── 2026-10-24T03:20:26.0364797Z 2026-10-24T03:20:26.0364992Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T03:20:26.0365121Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T03:20:26.0365232Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T03:20:26.0365299Z 187 │ let next = initial; 2026-10-24T03:20:26.0365373Z ·  ──┬─ 2026-10-24T03:20:26.0365498Z · ╰── From this accumulator 2026-10-24T03:20:26.0365580Z 188 │ let receivedSnapshot = false; 2026-10-24T03:20:26.0365655Z 189 │ for (const item of items) { 2026-10-24T03:20:26.0365724Z ·  ─┬─ 2026-10-24T03:20:26.0365833Z · ╰── For this loop 2026-10-24T03:20:26.0366010Z 190 │ if (item.kind === "synchronized") { 2026-10-24T03:20:26.0366111Z 191 │ waiting = false; 2026-10-24T03:20:26.0366203Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T03:20:26.0366324Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T03:20:26.0366412Z ·  ───┬─── 2026-10-24T03:20:26.0366541Z · ╰── From this spread 2026-10-24T03:20:26.0366601Z 194 │ } 2026-10-24T03:20:26.0366654Z ╰──── 2026-10-24T03:20:26.0366814Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T03:20:26.0366972Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T03:20:26.0366975Z 2026-10-24T03:20:26.0367244Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0367414Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T03:20:26.0367535Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T03:20:26.0367600Z 284 │ useEffect(() => { 2026-10-24T03:20:26.0367673Z ·  ────┬──── 2026-10-24T03:20:26.0367806Z · ╰── This is the containing effect 2026-10-24T03:20:26.0367891Z 285 │ setNow(new Date().toISOString()); 2026-10-24T03:20:26.0367961Z ·  ───┬── 2026-10-24T03:20:26.0368129Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0368268Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T03:20:26.0368320Z ╰──── 2026-10-24T03:20:26.0368935Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0369262Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0369265Z 2026-10-24T03:20:26.0369468Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0369637Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T03:20:26.0369774Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T03:20:26.0369866Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T03:20:26.0369972Z ·  ───────┬────── 2026-10-24T03:20:26.0370139Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T03:20:26.0370255Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T03:20:26.0370305Z ╰──── 2026-10-24T03:20:26.0370602Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0370916Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0370919Z 2026-10-24T03:20:26.0371156Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0371349Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T03:20:26.0371435Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T03:20:26.0371594Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T03:20:26.0371717Z ·  ─────┬──── 2026-10-24T03:20:26.0371885Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0371964Z 357 │ const id = setTimeout(() => { 2026-10-24T03:20:26.0372017Z ╰──── 2026-10-24T03:20:26.0372302Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0372630Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0372635Z 2026-10-24T03:20:26.0372894Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0373046Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T03:20:26.0373187Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T03:20:26.0373257Z 356 │ useEffect(() => { 2026-10-24T03:20:26.0373330Z ·  ────┬──── 2026-10-24T03:20:26.0373460Z · ╰── This is the containing effect 2026-10-24T03:20:26.0373549Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T03:20:26.0373615Z 358 │ return; 2026-10-24T03:20:26.0373673Z 359 │ } 2026-10-24T03:20:26.0373770Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T03:20:26.0373865Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T03:20:26.0373970Z ·  ──────────────┬────────────── 2026-10-24T03:20:26.0374150Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0374209Z 362 │ return; 2026-10-24T03:20:26.0374263Z ╰──── 2026-10-24T03:20:26.0374864Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0375192Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0375197Z 2026-10-24T03:20:26.0375455Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0375606Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T03:20:26.0375661Z 447 │ 2026-10-24T03:20:26.0375727Z 448 │ useEffect(() => { 2026-10-24T03:20:26.0375800Z ·  ────┬──── 2026-10-24T03:20:26.0375928Z · ╰── This is the containing effect 2026-10-24T03:20:26.0376032Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T03:20:26.0376092Z 450 │ return; 2026-10-24T03:20:26.0376213Z 451 │ } 2026-10-24T03:20:26.0376380Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T03:20:26.0376515Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T03:20:26.0376624Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T03:20:26.0376677Z 455 │ } 2026-10-24T03:20:26.0376820Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T03:20:26.0376949Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T03:20:26.0377054Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T03:20:26.0377125Z 459 │ const directProject = 2026-10-24T03:20:26.0377194Z 460 │ projects.find( 2026-10-24T03:20:26.0377261Z 461 │ (project) => 2026-10-24T03:20:26.0377444Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T03:20:26.0377508Z 463 │ ) ?? null; 2026-10-24T03:20:26.0377562Z 464 │ 2026-10-24T03:20:26.0377635Z 465 │ if (directProject) { 2026-10-24T03:20:26.0377777Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T03:20:26.0377917Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T03:20:26.0378079Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T03:20:26.0378216Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T03:20:26.0378279Z 470 │ return; 2026-10-24T03:20:26.0378336Z 471 │ } 2026-10-24T03:20:26.0378435Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T03:20:26.0378497Z 473 │ if ( 2026-10-24T03:20:26.0378742Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T03:20:26.0378861Z 475 │ selectedProject.id !== directProject.id 2026-10-24T03:20:26.0378921Z 476 │ ) { 2026-10-24T03:20:26.0379007Z 477 │ setProject(directProject); 2026-10-24T03:20:26.0379070Z 478 │ return; 2026-10-24T03:20:26.0379128Z 479 │ } 2026-10-24T03:20:26.0379211Z 480 │ if (!flow.draftKey) return; 2026-10-24T03:20:26.0379353Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T03:20:26.0379497Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T03:20:26.0379608Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T03:20:26.0379691Z 484 │ workspaceSelection: { 2026-10-24T03:20:26.0379761Z 485 │ mode: "local", 2026-10-24T03:20:26.0379873Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T03:20:26.0380011Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T03:20:26.0380094Z 488 │ startFromOrigin: false, 2026-10-24T03:20:26.0380156Z 489 │ }, 2026-10-24T03:20:26.0380216Z 490 │ }); 2026-10-24T03:20:26.0380271Z 491 │ } 2026-10-24T03:20:26.0380401Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T03:20:26.0380460Z 493 │ if ( 2026-10-24T03:20:26.0380603Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T03:20:26.0380701Z 495 │ selectedProject.id === directProject.id 2026-10-24T03:20:26.0380759Z 496 │ ) { 2026-10-24T03:20:26.0380823Z 497 │ return; 2026-10-24T03:20:26.0380878Z 498 │ } 2026-10-24T03:20:26.0381057Z 499 │ setProject(directProject); 2026-10-24T03:20:26.0381168Z 500 │ return; 2026-10-24T03:20:26.0381227Z 501 │ } 2026-10-24T03:20:26.0381278Z 502 │ 2026-10-24T03:20:26.0381358Z 503 │ if (projects.length > 0) { 2026-10-24T03:20:26.0381456Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T03:20:26.0381566Z ·  ──────────────┬────────────── 2026-10-24T03:20:26.0381748Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0381805Z 505 │ } 2026-10-24T03:20:26.0381857Z ╰──── 2026-10-24T03:20:26.0382600Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0382928Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0382931Z 2026-10-24T03:20:26.0383191Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0383347Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T03:20:26.0383403Z 545 │ 2026-10-24T03:20:26.0383468Z 546 │ useEffect(() => { 2026-10-24T03:20:26.0383540Z ·  ────┬──── 2026-10-24T03:20:26.0383671Z · ╰── This is the containing effect 2026-10-24T03:20:26.0383765Z 547 │ const shareId = props.incomingShareId; 2026-10-24T03:20:26.0383852Z 548 │ const draftKey = flow.draftKey; 2026-10-24T03:20:26.0383955Z 549 │ const destinationProject = selectedProject; 2026-10-24T03:20:26.0384097Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T03:20:26.0384226Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T03:20:26.0384317Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T03:20:26.0384393Z 553 │ !initialEnvironmentId || 2026-10-24T03:20:26.0384464Z 554 │ !initialProjectId || 2026-10-24T03:20:26.0384597Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T03:20:26.0384703Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T03:20:26.0384760Z 557 │ if ( 2026-10-24T03:20:26.0384824Z 558 │ !shareId || 2026-10-24T03:20:26.0384888Z 559 │ !draftKey || 2026-10-24T03:20:26.0384967Z 560 │ !destinationProject || 2026-10-24T03:20:26.0385056Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T03:20:26.0385146Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T03:20:26.0385202Z 563 │ ) { 2026-10-24T03:20:26.0385261Z 564 │ return; 2026-10-24T03:20:26.0385316Z 565 │ } 2026-10-24T03:20:26.0385413Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T03:20:26.0385470Z 567 │ if ( 2026-10-24T03:20:26.0385581Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T03:20:26.0385692Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T03:20:26.0385747Z 570 │ ) { 2026-10-24T03:20:26.0385806Z 571 │ return; 2026-10-24T03:20:26.0385860Z 572 │ } 2026-10-24T03:20:26.0385913Z 573 │ 2026-10-24T03:20:26.0385981Z 574 │ if (!incomingShare) { 2026-10-24T03:20:26.0386262Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T03:20:26.0386419Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T03:20:26.0386485Z 577 │ Dialog.alert( 2026-10-24T03:20:26.0386570Z 578 │ "Shared content unavailable", 2026-10-24T03:20:26.0386746Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T03:20:26.0386804Z 580 │ ); 2026-10-24T03:20:26.0386859Z 581 │ } 2026-10-24T03:20:26.0386919Z 582 │ return; 2026-10-24T03:20:26.0386973Z 583 │ } 2026-10-24T03:20:26.0387025Z 584 │ 2026-10-24T03:20:26.0387081Z 585 │ if ( 2026-10-24T03:20:26.0387243Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T03:20:26.0387350Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T03:20:26.0387407Z 588 │ ) { 2026-10-24T03:20:26.0387466Z 589 │ return; 2026-10-24T03:20:26.0387520Z 590 │ } 2026-10-24T03:20:26.0387572Z 591 │ 2026-10-24T03:20:26.0387710Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T03:20:26.0387833Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T03:20:26.0387888Z 594 │ } 2026-10-24T03:20:26.0387994Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T03:20:26.0388064Z 596 │ const draftBackup = 2026-10-24T03:20:26.0388252Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T03:20:26.0388394Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T03:20:26.0388486Z 599 │ const importToken = Symbol(importKey); 2026-10-24T03:20:26.0388572Z 600 │ let didReserveShare = false; 2026-10-24T03:20:26.0388653Z 601 │ let didConsumeShare = false; 2026-10-24T03:20:26.0388734Z 602 │ let needsDraftRestore = false; 2026-10-24T03:20:26.0388843Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T03:20:26.0388928Z 604 │ setImportingShareKey(importKey); 2026-10-24T03:20:26.0389017Z ·  ──────────┬───────── 2026-10-24T03:20:26.0389193Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0389262Z 605 │ void (async () => { 2026-10-24T03:20:26.0389316Z ╰──── 2026-10-24T03:20:26.0389923Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0390254Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0390256Z 2026-10-24T03:20:26.0390462Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0390616Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T03:20:26.0390693Z 523 │ props.initialProjectRef, 2026-10-24T03:20:26.0390766Z 524 │ props.incomingShareId, 2026-10-24T03:20:26.0390856Z ·  ──────────┬────────── 2026-10-24T03:20:26.0391028Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T03:20:26.0391168Z 525 │ props.pendingTaskId, 2026-10-24T03:20:26.0391253Z ╰──── 2026-10-24T03:20:26.0391547Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0391859Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0391862Z 2026-10-24T03:20:26.0392079Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0392233Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T03:20:26.0392350Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T03:20:26.0392418Z 543 │ flow.loadBranches(); 2026-10-24T03:20:26.0392530Z ·  ──┬─ 2026-10-24T03:20:26.0392660Z · ╰── Missing dependency `flow` 2026-10-24T03:20:26.0392755Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T03:20:26.0392840Z ·  ────────┬──────── 2026-10-24T03:20:26.0393044Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T03:20:26.0393098Z 545 │ 2026-10-24T03:20:26.0393152Z ╰──── 2026-10-24T03:20:26.0393579Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0393898Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0393903Z 2026-10-24T03:20:26.0394106Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0394260Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T03:20:26.0394326Z 765 │ flow.draftKey, 2026-10-24T03:20:26.0394403Z 766 │ hasImportedIncomingShare, 2026-10-24T03:20:26.0394497Z ·  ────────────┬─────────── 2026-10-24T03:20:26.0394675Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T03:20:26.0394740Z 767 │ incomingShare, 2026-10-24T03:20:26.0394820Z 768 │ isIncomingShareInboxLoading, 2026-10-24T03:20:26.0394917Z ·  ─────────────┬───────────── 2026-10-24T03:20:26.0395169Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T03:20:26.0395277Z 769 │ isIncomingShareUnavailable, 2026-10-24T03:20:26.0395350Z 770 │ props.incomingShareId, 2026-10-24T03:20:26.0395445Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T03:20:26.0395535Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T03:20:26.0395609Z 773 │ releaseShareReservation, 2026-10-24T03:20:26.0395672Z 774 │ reserveShare, 2026-10-24T03:20:26.0395758Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T03:20:26.0395826Z 776 │ selectedProject, 2026-10-24T03:20:26.0395896Z 777 │ shareImportAttempt, 2026-10-24T03:20:26.0395981Z ·  ─────────┬──────── 2026-10-24T03:20:26.0396150Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T03:20:26.0396212Z 778 │ ]); 2026-10-24T03:20:26.0396267Z ╰──── 2026-10-24T03:20:26.0396563Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0396876Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0396879Z 2026-10-24T03:20:26.0397050Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0397212Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T03:20:26.0397392Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T03:20:26.0397565Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T03:20:26.0397705Z ·  ─────┬──── 2026-10-24T03:20:26.0397891Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0398030Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T03:20:26.0398082Z ╰──── 2026-10-24T03:20:26.0398370Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0398667Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0398669Z 2026-10-24T03:20:26.0398844Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0399005Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T03:20:26.0399086Z 717 │ const snoozePresets = useMemo( 2026-10-24T03:20:26.0399268Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T03:20:26.0399403Z ·  ─────┬──── 2026-10-24T03:20:26.0399585Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0399703Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T03:20:26.0399756Z ╰──── 2026-10-24T03:20:26.0400115Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0400445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0400448Z 2026-10-24T03:20:26.0400632Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:20:26.0400792Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T03:20:26.0400969Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T03:20:26.0401085Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T03:20:26.0401179Z ·  ────────────┬─────────── 2026-10-24T03:20:26.0401365Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T03:20:26.0401423Z 720 │ ); 2026-10-24T03:20:26.0401477Z ╰──── 2026-10-24T03:20:26.0401791Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0402107Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0402109Z 2026-10-24T03:20:26.0402292Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:20:26.0402451Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T03:20:26.0402550Z 764 │ thread.pinnedAt, 2026-10-24T03:20:26.0402611Z 765 │ variant, 2026-10-24T03:20:26.0402691Z ·  ───┬─── 2026-10-24T03:20:26.0402831Z · ╰── Unnecessary dependency `variant` 2026-10-24T03:20:26.0402887Z 766 │ ], 2026-10-24T03:20:26.0402938Z ╰──── 2026-10-24T03:20:26.0403252Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0403564Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0403567Z 2026-10-24T03:20:26.0403764Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0403925Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T03:20:26.0404063Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T03:20:26.0404202Z 1215 │ 2026-10-24T03:20:26.0404318Z ·  ────────────────────────── 2026-10-24T03:20:26.0404428Z 1216 │ 2026-10-24T03:20:26.0404481Z ╰──── 2026-10-24T03:20:26.0404631Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T03:20:26.0404634Z 2026-10-24T03:20:26.0404869Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T03:20:26.0405035Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T03:20:26.0405089Z 1397 │ 2026-10-24T03:20:26.0405253Z 1398 │ function assertUserMessagesExclude( 2026-10-24T03:20:26.0405386Z ·  ────────────┬──────────── 2026-10-24T03:20:26.0405560Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T03:20:26.0405670Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T03:20:26.0405725Z ╰──── 2026-10-24T03:20:26.0405833Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0405835Z 2026-10-24T03:20:26.0405993Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0406149Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T03:20:26.0406204Z  86 │ 2026-10-24T03:20:26.0406300Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T03:20:26.0406382Z ·  ──────┬───── 2026-10-24T03:20:26.0406528Z · ╰── `cardCoverage` originates here 2026-10-24T03:20:26.0406613Z  88 │ const barHeightRef = useRef(0); 2026-10-24T03:20:26.0406694Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T03:20:26.0406780Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T03:20:26.0406872Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T03:20:26.0406941Z  92 │ if (!cardCoverage) { 2026-10-24T03:20:26.0407003Z  93 │ return; 2026-10-24T03:20:26.0407059Z  94 │ } 2026-10-24T03:20:26.0407210Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T03:20:26.0407299Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T03:20:26.0407360Z  97 │ return; 2026-10-24T03:20:26.0407413Z  98 │ } 2026-10-24T03:20:26.0407495Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:20:26.0407583Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:20:26.0407665Z ·  ──────┬───── 2026-10-24T03:20:26.0407809Z · ╰── `cardCoverage` cannot be modified 2026-10-24T03:20:26.0407871Z 101 │ return; 2026-10-24T03:20:26.0407925Z ╰──── 2026-10-24T03:20:26.0408228Z  help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state 2026-10-24T03:20:26.0408538Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0408543Z 2026-10-24T03:20:26.0408698Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0408862Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T03:20:26.0408947Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T03:20:26.0409033Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T03:20:26.0409110Z ·  ─────┬──── 2026-10-24T03:20:26.0409246Z · ╰── `cardHeight` originates here 2026-10-24T03:20:26.0409339Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T03:20:26.0409409Z  92 │ if (!cardCoverage) { 2026-10-24T03:20:26.0409467Z  93 │ return; 2026-10-24T03:20:26.0409521Z  94 │ } 2026-10-24T03:20:26.0409672Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T03:20:26.0409760Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T03:20:26.0409818Z  97 │ return; 2026-10-24T03:20:26.0409873Z  98 │ } 2026-10-24T03:20:26.0410024Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:20:26.0410133Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:20:26.0410193Z 101 │ return; 2026-10-24T03:20:26.0410248Z 102 │ } 2026-10-24T03:20:26.0410349Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T03:20:26.0410447Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T03:20:26.0410533Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T03:20:26.0410590Z 106 │ }); 2026-10-24T03:20:26.0410659Z 107 │ }, [cardCoverage]); 2026-10-24T03:20:26.0410743Z 108 │ const handleBarLayout = useCallback( 2026-10-24T03:20:26.0410825Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0410952Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:20:26.0411023Z 111 │ notifyCoverage(); 2026-10-24T03:20:26.0411083Z 112 │ }, 2026-10-24T03:20:26.0411153Z 113 │ [notifyCoverage], 2026-10-24T03:20:26.0411209Z 114 │ ); 2026-10-24T03:20:26.0411297Z 115 │ const handleCardLayout = useCallback( 2026-10-24T03:20:26.0411376Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0411505Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:20:26.0411618Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T03:20:26.0411697Z ·  ─────┬──── 2026-10-24T03:20:26.0411837Z · ╰── `cardHeight` cannot be modified 2026-10-24T03:20:26.0411906Z 119 │ notifyCoverage(); 2026-10-24T03:20:26.0411958Z ╰──── 2026-10-24T03:20:26.0412227Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0412571Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0412577Z 2026-10-24T03:20:26.0412779Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:20:26.0412936Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T03:20:26.0413023Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T03:20:26.0413116Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T03:20:26.0413223Z ·  ───┬─── 2026-10-24T03:20:26.0413466Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T03:20:26.0413542Z  92 │ if (!cardCoverage) { 2026-10-24T03:20:26.0413604Z  93 │ return; 2026-10-24T03:20:26.0413659Z  94 │ } 2026-10-24T03:20:26.0413810Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T03:20:26.0413897Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T03:20:26.0413956Z  97 │ return; 2026-10-24T03:20:26.0414010Z  98 │ } 2026-10-24T03:20:26.0414091Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:20:26.0414173Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:20:26.0414251Z ·  ──────┬───── 2026-10-24T03:20:26.0414389Z · ╰── This modifies `cardCoverage` 2026-10-24T03:20:26.0414450Z 101 │ return; 2026-10-24T03:20:26.0414503Z ╰──── 2026-10-24T03:20:26.0414916Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T03:20:26.0415251Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0415254Z 2026-10-24T03:20:26.0415455Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:20:26.0415614Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T03:20:26.0415696Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T03:20:26.0415777Z 100 │ cardCoverage.value = coverage; 2026-10-24T03:20:26.0415855Z ·  ──────┬───── 2026-10-24T03:20:26.0415991Z · ╰── This modifies `cardCoverage` 2026-10-24T03:20:26.0416056Z 101 │ return; 2026-10-24T03:20:26.0416114Z 102 │ } 2026-10-24T03:20:26.0416216Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T03:20:26.0416313Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T03:20:26.0416396Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T03:20:26.0416453Z 106 │ }); 2026-10-24T03:20:26.0416520Z 107 │ }, [cardCoverage]); 2026-10-24T03:20:26.0416605Z 108 │ const handleBarLayout = useCallback( 2026-10-24T03:20:26.0416684Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0416793Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0417022Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T03:20:26.0417150Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:20:26.0417209Z ╰──── 2026-10-24T03:20:26.0417558Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T03:20:26.0417867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0417870Z 2026-10-24T03:20:26.0418072Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:20:26.0418230Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T03:20:26.0418318Z 115 │ const handleCardLayout = useCallback( 2026-10-24T03:20:26.0418401Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0418573Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0418926Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T03:20:26.0419053Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T03:20:26.0419362Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T03:20:26.0419439Z ·  ─────┬──── 2026-10-24T03:20:26.0419571Z · ╰── This modifies `cardHeight` 2026-10-24T03:20:26.0419639Z 119 │ notifyCoverage(); 2026-10-24T03:20:26.0419693Z ╰──── 2026-10-24T03:20:26.0420033Z  help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T03:20:26.0420344Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0420350Z 2026-10-24T03:20:26.0420566Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:20:26.0420692Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T03:20:26.0420795Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T03:20:26.0420883Z 259 │ for (const edit of edits.reverse()) 2026-10-24T03:20:26.0420979Z ·  ─────── 2026-10-24T03:20:26.0421144Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T03:20:26.0421197Z ╰──── 2026-10-24T03:20:26.0421465Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:20:26.0421470Z 2026-10-24T03:20:26.0421682Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:20:26.0421804Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T03:20:26.0421884Z 289 │ visit(parser.parse(markdown)); 2026-10-24T03:20:26.0421969Z 290 │ for (const edit of edits.reverse()) 2026-10-24T03:20:26.0422065Z ·  ─────── 2026-10-24T03:20:26.0422226Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T03:20:26.0422280Z ╰──── 2026-10-24T03:20:26.0422567Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:20:26.0422570Z 2026-10-24T03:20:26.0422785Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T03:20:26.0422910Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T03:20:26.0422988Z 343 │ visit(parser.parse(markdown)); 2026-10-24T03:20:26.0423095Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T03:20:26.0423201Z ·  ─────── 2026-10-24T03:20:26.0423369Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T03:20:26.0423420Z ╰──── 2026-10-24T03:20:26.0423681Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T03:20:26.0423684Z 2026-10-24T03:20:26.0423938Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0424125Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T03:20:26.0424271Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T03:20:26.0424411Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T03:20:26.0424488Z ·  ────┬─── 2026-10-24T03:20:26.0424622Z · ╰── `rotation` originates here 2026-10-24T03:20:26.0424675Z 172 │ 2026-10-24T03:20:26.0424747Z 173 │ useLayoutEffect(() => { 2026-10-24T03:20:26.0424881Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T03:20:26.0424955Z ·  ────┬─── 2026-10-24T03:20:26.0425087Z · ╰── `rotation` cannot be modified 2026-10-24T03:20:26.0425195Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T03:20:26.0425251Z ╰──── 2026-10-24T03:20:26.0425517Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0425821Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0425826Z 2026-10-24T03:20:26.0426023Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0426175Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T03:20:26.0426245Z 1245 │ { 2026-10-24T03:20:26.0430448Z ·  ───────┬─────── 2026-10-24T03:20:26.0430583Z · ╰── This is the containing effect 2026-10-24T03:20:26.0430645Z 39 │ reset(); 2026-10-24T03:20:26.0430714Z 40 │ setInitialized(true); 2026-10-24T03:20:26.0430792Z ·  ───────┬────── 2026-10-24T03:20:26.0430964Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0431027Z 41 │ }, [reset]); 2026-10-24T03:20:26.0431080Z ╰──── 2026-10-24T03:20:26.0431693Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0432021Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0432024Z 2026-10-24T03:20:26.0432282Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0432444Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T03:20:26.0432558Z 88 │ 2026-10-24T03:20:26.0432624Z 89 │ useEffect(() => { 2026-10-24T03:20:26.0432697Z ·  ────┬──── 2026-10-24T03:20:26.0432837Z · ╰── This is the containing effect 2026-10-24T03:20:26.0432999Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T03:20:26.0433102Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T03:20:26.0433169Z 92 │ let active = true; 2026-10-24T03:20:26.0433267Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T03:20:26.0433354Z ·  ─────────┬───────── 2026-10-24T03:20:26.0433525Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0433682Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T03:20:26.0433736Z ╰──── 2026-10-24T03:20:26.0434406Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0434756Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0434759Z 2026-10-24T03:20:26.0435234Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0435387Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T03:20:26.0435522Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T03:20:26.0435673Z 133 │ ╭─▶ for ( 2026-10-24T03:20:26.0435782Z 134 │ │ let attempt = 0; 2026-10-24T03:20:26.0435950Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T03:20:26.0436053Z 136 │ │ attempt += 1 2026-10-24T03:20:26.0436136Z 137 │ │ ) { 2026-10-24T03:20:26.0436249Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0436385Z 139 │ ╰─▶ } 2026-10-24T03:20:26.0436513Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T03:20:26.0436569Z ╰──── 2026-10-24T03:20:26.0436571Z 2026-10-24T03:20:26.0436841Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0436995Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T03:20:26.0437050Z 55 │ 2026-10-24T03:20:26.0437116Z 56 │ useEffect(() => { 2026-10-24T03:20:26.0437188Z ·  ────┬──── 2026-10-24T03:20:26.0437318Z · ╰── This is the containing effect 2026-10-24T03:20:26.0437387Z 57 │ setDecodedSize(null); 2026-10-24T03:20:26.0437467Z ·  ───────┬────── 2026-10-24T03:20:26.0437637Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0437707Z 58 │ }, [props.sourceKey]); 2026-10-24T03:20:26.0437759Z ╰──── 2026-10-24T03:20:26.0438367Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0438694Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0438697Z 2026-10-24T03:20:26.0438955Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0439110Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T03:20:26.0439167Z 59 │ 2026-10-24T03:20:26.0439231Z 60 │ useEffect(() => { 2026-10-24T03:20:26.0439364Z ·  ────┬──── 2026-10-24T03:20:26.0439525Z · ╰── This is the containing effect 2026-10-24T03:20:26.0439595Z 61 │ setFailedUri(null); 2026-10-24T03:20:26.0439670Z ·  ──────┬───── 2026-10-24T03:20:26.0439838Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0439902Z 62 │ }, [props.uri]); 2026-10-24T03:20:26.0439956Z ╰──── 2026-10-24T03:20:26.0440559Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0440887Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0440893Z 2026-10-24T03:20:26.0441110Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T03:20:26.0441262Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T03:20:26.0441389Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T03:20:26.0441568Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T03:20:26.0441656Z ·  ────────┬──────── 2026-10-24T03:20:26.0441807Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T03:20:26.0441861Z 8 │ 2026-10-24T03:20:26.0441913Z ╰──── 2026-10-24T03:20:26.0442019Z  help: Consider removing this import. 2026-10-24T03:20:26.0442026Z 2026-10-24T03:20:26.0442228Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0442382Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T03:20:26.0442451Z 57 │ setDecodedSize(null); 2026-10-24T03:20:26.0442546Z 58 │ }, [props.sourceKey]); 2026-10-24T03:20:26.0442628Z ·  ───────┬─────── 2026-10-24T03:20:26.0442785Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T03:20:26.0442838Z 59 │ 2026-10-24T03:20:26.0442892Z ╰──── 2026-10-24T03:20:26.0443187Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0443568Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0443598Z 2026-10-24T03:20:26.0443801Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0443952Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T03:20:26.0444019Z 61 │ setFailedUri(null); 2026-10-24T03:20:26.0444085Z 62 │ }, [props.uri]); 2026-10-24T03:20:26.0444161Z ·  ────┬──── 2026-10-24T03:20:26.0444304Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T03:20:26.0444356Z 63 │ 2026-10-24T03:20:26.0444409Z ╰──── 2026-10-24T03:20:26.0444707Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0445022Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0445025Z 2026-10-24T03:20:26.0445282Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0445430Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T03:20:26.0445593Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T03:20:26.0445658Z 29 │ useEffect(() => { 2026-10-24T03:20:26.0445728Z ·  ────┬──── 2026-10-24T03:20:26.0445856Z · ╰── This is the containing effect 2026-10-24T03:20:26.0445987Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T03:20:26.0446098Z ·  ───┬─── 2026-10-24T03:20:26.0446291Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0446363Z 31 │ }, [key, live, snapshot]); 2026-10-24T03:20:26.0446416Z ╰──── 2026-10-24T03:20:26.0447017Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0447344Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0447348Z 2026-10-24T03:20:26.0447605Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0447742Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T03:20:26.0447802Z 2137 │ ); 2026-10-24T03:20:26.0447871Z 2138 │ useEffect(() => { 2026-10-24T03:20:26.0447945Z ·  ────┬──── 2026-10-24T03:20:26.0448077Z · ╰── This is the containing effect 2026-10-24T03:20:26.0448153Z 2139 │ setExpandedVideo(null); 2026-10-24T03:20:26.0448235Z ·  ────────┬─────── 2026-10-24T03:20:26.0448406Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0448546Z 2140 │ setExpandedFile(null); 2026-10-24T03:20:26.0448627Z ╰──── 2026-10-24T03:20:26.0449228Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0449554Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0449557Z 2026-10-24T03:20:26.0449788Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T03:20:26.0449922Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T03:20:26.0450065Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T03:20:26.0450208Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T03:20:26.0450307Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0450474Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T03:20:26.0450632Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T03:20:26.0450684Z ╰──── 2026-10-24T03:20:26.0450785Z  help: Consider removing this import. 2026-10-24T03:20:26.0450788Z 2026-10-24T03:20:26.0450995Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T03:20:26.0451135Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T03:20:26.0451197Z 91 │ import { 2026-10-24T03:20:26.0451263Z 92 │ createContext, 2026-10-24T03:20:26.0451337Z ·  ──────┬────── 2026-10-24T03:20:26.0451476Z · ╰── 'createContext' is imported here 2026-10-24T03:20:26.0451534Z 93 │ memo, 2026-10-24T03:20:26.0451586Z ╰──── 2026-10-24T03:20:26.0451683Z  help: Consider removing this import. 2026-10-24T03:20:26.0451686Z 2026-10-24T03:20:26.0451900Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T03:20:26.0452037Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T03:20:26.0452098Z 107 │ import { 2026-10-24T03:20:26.0452165Z 108 │ ActivityIndicator, 2026-10-24T03:20:26.0452249Z ·  ────────┬──────── 2026-10-24T03:20:26.0452403Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T03:20:26.0452485Z 109 │ Image, 2026-10-24T03:20:26.0452536Z ╰──── 2026-10-24T03:20:26.0452635Z  help: Consider removing this import. 2026-10-24T03:20:26.0452638Z 2026-10-24T03:20:26.0452839Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T03:20:26.0452973Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T03:20:26.0453034Z 114 │ Pressable, 2026-10-24T03:20:26.0453097Z 115 │ ScrollView, 2026-10-24T03:20:26.0453171Z ·  ─────┬──── 2026-10-24T03:20:26.0453305Z · ╰── 'ScrollView' is imported here 2026-10-24T03:20:26.0453366Z 116 │ StyleSheet, 2026-10-24T03:20:26.0453417Z ╰──── 2026-10-24T03:20:26.0453582Z  help: Consider removing this import. 2026-10-24T03:20:26.0453613Z 2026-10-24T03:20:26.0453814Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T03:20:26.0453948Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T03:20:26.0454009Z 116 │ StyleSheet, 2026-10-24T03:20:26.0454076Z 117 │ Text as NativeText, 2026-10-24T03:20:26.0454156Z ·  ─────┬──── 2026-10-24T03:20:26.0454295Z · ╰── 'NativeText' is imported here 2026-10-24T03:20:26.0454362Z 118 │ type ColorValue, 2026-10-24T03:20:26.0454414Z ╰──── 2026-10-24T03:20:26.0454511Z  help: Consider removing this import. 2026-10-24T03:20:26.0454513Z 2026-10-24T03:20:26.0454737Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T03:20:26.0454875Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T03:20:26.0455016Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T03:20:26.0455144Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T03:20:26.0455233Z ·  ─────────┬──────── 2026-10-24T03:20:26.0455389Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T03:20:26.0455539Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T03:20:26.0455590Z ╰──── 2026-10-24T03:20:26.0455685Z  help: Consider removing this import. 2026-10-24T03:20:26.0455688Z 2026-10-24T03:20:26.0455917Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T03:20:26.0456054Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T03:20:26.0456190Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T03:20:26.0456316Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T03:20:26.0456405Z ·  ─────────┬───────── 2026-10-24T03:20:26.0456564Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T03:20:26.0456623Z 144 │ import { 2026-10-24T03:20:26.0456675Z ╰──── 2026-10-24T03:20:26.0456770Z  help: Consider removing this import. 2026-10-24T03:20:26.0456772Z 2026-10-24T03:20:26.0456988Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T03:20:26.0457126Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T03:20:26.0457279Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T03:20:26.0457411Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T03:20:26.0457501Z ·  ────────┬─────── 2026-10-24T03:20:26.0457652Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T03:20:26.0457794Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T03:20:26.0457844Z ╰──── 2026-10-24T03:20:26.0457940Z  help: Consider removing this import. 2026-10-24T03:20:26.0457943Z 2026-10-24T03:20:26.0458166Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T03:20:26.0458374Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T03:20:26.0458491Z 160 │ attachmentVideoPreviewSource, 2026-10-24T03:20:26.0458564Z 161 │ mediaVideoPreviewUri, 2026-10-24T03:20:26.0458744Z ·  ──────────┬───────── 2026-10-24T03:20:26.0458901Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T03:20:26.0458974Z 162 │ mediaVideoThumbnailKey, 2026-10-24T03:20:26.0459030Z ╰──── 2026-10-24T03:20:26.0459126Z  help: Consider removing this import. 2026-10-24T03:20:26.0459128Z 2026-10-24T03:20:26.0459354Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T03:20:26.0459485Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T03:20:26.0459562Z 161 │ mediaVideoPreviewUri, 2026-10-24T03:20:26.0459636Z 162 │ mediaVideoThumbnailKey, 2026-10-24T03:20:26.0459726Z ·  ───────────┬────────── 2026-10-24T03:20:26.0459884Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T03:20:26.0459965Z 163 │ type MediaVideoPreviewSource, 2026-10-24T03:20:26.0460019Z ╰──── 2026-10-24T03:20:26.0460116Z  help: Consider removing this import. 2026-10-24T03:20:26.0460119Z 2026-10-24T03:20:26.0460334Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T03:20:26.0460466Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T03:20:26.0460538Z 162 │ mediaVideoThumbnailKey, 2026-10-24T03:20:26.0460618Z 163 │ type MediaVideoPreviewSource, 2026-10-24T03:20:26.0460720Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0460888Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T03:20:26.0460974Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T03:20:26.0461025Z ╰──── 2026-10-24T03:20:26.0461120Z  help: Consider removing this import. 2026-10-24T03:20:26.0461122Z 2026-10-24T03:20:26.0461324Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T03:20:26.0461459Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T03:20:26.0461635Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T03:20:26.0461775Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T03:20:26.0461870Z ·  ───────┬─────── 2026-10-24T03:20:26.0462023Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T03:20:26.0462084Z 172 │ import { 2026-10-24T03:20:26.0462136Z ╰──── 2026-10-24T03:20:26.0462228Z  help: Consider removing this import. 2026-10-24T03:20:26.0462231Z 2026-10-24T03:20:26.0462461Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T03:20:26.0462638Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T03:20:26.0462697Z 185 │ import { 2026-10-24T03:20:26.0462771Z 186 │ resolveMarkdownFontSizes, 2026-10-24T03:20:26.0462863Z ·  ────────────┬─────────── 2026-10-24T03:20:26.0463026Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T03:20:26.0463204Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T03:20:26.0463294Z ╰──── 2026-10-24T03:20:26.0463390Z  help: Consider removing this import. 2026-10-24T03:20:26.0463392Z 2026-10-24T03:20:26.0463618Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T03:20:26.0463753Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T03:20:26.0463886Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T03:20:26.0464024Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T03:20:26.0464120Z ·  ───────────┬────────── 2026-10-24T03:20:26.0464284Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T03:20:26.0464341Z 192 │ import { 2026-10-24T03:20:26.0464399Z ╰──── 2026-10-24T03:20:26.0464498Z  help: Consider removing this import. 2026-10-24T03:20:26.0464500Z 2026-10-24T03:20:26.0464764Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T03:20:26.0464898Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T03:20:26.0464977Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T03:20:26.0465074Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T03:20:26.0465186Z ·  ──────────────────┬────────────────── 2026-10-24T03:20:26.0465383Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T03:20:26.0465457Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T03:20:26.0465510Z ╰──── 2026-10-24T03:20:26.0465612Z  help: Consider removing this import. 2026-10-24T03:20:26.0465617Z 2026-10-24T03:20:26.0465843Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T03:20:26.0465976Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T03:20:26.0466071Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T03:20:26.0466146Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T03:20:26.0466235Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0466397Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T03:20:26.0466484Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T03:20:26.0466535Z ╰──── 2026-10-24T03:20:26.0466631Z  help: Consider removing this import. 2026-10-24T03:20:26.0466635Z 2026-10-24T03:20:26.0466936Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T03:20:26.0467100Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T03:20:26.0467204Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T03:20:26.0467352Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T03:20:26.0467452Z ·  ────────────┬─────────── 2026-10-24T03:20:26.0467624Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T03:20:26.0467686Z 235 │ import { 2026-10-24T03:20:26.0467741Z ╰──── 2026-10-24T03:20:26.0467838Z  help: Consider removing this import. 2026-10-24T03:20:26.0467840Z 2026-10-24T03:20:26.0468063Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T03:20:26.0468203Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T03:20:26.0468270Z 237 │ useAssetUrl, 2026-10-24T03:20:26.0468338Z 238 │ useAssetUrlState, 2026-10-24T03:20:26.0468423Z ·  ────────┬─────── 2026-10-24T03:20:26.0468573Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T03:20:26.0468647Z 239 │ useRefreshAssetUrl, 2026-10-24T03:20:26.0468699Z ╰──── 2026-10-24T03:20:26.0468798Z  help: Consider removing this import. 2026-10-24T03:20:26.0468801Z 2026-10-24T03:20:26.0469007Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0469149Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T03:20:26.0469230Z 2140 │ setExpandedFile(null); 2026-10-24T03:20:26.0469397Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T03:20:26.0469630Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T03:20:26.0469931Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T03:20:26.0470133Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T03:20:26.0470306Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T03:20:26.0470460Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T03:20:26.0470520Z ╰──── 2026-10-24T03:20:26.0470822Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0471140Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0471143Z 2026-10-24T03:20:26.0471352Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0471494Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T03:20:26.0471597Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T03:20:26.0471714Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T03:20:26.0471873Z ·  ──────┬────── 2026-10-24T03:20:26.0472065Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T03:20:26.0472125Z 2610 │ 2026-10-24T03:20:26.0472180Z ╰──── 2026-10-24T03:20:26.0472510Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0472829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0472831Z 2026-10-24T03:20:26.0473036Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0473176Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T03:20:26.0473238Z 2624 │ } 2026-10-24T03:20:26.0473376Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T03:20:26.0473464Z ·  ──────┬───── 2026-10-24T03:20:26.0473619Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T03:20:26.0473677Z 2626 │ 2026-10-24T03:20:26.0473735Z ╰──── 2026-10-24T03:20:26.0474059Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0474437Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0474468Z 2026-10-24T03:20:26.0474692Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0474867Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T03:20:26.0474966Z 2781 │ } 2026-10-24T03:20:26.0475191Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T03:20:26.0475417Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T03:20:26.0475709Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T03:20:26.0475951Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T03:20:26.0476145Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T03:20:26.0476361Z 2783 │ 2026-10-24T03:20:26.0476429Z ╰──── 2026-10-24T03:20:26.0476758Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0477107Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0477110Z 2026-10-24T03:20:26.0477332Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:20:26.0477492Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T03:20:26.0477585Z 612 │ }; 2026-10-24T03:20:26.0477741Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T03:20:26.0478030Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T03:20:26.0478358Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T03:20:26.0478577Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T03:20:26.0478776Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T03:20:26.0478866Z 614 │ ); 2026-10-24T03:20:26.0478957Z ╰──── 2026-10-24T03:20:26.0479300Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0479660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0479666Z 2026-10-24T03:20:26.0479994Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T03:20:26.0480140Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T03:20:26.0480273Z 7 │ () => 2026-10-24T03:20:26.0480357Z 8 │ Gesture.Hover() 2026-10-24T03:20:26.0480469Z ·  ──┬── 2026-10-24T03:20:26.0480638Z · ╰── `Hover` may be a component 2026-10-24T03:20:26.0480758Z 9 │ .manualActivation(true) 2026-10-24T03:20:26.0480839Z ╰──── 2026-10-24T03:20:26.0481162Z  help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T03:20:26.0481649Z  note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T03:20:26.0481652Z 2026-10-24T03:20:26.0481881Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T03:20:26.0482108Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T03:20:26.0482200Z 3 │ AuthProvidersManageScope, 2026-10-24T03:20:26.0482306Z 4 │ type AuthSessionState, 2026-10-24T03:20:26.0482423Z ·  ────────┬─────── 2026-10-24T03:20:26.0482647Z · ╰── 'AuthSessionState' is imported here 2026-10-24T03:20:26.0482809Z 5 │ type EnvironmentId, 2026-10-24T03:20:26.0483030Z ╰──── 2026-10-24T03:20:26.0483169Z  help: Consider removing this import. 2026-10-24T03:20:26.0483172Z 2026-10-24T03:20:26.0483459Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0483641Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-24T03:20:26.0483742Z 510 │ }, []); 2026-10-24T03:20:26.0483840Z 511 │ useEffect(() => { 2026-10-24T03:20:26.0483954Z ·  ────┬──── 2026-10-24T03:20:26.0484094Z · ╰── This is the containing effect 2026-10-24T03:20:26.0484238Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T03:20:26.0484365Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0484582Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0484703Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T03:20:26.0484792Z ╰──── 2026-10-24T03:20:26.0485435Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0485797Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0485800Z 2026-10-24T03:20:26.0486097Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0486260Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-24T03:20:26.0486471Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T03:20:26.0486664Z 870 │ useEffect(() => { 2026-10-24T03:20:26.0486773Z ·  ────┬──── 2026-10-24T03:20:26.0486919Z · ╰── This is the containing effect 2026-10-24T03:20:26.0487118Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T03:20:26.0487274Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T03:20:26.0487411Z ·  ─────────────┬──────────── 2026-10-24T03:20:26.0487605Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0487694Z 873 │ } 2026-10-24T03:20:26.0487803Z ╰──── 2026-10-24T03:20:26.0488445Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0488802Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0488804Z 2026-10-24T03:20:26.0489089Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0489345Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-24T03:20:26.0489479Z 1117 │ 2026-10-24T03:20:26.0489578Z 1118 │ useEffect(() => { 2026-10-24T03:20:26.0489684Z ·  ────┬──── 2026-10-24T03:20:26.0489825Z · ╰── This is the containing effect 2026-10-24T03:20:26.0490055Z 1119 │ setAnchorMessageId(null); 2026-10-24T03:20:26.0490176Z ·  ─────────┬──────── 2026-10-24T03:20:26.0490383Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0490481Z 1120 │ setSubmittedMessageId(null); 2026-10-24T03:20:26.0490579Z ╰──── 2026-10-24T03:20:26.0491230Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0491588Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0491591Z 2026-10-24T03:20:26.0491829Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0491990Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-24T03:20:26.0492136Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T03:20:26.0492269Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T03:20:26.0492446Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T03:20:26.0492721Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T03:20:26.0492929Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T03:20:26.0493097Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T03:20:26.0493181Z ╰──── 2026-10-24T03:20:26.0493498Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0493852Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0493854Z 2026-10-24T03:20:26.0494215Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0494409Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T03:20:26.0494534Z 1066 │ userInputInsetProgress.set(1); 2026-10-24T03:20:26.0494714Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T03:20:26.0494851Z ·  ────────────┬─────────── 2026-10-24T03:20:26.0495073Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T03:20:26.0495219Z 1068 │ const showContent = props.showContent ?? true; 2026-10-24T03:20:26.0495286Z ╰──── 2026-10-24T03:20:26.0495611Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0496051Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0496089Z 2026-10-24T03:20:26.0496330Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0496521Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-24T03:20:26.0496607Z 1124 │ freeze.set(false); 2026-10-24T03:20:26.0496733Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-24T03:20:26.0496877Z ·  ────────┬──────── 2026-10-24T03:20:26.0497077Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T03:20:26.0497255Z 1126 │ 2026-10-24T03:20:26.0497336Z ╰──── 2026-10-24T03:20:26.0497701Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0498052Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0498055Z 2026-10-24T03:20:26.0498248Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0498416Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-24T03:20:26.0498565Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T03:20:26.0498834Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-24T03:20:26.0498969Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0499146Z · ╰── `floatingControlCoverage` originates here 2026-10-24T03:20:26.0499305Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T03:20:26.0499422Z 953 │ ); 2026-10-24T03:20:26.0499521Z 954 │ useEffect(() => { 2026-10-24T03:20:26.0499645Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-24T03:20:26.0499770Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0499978Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T03:20:26.0500145Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T03:20:26.0500213Z ╰──── 2026-10-24T03:20:26.0500613Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0500958Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0500964Z 2026-10-24T03:20:26.0501172Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0501356Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-24T03:20:26.0501558Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T03:20:26.0501720Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T03:20:26.0501871Z ·  ────────────────┬──────────────── 2026-10-24T03:20:26.0502100Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T03:20:26.0502244Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T03:20:26.0502334Z 966 │ ); 2026-10-24T03:20:26.0502562Z 967 │ useAnimatedReaction( 2026-10-24T03:20:26.0502719Z 968 │ () => 2026-10-24T03:20:26.0502828Z 969 │ contentInsetEndAdjustment.value + 2026-10-24T03:20:26.0502956Z 970 │ floatingControlCoverage.value + 2026-10-24T03:20:26.0503187Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T03:20:26.0503294Z 972 │ (value) => { 2026-10-24T03:20:26.0503433Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T03:20:26.0503682Z ·  ────────────────┬──────────────── 2026-10-24T03:20:26.0503911Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T03:20:26.0503993Z 974 │ }, 2026-10-24T03:20:26.0504076Z ╰──── 2026-10-24T03:20:26.0504487Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0504836Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0504839Z 2026-10-24T03:20:26.0505088Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T03:20:26.0505263Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T03:20:26.0505342Z 78 │ 2026-10-24T03:20:26.0505519Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T03:20:26.0505639Z ·  ────────┬─────── 2026-10-24T03:20:26.0505815Z · ╰── 'describeSchedule' is declared here 2026-10-24T03:20:26.0505959Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T03:20:26.0506063Z ╰──── 2026-10-24T03:20:26.0506201Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0506204Z 2026-10-24T03:20:26.0506453Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0506669Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T03:20:26.0506884Z 248 │ mountedRef.current = false; 2026-10-24T03:20:26.0506996Z 249 │ flow.setBranchQuery(""); 2026-10-24T03:20:26.0507100Z ·  ──┬─ 2026-10-24T03:20:26.0507253Z · ╰── Missing dependency `flow` 2026-10-24T03:20:26.0507346Z 250 │ }; 2026-10-24T03:20:26.0507467Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T03:20:26.0507588Z ·  ─────────┬───────── 2026-10-24T03:20:26.0507904Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T03:20:26.0508005Z 252 │ 2026-10-24T03:20:26.0508114Z ╰──── 2026-10-24T03:20:26.0508573Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0508924Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0508927Z 2026-10-24T03:20:26.0509429Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0509653Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T03:20:26.0509769Z 520 │ })).delivery; 2026-10-24T03:20:26.0510005Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T03:20:26.0510160Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0510408Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T03:20:26.0510569Z 524 │ │ id: task.id, 2026-10-24T03:20:26.0510721Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T03:20:26.0510863Z 526 │ │ })).delivery; 2026-10-24T03:20:26.0511025Z 527 │ ╰─▶ } 2026-10-24T03:20:26.0511183Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T03:20:26.0511279Z ╰──── 2026-10-24T03:20:26.0511281Z 2026-10-24T03:20:26.0511581Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0511779Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T03:20:26.0511843Z 211 │ }; 2026-10-24T03:20:26.0511971Z 212 │ useEffect(() => { 2026-10-24T03:20:26.0512079Z ·  ────┬──── 2026-10-24T03:20:26.0512245Z · ╰── This is the containing effect 2026-10-24T03:20:26.0512442Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T03:20:26.0512585Z 214 │ if (inserted) { 2026-10-24T03:20:26.0512703Z 215 │ setSelection((current) => 2026-10-24T03:20:26.0512822Z ·  ──────┬───── 2026-10-24T03:20:26.0513009Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0513299Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T03:20:26.0513402Z ╰──── 2026-10-24T03:20:26.0514044Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0514480Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0514514Z 2026-10-24T03:20:26.0514790Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0514997Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T03:20:26.0515115Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T03:20:26.0515216Z 285 │ useEffect(() => { 2026-10-24T03:20:26.0515304Z ·  ────┬──── 2026-10-24T03:20:26.0515461Z · ╰── This is the containing effect 2026-10-24T03:20:26.0515670Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T03:20:26.0515859Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T03:20:26.0515947Z 288 │ const now = Date.now(); 2026-10-24T03:20:26.0516095Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T03:20:26.0516193Z 290 │ if ( 2026-10-24T03:20:26.0516311Z 291 │ lastRequest?.key === key && 2026-10-24T03:20:26.0516464Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T03:20:26.0516652Z 293 │ ) 2026-10-24T03:20:26.0516745Z 294 │ return; 2026-10-24T03:20:26.0516980Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T03:20:26.0517083Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T03:20:26.0517215Z ·  ────────────┬─────────── 2026-10-24T03:20:26.0517436Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0517537Z 297 │ return; 2026-10-24T03:20:26.0517632Z ╰──── 2026-10-24T03:20:26.0518246Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0518606Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0518609Z 2026-10-24T03:20:26.0518838Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0519056Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T03:20:26.0519148Z 325 │ }, [ 2026-10-24T03:20:26.0519232Z 326 │ draftMessage, 2026-10-24T03:20:26.0519347Z ·  ──────┬───── 2026-10-24T03:20:26.0519529Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T03:20:26.0519636Z 327 │ environmentId, 2026-10-24T03:20:26.0519806Z ╰──── 2026-10-24T03:20:26.0520137Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0520475Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0520478Z 2026-10-24T03:20:26.0520899Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0521131Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T03:20:26.0521220Z 58 │ 2026-10-24T03:20:26.0521315Z 59 │ useEffect(() => { 2026-10-24T03:20:26.0525423Z ·  ────┬──── 2026-10-24T03:20:26.0525589Z · ╰── This is the containing effect 2026-10-24T03:20:26.0525673Z 60 │ setMountedModes((current) => { 2026-10-24T03:20:26.0525755Z ·  ───────┬─────── 2026-10-24T03:20:26.0525928Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0526014Z 61 │ if (current.has(props.mode)) { 2026-10-24T03:20:26.0526069Z ╰──── 2026-10-24T03:20:26.0526682Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0527014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0527017Z 2026-10-24T03:20:26.0527283Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0527449Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T03:20:26.0527516Z 259 │ .join("|"); 2026-10-24T03:20:26.0527582Z 260 │ useEffect(() => { 2026-10-24T03:20:26.0527657Z ·  ────┬──── 2026-10-24T03:20:26.0527797Z · ╰── This is the containing effect 2026-10-24T03:20:26.0527862Z 261 │ stop(); 2026-10-24T03:20:26.0527932Z ·  ──┬─ 2026-10-24T03:20:26.0528099Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0528167Z 262 │ }, [orderVersion]); 2026-10-24T03:20:26.0528221Z ╰──── 2026-10-24T03:20:26.0528822Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0529153Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0529158Z 2026-10-24T03:20:26.0529379Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0529543Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T03:20:26.0529610Z 260 │ useEffect(() => { 2026-10-24T03:20:26.0529670Z 261 │ stop(); 2026-10-24T03:20:26.0529739Z ·  ──┬─ 2026-10-24T03:20:26.0529869Z · ╰── Missing dependency `stop` 2026-10-24T03:20:26.0529935Z 262 │ }, [orderVersion]); 2026-10-24T03:20:26.0530015Z ·  ──────┬───── 2026-10-24T03:20:26.0530167Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T03:20:26.0530230Z 263 │ useEffect( 2026-10-24T03:20:26.0530384Z ╰──── 2026-10-24T03:20:26.0530846Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0531161Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0531164Z 2026-10-24T03:20:26.0531313Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0531474Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T03:20:26.0531554Z 95 │ const latest = useRef(props); 2026-10-24T03:20:26.0531623Z 96 │ latest.current = props; 2026-10-24T03:20:26.0531738Z ·  ───┬──────┬─── 2026-10-24T03:20:26.0531924Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0532043Z · ╰── This value is a ref 2026-10-24T03:20:26.0532114Z 97 │ const gesture = useMemo( 2026-10-24T03:20:26.0532166Z ╰──── 2026-10-24T03:20:26.0532664Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0532960Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0532963Z 2026-10-24T03:20:26.0533116Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0533283Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T03:20:26.0533349Z 103 │ .runOnJS(true) 2026-10-24T03:20:26.0533453Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T03:20:26.0533572Z ·  ───────────────┬────────────── 2026-10-24T03:20:26.0533781Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0533919Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0533972Z ╰──── 2026-10-24T03:20:26.0534449Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0534743Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0534745Z 2026-10-24T03:20:26.0534892Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0535055Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T03:20:26.0535158Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T03:20:26.0535290Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0535436Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T03:20:26.0535730Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0535889Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0535943Z ╰──── 2026-10-24T03:20:26.0536412Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0536708Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0536711Z 2026-10-24T03:20:26.0536857Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0537024Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T03:20:26.0537156Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0537280Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0537426Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T03:20:26.0537634Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0537760Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T03:20:26.0537811Z ╰──── 2026-10-24T03:20:26.0538278Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0538578Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0538583Z 2026-10-24T03:20:26.0538855Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0539018Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T03:20:26.0539142Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0539265Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T03:20:26.0539409Z ·  ───────────────────────┬────────────────────── 2026-10-24T03:20:26.0539720Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0539828Z 108 │ [props.disabled], 2026-10-24T03:20:26.0539882Z ╰──── 2026-10-24T03:20:26.0540350Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0540643Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0540646Z 2026-10-24T03:20:26.0540793Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0540955Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T03:20:26.0541073Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T03:20:26.0541185Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T03:20:26.0541293Z ·  ───┬──────┬─── 2026-10-24T03:20:26.0541476Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0541595Z · ╰── This value is a ref 2026-10-24T03:20:26.0541654Z 250 │ 2026-10-24T03:20:26.0541708Z ╰──── 2026-10-24T03:20:26.0542172Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0542503Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0542508Z 2026-10-24T03:20:26.0542656Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0542818Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T03:20:26.0542937Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T03:20:26.0543055Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T03:20:26.0543183Z ·  ──────────────────┬────────────────── 2026-10-24T03:20:26.0543352Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0543464Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T03:20:26.0543516Z ╰──── 2026-10-24T03:20:26.0543990Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0544286Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0544288Z 2026-10-24T03:20:26.0544460Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T03:20:26.0544621Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T03:20:26.0544687Z 323 │ update(0); 2026-10-24T03:20:26.0544772Z 324 │ let last = performance.now(); 2026-10-24T03:20:26.0544870Z ·  ────────┬──────── 2026-10-24T03:20:26.0545082Z · ╰── Cannot call impure function 2026-10-24T03:20:26.0545183Z 325 │ const tick = () => { 2026-10-24T03:20:26.0545237Z ╰──── 2026-10-24T03:20:26.0545541Z  help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T03:20:26.0545843Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T03:20:26.0545846Z 2026-10-24T03:20:26.0546038Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T03:20:26.0546199Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T03:20:26.0546260Z  98 │ () => 2026-10-24T03:20:26.0546333Z  99 │ Gesture.Pan() 2026-10-24T03:20:26.0546411Z ·  ─┬─ 2026-10-24T03:20:26.0546544Z · ╰── `Pan` may be a component 2026-10-24T03:20:26.0546626Z 100 │ .enabled(!props.disabled) 2026-10-24T03:20:26.0546679Z ╰──── 2026-10-24T03:20:26.0546956Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T03:20:26.0547405Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T03:20:26.0547408Z 2026-10-24T03:20:26.0547600Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T03:20:26.0547767Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T03:20:26.0547838Z 103 │ .runOnJS(true) 2026-10-24T03:20:26.0547938Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T03:20:26.0548028Z ·  ───┬── 2026-10-24T03:20:26.0548465Z · ╰── Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T03:20:26.0548599Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0548723Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T03:20:26.0548848Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T03:20:26.0548923Z 108 │ [props.disabled], 2026-10-24T03:20:26.0549009Z ·  ────────┬─────── 2026-10-24T03:20:26.0549199Z · ╰── This dependency list is missing values used by the callback 2026-10-24T03:20:26.0549256Z 109 │ ); 2026-10-24T03:20:26.0549308Z ╰──── 2026-10-24T03:20:26.0549516Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T03:20:26.0549828Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0549831Z 2026-10-24T03:20:26.0549989Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0550228Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T03:20:26.0550320Z 107 │ ); 2026-10-24T03:20:26.0550475Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T03:20:26.0550566Z ·  ─────────┬──────── 2026-10-24T03:20:26.0550721Z · ╰── `separationProgress` originates here 2026-10-24T03:20:26.0550776Z 109 │ 2026-10-24T03:20:26.0550841Z 110 │ useEffect(() => { 2026-10-24T03:20:26.0551017Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T03:20:26.0551103Z ·  ─────────┬──────── 2026-10-24T03:20:26.0551256Z · ╰── `separationProgress` cannot be modified 2026-10-24T03:20:26.0551369Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T03:20:26.0551422Z ╰──── 2026-10-24T03:20:26.0551697Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0552010Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0552012Z 2026-10-24T03:20:26.0552169Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0552334Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T03:20:26.0552448Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T03:20:26.0552596Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T03:20:26.0552679Z ·  ──────┬───── 2026-10-24T03:20:26.0552821Z · ╰── `capsuleWidth` originates here 2026-10-24T03:20:26.0552937Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T03:20:26.0553055Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0553163Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T03:20:26.0553260Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T03:20:26.0553324Z 134 │ return; 2026-10-24T03:20:26.0553380Z 135 │ } 2026-10-24T03:20:26.0553489Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T03:20:26.0553576Z 137 │ measuredWidthRef.current = width; 2026-10-24T03:20:26.0553721Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T03:20:26.0553801Z ·  ──────┬───── 2026-10-24T03:20:26.0553948Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T03:20:26.0554005Z 139 │ }; 2026-10-24T03:20:26.0554058Z ╰──── 2026-10-24T03:20:26.0554325Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0554632Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0554635Z 2026-10-24T03:20:26.0554792Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0554958Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T03:20:26.0555070Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T03:20:26.0555261Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T03:20:26.0555374Z ·  ──────┬───── 2026-10-24T03:20:26.0555513Z · ╰── `capsuleWidth` originates here 2026-10-24T03:20:26.0555624Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T03:20:26.0555741Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0555845Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T03:20:26.0555943Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T03:20:26.0556004Z 134 │ return; 2026-10-24T03:20:26.0556059Z 135 │ } 2026-10-24T03:20:26.0556164Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T03:20:26.0556253Z 137 │ measuredWidthRef.current = width; 2026-10-24T03:20:26.0556396Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T03:20:26.0556455Z 139 │ }; 2026-10-24T03:20:26.0556547Z 140 │ const hasStatus = props.status !== null; 2026-10-24T03:20:26.0556681Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T03:20:26.0556748Z 142 │ useEffect(() => { 2026-10-24T03:20:26.0556816Z 143 │ if (!hasStatus) { 2026-10-24T03:20:26.0556903Z 144 │ measuredWidthRef.current = null; 2026-10-24T03:20:26.0556983Z 145 │ capsuleWidth.value = null; 2026-10-24T03:20:26.0557062Z ·  ──────┬───── 2026-10-24T03:20:26.0557203Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T03:20:26.0557258Z 146 │ } 2026-10-24T03:20:26.0557311Z ╰──── 2026-10-24T03:20:26.0557574Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0557887Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0557892Z 2026-10-24T03:20:26.0558096Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:20:26.0558264Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T03:20:26.0558401Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T03:20:26.0558467Z 142 │ useEffect(() => { 2026-10-24T03:20:26.0558545Z ·  ───┬─── 2026-10-24T03:20:26.0558768Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T03:20:26.0558835Z 143 │ if (!hasStatus) { 2026-10-24T03:20:26.0558928Z 144 │ measuredWidthRef.current = null; 2026-10-24T03:20:26.0559008Z 145 │ capsuleWidth.value = null; 2026-10-24T03:20:26.0559086Z ·  ──────┬───── 2026-10-24T03:20:26.0559222Z · ╰── This modifies `capsuleWidth` 2026-10-24T03:20:26.0559278Z 146 │ } 2026-10-24T03:20:26.0559328Z ╰──── 2026-10-24T03:20:26.0559675Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T03:20:26.0559982Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0559985Z 2026-10-24T03:20:26.0560259Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:20:26.0560459Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T03:20:26.0560571Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T03:20:26.0560690Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T03:20:26.0560816Z ·  ───────────────┬─────────────── 2026-10-24T03:20:26.0561059Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T03:20:26.0561164Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T03:20:26.0561264Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T03:20:26.0561325Z 134 │ return; 2026-10-24T03:20:26.0561381Z 135 │ } 2026-10-24T03:20:26.0561493Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T03:20:26.0561582Z 137 │ measuredWidthRef.current = width; 2026-10-24T03:20:26.0561725Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T03:20:26.0561803Z ·  ──────┬───── 2026-10-24T03:20:26.0561937Z · ╰── This modifies `capsuleWidth` 2026-10-24T03:20:26.0561994Z 139 │ }; 2026-10-24T03:20:26.0562046Z ╰──── 2026-10-24T03:20:26.0562387Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T03:20:26.0562726Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0562735Z 2026-10-24T03:20:26.0562999Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0563195Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T03:20:26.0563248Z 104 │ 2026-10-24T03:20:26.0563314Z 105 │ useEffect(() => { 2026-10-24T03:20:26.0563386Z ·  ────┬──── 2026-10-24T03:20:26.0563516Z · ╰── This is the containing effect 2026-10-24T03:20:26.0563597Z 106 │ clearReviewCommentTarget(); 2026-10-24T03:20:26.0563696Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T03:20:26.0563804Z ·  ────────────────┬─────────────── 2026-10-24T03:20:26.0564055Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0564163Z 108 │ }, [selectedSection?.id]); 2026-10-24T03:20:26.0564217Z ╰──── 2026-10-24T03:20:26.0564827Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0565154Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0565157Z 2026-10-24T03:20:26.0565416Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0565609Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T03:20:26.0565665Z 109 │ 2026-10-24T03:20:26.0565728Z 110 │ useEffect(() => { 2026-10-24T03:20:26.0565802Z ·  ────┬──── 2026-10-24T03:20:26.0565932Z · ╰── This is the containing effect 2026-10-24T03:20:26.0566022Z 111 │ if (activeCommentTarget === null) { 2026-10-24T03:20:26.0566122Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T03:20:26.0566232Z ·  ────────────────┬─────────────── 2026-10-24T03:20:26.0566411Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0566469Z 113 │ } 2026-10-24T03:20:26.0566521Z ╰──── 2026-10-24T03:20:26.0567127Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0567456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0567458Z 2026-10-24T03:20:26.0567661Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0567849Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T03:20:26.0567946Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T03:20:26.0568020Z 108 │ }, [selectedSection?.id]); 2026-10-24T03:20:26.0568116Z ·  ─────────┬───────── 2026-10-24T03:20:26.0568280Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T03:20:26.0568332Z 109 │ 2026-10-24T03:20:26.0568385Z ╰──── 2026-10-24T03:20:26.0568680Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0568993Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0568996Z 2026-10-24T03:20:26.0569194Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T03:20:26.0569337Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T03:20:26.0569470Z 1 │ import type { 2026-10-24T03:20:26.0569666Z 2 │ EnvironmentId, 2026-10-24T03:20:26.0569741Z ·  ──────┬────── 2026-10-24T03:20:26.0569880Z · ╰── 'EnvironmentId' is imported here 2026-10-24T03:20:26.0569967Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T03:20:26.0570019Z ╰──── 2026-10-24T03:20:26.0570117Z  help: Consider removing this import. 2026-10-24T03:20:26.0570120Z 2026-10-24T03:20:26.0570325Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T03:20:26.0570460Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T03:20:26.0570533Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T03:20:26.0570601Z 3 │ type AuthSessionState, 2026-10-24T03:20:26.0570686Z ·  ────────┬─────── 2026-10-24T03:20:26.0570841Z · ╰── 'AuthSessionState' is imported here 2026-10-24T03:20:26.0570911Z 4 │ sessionGrantsScope, 2026-10-24T03:20:26.0570961Z ╰──── 2026-10-24T03:20:26.0571060Z  help: Consider removing this import. 2026-10-24T03:20:26.0571063Z 2026-10-24T03:20:26.0571323Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0571493Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T03:20:26.0571546Z 100 │ 2026-10-24T03:20:26.0571612Z 101 │ useEffect(() => { 2026-10-24T03:20:26.0571685Z ·  ────┬──── 2026-10-24T03:20:26.0571816Z · ╰── This is the containing effect 2026-10-24T03:20:26.0571924Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T03:20:26.0572011Z 103 │ setHighlightedLinesById({}); 2026-10-24T03:20:26.0572105Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0572281Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0572343Z 104 │ return; 2026-10-24T03:20:26.0572395Z ╰──── 2026-10-24T03:20:26.0573029Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0573359Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0573365Z 2026-10-24T03:20:26.0573563Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0573714Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T03:20:26.0573824Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T03:20:26.0573919Z 223 │ 2026-10-24T03:20:26.0574028Z ·  ─────────────── 2026-10-24T03:20:26.0574122Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T03:20:26.0574174Z ╰──── 2026-10-24T03:20:26.0574323Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T03:20:26.0574326Z 2026-10-24T03:20:26.0574602Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0574780Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T03:20:26.0574857Z 226 │ { 2026-10-24T03:20:26.0575956Z ·  ────┬──── 2026-10-24T03:20:26.0576086Z · ╰── This is the containing effect 2026-10-24T03:20:26.0576155Z 57 │ scheduler.reset(); 2026-10-24T03:20:26.0576252Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T03:20:26.0576338Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T03:20:26.0576454Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T03:20:26.0576536Z ·  ───────┬─────── 2026-10-24T03:20:26.0576709Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0576837Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T03:20:26.0576888Z ╰──── 2026-10-24T03:20:26.0577500Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0577826Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0577828Z 2026-10-24T03:20:26.0578033Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0578209Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T03:20:26.0578289Z 62 │ return () => scheduler.cancel(); 2026-10-24T03:20:26.0578395Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T03:20:26.0578524Z ·  ───┬─── ─────┬───── 2026-10-24T03:20:26.0578836Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T03:20:26.0578976Z · ╰── Unnecessary dependency `enabled` 2026-10-24T03:20:26.0579029Z 64 │ 2026-10-24T03:20:26.0579081Z ╰──── 2026-10-24T03:20:26.0579376Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0579691Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0579694Z 2026-10-24T03:20:26.0579984Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T03:20:26.0580258Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T03:20:26.0580331Z 2 │ AuthFilesystemReadScope, 2026-10-24T03:20:26.0580403Z 3 │ type AuthSessionState, 2026-10-24T03:20:26.0580486Z ·  ────────┬─────── 2026-10-24T03:20:26.0580632Z · ╰── 'AuthSessionState' is imported here 2026-10-24T03:20:26.0580708Z 4 │ type FilesystemBrowseEntry, 2026-10-24T03:20:26.0580760Z ╰──── 2026-10-24T03:20:26.0580859Z  help: Consider removing this import. 2026-10-24T03:20:26.0580861Z 2026-10-24T03:20:26.0581054Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T03:20:26.0581194Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T03:20:26.0581315Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T03:20:26.0581394Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T03:20:26.0581468Z ·  ─┬─ 2026-10-24T03:20:26.0581594Z · ╰── 'Arr' is imported here 2026-10-24T03:20:26.0581679Z 5 │ import * as Order from "effect/Order"; 2026-10-24T03:20:26.0581730Z ╰──── 2026-10-24T03:20:26.0581829Z  help: Consider removing this import. 2026-10-24T03:20:26.0581831Z 2026-10-24T03:20:26.0582025Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T03:20:26.0582158Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T03:20:26.0582242Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T03:20:26.0582327Z 5 │ import * as Order from "effect/Order"; 2026-10-24T03:20:26.0582402Z ·  ──┬── 2026-10-24T03:20:26.0582565Z · ╰── 'Order' is imported here 2026-10-24T03:20:26.0582618Z 6 │ 2026-10-24T03:20:26.0582669Z ╰──── 2026-10-24T03:20:26.0582767Z  help: Consider removing this import. 2026-10-24T03:20:26.0582770Z 2026-10-24T03:20:26.0583245Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0583406Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T03:20:26.0583499Z 1679 │ yield* harness.replaceSession; 2026-10-24T03:20:26.0583793Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0583980Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T03:20:26.0584070Z 1682 │ │ break; 2026-10-24T03:20:26.0584148Z 1683 │ │ } 2026-10-24T03:20:26.0584259Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0584394Z 1685 │ ╰─▶ } 2026-10-24T03:20:26.0584468Z 1686 │ yield* Queue.offer( 2026-10-24T03:20:26.0584521Z ╰──── 2026-10-24T03:20:26.0584524Z 2026-10-24T03:20:26.0585002Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T03:20:26.0585164Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T03:20:26.0585258Z 1788 │ yield* harness.replaceSession; 2026-10-24T03:20:26.0585464Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T03:20:26.0585627Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T03:20:26.0585735Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T03:20:26.0585870Z 1792 │ ╰─▶ } 2026-10-24T03:20:26.0586002Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T03:20:26.0586059Z ╰──── 2026-10-24T03:20:26.0586065Z 2026-10-24T03:20:26.0586271Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0586408Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T03:20:26.0586492Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T03:20:26.0586600Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T03:20:26.0586746Z ·  ──────┬────── ────┬─── 2026-10-24T03:20:26.0586947Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T03:20:26.0587098Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T03:20:26.0587158Z 455 │ const { 2026-10-24T03:20:26.0587211Z ╰──── 2026-10-24T03:20:26.0587519Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0587836Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0587839Z 2026-10-24T03:20:26.0588026Z ⚠ react(static-components): Cannot create components during render 2026-10-24T03:20:26.0588161Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T03:20:26.0588226Z 492 │ // same check. 2026-10-24T03:20:26.0588354Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T03:20:26.0588477Z ·  ─────────────┬───────────── 2026-10-24T03:20:26.0588733Z · ╰── The component is created during render here 2026-10-24T03:20:26.0588919Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T03:20:26.0589041Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T03:20:26.0589175Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T03:20:26.0589268Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T03:20:26.0589346Z 498 │ setIsPullRefreshing(true); 2026-10-24T03:20:26.0589430Z 499 │ await refreshSelectedSection(); 2026-10-24T03:20:26.0589507Z 500 │ setIsPullRefreshing(false); 2026-10-24T03:20:26.0589561Z 501 │ }; 2026-10-24T03:20:26.0589705Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T03:20:26.0589855Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T03:20:26.0589966Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T03:20:26.0590051Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T03:20:26.0590142Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T03:20:26.0590210Z 507 │ files: reviewFiles, 2026-10-24T03:20:26.0590310Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T03:20:26.0590443Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T03:20:26.0590507Z 510 │ : undefined, 2026-10-24T03:20:26.0590604Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T03:20:26.0590729Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T03:20:26.0590792Z 513 │ : undefined, 2026-10-24T03:20:26.0590847Z 514 │ }); 2026-10-24T03:20:26.0591046Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T03:20:26.0591181Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T03:20:26.0591243Z 517 │ environmentId, 2026-10-24T03:20:26.0591306Z 518 │ threadId, 2026-10-24T03:20:26.0591373Z 519 │ selectedSection, 2026-10-24T03:20:26.0591443Z 520 │ nativeReviewDiffData, 2026-10-24T03:20:26.0591500Z 521 │ }); 2026-10-24T03:20:26.0591607Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T03:20:26.0591693Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T03:20:26.0591783Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T03:20:26.0591862Z 525 │ diff: selectedSection?.diff, 2026-10-24T03:20:26.0591940Z 526 │ data: nativeReviewDiffData, 2026-10-24T03:20:26.0592008Z 527 │ collapsedFileIds, 2026-10-24T03:20:26.0592076Z 528 │ viewedFileIds, 2026-10-24T03:20:26.0592190Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T03:20:26.0592287Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T03:20:26.0592343Z 531 │ }); 2026-10-24T03:20:26.0592415Z 532 │ const showcaseReviewKey = 2026-10-24T03:20:26.0592579Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T03:20:26.0592790Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T03:20:26.0592852Z 535 │ : null; 2026-10-24T03:20:26.0593019Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T03:20:26.0593097Z 537 │ nativeBridge.onDebug(event); 2026-10-24T03:20:26.0593155Z 538 │ if ( 2026-10-24T03:20:26.0593236Z 539 │ showcaseReviewKey === null || 2026-10-24T03:20:26.0593434Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T03:20:26.0593576Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T03:20:26.0593633Z 542 │ ) { 2026-10-24T03:20:26.0593694Z 543 │ return; 2026-10-24T03:20:26.0593747Z 544 │ } 2026-10-24T03:20:26.0593860Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T03:20:26.0594023Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T03:20:26.0594076Z 547 │ }; 2026-10-24T03:20:26.0594130Z 548 │ 2026-10-24T03:20:26.0594250Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T03:20:26.0594331Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T03:20:26.0594419Z 551 │ commentSelection.clearSelection(); 2026-10-24T03:20:26.0594548Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T03:20:26.0594630Z 553 │ toggleExpandedFile(fileId); 2026-10-24T03:20:26.0594684Z 554 │ } 2026-10-24T03:20:26.0594796Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T03:20:26.0594868Z 556 │ if (!nativeView) return; 2026-10-24T03:20:26.0594963Z 557 │ const result = await settlePromise(() => 2026-10-24T03:20:26.0595139Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T03:20:26.0595194Z 559 │ ); 2026-10-24T03:20:26.0595284Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T03:20:26.0595468Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T03:20:26.0595523Z 562 │ } 2026-10-24T03:20:26.0595576Z 563 │ }; 2026-10-24T03:20:26.0595660Z 564 │ const handleVisibleFileChange = ( 2026-10-24T03:20:26.0595799Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T03:20:26.0595860Z 566 │ ) => { 2026-10-24T03:20:26.0595969Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T03:20:26.0596138Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T03:20:26.0596193Z 569 │ }; 2026-10-24T03:20:26.0596272Z 570 │ const renderInspector = () => ( 2026-10-24T03:20:26.0596340Z 571 │ void handleSelectFile(fileId)} 2026-10-24T03:20:26.0596860Z 577 │ /> 2026-10-24T03:20:26.0596916Z 578 │ ); 2026-10-24T03:20:26.0596969Z 579 │ 2026-10-24T03:20:26.0597156Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T03:20:26.0597245Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T03:20:26.0597308Z 582 │ if (fileId) { 2026-10-24T03:20:26.0597390Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T03:20:26.0597469Z 584 │ toggleExpandedFile(fileId); 2026-10-24T03:20:26.0597523Z 585 │ } 2026-10-24T03:20:26.0597576Z 586 │ }; 2026-10-24T03:20:26.0597630Z 587 │ 2026-10-24T03:20:26.0597720Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T03:20:26.0597839Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T03:20:26.0597896Z 590 │ ) => { 2026-10-24T03:20:26.0598058Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T03:20:26.0598153Z 592 │ if (fileId) { 2026-10-24T03:20:26.0598230Z 593 │ toggleViewedFile(fileId); 2026-10-24T03:20:26.0598283Z 594 │ } 2026-10-24T03:20:26.0598338Z 595 │ }; 2026-10-24T03:20:26.0598390Z 596 │ 2026-10-24T03:20:26.0598461Z 597 │ const parsedDiffNotice = 2026-10-24T03:20:26.0598624Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T03:20:26.0598747Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T03:20:26.0598904Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T03:20:26.0599024Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T03:20:26.0599185Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T03:20:26.0599302Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T03:20:26.0599407Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T03:20:26.0599479Z 605 │ hasCachedSelectedDiff, 2026-10-24T03:20:26.0599545Z 606 │ hasAnyCachedDiff, 2026-10-24T03:20:26.0599600Z 607 │ }); 2026-10-24T03:20:26.0599688Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T03:20:26.0599775Z 609 │ void retryEnvironment(environmentId); 2026-10-24T03:20:26.0599829Z 610 │ }; 2026-10-24T03:20:26.0599915Z 611 │ const handleReturnToThread = () => { 2026-10-24T03:20:26.0599994Z 612 │ if (navigation.canGoBack()) { 2026-10-24T03:20:26.0600063Z 613 │ navigation.goBack(); 2026-10-24T03:20:26.0600125Z 614 │ return; 2026-10-24T03:20:26.0600178Z 615 │ } 2026-10-24T03:20:26.0600259Z 616 │ navigation.navigate("Thread", { 2026-10-24T03:20:26.0600354Z 617 │ environmentId: String(environmentId), 2026-10-24T03:20:26.0600434Z 618 │ threadId: String(threadId), 2026-10-24T03:20:26.0600492Z 619 │ }); 2026-10-24T03:20:26.0600545Z 620 │ }; 2026-10-24T03:20:26.0600622Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T03:20:26.0600695Z 622 │ selectedSection?.title, 2026-10-24T03:20:26.0600776Z 623 │ headerDiffSummary.additions, 2026-10-24T03:20:26.0600854Z 624 │ headerDiffSummary.deletions, 2026-10-24T03:20:26.0600909Z 625 │ ] 2026-10-24T03:20:26.0601017Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T03:20:26.0601083Z 627 │ .join(" · "); 2026-10-24T03:20:26.0601136Z 628 │ 2026-10-24T03:20:26.0601214Z 629 │ const showChangedFilesPane = 2026-10-24T03:20:26.0601286Z 630 │ !showConnectionNotice && 2026-10-24T03:20:26.0601361Z 631 │ selectedSection !== null && 2026-10-24T03:20:26.0601447Z 632 │ parsedDiff.kind === "files" && 2026-10-24T03:20:26.0601529Z 633 │ NativeReviewDiffView !== null; 2026-10-24T03:20:26.0601701Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T03:20:26.0601875Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T03:20:26.0601926Z 636 │ 2026-10-24T03:20:26.0601999Z 637 │ const listHeader = (() => { 2026-10-24T03:20:26.0602086Z 638 │ const children: ReactElement[] = []; 2026-10-24T03:20:26.0602140Z 639 │ 2026-10-24T03:20:26.0602203Z 640 │ if (error) { 2026-10-24T03:20:26.0602270Z 641 │ children.push( 2026-10-24T03:20:26.0602332Z 642 │ 2026-10-24T03:20:26.0603127Z 649 │ Review unavailable 2026-10-24T03:20:26.0603287Z 650 │ {error} 2026-10-24T03:20:26.0603347Z 651 │ , 2026-10-24T03:20:26.0603404Z 652 │ ); 2026-10-24T03:20:26.0603459Z 653 │ } 2026-10-24T03:20:26.0603511Z 654 │ 2026-10-24T03:20:26.0603582Z 655 │ if (parsedDiffNotice) { 2026-10-24T03:20:26.0603743Z 656 │ children.push(); 2026-10-24T03:20:26.0603799Z 657 │ } 2026-10-24T03:20:26.0603858Z 658 │ 2026-10-24T03:20:26.0603936Z 659 │ if (children.length === 0) { 2026-10-24T03:20:26.0604003Z 660 │ return null; 2026-10-24T03:20:26.0604058Z 661 │ } 2026-10-24T03:20:26.0604111Z 662 │ 2026-10-24T03:20:26.0604182Z 663 │ return <>{children}; 2026-10-24T03:20:26.0604239Z 664 │ })(); 2026-10-24T03:20:26.0604311Z 665 │ const headerSubtitle = [ 2026-10-24T03:20:26.0604390Z 666 │ headerDiffSummary.additions, 2026-10-24T03:20:26.0604469Z 667 │ headerDiffSummary.deletions, 2026-10-24T03:20:26.0604550Z 668 │ pendingReviewCommentCount > 0 2026-10-24T03:20:26.0604725Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T03:20:26.0604786Z 670 │ : null, 2026-10-24T03:20:26.0604840Z 671 │ ] 2026-10-24T03:20:26.0604906Z 672 │ .filter(Boolean) 2026-10-24T03:20:26.0604975Z 673 │ .join(" · "); 2026-10-24T03:20:26.0605113Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T03:20:26.0605168Z 675 │ 2026-10-24T03:20:26.0605228Z 676 │ return ( 2026-10-24T03:20:26.0605287Z 677 │ <> 2026-10-24T03:20:26.0605350Z 678 │ 2026-10-24T03:20:26.0606682Z 694 │ 2026-10-24T03:20:26.0606750Z 695 │ 2026-10-24T03:20:26.0606872Z 696 │ 2026-10-24T03:20:26.0606953Z 697 │ {showConnectionNotice ? ( 2026-10-24T03:20:26.0607094Z 698 │ 2026-10-24T03:20:26.0607266Z 699 │ 2026-10-24T03:20:26.0608318Z 711 │ 2026-10-24T03:20:26.0608479Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T03:20:26.0608540Z 713 │ 2026-10-24T03:20:26.0608981Z 719 │ 2026-10-24T03:20:26.0609338Z 723 │ {listHeader} 2026-10-24T03:20:26.0609464Z 724 │ 2026-10-24T03:20:26.0609550Z 725 │ (VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T03:20:26.0616601Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T03:20:26.0616724Z ·  ───────────┬────────── 2026-10-24T03:20:26.0616902Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0617027Z 123 │ const sessionRef = useRef(null); 2026-10-24T03:20:26.0617082Z ╰──── 2026-10-24T03:20:26.0617557Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0617852Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0617855Z 2026-10-24T03:20:26.0618001Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0618159Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T03:20:26.0618214Z 125 │ 2026-10-24T03:20:26.0618328Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:20:26.0618418Z ·  ─────────┬──────── 2026-10-24T03:20:26.0618570Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0618859Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:20:26.0618913Z ╰──── 2026-10-24T03:20:26.0619384Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0619677Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0619681Z 2026-10-24T03:20:26.0619831Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0619993Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T03:20:26.0620047Z 125 │ 2026-10-24T03:20:26.0620155Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:20:26.0620242Z ·  ─────────┬───────── 2026-10-24T03:20:26.0620392Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0620493Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:20:26.0620546Z ╰──── 2026-10-24T03:20:26.0621010Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0621394Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0621441Z 2026-10-24T03:20:26.0621585Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0621745Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T03:20:26.0621797Z 125 │ 2026-10-24T03:20:26.0621905Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:20:26.0622021Z ·  ─────────┬───────── 2026-10-24T03:20:26.0622192Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0622292Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:20:26.0622345Z ╰──── 2026-10-24T03:20:26.0622855Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0623148Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0623151Z 2026-10-24T03:20:26.0623295Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0623454Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T03:20:26.0623507Z 125 │ 2026-10-24T03:20:26.0623615Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:20:26.0623734Z ·  ──────────┬───────── 2026-10-24T03:20:26.0623901Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0624002Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:20:26.0624054Z ╰──── 2026-10-24T03:20:26.0624521Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0624812Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0624815Z 2026-10-24T03:20:26.0624958Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0625121Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T03:20:26.0625237Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:20:26.0625433Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:20:26.0625608Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T03:20:26.0625736Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T03:20:26.0625892Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T03:20:26.0626012Z 131 │ │ isFinished: status.isFinished, 2026-10-24T03:20:26.0626191Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T03:20:26.0626364Z 133 │ │ error: status.error, 2026-10-24T03:20:26.0626642Z 134 │ │ url: status.url, 2026-10-24T03:20:26.0626724Z 135 │ │ }); 2026-10-24T03:20:26.0626803Z 136 │ │ }, 2026-10-24T03:20:26.0627000Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T03:20:26.0627110Z 138 │ │ selectInput: (inputs) => { 2026-10-24T03:20:26.0627267Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T03:20:26.0627416Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T03:20:26.0627582Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T03:20:26.0627728Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T03:20:26.0627834Z 143 │ │ if (order !== known) { 2026-10-24T03:20:26.0627975Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T03:20:26.0628090Z 145 │ │ transform: (current) => ({ 2026-10-24T03:20:26.0628299Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T03:20:26.0628388Z 147 │ │ }), 2026-10-24T03:20:26.0628471Z 148 │ │ }); 2026-10-24T03:20:26.0628548Z 149 │ │ } 2026-10-24T03:20:26.0628689Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T03:20:26.0628774Z 151 │ │ }, 2026-10-24T03:20:26.0628909Z 152 │ ├─▶ }); 2026-10-24T03:20:26.0629148Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0629235Z 153 │ recorderRef.current = recorder; 2026-10-24T03:20:26.0629288Z ╰──── 2026-10-24T03:20:26.0629757Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0630051Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0630054Z 2026-10-24T03:20:26.0630204Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0630367Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T03:20:26.0630426Z 152 │ }); 2026-10-24T03:20:26.0630509Z 153 │ recorderRef.current = recorder; 2026-10-24T03:20:26.0630623Z ·  ─────┬─────────┬─── 2026-10-24T03:20:26.0630810Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0630928Z · ╰── This value is a ref 2026-10-24T03:20:26.0631035Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:20:26.0631086Z ╰──── 2026-10-24T03:20:26.0631626Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0631946Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0631948Z 2026-10-24T03:20:26.0632093Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0632253Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T03:20:26.0632338Z 153 │ recorderRef.current = recorder; 2026-10-24T03:20:26.0632565Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:20:26.0632653Z 155 │ │ recorder, 2026-10-24T03:20:26.0632789Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T03:20:26.0632908Z 157 │ │ requestPermission: async () => { 2026-10-24T03:20:26.0633072Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T03:20:26.0633265Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T03:20:26.0633344Z 160 │ │ }, 2026-10-24T03:20:26.0633485Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T03:20:26.0633622Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T03:20:26.0633760Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T03:20:26.0633880Z 164 │ │ onStateChange: (nextState) => 2026-10-24T03:20:26.0633974Z 165 │ │ setState({ 2026-10-24T03:20:26.0634076Z 166 │ │ state: nextState, 2026-10-24T03:20:26.0634216Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T03:20:26.0634346Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T03:20:26.0634426Z 169 │ │ }), 2026-10-24T03:20:26.0634556Z 170 │ ├─▶ }); 2026-10-24T03:20:26.0634756Z · ╰──── Cannot access ref value during render 2026-10-24T03:20:26.0634814Z 171 │ } 2026-10-24T03:20:26.0634866Z ╰──── 2026-10-24T03:20:26.0635341Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0635634Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0635636Z 2026-10-24T03:20:26.0635782Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0635940Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T03:20:26.0636021Z 153 │ recorderRef.current = recorder; 2026-10-24T03:20:26.0636124Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:20:26.0636237Z ·  ─────┬────────┬─── 2026-10-24T03:20:26.0636493Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0636639Z · ╰── This value is a ref 2026-10-24T03:20:26.0636703Z 155 │ recorder, 2026-10-24T03:20:26.0636757Z ╰──── 2026-10-24T03:20:26.0637222Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0637513Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0637515Z 2026-10-24T03:20:26.0637663Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0637825Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T03:20:26.0637914Z 184 │ return () => subscription.remove(); 2026-10-24T03:20:26.0637981Z 185 │ }, [controller]); 2026-10-24T03:20:26.0638056Z ·  ─────┬──── 2026-10-24T03:20:26.0638202Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0638256Z 186 │ 2026-10-24T03:20:26.0638307Z ╰──── 2026-10-24T03:20:26.0638773Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0639071Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0639076Z 2026-10-24T03:20:26.0639221Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0639378Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T03:20:26.0639465Z 184 │ return () => subscription.remove(); 2026-10-24T03:20:26.0639530Z 185 │ }, [controller]); 2026-10-24T03:20:26.0639608Z ·  ──────┬───── 2026-10-24T03:20:26.0639751Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0639804Z 186 │ 2026-10-24T03:20:26.0639855Z ╰──── 2026-10-24T03:20:26.0640327Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0640622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0640624Z 2026-10-24T03:20:26.0640767Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0640923Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T03:20:26.0640981Z 191 │ }, 2026-10-24T03:20:26.0641053Z 192 │ [controller, recorder], 2026-10-24T03:20:26.0641131Z ·  ─────┬──── 2026-10-24T03:20:26.0641275Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0641330Z 193 │ ); 2026-10-24T03:20:26.0641382Z ╰──── 2026-10-24T03:20:26.0641924Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0642251Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0642254Z 2026-10-24T03:20:26.0642396Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0642593Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T03:20:26.0642684Z 174 │ const controller = session.controller; 2026-10-24T03:20:26.0642772Z 175 │ const recorder = recorderRef.current; 2026-10-24T03:20:26.0642880Z ·  ─────────┬───────── 2026-10-24T03:20:26.0643043Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0643096Z 176 │ 2026-10-24T03:20:26.0643147Z ╰──── 2026-10-24T03:20:26.0643611Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0643903Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0643906Z 2026-10-24T03:20:26.0644050Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0644213Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T03:20:26.0644271Z 191 │ }, 2026-10-24T03:20:26.0644342Z 192 │ [controller, recorder], 2026-10-24T03:20:26.0644433Z ·  ───────────┬────────── 2026-10-24T03:20:26.0644580Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0644636Z 193 │ ); 2026-10-24T03:20:26.0644686Z ╰──── 2026-10-24T03:20:26.0645155Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0645443Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0645511Z 2026-10-24T03:20:26.0645823Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0645981Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T03:20:26.0646076Z 245 │ return () => clearInterval(intervalId); 2026-10-24T03:20:26.0646189Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T03:20:26.0646277Z ·  ─────┬──── 2026-10-24T03:20:26.0646431Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0646486Z 247 │ 2026-10-24T03:20:26.0646538Z ╰──── 2026-10-24T03:20:26.0647011Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0647306Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0647308Z 2026-10-24T03:20:26.0647451Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0647611Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T03:20:26.0647702Z 245 │ return () => clearInterval(intervalId); 2026-10-24T03:20:26.0647813Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T03:20:26.0647943Z ·  ────────────────────────┬─────────────────────── 2026-10-24T03:20:26.0648105Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0648164Z 247 │ 2026-10-24T03:20:26.0648219Z ╰──── 2026-10-24T03:20:26.0648685Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0648977Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0648980Z 2026-10-24T03:20:26.0649124Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0649283Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T03:20:26.0649351Z 260 │ setOwnerFocused, 2026-10-24T03:20:26.0649412Z 261 │ session, 2026-10-24T03:20:26.0649489Z ·  ───┬─── 2026-10-24T03:20:26.0649630Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0649691Z 262 │ stop, 2026-10-24T03:20:26.0649743Z ╰──── 2026-10-24T03:20:26.0650211Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0650501Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0650503Z 2026-10-24T03:20:26.0650647Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0650876Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T03:20:26.0650973Z 250 │ 2026-10-24T03:20:26.0651115Z 251 │ ╭─▶ return { 2026-10-24T03:20:26.0651328Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T03:20:26.0651410Z 253 │ │ state, 2026-10-24T03:20:26.0651498Z 254 │ │ audioLevels, 2026-10-24T03:20:26.0651592Z 255 │ │ elapsedSeconds, 2026-10-24T03:20:26.0651723Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T03:20:26.0651808Z 257 │ │ ownerKey, 2026-10-24T03:20:26.0651886Z 258 │ │ label, 2026-10-24T03:20:26.0651978Z 259 │ │ focusedOwners, 2026-10-24T03:20:26.0652079Z 260 │ │ setOwnerFocused, 2026-10-24T03:20:26.0652165Z 261 │ │ session, 2026-10-24T03:20:26.0652241Z 262 │ │ stop, 2026-10-24T03:20:26.0652323Z 263 │ │ cancel, 2026-10-24T03:20:26.0652453Z 264 │ ├─▶ }; 2026-10-24T03:20:26.0652692Z · ╰──── Cannot access ref value during render 2026-10-24T03:20:26.0652748Z 265 │ } 2026-10-24T03:20:26.0652801Z ╰──── 2026-10-24T03:20:26.0653268Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0653564Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0653570Z 2026-10-24T03:20:26.0653728Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0653887Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T03:20:26.0654049Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T03:20:26.0654174Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T03:20:26.0654253Z ·  ─────┬───── 2026-10-24T03:20:26.0654390Z · ╰── `audioLevels` originates here 2026-10-24T03:20:26.0654515Z 123 │ const sessionRef = useRef(null); 2026-10-24T03:20:26.0654664Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T03:20:26.0654716Z 125 │ 2026-10-24T03:20:26.0654824Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T03:20:26.0654925Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T03:20:26.0655064Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T03:20:26.0655159Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T03:20:26.0655281Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T03:20:26.0655368Z 131 │ isFinished: status.isFinished, 2026-10-24T03:20:26.0655513Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T03:20:26.0655587Z 133 │ error: status.error, 2026-10-24T03:20:26.0655727Z 134 │ url: status.url, 2026-10-24T03:20:26.0655818Z 135 │ }); 2026-10-24T03:20:26.0655878Z 136 │ }, 2026-10-24T03:20:26.0656042Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T03:20:26.0656121Z 138 │ selectInput: (inputs) => { 2026-10-24T03:20:26.0656248Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T03:20:26.0656362Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T03:20:26.0656495Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T03:20:26.0656605Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T03:20:26.0656679Z 143 │ if (order !== known) { 2026-10-24T03:20:26.0656788Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T03:20:26.0656872Z 145 │ transform: (current) => ({ 2026-10-24T03:20:26.0657054Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T03:20:26.0657120Z 147 │ }), 2026-10-24T03:20:26.0657182Z 148 │ }); 2026-10-24T03:20:26.0657238Z 149 │ } 2026-10-24T03:20:26.0657348Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T03:20:26.0657405Z 151 │ }, 2026-10-24T03:20:26.0657463Z 152 │ }); 2026-10-24T03:20:26.0657544Z 153 │ recorderRef.current = recorder; 2026-10-24T03:20:26.0657646Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T03:20:26.0657710Z 155 │ recorder, 2026-10-24T03:20:26.0657811Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T03:20:26.0657895Z 157 │ requestPermission: async () => { 2026-10-24T03:20:26.0658034Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T03:20:26.0658194Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T03:20:26.0658252Z 160 │ }, 2026-10-24T03:20:26.0658362Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T03:20:26.0658470Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T03:20:26.0658574Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T03:20:26.0658763Z 164 │ onStateChange: (nextState) => 2026-10-24T03:20:26.0658828Z 165 │ setState({ 2026-10-24T03:20:26.0658901Z 166 │ state: nextState, 2026-10-24T03:20:26.0659012Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T03:20:26.0659112Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T03:20:26.0659170Z 169 │ }), 2026-10-24T03:20:26.0659225Z 170 │ }); 2026-10-24T03:20:26.0659287Z 171 │ } 2026-10-24T03:20:26.0659341Z 172 │ 2026-10-24T03:20:26.0659428Z 173 │ const session = sessionRef.current; 2026-10-24T03:20:26.0659517Z 174 │ const controller = session.controller; 2026-10-24T03:20:26.0659606Z 175 │ const recorder = recorderRef.current; 2026-10-24T03:20:26.0659658Z 176 │ 2026-10-24T03:20:26.0659724Z 177 │ useEffect(() => { 2026-10-24T03:20:26.0659876Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T03:20:26.0660017Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T03:20:26.0660156Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T03:20:26.0660263Z 181 │ // calls and route interruptions during capture. 2026-10-24T03:20:26.0660400Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T03:20:26.0660552Z 183 │ }); 2026-10-24T03:20:26.0660680Z 184 │ return () => subscription.remove(); 2026-10-24T03:20:26.0660746Z 185 │ }, [controller]); 2026-10-24T03:20:26.0660800Z 186 │ 2026-10-24T03:20:26.0660863Z 187 │ useEffect( 2026-10-24T03:20:26.0660924Z 188 │ () => () => { 2026-10-24T03:20:26.0660998Z 189 │ controller.dispose(); 2026-10-24T03:20:26.0661069Z 190 │ recorder.release(); 2026-10-24T03:20:26.0661125Z 191 │ }, 2026-10-24T03:20:26.0661195Z 192 │ [controller, recorder], 2026-10-24T03:20:26.0661252Z 193 │ ); 2026-10-24T03:20:26.0661305Z 194 │ 2026-10-24T03:20:26.0661367Z 195 │ useEffect(() => { 2026-10-24T03:20:26.0661462Z 196 │ if (state.phase !== "recording") return; 2026-10-24T03:20:26.0661515Z 197 │ 2026-10-24T03:20:26.0661671Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T03:20:26.0661779Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T03:20:26.0661863Z 200 │ void activation.catch(() => {}); 2026-10-24T03:20:26.0661927Z 201 │ return () => { 2026-10-24T03:20:26.0662078Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T03:20:26.0662217Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T03:20:26.0662272Z 204 │ }; 2026-10-24T03:20:26.0662352Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T03:20:26.0662406Z 206 │ 2026-10-24T03:20:26.0662497Z 207 │ useEffect(() => { 2026-10-24T03:20:26.0662634Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T03:20:26.0662686Z 209 │ 2026-10-24T03:20:26.0662808Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T03:20:26.0662969Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T03:20:26.0663076Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T03:20:26.0663157Z ·  ─────┬───── 2026-10-24T03:20:26.0663301Z · ╰── `audioLevels` cannot be modified 2026-10-24T03:20:26.0663356Z 213 │ } 2026-10-24T03:20:26.0663409Z ╰──── 2026-10-24T03:20:26.0663681Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0663991Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0663994Z 2026-10-24T03:20:26.0664201Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T03:20:26.0664366Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T03:20:26.0664420Z 206 │ 2026-10-24T03:20:26.0664485Z 207 │ useEffect(() => { 2026-10-24T03:20:26.0664563Z ·  ───┬─── 2026-10-24T03:20:26.0664784Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T03:20:26.0664923Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T03:20:26.0664977Z 209 │ 2026-10-24T03:20:26.0665097Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T03:20:26.0665254Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T03:20:26.0665430Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T03:20:26.0665540Z ·  ─────┬───── 2026-10-24T03:20:26.0665675Z · ╰── This modifies `audioLevels` 2026-10-24T03:20:26.0665733Z 213 │ } 2026-10-24T03:20:26.0665785Z ╰──── 2026-10-24T03:20:26.0666131Z  help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T03:20:26.0666436Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0666440Z 2026-10-24T03:20:26.0666597Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0666772Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T03:20:26.0666831Z 90 │ }) { 2026-10-24T03:20:26.0666944Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T03:20:26.0667019Z ·  ────┬─── 2026-10-24T03:20:26.0667153Z · ╰── `rotation` originates here 2026-10-24T03:20:26.0667223Z 92 │ useLayoutEffect(() => { 2026-10-24T03:20:26.0667365Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T03:20:26.0667437Z ·  ────┬─── 2026-10-24T03:20:26.0667570Z · ╰── `rotation` cannot be modified 2026-10-24T03:20:26.0667647Z 94 │ }, [props.hidden, rotation]); 2026-10-24T03:20:26.0667699Z ╰──── 2026-10-24T03:20:26.0667972Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0668282Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0668285Z 2026-10-24T03:20:26.0668443Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0668616Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T03:20:26.0668710Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T03:20:26.0668845Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T03:20:26.0668934Z ·  ────────┬──────── 2026-10-24T03:20:26.0669083Z · ╰── `loadingVisibility` originates here 2026-10-24T03:20:26.0669158Z 268 │ useLayoutEffect(() => { 2026-10-24T03:20:26.0669320Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T03:20:26.0669403Z ·  ────────┬──────── 2026-10-24T03:20:26.0669554Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T03:20:26.0669645Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T03:20:26.0669698Z ╰──── 2026-10-24T03:20:26.0669962Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0670268Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0670271Z 2026-10-24T03:20:26.0670499Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0670699Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T03:20:26.0670755Z 325 │ }) { 2026-10-24T03:20:26.0670914Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T03:20:26.0671005Z ·  ─────────┬───────── 2026-10-24T03:20:26.0671158Z · ╰── `recordingVisibility` originates here 2026-10-24T03:20:26.0671228Z 327 │ useLayoutEffect(() => { 2026-10-24T03:20:26.0671415Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T03:20:26.0671502Z ·  ─────────┬───────── 2026-10-24T03:20:26.0671655Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T03:20:26.0671754Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T03:20:26.0671810Z ╰──── 2026-10-24T03:20:26.0672073Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0672379Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0672383Z 2026-10-24T03:20:26.0672568Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0672739Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T03:20:26.0672843Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T03:20:26.0672928Z 66 │ const progress = useSharedValue(0); 2026-10-24T03:20:26.0673008Z ·  ────┬─── 2026-10-24T03:20:26.0673141Z · ╰── `progress` originates here 2026-10-24T03:20:26.0673207Z 67 │ useEffect(() => { 2026-10-24T03:20:26.0673334Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T03:20:26.0673404Z ·  ────┬─── 2026-10-24T03:20:26.0673540Z · ╰── `progress` cannot be modified 2026-10-24T03:20:26.0673612Z 69 │ }, [expanded, progress]); 2026-10-24T03:20:26.0673663Z ╰──── 2026-10-24T03:20:26.0673926Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0674231Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0674318Z 2026-10-24T03:20:26.0674499Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0674670Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T03:20:26.0674751Z 26 │ const latestInput = useRef(input); 2026-10-24T03:20:26.0674829Z 27 │ latestInput.current = input; 2026-10-24T03:20:26.0674941Z ·  ─────┬─────────┬─── 2026-10-24T03:20:26.0675127Z · │ ╰── Cannot update ref value during render 2026-10-24T03:20:26.0675242Z · ╰── This value is a ref 2026-10-24T03:20:26.0675318Z 28 │ const mounted = useRef(true); 2026-10-24T03:20:26.0675371Z ╰──── 2026-10-24T03:20:26.0675855Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0676151Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0676153Z 2026-10-24T03:20:26.0676338Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T03:20:26.0676529Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T03:20:26.0676601Z 115 │ return [...commands]; 2026-10-24T03:20:26.0676736Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T03:20:26.0676858Z ·  ─────────┬───────── 2026-10-24T03:20:26.0677049Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T03:20:26.0677103Z 117 │ 2026-10-24T03:20:26.0677156Z ╰──── 2026-10-24T03:20:26.0677476Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0677790Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0677793Z 2026-10-24T03:20:26.0678083Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T03:20:26.0678262Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T03:20:26.0678327Z 472 │ onFilters, 2026-10-24T03:20:26.0678395Z 473 │ authorOptions = [], 2026-10-24T03:20:26.0678476Z ·  ── 2026-10-24T03:20:26.0678543Z 474 │ labelOptions = [], 2026-10-24T03:20:26.0678594Z ╰──── 2026-10-24T03:20:26.0678912Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T03:20:26.0678915Z 2026-10-24T03:20:26.0679201Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T03:20:26.0679370Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T03:20:26.0679438Z 473 │ authorOptions = [], 2026-10-24T03:20:26.0679579Z 474 │ labelOptions = [], 2026-10-24T03:20:26.0679690Z ·  ── 2026-10-24T03:20:26.0679755Z 475 │ optionScope, 2026-10-24T03:20:26.0679807Z ╰──── 2026-10-24T03:20:26.0680125Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T03:20:26.0680128Z 2026-10-24T03:20:26.0680365Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T03:20:26.0680529Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T03:20:26.0680590Z 264 │ ): boolean { 2026-10-24T03:20:26.0680743Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T03:20:26.0680915Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T03:20:26.0681067Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T03:20:26.0681119Z ╰──── 2026-10-24T03:20:26.0681196Z  help: Switch to `Set` 2026-10-24T03:20:26.0681201Z 2026-10-24T03:20:26.0681667Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:26.0681797Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T03:20:26.0681865Z 38 │ JSON.stringify( 2026-10-24T03:20:26.0681987Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T03:20:26.0682085Z ·  ──────────────────────── 2026-10-24T03:20:26.0682161Z 40 │ { name: "a" }, 2026-10-24T03:20:26.0682215Z ╰──── 2026-10-24T03:20:26.0682218Z 2026-10-24T03:20:26.0682501Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0682631Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T03:20:26.0682689Z 3404 │ 2026-10-24T03:20:26.0682880Z 3405 │ const layer: Layer.Layer = 2026-10-24T03:20:26.0682953Z ·  ──┬── 2026-10-24T03:20:26.0683082Z · ╰── 'layer' is declared here 2026-10-24T03:20:26.0683148Z 3406 │ Layer.effect( 2026-10-24T03:20:26.0683200Z ╰──── 2026-10-24T03:20:26.0684710Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0684721Z 2026-10-24T03:20:26.0684934Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T03:20:26.0685072Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T03:20:26.0685168Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T03:20:26.0685260Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T03:20:26.0685339Z ·  ────┬─── 2026-10-24T03:20:26.0685478Z · ╰── 'Duration' is imported here 2026-10-24T03:20:26.0685565Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T03:20:26.0685616Z ╰──── 2026-10-24T03:20:26.0685713Z  help: Consider removing this import. 2026-10-24T03:20:26.0685716Z 2026-10-24T03:20:26.0686002Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0686184Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T03:20:26.0686272Z 35 │ { 2026-10-24T03:20:26.0687521Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T03:20:26.0687622Z ·  ──────────────────────── 2026-10-24T03:20:26.0687687Z 18 │ "review:write", 2026-10-24T03:20:26.0687738Z ╰──── 2026-10-24T03:20:26.0687740Z 2026-10-24T03:20:26.0688105Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0688216Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T03:20:26.0688274Z 19 │ ]); 2026-10-24T03:20:26.0688437Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T03:20:26.0688549Z ·  ──────────────────────── 2026-10-24T03:20:26.0688683Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T03:20:26.0688733Z ╰──── 2026-10-24T03:20:26.0688736Z 2026-10-24T03:20:26.0689099Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T03:20:26.0689210Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T03:20:26.0689380Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T03:20:26.0689506Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T03:20:26.0689614Z ·  ──────────────────────── 2026-10-24T03:20:26.0689685Z 59 │ authenticated: true, 2026-10-24T03:20:26.0689742Z ╰──── 2026-10-24T03:20:26.0689747Z 2026-10-24T03:20:26.0689942Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0690111Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T03:20:26.0690174Z 813 │
{ 2026-10-24T03:20:26.0692985Z ·  ────┬──── 2026-10-24T03:20:26.0693115Z · ╰── This is the containing effect 2026-10-24T03:20:26.0693210Z 59 │ const controller = new AbortController(); 2026-10-24T03:20:26.0693283Z 60 │ setLoadState("pending"); 2026-10-24T03:20:26.0693359Z ·  ──────┬───── 2026-10-24T03:20:26.0693534Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0693696Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T03:20:26.0693748Z ╰──── 2026-10-24T03:20:26.0694357Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0694681Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0694684Z 2026-10-24T03:20:26.0694959Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0695130Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T03:20:26.0695213Z 70 │ return () => controller.abort(); 2026-10-24T03:20:26.0695310Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T03:20:26.0695484Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T03:20:26.0695713Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T03:20:26.0695915Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T03:20:26.0696054Z · ╰── Unnecessary dependency `player_0` 2026-10-24T03:20:26.0696108Z 72 │ 2026-10-24T03:20:26.0696159Z ╰──── 2026-10-24T03:20:26.0696461Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0696780Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0696783Z 2026-10-24T03:20:26.0696987Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0697120Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T03:20:26.0697175Z 81 │ }, 2026-10-24T03:20:26.0697241Z 82 │ [draftKey], 2026-10-24T03:20:26.0697313Z ·  ────┬─── 2026-10-24T03:20:26.0697450Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T03:20:26.0697509Z 83 │ ); 2026-10-24T03:20:26.0697563Z ╰──── 2026-10-24T03:20:26.0697857Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0698168Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0698171Z 2026-10-24T03:20:26.0698712Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T03:20:26.0698874Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T03:20:26.0699018Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T03:20:26.0699203Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T03:20:26.0699311Z ·  ──────────────────────── 2026-10-24T03:20:26.0699375Z 182 │ version: 1, 2026-10-24T03:20:26.0699428Z ╰──── 2026-10-24T03:20:26.0699430Z 2026-10-24T03:20:26.0699623Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T03:20:26.0699772Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T03:20:26.0699880Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T03:20:26.0700048Z 267 │ 2026-10-24T03:20:26.0700294Z ·  ─────────────────────────────────────────────────────── 2026-10-24T03:20:26.0700414Z 268 │ Date.now()); 2026-10-24T03:20:26.0701182Z 84 │ useEffect(() => { 2026-10-24T03:20:26.0701254Z ·  ────┬──── 2026-10-24T03:20:26.0701384Z · ╰── This is the containing effect 2026-10-24T03:20:26.0701477Z 85 │ if (!actionState.isRunning) return; 2026-10-24T03:20:26.0701547Z 86 │ setNowMs(Date.now()); 2026-10-24T03:20:26.0701618Z ·  ────┬─── 2026-10-24T03:20:26.0701784Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0701910Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T03:20:26.0701961Z ╰──── 2026-10-24T03:20:26.0702603Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0702931Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0702936Z 2026-10-24T03:20:26.0703107Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T03:20:26.0703300Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T03:20:26.0703352Z 52 │ 2026-10-24T03:20:26.0703419Z 53 │ for (const {} of [ 2026-10-24T03:20:26.0703492Z ·  ── 2026-10-24T03:20:26.0703556Z 54 │ { healthy: true }, 2026-10-24T03:20:26.0703608Z ╰──── 2026-10-24T03:20:26.0703840Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T03:20:26.0703843Z 2026-10-24T03:20:26.0704106Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0704243Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:159:5] 2026-10-24T03:20:26.0704433Z 154 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T03:20:26.0704503Z 155 │ useLayoutEffect(() => { 2026-10-24T03:20:26.0704581Z ·  ───────┬─────── 2026-10-24T03:20:26.0704716Z · ╰── This is the containing effect 2026-10-24T03:20:26.0704803Z 156 │ if (faviconRequest === null) return; 2026-10-24T03:20:26.0704856Z 157 │ 2026-10-24T03:20:26.0704990Z 158 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T03:20:26.0705087Z 159 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T03:20:26.0705178Z ·  ───────────┬─────────── 2026-10-24T03:20:26.0705427Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0705525Z 160 │ return endRequest; 2026-10-24T03:20:26.0705577Z ╰──── 2026-10-24T03:20:26.0706182Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0706506Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0706509Z 2026-10-24T03:20:26.0706770Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0706916Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T03:20:26.0706972Z 3754 │ 2026-10-24T03:20:26.0707172Z 3755 │ const layer: Layer.Layer = 2026-10-24T03:20:26.0707243Z ·  ──┬── 2026-10-24T03:20:26.0707368Z · ╰── 'layer' is declared here 2026-10-24T03:20:26.0707432Z 3756 │ Layer.effect( 2026-10-24T03:20:26.0707483Z ╰──── 2026-10-24T03:20:26.0707589Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0707591Z 2026-10-24T03:20:26.0707885Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0708018Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T03:20:26.0708073Z 217 │ 2026-10-24T03:20:26.0708222Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T03:20:26.0708312Z ·  ──────────┬────────── 2026-10-24T03:20:26.0708469Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T03:20:26.0708658Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T03:20:26.0708709Z ╰──── 2026-10-24T03:20:26.0708814Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0708816Z 2026-10-24T03:20:26.0709129Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T03:20:26.0709260Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T03:20:26.0709318Z 220 │ 2026-10-24T03:20:26.0709453Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T03:20:26.0709556Z ·  ──────────────┬────────────── 2026-10-24T03:20:26.0709734Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T03:20:26.0709898Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T03:20:26.0709949Z ╰──── 2026-10-24T03:20:26.0710052Z  help: Consider removing this declaration. 2026-10-24T03:20:26.0710054Z 2026-10-24T03:20:26.0710311Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0710459Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T03:20:26.0710586Z 61 │ }, []); 2026-10-24T03:20:26.0710687Z 62 │ useEffect(() => { 2026-10-24T03:20:26.0710757Z ·  ────┬──── 2026-10-24T03:20:26.0710886Z · ╰── This is the containing effect 2026-10-24T03:20:26.0711036Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T03:20:26.0711160Z ·  ───────┬────── 2026-10-24T03:20:26.0711364Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0711443Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T03:20:26.0711494Z ╰──── 2026-10-24T03:20:26.0712105Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0712434Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0712437Z 2026-10-24T03:20:26.0712614Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0712767Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T03:20:26.0712949Z 151 │ 2026-10-24T03:20:26.0713028Z 152 │ {props.children(open)} 2026-10-24T03:20:26.0713123Z ·  ──┬─ 2026-10-24T03:20:26.0713283Z · ╰── Cannot access ref value during render 2026-10-24T03:20:26.0713346Z 153 │ 2026-10-24T03:20:26.0713397Z ╰──── 2026-10-24T03:20:26.0713869Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0714162Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0714165Z 2026-10-24T03:20:26.0714365Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T03:20:26.0714521Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T03:20:26.0714605Z 139 │ if (action.id !== undefined) { 2026-10-24T03:20:26.0714683Z 140 │ props.onPressAction?.({ 2026-10-24T03:20:26.0714755Z ·  ──┬── 2026-10-24T03:20:26.0714886Z · ╰── Missing dependency `props` 2026-10-24T03:20:26.0714979Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T03:20:26.0715125Z 142 │ } as Parameters>[0]); 2026-10-24T03:20:26.0715181Z 143 │ } 2026-10-24T03:20:26.0715238Z 144 │ }, 2026-10-24T03:20:26.0715320Z 145 │ [close, props.onPressAction], 2026-10-24T03:20:26.0715413Z ·  ─────────┬───────── 2026-10-24T03:20:26.0715709Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T03:20:26.0715793Z 146 │ ); 2026-10-24T03:20:26.0715844Z ╰──── 2026-10-24T03:20:26.0716330Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T03:20:26.0716645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0716648Z 2026-10-24T03:20:26.0716864Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T03:20:26.0716972Z ╭─[apps/mobile/src/Stack.tsx:1074:21] 2026-10-24T03:20:26.0717034Z 1073 │ } 2026-10-24T03:20:26.0717313Z ·  ───────────────────────────────────────────── 2026-10-24T03:20:26.0717383Z 1075 │ screenListeners={{ 2026-10-24T03:20:26.0717436Z ╰──── 2026-10-24T03:20:26.0717799Z  help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true. 2026-10-24T03:20:26.0717804Z 2026-10-24T03:20:26.0717990Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0718130Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T03:20:26.0718294Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T03:20:26.0718389Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T03:20:26.0718474Z ·  ┬ 2026-10-24T03:20:26.0718609Z · ╰── '_' is declared here 2026-10-24T03:20:26.0718711Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T03:20:26.0718762Z ╰──── 2026-10-24T03:20:26.0718864Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0718867Z 2026-10-24T03:20:26.0719052Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0719190Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T03:20:26.0719244Z 133 │ ); 2026-10-24T03:20:26.0719350Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T03:20:26.0719520Z ·  ┬ 2026-10-24T03:20:26.0719691Z · ╰── '_' is declared here 2026-10-24T03:20:26.0719759Z 135 │ Effect.succeed( 2026-10-24T03:20:26.0719809Z ╰──── 2026-10-24T03:20:26.0719910Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0719913Z 2026-10-24T03:20:26.0720095Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0720230Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T03:20:26.0720285Z 177 │ }); 2026-10-24T03:20:26.0720384Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T03:20:26.0720472Z ·  ┬ 2026-10-24T03:20:26.0720614Z · ╰── '_' is declared here 2026-10-24T03:20:26.0720716Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T03:20:26.0720768Z ╰──── 2026-10-24T03:20:26.0720868Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0720871Z 2026-10-24T03:20:26.0721053Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0721187Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T03:20:26.0721242Z 202 │ ); 2026-10-24T03:20:26.0721339Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T03:20:26.0721430Z ·  ┬ 2026-10-24T03:20:26.0721566Z · ╰── '_' is declared here 2026-10-24T03:20:26.0721647Z 204 │ options.removeWorktreeFails 2026-10-24T03:20:26.0721697Z ╰──── 2026-10-24T03:20:26.0721802Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0721807Z 2026-10-24T03:20:26.0721987Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0722122Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T03:20:26.0722177Z 207 │ ); 2026-10-24T03:20:26.0722279Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T03:20:26.0722371Z ·  ┬ 2026-10-24T03:20:26.0722542Z · ╰── '_' is declared here 2026-10-24T03:20:26.0722629Z 209 │ options.deleteLocalBranchFails 2026-10-24T03:20:26.0722679Z ╰──── 2026-10-24T03:20:26.0722777Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0722779Z 2026-10-24T03:20:26.0722967Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0723105Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T03:20:26.0723158Z 212 │ ); 2026-10-24T03:20:26.0723271Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T03:20:26.0723370Z ·  ┬ 2026-10-24T03:20:26.0723514Z · ╰── '_' is declared here 2026-10-24T03:20:26.0723600Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T03:20:26.0723650Z ╰──── 2026-10-24T03:20:26.0723750Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0723752Z 2026-10-24T03:20:26.0723932Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0724242Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T03:20:26.0724326Z 253 │ ); 2026-10-24T03:20:26.0724418Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T03:20:26.0724505Z ·  ┬ 2026-10-24T03:20:26.0724640Z · ╰── '_' is declared here 2026-10-24T03:20:26.0724706Z 255 │ Effect.succeed({ 2026-10-24T03:20:26.0724756Z ╰──── 2026-10-24T03:20:26.0724856Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0724858Z 2026-10-24T03:20:26.0725038Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T03:20:26.0725170Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T03:20:26.0725225Z 263 │ ); 2026-10-24T03:20:26.0725382Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T03:20:26.0725475Z ·  ┬ 2026-10-24T03:20:26.0725610Z · ╰── '_' is declared here 2026-10-24T03:20:26.0725758Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T03:20:26.0725809Z ╰──── 2026-10-24T03:20:26.0725907Z  help: Consider removing this parameter. 2026-10-24T03:20:26.0725910Z 2026-10-24T03:20:26.0726054Z ⚠ react(refs): Cannot access refs during render 2026-10-24T03:20:26.0726172Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T03:20:26.0726354Z 53 │ const child = children as ReactElement>; 2026-10-24T03:20:26.0726535Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T03:20:26.0726645Z 55 │ │ onTouchStart: (event) => { 2026-10-24T03:20:26.0726803Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T03:20:26.0726962Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T03:20:26.0727089Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T03:20:26.0727257Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T03:20:26.0727370Z 60 │ │ pendingPress.current = null; 2026-10-24T03:20:26.0727490Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T03:20:26.0727575Z 62 │ │ }, 2026-10-24T03:20:26.0727678Z 63 │ │ onPress: (event) => { 2026-10-24T03:20:26.0727849Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T03:20:26.0727989Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T03:20:26.0728157Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T03:20:26.0728349Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T03:20:26.0728435Z 68 │ │ return; 2026-10-24T03:20:26.0728513Z 69 │ │ } 2026-10-24T03:20:26.0728652Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T03:20:26.0728894Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T03:20:26.0729092Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T03:20:26.0729191Z 73 │ │ event.persist(); 2026-10-24T03:20:26.0729351Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T03:20:26.0729437Z 75 │ │ return; 2026-10-24T03:20:26.0729514Z 76 │ │ } 2026-10-24T03:20:26.0729628Z 77 │ │ child.props.onPress?.(event); 2026-10-24T03:20:26.0729704Z 78 │ │ }, 2026-10-24T03:20:26.0729835Z 79 │ ├─▶ }); 2026-10-24T03:20:26.0730079Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T03:20:26.0730183Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T03:20:26.0730236Z ╰──── 2026-10-24T03:20:26.0730706Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T03:20:26.0731002Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T03:20:26.0731005Z 2026-10-24T03:20:26.0731265Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T03:20:26.0731407Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T03:20:26.0731511Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T03:20:26.0731576Z 67 │ useEffect(() => { 2026-10-24T03:20:26.0731648Z ·  ────┬──── 2026-10-24T03:20:26.0731779Z · ╰── This is the containing effect 2026-10-24T03:20:26.0731844Z 68 │ setUri(null); 2026-10-24T03:20:26.0731914Z ·  ───┬── 2026-10-24T03:20:26.0732080Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T03:20:26.0732143Z 69 │ setError(null); 2026-10-24T03:20:26.0732195Z ╰──── 2026-10-24T03:20:26.0732843Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T03:20:26.0733171Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T03:20:26.0733174Z 2026-10-24T03:20:26.0733377Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0733515Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T03:20:26.0733570Z 90 │ }; 2026-10-24T03:20:26.0733645Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T03:20:26.0733762Z ·  ──────┬───── ───┬─── 2026-10-24T03:20:26.0734017Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T03:20:26.0734194Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T03:20:26.0734328Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T03:20:26.0734380Z ╰──── 2026-10-24T03:20:26.0734674Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0734987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0734990Z 2026-10-24T03:20:26.0735206Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0735353Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T03:20:26.0735420Z 212 │ useEffect(() => { 2026-10-24T03:20:26.0735535Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T03:20:26.0735634Z ·  ──┬── 2026-10-24T03:20:26.0735785Z · ╰── Missing dependency `props` 2026-10-24T03:20:26.0735890Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T03:20:26.0736004Z ·  ──────────┬───────── 2026-10-24T03:20:26.0736234Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T03:20:26.0736307Z 215 │ const { source } = props; 2026-10-24T03:20:26.0736358Z ╰──── 2026-10-24T03:20:26.0736786Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0737103Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0737106Z 2026-10-24T03:20:26.0737263Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T03:20:26.0737390Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T03:20:26.0737501Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T03:20:26.0737599Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T03:20:26.0737697Z ·  ───────────────────────────── 2026-10-24T03:20:26.0737831Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T03:20:26.0737885Z ╰──── 2026-10-24T03:20:26.0738046Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T03:20:26.0738048Z 2026-10-24T03:20:26.0738251Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T03:20:26.0738366Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T03:20:26.0738440Z 28 │ getPendingThreadOrder(); 2026-10-24T03:20:26.0738521Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T03:20:26.0738745Z ·  ────┬──── ───────┬────── 2026-10-24T03:20:26.0738946Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T03:20:26.0739173Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T03:20:26.0739280Z 30 │ return pending; 2026-10-24T03:20:26.0739333Z ╰──── 2026-10-24T03:20:26.0739632Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0739942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0739944Z 2026-10-24T03:20:26.0740159Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T03:20:26.0740305Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T03:20:26.0740414Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T03:20:26.0740545Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T03:20:26.0740639Z ·  ────────────┬──────────── 2026-10-24T03:20:26.0740814Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T03:20:26.0740870Z 774 │ } 2026-10-24T03:20:26.0741077Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T03:20:26.0741186Z ·  ────────────────┬──────────────── 2026-10-24T03:20:26.0741468Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T03:20:26.0741522Z 776 │ 2026-10-24T03:20:26.0741574Z ╰──── 2026-10-24T03:20:26.0742005Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T03:20:26.0742322Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T03:20:26.0742325Z 2026-10-24T03:20:26.0742507Z ⚠ react(immutability): This value cannot be modified 2026-10-24T03:20:26.0742652Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T03:20:26.0742812Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T03:20:26.0742946Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T03:20:26.0743037Z ·  ──────────┬───────── 2026-10-24T03:20:26.0743257Z · ╰── `animatedBorderRadius` originates here 2026-10-24T03:20:26.0743445Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T03:20:26.0743515Z 390 │ useLayoutEffect(() => { 2026-10-24T03:20:26.0743616Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T03:20:26.0743704Z ·  ──────────┬───────── 2026-10-24T03:20:26.0743863Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T03:20:26.0743951Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T03:20:26.0744003Z ╰──── 2026-10-24T03:20:26.0744268Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T03:20:26.0744580Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T03:20:26.0744586Z 2026-10-24T03:20:26.0744829Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:20:26.0744985Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T03:20:26.0745047Z 289 │ return ( 2026-10-24T03:20:26.0745183Z 290 │ 2026-10-24T03:20:26.0745304Z ·  ───────────── 2026-10-24T03:20:26.0745376Z 291 │ {props.children} 2026-10-24T03:20:26.0745428Z ╰──── 2026-10-24T03:20:26.0745660Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:20:26.0745804Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:20:26.0745807Z 2026-10-24T03:20:26.0746047Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:20:26.0746203Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T03:20:26.0746262Z 653 │ return ( 2026-10-24T03:20:26.0746383Z 654 │ 2026-10-24T03:20:26.0746498Z ·  ───────────── 2026-10-24T03:20:26.0746567Z 655 │ {props.children} 2026-10-24T03:20:26.0746618Z ╰──── 2026-10-24T03:20:26.0746845Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T03:20:26.0746982Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T03:20:26.0746986Z 2026-10-24T03:20:26.0747224Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T03:20:26.0747383Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T03:20:26.0747444Z 1461 │ return ( 2026-10-24T03:20:26.0747606Z 1462 │ 2026-10-24T03:20:26.0747739Z ·  ──────────────────── 2026-10-24T03:20:26.0747838Z 1463 │