2026-10-24T11:03:58.5761106Z Current runner version: '2.338.1' 2026-10-24T11:03:58.5765251Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-qo2au47tkooc4kwz' 2026-10-24T11:03:58.5766004Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T11:03:58.5766798Z Machine name: 'ip-172-31-73-130' 2026-10-24T11:03:58.5768632Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T11:03:58.5770256Z Contents: read 2026-10-24T11:03:58.5770719Z Metadata: read 2026-10-24T11:03:58.5771206Z ##[endgroup] 2026-10-24T11:03:58.5773226Z Secret source: None 2026-10-24T11:03:58.5773964Z Cache mode: write 2026-10-24T11:03:58.5774595Z Prepare workflow directory 2026-10-24T11:03:58.5960326Z Prepare all required actions 2026-10-24T11:03:58.5987443Z Getting action download info 2026-10-24T11:03:58.7177871Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T11:03:58.7590407Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T11:03:58.8715450Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T11:03:58.8753496Z Complete job name: Lint 2026-10-24T11:03:58.9122282Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T11:03:58.9231259Z ##[group]Run '/setup.sh' 2026-10-24T11:03:58.9249369Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:03:58.9249780Z env: 2026-10-24T11:03:58.9250009Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:03:58.9250299Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:03:58.9250577Z BLACKSMITH_CHECK_RUN_ID: 120855859117 2026-10-24T11:03:58.9250859Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T11:03:58.9251130Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T11:03:58.9251436Z ##[endgroup] 2026-10-24T11:03:58.9493726Z Logging daemon started (blacksmithd for logs) 2026-10-24T11:03:58.9581571Z Results daemon started (blacksmithd for results) 2026-10-24T11:03:58.9729017Z Background adoption and SSH setup started (PID: 3167) 2026-10-24T11:03:58.9729615Z 2026-10-24T11:03:58.9729924Z ---------------------------------------- 2026-10-24T11:03:58.9730475Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40088384341/jobs/120855859117 2026-10-24T11:03:58.9730891Z SSH Access (using your GitHub SSH key): 2026-10-24T11:03:58.9731376Z ssh -p 64001 runner@blacksmith-8vcpu-ubuntu-2404-qo2au47tkooc4kwz.vm.blacksmith.sh 2026-10-24T11:03:58.9731683Z 2026-10-24T11:03:58.9731796Z No GitHub SSH key? Add one at: 2026-10-24T11:03:58.9732287Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T11:03:58.9732681Z 2026-10-24T11:03:58.9732790Z ---------------------------------------- 2026-10-24T11:03:58.9732965Z 2026-10-24T11:03:58.9733110Z VM ID: blacksmith-8vcpu-ubuntu-2404-qo2au47tkooc4kwz 2026-10-24T11:03:58.9733431Z Host: production-152.236.46.154-x8664 2026-10-24T11:03:58.9733708Z Host Agent PID: 926915 2026-10-24T11:03:58.9733947Z Host Agent Git SHA: 1637818df 2026-10-24T11:03:58.9734219Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T11:03:58.9734500Z Blacksmith Host Generation: gen 2 2026-10-24T11:03:58.9734790Z Petname: production-powerful-walrus-ac84f8b5 2026-10-24T11:03:58.9735085Z Region: us-east 2026-10-24T11:03:58.9735319Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T11:03:58.9742027Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T11:03:58.9742846Z 2026-10-24T11:03:58.9742968Z Enabling Blacksmith transparent cache 2026-10-24T11:03:59.0031864Z ##[group]Run actions/checkout@v6 2026-10-24T11:03:59.0032165Z with: 2026-10-24T11:03:59.0032489Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T11:03:59.0032878Z sparse-checkout-cone-mode: false 2026-10-24T11:03:59.0033153Z repository: pingdotgg/t3code 2026-10-24T11:03:59.0034889Z token: *** 2026-10-24T11:03:59.0035102Z ssh-strict: true 2026-10-24T11:03:59.0035319Z ssh-user: git 2026-10-24T11:03:59.0035543Z persist-credentials: true 2026-10-24T11:03:59.0036010Z clean: true 2026-10-24T11:03:59.0036222Z fetch-depth: 1 2026-10-24T11:03:59.0036440Z fetch-tags: false 2026-10-24T11:03:59.0036663Z show-progress: true 2026-10-24T11:03:59.0036890Z lfs: false 2026-10-24T11:03:59.0037096Z submodules: false 2026-10-24T11:03:59.0037319Z set-safe-directory: true 2026-10-24T11:03:59.0037569Z allow-unsafe-pr-checkout: false 2026-10-24T11:03:59.0037825Z env: 2026-10-24T11:03:59.0038064Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:03:59.0038346Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:03:59.0038625Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:03:59.0038881Z ##[endgroup] 2026-10-24T11:03:59.1271634Z Syncing repository: pingdotgg/t3code 2026-10-24T11:03:59.1272687Z ##[group]Getting Git version info 2026-10-24T11:03:59.1273024Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T11:03:59.1273505Z [command]/usr/local/bin/git version 2026-10-24T11:03:59.1345048Z git version 2.55.0 2026-10-24T11:03:59.1360791Z ##[endgroup] 2026-10-24T11:03:59.1370087Z Temporarily overriding HOME='/home/runner/_work/_temp/4564bd40-9e3d-45d8-8a17-5a00eec7eb0a' before making global git config changes 2026-10-24T11:03:59.1370727Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T11:03:59.1375194Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T11:03:59.1409653Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T11:03:59.1411181Z ##[group]Determining repository object format 2026-10-24T11:03:59.1412095Z ##[endgroup] 2026-10-24T11:03:59.1412471Z ##[group]Initializing the repository 2026-10-24T11:03:59.1414742Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T11:03:59.1456628Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T11:03:59.1457168Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T11:03:59.1457646Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T11:03:59.1458010Z hint: call: 2026-10-24T11:03:59.1458217Z hint: 2026-10-24T11:03:59.1458503Z hint: git config --global init.defaultBranch 2026-10-24T11:03:59.1458818Z hint: 2026-10-24T11:03:59.1459105Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T11:03:59.1459556Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T11:03:59.1459923Z hint: 2026-10-24T11:03:59.1460140Z hint: git branch -m 2026-10-24T11:03:59.1460378Z hint: 2026-10-24T11:03:59.1460696Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T11:03:59.1461154Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T11:03:59.1462067Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T11:03:59.1489005Z ##[endgroup] 2026-10-24T11:03:59.1489405Z ##[group]Disabling automatic garbage collection 2026-10-24T11:03:59.1491560Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T11:03:59.1513539Z ##[endgroup] 2026-10-24T11:03:59.1513892Z ##[group]Setting up auth 2026-10-24T11:03:59.1514178Z Removing SSH command configuration 2026-10-24T11:03:59.1517984Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T11:03:59.1540820Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-24T11:03:59.1681990Z Removing HTTP extra header 2026-10-24T11:03:59.1684641Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T11:03:59.1707988Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :" 2026-10-24T11:03:59.1822774Z Removing includeIf entries pointing to credentials config files 2026-10-24T11:03:59.1825920Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T11:03:59.1851996Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T11:03:59.1965136Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-9151a55b-ab60-402a-9508-e1870902490f.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T11:03:59.1994190Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-9151a55b-ab60-402a-9508-e1870902490f.config 2026-10-24T11:03:59.2015820Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-9151a55b-ab60-402a-9508-e1870902490f.config 2026-10-24T11:03:59.2037857Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-9151a55b-ab60-402a-9508-e1870902490f.config 2026-10-24T11:03:59.2060686Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-9151a55b-ab60-402a-9508-e1870902490f.config 2026-10-24T11:03:59.2081188Z ##[endgroup] 2026-10-24T11:03:59.2081586Z ##[group]Fetching the repository 2026-10-24T11:03:59.2085437Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +c56f6d25bcdb0e648dd6c136b9cfa75bdd13dbb5:refs/remotes/pull/19414/merge 2026-10-24T11:03:59.4951654Z From https://github.com/pingdotgg/t3code 2026-10-24T11:03:59.4952342Z * [new ref] c56f6d25bcdb0e648dd6c136b9cfa75bdd13dbb5 -> pull/19414/merge 2026-10-24T11:03:59.4979232Z ##[endgroup] 2026-10-24T11:03:59.4979702Z ##[group]Determining the checkout info 2026-10-24T11:03:59.4980181Z ##[endgroup] 2026-10-24T11:03:59.4980592Z ##[group]Setting up sparse checkout 2026-10-24T11:03:59.4982394Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T11:03:59.5004684Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T11:03:59.5030318Z .git/info/sparse-checkout 2026-10-24T11:03:59.5034082Z ##[endgroup] 2026-10-24T11:03:59.5034531Z ##[group]Checking out the ref 2026-10-24T11:03:59.5036796Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/19414/merge 2026-10-24T11:04:06.0572232Z Updating files: 0% (1/6336) 2026-10-24T11:04:06.0601386Z Updating files: 1% (64/6336) 2026-10-24T11:04:06.0620636Z Updating files: 2% (127/6336) 2026-10-24T11:04:06.0643361Z Updating files: 3% (191/6336) 2026-10-24T11:04:06.0665086Z Updating files: 4% (254/6336) 2026-10-24T11:04:06.0698627Z Updating files: 5% (317/6336) 2026-10-24T11:04:06.0719993Z Updating files: 6% (381/6336) 2026-10-24T11:04:06.0779748Z Updating files: 7% (444/6336) 2026-10-24T11:04:06.0811202Z Updating files: 8% (507/6336) 2026-10-24T11:04:06.0835610Z Updating files: 9% (571/6336) 2026-10-24T11:04:06.1136711Z Updating files: 10% (634/6336) 2026-10-24T11:04:06.1153995Z Updating files: 11% (697/6336) 2026-10-24T11:04:06.1165525Z Updating files: 12% (761/6336) 2026-10-24T11:04:06.1180914Z Updating files: 13% (824/6336) 2026-10-24T11:04:06.1198848Z Updating files: 14% (888/6336) 2026-10-24T11:04:06.1218642Z Updating files: 15% (951/6336) 2026-10-24T11:04:06.1238996Z Updating files: 16% (1014/6336) 2026-10-24T11:04:06.1254886Z Updating files: 17% (1078/6336) 2026-10-24T11:04:06.1274937Z Updating files: 18% (1141/6336) 2026-10-24T11:04:06.1291304Z Updating files: 19% (1204/6336) 2026-10-24T11:04:06.1315046Z Updating files: 20% (1268/6336) 2026-10-24T11:04:06.1334494Z Updating files: 21% (1331/6336) 2026-10-24T11:04:06.1354805Z Updating files: 22% (1394/6336) 2026-10-24T11:04:06.1369699Z Updating files: 23% (1458/6336) 2026-10-24T11:04:06.1383950Z Updating files: 24% (1521/6336) 2026-10-24T11:04:06.1400420Z Updating files: 25% (1584/6336) 2026-10-24T11:04:06.1416598Z Updating files: 26% (1648/6336) 2026-10-24T11:04:06.1430030Z Updating files: 27% (1711/6336) 2026-10-24T11:04:06.1451712Z Updating files: 28% (1775/6336) 2026-10-24T11:04:06.1485539Z Updating files: 29% (1838/6336) 2026-10-24T11:04:06.1509555Z Updating files: 30% (1901/6336) 2026-10-24T11:04:06.1534552Z Updating files: 31% (1965/6336) 2026-10-24T11:04:06.1566547Z Updating files: 32% (2028/6336) 2026-10-24T11:04:06.1600613Z Updating files: 33% (2091/6336) 2026-10-24T11:04:06.1673196Z Updating files: 34% (2155/6336) 2026-10-24T11:04:06.1731921Z Updating files: 35% (2218/6336) 2026-10-24T11:04:06.1774124Z Updating files: 36% (2281/6336) 2026-10-24T11:04:06.1812406Z Updating files: 37% (2345/6336) 2026-10-24T11:04:06.1859594Z Updating files: 38% (2408/6336) 2026-10-24T11:04:06.1888569Z Updating files: 39% (2472/6336) 2026-10-24T11:04:06.1920719Z Updating files: 40% (2535/6336) 2026-10-24T11:04:06.1952673Z Updating files: 41% (2598/6336) 2026-10-24T11:04:06.1972539Z Updating files: 42% (2662/6336) 2026-10-24T11:04:06.1983675Z Updating files: 43% (2725/6336) 2026-10-24T11:04:06.2006766Z Updating files: 44% (2788/6336) 2026-10-24T11:04:06.2044181Z Updating files: 45% (2852/6336) 2026-10-24T11:04:06.2069331Z Updating files: 46% (2915/6336) 2026-10-24T11:04:06.2101218Z Updating files: 47% (2978/6336) 2026-10-24T11:04:06.2132178Z Updating files: 48% (3042/6336) 2026-10-24T11:04:06.2165138Z Updating files: 49% (3105/6336) 2026-10-24T11:04:06.2206282Z Updating files: 50% (3168/6336) 2026-10-24T11:04:06.2223294Z Updating files: 51% (3232/6336) 2026-10-24T11:04:06.2259145Z Updating files: 52% (3295/6336) 2026-10-24T11:04:06.2288023Z Updating files: 53% (3359/6336) 2026-10-24T11:04:06.2309732Z Updating files: 54% (3422/6336) 2026-10-24T11:04:06.2336136Z Updating files: 55% (3485/6336) 2026-10-24T11:04:06.2355127Z Updating files: 56% (3549/6336) 2026-10-24T11:04:06.2373440Z Updating files: 57% (3612/6336) 2026-10-24T11:04:06.2393059Z Updating files: 58% (3675/6336) 2026-10-24T11:04:06.2787130Z Updating files: 59% (3739/6336) 2026-10-24T11:04:06.2802442Z Updating files: 60% (3802/6336) 2026-10-24T11:04:06.2820454Z Updating files: 61% (3865/6336) 2026-10-24T11:04:06.2839373Z Updating files: 62% (3929/6336) 2026-10-24T11:04:06.2864330Z Updating files: 63% (3992/6336) 2026-10-24T11:04:06.2900949Z Updating files: 64% (4056/6336) 2026-10-24T11:04:06.2931668Z Updating files: 65% (4119/6336) 2026-10-24T11:04:06.2955048Z Updating files: 66% (4182/6336) 2026-10-24T11:04:06.2993845Z Updating files: 67% (4246/6336) 2026-10-24T11:04:06.3012304Z Updating files: 68% (4309/6336) 2026-10-24T11:04:06.3039919Z Updating files: 69% (4372/6336) 2026-10-24T11:04:06.3058307Z Updating files: 70% (4436/6336) 2026-10-24T11:04:06.3081427Z Updating files: 71% (4499/6336) 2026-10-24T11:04:06.3104792Z Updating files: 72% (4562/6336) 2026-10-24T11:04:06.3139514Z Updating files: 73% (4626/6336) 2026-10-24T11:04:06.3431258Z Updating files: 74% (4689/6336) 2026-10-24T11:04:06.3633960Z Updating files: 75% (4752/6336) 2026-10-24T11:04:06.3657332Z Updating files: 76% (4816/6336) 2026-10-24T11:04:06.3679212Z Updating files: 77% (4879/6336) 2026-10-24T11:04:06.3706696Z Updating files: 78% (4943/6336) 2026-10-24T11:04:06.3727072Z Updating files: 79% (5006/6336) 2026-10-24T11:04:06.3747890Z Updating files: 80% (5069/6336) 2026-10-24T11:04:06.3766231Z Updating files: 81% (5133/6336) 2026-10-24T11:04:06.3787142Z Updating files: 82% (5196/6336) 2026-10-24T11:04:06.3807522Z Updating files: 83% (5259/6336) 2026-10-24T11:04:06.3830660Z Updating files: 84% (5323/6336) 2026-10-24T11:04:06.3855626Z Updating files: 85% (5386/6336) 2026-10-24T11:04:06.3881162Z Updating files: 86% (5449/6336) 2026-10-24T11:04:06.3953160Z Updating files: 87% (5513/6336) 2026-10-24T11:04:06.3988488Z Updating files: 88% (5576/6336) 2026-10-24T11:04:06.4010789Z Updating files: 89% (5640/6336) 2026-10-24T11:04:06.4036654Z Updating files: 90% (5703/6336) 2026-10-24T11:04:06.4075168Z Updating files: 91% (5766/6336) 2026-10-24T11:04:06.4091620Z Updating files: 92% (5830/6336) 2026-10-24T11:04:06.4108983Z Updating files: 93% (5893/6336) 2026-10-24T11:04:06.4131580Z Updating files: 94% (5956/6336) 2026-10-24T11:04:06.4156564Z Updating files: 95% (6020/6336) 2026-10-24T11:04:06.4215527Z Updating files: 96% (6083/6336) 2026-10-24T11:04:06.4244689Z Updating files: 97% (6146/6336) 2026-10-24T11:04:06.4293860Z Updating files: 98% (6210/6336) 2026-10-24T11:04:06.4314512Z Updating files: 99% (6273/6336) 2026-10-24T11:04:06.4314783Z Updating files: 100% (6336/6336) 2026-10-24T11:04:06.4314930Z Updating files: 100% (6336/6336), done. 2026-10-24T11:04:06.4475994Z Note: switching to 'refs/remotes/pull/19414/merge'. 2026-10-24T11:04:06.4476145Z 2026-10-24T11:04:06.4476255Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T11:04:06.4476486Z changes and commit them, and you can discard any commits you make in this 2026-10-24T11:04:06.4476718Z state without impacting any branches by switching back to a branch. 2026-10-24T11:04:06.4476855Z 2026-10-24T11:04:06.4476948Z If you want to create a new branch to retain commits you create, you may 2026-10-24T11:04:06.4477174Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T11:04:06.4477301Z 2026-10-24T11:04:06.4477362Z git switch -c 2026-10-24T11:04:06.4477452Z 2026-10-24T11:04:06.4477505Z Or undo this operation with: 2026-10-24T11:04:06.4477587Z 2026-10-24T11:04:06.4477635Z git switch - 2026-10-24T11:04:06.4477717Z 2026-10-24T11:04:06.4477824Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T11:04:06.4477971Z 2026-10-24T11:04:06.4478138Z HEAD is now at c56f6d2 Merge cdc28c82a5f4a014abc82d0c3de4c3e20cc343c0 into fef851bee09102641061aeb78a3092c2ba2c72ab 2026-10-24T11:04:06.4489382Z ##[endgroup] 2026-10-24T11:04:06.4526391Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T11:04:06.4552372Z c56f6d25bcdb0e648dd6c136b9cfa75bdd13dbb5 2026-10-24T11:04:06.4637853Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T11:04:06.4638087Z files="$(git ls-files .github/pr-assets)" 2026-10-24T11:04:06.4638273Z if test -n "$files"; then 2026-10-24T11:04:06.4638495Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T11:04:06.4638713Z  exit 1 2026-10-24T11:04:06.4638818Z fi 2026-10-24T11:04:06.4660850Z shell: /usr/bin/bash -e {0} 2026-10-24T11:04:06.4660986Z env: 2026-10-24T11:04:06.4661101Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:06.4661262Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:06.4661404Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:06.4661543Z ##[endgroup] 2026-10-24T11:04:06.4827681Z Prepare all required actions 2026-10-24T11:04:06.4827999Z Getting action download info 2026-10-24T11:04:06.5582991Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T11:04:06.6726797Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T11:04:06.6726948Z env: 2026-10-24T11:04:06.6727061Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:06.6727210Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:06.6727353Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:06.6727488Z ##[endgroup] 2026-10-24T11:04:06.6826081Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T11:04:06.6843597Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T11:04:06.6844073Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T11:04:06.6844376Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T11:04:06.6844617Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T11:04:06.6865994Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:04:06.6866171Z env: 2026-10-24T11:04:06.6866284Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:06.6866434Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:06.6866580Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:06.6866717Z ##[endgroup] 2026-10-24T11:04:06.6952225Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=12] 2026-10-24T11:04:06.6954437Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T11:04:06.7062466Z ##[group]Run actions/cache@v6 2026-10-24T11:04:06.7062689Z with: 2026-10-24T11:04:06.7062849Z path: ~/.vite-plus 2026-10-24T11:04:06.7063100Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T11:04:06.7063411Z enableCrossOsArchive: false 2026-10-24T11:04:06.7063613Z fail-on-cache-miss: false 2026-10-24T11:04:06.7063807Z lookup-only: false 2026-10-24T11:04:06.7063976Z save-always: false 2026-10-24T11:04:06.7064146Z env: 2026-10-24T11:04:06.7064309Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:06.7064539Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:06.7064758Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:06.7064964Z ##[endgroup] 2026-10-24T11:04:06.9118978Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T11:04:07.3312828Z Received 170349591 of 170349591 (100.0%), 407.2 MBs/sec 2026-10-24T11:04:07.3313105Z Cache Size: ~162 MB (170349591 B) 2026-10-24T11:04:07.3364745Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/d9d50d56-74c5-422e-92e8-adf8aac29216/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T11:04:08.0301468Z Cache restored successfully 2026-10-24T11:04:08.0450592Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T11:04:08.0515869Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1356] 2026-10-24T11:04:08.0518523Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T11:04:08.0541335Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T11:04:08.0541607Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T11:04:08.0541785Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T11:04:08.0564140Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:04:08.0564352Z env: 2026-10-24T11:04:08.0564474Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:08.0564623Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:08.0564772Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:08.0564923Z ##[endgroup] 2026-10-24T11:04:08.0615312Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T11:04:08.0624369Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T11:04:08.0625693Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T11:04:08.0629808Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T11:04:08.0631295Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T11:04:08.0657763Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T11:04:08.0657944Z store_path="$(vp pm cache dir)" 2026-10-24T11:04:08.0658108Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T11:04:08.0676261Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:04:08.0676431Z env: 2026-10-24T11:04:08.0676546Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:08.0676867Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:08.0677008Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:08.0677145Z ##[endgroup] 2026-10-24T11:04:08.0832632Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=20] 2026-10-24T11:04:08.0834666Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T11:04:08.1193972Z ##[group]Run actions/cache@v6 2026-10-24T11:04:08.1194105Z with: 2026-10-24T11:04:08.1194231Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T11:04:08.1194492Z key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T11:04:08.1194751Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T11:04:08.1194903Z enableCrossOsArchive: false 2026-10-24T11:04:08.1195042Z fail-on-cache-miss: false 2026-10-24T11:04:08.1195165Z lookup-only: false 2026-10-24T11:04:08.1195280Z save-always: false 2026-10-24T11:04:08.1195390Z env: 2026-10-24T11:04:08.1195502Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:08.1195667Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:08.1195810Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:08.1195947Z ##[endgroup] 2026-10-24T11:04:08.3115751Z Cache hit for: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T11:04:09.3340521Z Received 671088640 of 995169257 (67.4%), 639.4 MBs/sec 2026-10-24T11:04:09.7730851Z Received 995169257 of 995169257 (100.0%), 659.1 MBs/sec 2026-10-24T11:04:09.7731537Z Cache Size: ~949 MB (995169257 B) 2026-10-24T11:04:09.7780922Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/952f09db-f0d4-49f7-bbf6-b1da027351f6/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T11:04:15.4876503Z Cache restored successfully 2026-10-24T11:04:15.5363408Z Cache restored from key: pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d 2026-10-24T11:04:15.5435770Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7460] 2026-10-24T11:04:15.5438508Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T11:04:15.5449907Z ##[group]Run vp install 2026-10-24T11:04:15.5450053Z vp install 2026-10-24T11:04:15.5473376Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:04:15.5473546Z env: 2026-10-24T11:04:15.5473666Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:15.5473819Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:15.5473962Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:15.5474102Z ##[endgroup] 2026-10-24T11:04:15.6019390Z Scope: all 33 workspace projects 2026-10-24T11:04:15.7102718Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T11:04:16.0009228Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T11:04:16.0009855Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T11:04:16.0010207Z Virtual store is at: node_modules/.pnpm 2026-10-24T11:04:18.1873575Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.5s) 2026-10-24T11:04:18.1873983Z Lockfile is up to date, resolution step is skipped 2026-10-24T11:04:18.2085607Z Packages: +1721 2026-10-24T11:04:18.2085911Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T11:04:18.2481195Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T11:04:19.3248119Z . prepare$ vp config --no-agent 2026-10-24T11:04:19.4308142Z . prepare: Done 2026-10-24T11:04:19.4325232Z 2026-10-24T11:04:19.4325300Z devDependencies: 2026-10-24T11:04:19.4325471Z + @coderabbitai/config 1.1.0 2026-10-24T11:04:19.4325609Z + @shadcn/lint 0.1.5 2026-10-24T11:04:19.4325764Z + @types/node 24.12.4 2026-10-24T11:04:19.4325899Z + knip 6.34.0 2026-10-24T11:04:19.4326042Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T11:04:19.4326194Z + vite-plus 1.3.0 2026-10-24T11:04:19.4326263Z 2026-10-24T11:04:19.4365714Z Done in 3.9s using pnpm v12.14.0 2026-10-24T11:04:19.4618793Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3917] 2026-10-24T11:04:19.5263693Z ##[group]Run actions/cache@v6 2026-10-24T11:04:19.5263860Z with: 2026-10-24T11:04:19.5263977Z path: ~/.cache/electron 2026-10-24T11:04:19.5264211Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T11:04:19.5264459Z enableCrossOsArchive: false 2026-10-24T11:04:19.5264599Z fail-on-cache-miss: false 2026-10-24T11:04:19.5264726Z lookup-only: false 2026-10-24T11:04:19.5264845Z save-always: false 2026-10-24T11:04:19.5264956Z env: 2026-10-24T11:04:19.5265074Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:19.5265228Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:19.5265390Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:19.5265531Z ##[endgroup] 2026-10-24T11:04:19.7217396Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T11:04:19.8845572Z Received 122906203 of 122906203 (100.0%), 797.4 MBs/sec 2026-10-24T11:04:19.8845908Z Cache Size: ~117 MB (122906203 B) 2026-10-24T11:04:19.8883974Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/31ea3a5c-8d74-4440-9daa-fce7722db5d2/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T11:04:19.9757926Z Cache restored successfully 2026-10-24T11:04:19.9890121Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T11:04:20.0007974Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T11:04:20.0008227Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T11:04:20.0030816Z shell: /usr/bin/bash -e {0} 2026-10-24T11:04:20.0030946Z env: 2026-10-24T11:04:20.0031233Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:20.0031385Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:20.0031529Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:20.0031669Z ##[endgroup] 2026-10-24T11:04:20.1753468Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T11:04:20.7731635Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T11:04:20.7750742Z 2026-10-24T11:04:20.7861335Z ##[group]Run vp run knip:check 2026-10-24T11:04:20.7861515Z vp run knip:check 2026-10-24T11:04:20.7883120Z shell: /usr/bin/bash -e {0} 2026-10-24T11:04:20.7883247Z env: 2026-10-24T11:04:20.7883361Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:20.7883516Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:20.7883660Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:20.7883802Z ##[endgroup] 2026-10-24T11:04:20.9434362Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T11:04:24.9317827Z 2026-10-24T11:04:24.9320745Z $ 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-24T11:04:33.7512955Z 2026-10-24T11:04:33.7514000Z --- 2026-10-24T11:04:33.7514313Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T11:04:33.7604999Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T11:04:33.7605309Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T11:04:33.7627386Z shell: /usr/bin/bash -e {0} 2026-10-24T11:04:33.7627516Z env: 2026-10-24T11:04:33.7627632Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:33.7627782Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:33.7627930Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:33.7628068Z ##[endgroup] 2026-10-24T11:04:33.9194200Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T11:04:34.1204569Z 2026-10-24T11:04:34.1285375Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T11:04:34.1285639Z vp run --filter t3 generate --check 2026-10-24T11:04:34.1308156Z shell: /usr/bin/bash -e {0} 2026-10-24T11:04:34.1308292Z env: 2026-10-24T11:04:34.1308425Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:34.1308578Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:34.1308752Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:34.1308893Z ##[endgroup] 2026-10-24T11:04:34.2822614Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T11:04:34.4470989Z 2026-10-24T11:04:34.4580328Z ##[group]Run vp check 2026-10-24T11:04:34.4580495Z vp check 2026-10-24T11:04:34.4602076Z shell: /usr/bin/bash -e {0} 2026-10-24T11:04:34.4602212Z env: 2026-10-24T11:04:34.4602327Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:34.4602481Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:34.4602625Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T11:04:34.4602761Z ##[endgroup] 2026-10-24T11:04:35.0464543Z pass: All 5690 files are correctly formatted (424ms, 8 threads) 2026-10-24T11:04:40.3443506Z warn: Lint warnings found 2026-10-24T11:04:40.3444629Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T11:04:40.3445024Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T11:04:40.3445245Z 37 │ get isConnected() { 2026-10-24T11:04:40.3445458Z 38 │ let current: FakeElement | null = this; 2026-10-24T11:04:40.3445783Z ·  ─────── 2026-10-24T11:04:40.3445955Z 39 │ while (current?.parent) { 2026-10-24T11:04:40.3446110Z ╰──── 2026-10-24T11:04:40.3446469Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T11:04:40.3446746Z 2026-10-24T11:04:40.3446969Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T11:04:40.3447327Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T11:04:40.3447567Z 2 │ AuthFilesystemReadScope, 2026-10-24T11:04:40.3447821Z 3 │ type AuthSessionState, 2026-10-24T11:04:40.3448002Z ·  ────────┬─────── 2026-10-24T11:04:40.3448306Z · ╰── 'AuthSessionState' is imported here 2026-10-24T11:04:40.3448606Z 4 │ type FilesystemBrowseEntry, 2026-10-24T11:04:40.3448761Z ╰──── 2026-10-24T11:04:40.3448921Z  help: Consider removing this import. 2026-10-24T11:04:40.3449040Z 2026-10-24T11:04:40.3449261Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T11:04:40.3449575Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T11:04:40.3449879Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T11:04:40.3450162Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T11:04:40.3450392Z ·  ──────┬────── 2026-10-24T11:04:40.3450641Z · ╰── 'HookForwarder' is imported here 2026-10-24T11:04:40.3450894Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T11:04:40.3451066Z ╰──── 2026-10-24T11:04:40.3451227Z  help: Consider removing this import. 2026-10-24T11:04:40.3451344Z 2026-10-24T11:04:40.3451740Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3452235Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T11:04:40.3452555Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T11:04:40.3452856Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T11:04:40.3453111Z ·  ──────────────────────── 2026-10-24T11:04:40.3453379Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T11:04:40.3453587Z ╰──── 2026-10-24T11:04:40.3453651Z 2026-10-24T11:04:40.3454028Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3454510Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T11:04:40.3454758Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T11:04:40.3455049Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T11:04:40.3455549Z ·  ──────────────────────── 2026-10-24T11:04:40.3455817Z 257 │ return [ 2026-10-24T11:04:40.3455951Z ╰──── 2026-10-24T11:04:40.3456015Z 2026-10-24T11:04:40.3456219Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T11:04:40.3456552Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T11:04:40.3456797Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T11:04:40.3457002Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T11:04:40.3457199Z ·  ──┬── 2026-10-24T11:04:40.3457431Z · ╰── 'Scope' is imported here 2026-10-24T11:04:40.3457663Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T11:04:40.3457824Z ╰──── 2026-10-24T11:04:40.3457993Z  help: Consider removing this import. 2026-10-24T11:04:40.3458109Z 2026-10-24T11:04:40.3458493Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T11:04:40.3458893Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T11:04:40.3459094Z 284 │ }, 2026-10-24T11:04:40.3459250Z 285 │ (effect, flow, stopSessions) => 2026-10-24T11:04:40.3459445Z ·  ──────┬───── 2026-10-24T11:04:40.3459703Z · ╰── 'stopSessions' is declared here 2026-10-24T11:04:40.3459923Z 286 │ effect.pipe( 2026-10-24T11:04:40.3460061Z ╰──── 2026-10-24T11:04:40.3460226Z  help: Consider removing this parameter. 2026-10-24T11:04:40.3460348Z 2026-10-24T11:04:40.3460551Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T11:04:40.3460846Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T11:04:40.3461045Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T11:04:40.3461241Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T11:04:40.3461423Z ·  ──┬── 2026-10-24T11:04:40.3461650Z · ╰── 'Fiber' is imported here 2026-10-24T11:04:40.3461967Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T11:04:40.3462176Z ╰──── 2026-10-24T11:04:40.3462331Z  help: Consider removing this import. 2026-10-24T11:04:40.3462447Z 2026-10-24T11:04:40.3462655Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T11:04:40.3462954Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T11:04:40.3463153Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T11:04:40.3463348Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T11:04:40.3463547Z ·  ────┬─── 2026-10-24T11:04:40.3463779Z · ╰── 'Schedule' is imported here 2026-10-24T11:04:40.3464015Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T11:04:40.3464175Z ╰──── 2026-10-24T11:04:40.3464328Z  help: Consider removing this import. 2026-10-24T11:04:40.3464444Z 2026-10-24T11:04:40.3464755Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3465139Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T11:04:40.3465556Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T11:04:40.3466002Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T11:04:40.3466320Z ·  ────────────┬─────────── 2026-10-24T11:04:40.3466611Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T11:04:40.3466959Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T11:04:40.3467194Z ╰──── 2026-10-24T11:04:40.3467363Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3467484Z 2026-10-24T11:04:40.3467689Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T11:04:40.3467987Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T11:04:40.3468179Z 21 │ EnvironmentThreadShell, 2026-10-24T11:04:40.3468447Z 22 │ ThreadRunSummary, 2026-10-24T11:04:40.3468686Z ·  ────────┬─────── 2026-10-24T11:04:40.3468929Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T11:04:40.3469146Z 23 │ ThreadRuntimeSummary, 2026-10-24T11:04:40.3469289Z ╰──── 2026-10-24T11:04:40.3469446Z  help: Consider removing this import. 2026-10-24T11:04:40.3469563Z 2026-10-24T11:04:40.3469755Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T11:04:40.3470083Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T11:04:40.3470347Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T11:04:40.3470567Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T11:04:40.3470749Z ·  ─┬─ 2026-10-24T11:04:40.3470972Z · ╰── 'Arr' is imported here 2026-10-24T11:04:40.3471188Z 5 │ import * as Order from "effect/Order"; 2026-10-24T11:04:40.3471348Z ╰──── 2026-10-24T11:04:40.3471501Z  help: Consider removing this import. 2026-10-24T11:04:40.3471618Z 2026-10-24T11:04:40.3471816Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T11:04:40.3472140Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T11:04:40.3472367Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T11:04:40.3472552Z 5 │ import * as Order from "effect/Order"; 2026-10-24T11:04:40.3472729Z ·  ──┬── 2026-10-24T11:04:40.3472955Z · ╰── 'Order' is imported here 2026-10-24T11:04:40.3473152Z 6 │ 2026-10-24T11:04:40.3473272Z ╰──── 2026-10-24T11:04:40.3473424Z  help: Consider removing this import. 2026-10-24T11:04:40.3473540Z 2026-10-24T11:04:40.3474029Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3474618Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T11:04:40.3474836Z 138 │ Effect.gen(function* () { 2026-10-24T11:04:40.3475132Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T11:04:40.3475447Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T11:04:40.3476033Z 141 │ │ // oxlint-disable-next-line t3code/no-real-time-wait-in-tests -- a macrotask boundary so the real stat I/O can finish; time moves only via TestClock 2026-10-24T11:04:40.3476578Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T11:04:40.3476898Z 143 │ ╰─▶ } 2026-10-24T11:04:40.3477127Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T11:04:40.3477289Z ╰──── 2026-10-24T11:04:40.3477350Z 2026-10-24T11:04:40.3477562Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T11:04:40.3477894Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T11:04:40.3478115Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T11:04:40.3478345Z 3 │ type AuthSessionState, 2026-10-24T11:04:40.3478608Z ·  ────────┬─────── 2026-10-24T11:04:40.3478861Z · ╰── 'AuthSessionState' is imported here 2026-10-24T11:04:40.3479081Z 4 │ sessionGrantsScope, 2026-10-24T11:04:40.3479226Z ╰──── 2026-10-24T11:04:40.3479380Z  help: Consider removing this import. 2026-10-24T11:04:40.3479500Z 2026-10-24T11:04:40.3479978Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3480565Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1680:7] 2026-10-24T11:04:40.3480827Z 1679 │ yield* harness.replaceSession; 2026-10-24T11:04:40.3481157Z 1680 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.3481516Z 1681 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T11:04:40.3481766Z 1682 │ │ break; 2026-10-24T11:04:40.3481955Z 1683 │ │ } 2026-10-24T11:04:40.3482165Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3482429Z 1685 │ ╰─▶ } 2026-10-24T11:04:40.3482646Z 1686 │ yield* Queue.offer( 2026-10-24T11:04:40.3482800Z ╰──── 2026-10-24T11:04:40.3482856Z 2026-10-24T11:04:40.3483336Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3483937Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T11:04:40.3484212Z 1788 │ yield* harness.replaceSession; 2026-10-24T11:04:40.3484536Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.3484895Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T11:04:40.3485173Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3485433Z 1792 │ ╰─▶ } 2026-10-24T11:04:40.3485710Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T11:04:40.3485913Z ╰──── 2026-10-24T11:04:40.3485973Z 2026-10-24T11:04:40.3486245Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T11:04:40.3486617Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1526:12] 2026-10-24T11:04:40.3486847Z 1525 │ 2026-10-24T11:04:40.3486983Z 1526 │ for (const [] of [ 2026-10-24T11:04:40.3487146Z ·  ── 2026-10-24T11:04:40.3487315Z 1527 │ ["github", "github.com"], 2026-10-24T11:04:40.3487464Z ╰──── 2026-10-24T11:04:40.3487875Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T11:04:40.3488150Z 2026-10-24T11:04:40.3488550Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3488946Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:172:5] 2026-10-24T11:04:40.3489290Z 167 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T11:04:40.3489561Z 168 │ useLayoutEffect(() => { 2026-10-24T11:04:40.3489732Z ·  ───────┬─────── 2026-10-24T11:04:40.3489968Z · ╰── This is the containing effect 2026-10-24T11:04:40.3490349Z 169 │ if (faviconRequest === null) return; 2026-10-24T11:04:40.3490564Z 170 │ 2026-10-24T11:04:40.3511330Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T11:04:40.3511640Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T11:04:40.3511874Z ·  ───────────┬─────────── 2026-10-24T11:04:40.3512184Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3512456Z 173 │ return endRequest; 2026-10-24T11:04:40.3512617Z ╰──── 2026-10-24T11:04:40.3513305Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3514217Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3514539Z 2026-10-24T11:04:40.3514814Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3515216Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T11:04:40.3515624Z 57 │ 2026-10-24T11:04:40.3515821Z 58 │ useEffect(() => { 2026-10-24T11:04:40.3515988Z ·  ────┬──── 2026-10-24T11:04:40.3516222Z · ╰── This is the containing effect 2026-10-24T11:04:40.3516463Z 59 │ const controller = new AbortController(); 2026-10-24T11:04:40.3516663Z 60 │ setLoadState("pending"); 2026-10-24T11:04:40.3516839Z ·  ──────┬───── 2026-10-24T11:04:40.3517109Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3517452Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T11:04:40.3517684Z ╰──── 2026-10-24T11:04:40.3518463Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3519438Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3519749Z 2026-10-24T11:04:40.3519965Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.3520317Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T11:04:40.3520555Z 70 │ return () => controller.abort(); 2026-10-24T11:04:40.3520801Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T11:04:40.3521110Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T11:04:40.3521510Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T11:04:40.3521932Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T11:04:40.3522269Z · ╰── Unnecessary dependency `player_0` 2026-10-24T11:04:40.3522478Z 72 │ 2026-10-24T11:04:40.3522597Z ╰──── 2026-10-24T11:04:40.3522966Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.3523710Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3524096Z 2026-10-24T11:04:40.3524600Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3525188Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T11:04:40.3525421Z 168 │ }); 2026-10-24T11:04:40.3525711Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T11:04:40.3526105Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T11:04:40.3526413Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3526774Z 172 │ ╰─▶ } 2026-10-24T11:04:40.3527040Z 173 │ 2026-10-24T11:04:40.3527169Z ╰──── 2026-10-24T11:04:40.3527228Z 2026-10-24T11:04:40.3527776Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3528442Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T11:04:40.3528784Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T11:04:40.3529115Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T11:04:40.3529440Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T11:04:40.3529706Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3529968Z 181 │ ╰─▶ } 2026-10-24T11:04:40.3530168Z 182 │ 2026-10-24T11:04:40.3530292Z ╰──── 2026-10-24T11:04:40.3530355Z 2026-10-24T11:04:40.3530824Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3531403Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T11:04:40.3531696Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T11:04:40.3532036Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T11:04:40.3532354Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T11:04:40.3532699Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T11:04:40.3532982Z 310 │ │ break; 2026-10-24T11:04:40.3533176Z 311 │ │ } 2026-10-24T11:04:40.3533385Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3533646Z 313 │ ╰─▶ } 2026-10-24T11:04:40.3533844Z 314 │ 2026-10-24T11:04:40.3533972Z ╰──── 2026-10-24T11:04:40.3534029Z 2026-10-24T11:04:40.3534307Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3534694Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T11:04:40.3534885Z 168 │ 2026-10-24T11:04:40.3535031Z 169 │ const layerTest = Layer.succeed( 2026-10-24T11:04:40.3535213Z ·  ────┬──── 2026-10-24T11:04:40.3535442Z · ╰── 'layerTest' is declared here 2026-10-24T11:04:40.3535644Z 170 │ UsageService, 2026-10-24T11:04:40.3535773Z ╰──── 2026-10-24T11:04:40.3535937Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3536060Z 2026-10-24T11:04:40.3536256Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.3536599Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T11:04:40.3536861Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T11:04:40.3537273Z 267 │ 2026-10-24T11:04:40.3537666Z ·  ─────────────────────────────────────────────────────── 2026-10-24T11:04:40.3537891Z 268 │ { 2026-10-24T11:04:40.3547251Z ·  ───┬── 2026-10-24T11:04:40.3547571Z · ╰── For this reduce 2026-10-24T11:04:40.3547824Z 449 │ const exists = current.some( 2026-10-24T11:04:40.3548111Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T11:04:40.3548426Z 451 │ ); 2026-10-24T11:04:40.3548659Z 452 │ return change.favorite 2026-10-24T11:04:40.3548847Z 453 │ ? exists 2026-10-24T11:04:40.3548995Z 454 │ ? current 2026-10-24T11:04:40.3549216Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T11:04:40.3549456Z ·  ─────┬──── 2026-10-24T11:04:40.3549684Z · ╰── From this spread 2026-10-24T11:04:40.3549886Z 456 │ : current.filter( 2026-10-24T11:04:40.3550035Z ╰──── 2026-10-24T11:04:40.3550312Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T11:04:40.3550687Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T11:04:40.3550857Z 2026-10-24T11:04:40.3551051Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T11:04:40.3551365Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T11:04:40.3551558Z 464 │ null; 2026-10-24T11:04:40.3551754Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T11:04:40.3551979Z ·  ──────────┬───────── 2026-10-24T11:04:40.3552215Z · ╰── From this accumulator 2026-10-24T11:04:40.3552454Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T11:04:40.3552652Z ·  ─┬─ 2026-10-24T11:04:40.3552846Z · ╰── For this loop 2026-10-24T11:04:40.3553106Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T11:04:40.3553329Z 468 │ hiddenModels: [], 2026-10-24T11:04:40.3553486Z 469 │ modelOrder: [], 2026-10-24T11:04:40.3553636Z 470 │ }; 2026-10-24T11:04:40.3553888Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T11:04:40.3554191Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T11:04:40.3554396Z 473 │ nextModelPreferences = { 2026-10-24T11:04:40.3554577Z 474 │ ...nextModelPreferences, 2026-10-24T11:04:40.3554775Z ·  ───────────┬─────────── 2026-10-24T11:04:40.3555014Z · ╰── From this spread 2026-10-24T11:04:40.3555269Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T11:04:40.3555464Z ╰──── 2026-10-24T11:04:40.3555680Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T11:04:40.3556004Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T11:04:40.3556172Z 2026-10-24T11:04:40.3556441Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3556849Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T11:04:40.3557068Z 61 │ }, []); 2026-10-24T11:04:40.3557205Z 62 │ useEffect(() => { 2026-10-24T11:04:40.3557368Z ·  ────┬──── 2026-10-24T11:04:40.3557594Z · ╰── This is the containing effect 2026-10-24T11:04:40.3557983Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T11:04:40.3558380Z ·  ───────┬────── 2026-10-24T11:04:40.3558796Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3559074Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T11:04:40.3559233Z ╰──── 2026-10-24T11:04:40.3559904Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3560789Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3561103Z 2026-10-24T11:04:40.3561578Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3562146Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T11:04:40.3562395Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T11:04:40.3562755Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T11:04:40.3563104Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T11:04:40.3563399Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T11:04:40.3563700Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T11:04:40.3563954Z 2619 │ │ flush: () => { 2026-10-24T11:04:40.3564199Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T11:04:40.3564493Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T11:04:40.3564736Z 2622 │ │ }, 2026-10-24T11:04:40.3564927Z 2623 │ │ }; 2026-10-24T11:04:40.3565099Z 2624 │ │ 2026-10-24T11:04:40.3565358Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T11:04:40.3565717Z 2626 │ │ let requestChecks = 0; 2026-10-24T11:04:40.3566013Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T11:04:40.3566270Z 2628 │ │ executionMode: "async", 2026-10-24T11:04:40.3566526Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T11:04:40.3566780Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T11:04:40.3567048Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T11:04:40.3567303Z 2632 │ │ requestChecks += 1; 2026-10-24T11:04:40.3577629Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T11:04:40.3577972Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T11:04:40.3578216Z 2635 │ │ return true; 2026-10-24T11:04:40.3578540Z 2636 │ │ }, 2026-10-24T11:04:40.3578724Z 2637 │ │ }; 2026-10-24T11:04:40.3578901Z 2638 │ │ 2026-10-24T11:04:40.3579117Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T11:04:40.3579356Z 2640 │ │ ...WINDOW, 2026-10-24T11:04:40.3579605Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T11:04:40.3579952Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T11:04:40.3580229Z 2643 │ │ }; 2026-10-24T11:04:40.3580448Z 2644 │ │ const first = yield* service 2026-10-24T11:04:40.3580693Z 2645 │ │ .readSummary(input) 2026-10-24T11:04:40.3580915Z 2646 │ │ .pipe( 2026-10-24T11:04:40.3581124Z 2647 │ │ Effect.exit, 2026-10-24T11:04:40.3581409Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T11:04:40.3581680Z 2649 │ │ Effect.forkChild, 2026-10-24T11:04:40.3581885Z 2650 │ │ ); 2026-10-24T11:04:40.3582094Z 2651 │ │ requestFiber = first; 2026-10-24T11:04:40.3582322Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3582556Z 2653 │ │ dispatcher.flush(); 2026-10-24T11:04:40.3582747Z 2654 │ │ 2026-10-24T11:04:40.3582995Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T11:04:40.3583262Z 2656 │ │ Effect.match({ 2026-10-24T11:04:40.3583513Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T11:04:40.3583781Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T11:04:40.3584011Z 2659 │ │ }), 2026-10-24T11:04:40.3584273Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T11:04:40.3584542Z 2661 │ │ Effect.forkChild, 2026-10-24T11:04:40.3584743Z 2662 │ │ ); 2026-10-24T11:04:40.3584954Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3585180Z 2664 │ │ dispatcher.flush(); 2026-10-24T11:04:40.3585549Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T11:04:40.3585870Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T11:04:40.3586120Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T11:04:40.3586369Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T11:04:40.3586588Z 2669 │ │ break; 2026-10-24T11:04:40.3586781Z 2670 │ │ } 2026-10-24T11:04:40.3587004Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T11:04:40.3587307Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T11:04:40.3587555Z 2673 │ │ } 2026-10-24T11:04:40.3587814Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T11:04:40.3588122Z 2675 │ ╰─▶ } 2026-10-24T11:04:40.3588406Z 2676 │ 2026-10-24T11:04:40.3588594Z ╰──── 2026-10-24T11:04:40.3588688Z 2026-10-24T11:04:40.3588918Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:04:40.3589268Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T11:04:40.3589494Z 89 │ let cursor = prompt.length; 2026-10-24T11:04:40.3589699Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T11:04:40.3589931Z ·  ─────── 2026-10-24T11:04:40.3590135Z 91 │ let { start, end } = occurrence; 2026-10-24T11:04:40.3590294Z ╰──── 2026-10-24T11:04:40.3590631Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:04:40.3590889Z 2026-10-24T11:04:40.3591271Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownOption(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3591744Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T11:04:40.3591941Z 145 │ name, 2026-10-24T11:04:40.3592162Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T11:04:40.3592424Z ·  ────────────────────────── 2026-10-24T11:04:40.3592668Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T11:04:40.3592857Z ╰──── 2026-10-24T11:04:40.3592918Z 2026-10-24T11:04:40.3593113Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:04:40.3593491Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T11:04:40.3593756Z 115 │ return [...commands]; 2026-10-24T11:04:40.3593981Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T11:04:40.3594247Z ·  ─────────┬───────── 2026-10-24T11:04:40.3594561Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T11:04:40.3594797Z 117 │ 2026-10-24T11:04:40.3594913Z ╰──── 2026-10-24T11:04:40.3595293Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.3596000Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3596341Z 2026-10-24T11:04:40.3596505Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T11:04:40.3596794Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T11:04:40.3597049Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T11:04:40.3597276Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T11:04:40.3597492Z ·  ───────────────────────────── 2026-10-24T11:04:40.3597729Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T11:04:40.3597924Z ╰──── 2026-10-24T11:04:40.3598144Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T11:04:40.3598364Z 2026-10-24T11:04:40.3598633Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.3598956Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T11:04:40.3599162Z 185 │ 2026-10-24T11:04:40.3599329Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T11:04:40.3599518Z ·  ── 2026-10-24T11:04:40.3599665Z 187 │ } 2026-10-24T11:04:40.3599779Z ╰──── 2026-10-24T11:04:40.3600073Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.3600298Z 2026-10-24T11:04:40.3600470Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.3600782Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T11:04:40.3600985Z 188 │ 2026-10-24T11:04:40.3601118Z 189 │ for (const {} of [ 2026-10-24T11:04:40.3601278Z ·  ── 2026-10-24T11:04:40.3601460Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T11:04:40.3601624Z ╰──── 2026-10-24T11:04:40.3601912Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.3602139Z 2026-10-24T11:04:40.3602309Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.3602618Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T11:04:40.3602825Z 310 │ 2026-10-24T11:04:40.3603017Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T11:04:40.3603272Z ·  ── 2026-10-24T11:04:40.3603415Z 312 │ } 2026-10-24T11:04:40.3603538Z ╰──── 2026-10-24T11:04:40.3603829Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.3604056Z 2026-10-24T11:04:40.3604228Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.3604538Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T11:04:40.3604743Z 313 │ 2026-10-24T11:04:40.3604873Z 314 │ for (const {} of [ 2026-10-24T11:04:40.3605028Z ·  ── 2026-10-24T11:04:40.3605169Z 315 │ { 2026-10-24T11:04:40.3605294Z ╰──── 2026-10-24T11:04:40.3605582Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.3605808Z 2026-10-24T11:04:40.3606347Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.3606930Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1043:32] 2026-10-24T11:04:40.3607216Z 1042 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T11:04:40.3607564Z 1043 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T11:04:40.3607935Z ·  ─────────────────── 2026-10-24T11:04:40.3608162Z 1044 │ expect(encoded).not.toContain(url); 2026-10-24T11:04:40.3608395Z ╰──── 2026-10-24T11:04:40.3608485Z 2026-10-24T11:04:40.3608658Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3608993Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T11:04:40.3609224Z 35 │ 2026-10-24T11:04:40.3609425Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T11:04:40.3609669Z ·  ────────┬──────── 2026-10-24T11:04:40.3609925Z · ╰── `inspectorProgress` originates here 2026-10-24T11:04:40.3610173Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T11:04:40.3610426Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T11:04:40.3610624Z 39 │ 2026-10-24T11:04:40.3610770Z 40 │ const onClosed = props.onClosed; 2026-10-24T11:04:40.3610937Z 41 │ useEffect(() => { 2026-10-24T11:04:40.3611116Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T11:04:40.3611312Z ·  ────────┬──────── 2026-10-24T11:04:40.3611570Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T11:04:40.3611806Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T11:04:40.3611959Z ╰──── 2026-10-24T11:04:40.3612290Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3612867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3613163Z 2026-10-24T11:04:40.3613325Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3613652Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T11:04:40.3613916Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T11:04:40.3614168Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T11:04:40.3614409Z ·  ──────────┬───────── 2026-10-24T11:04:40.3614670Z · ╰── `renderedContentWidth` originates here 2026-10-24T11:04:40.3614883Z 39 │ 2026-10-24T11:04:40.3615024Z 40 │ const onClosed = props.onClosed; 2026-10-24T11:04:40.3615194Z 41 │ useEffect(() => { 2026-10-24T11:04:40.3615370Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T11:04:40.3615558Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T11:04:40.3615729Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T11:04:40.3615888Z 45 │ (finished) => { 2026-10-24T11:04:40.3616115Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T11:04:40.3616341Z 47 │ runOnJS(onClosed)(); 2026-10-24T11:04:40.3616599Z 48 │ } 2026-10-24T11:04:40.3616775Z 49 │ }, 2026-10-24T11:04:40.3616902Z 50 │ ); 2026-10-24T11:04:40.3617104Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T11:04:40.3617332Z 52 │ renderedInspectorWidth.set( 2026-10-24T11:04:40.3617580Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T11:04:40.3617796Z 54 │ ); 2026-10-24T11:04:40.3617917Z 55 │ }, [ 2026-10-24T11:04:40.3618050Z 56 │ inspectorProgress, 2026-10-24T11:04:40.3618209Z 57 │ inspectorVisible, 2026-10-24T11:04:40.3618454Z 58 │ inspectorWidth, 2026-10-24T11:04:40.3618621Z 59 │ onClosed, 2026-10-24T11:04:40.3618770Z 60 │ renderedInspectorWidth, 2026-10-24T11:04:40.3618924Z 61 │ resizing, 2026-10-24T11:04:40.3619052Z 62 │ ]); 2026-10-24T11:04:40.3619177Z 63 │ 2026-10-24T11:04:40.3619305Z 64 │ useEffect(() => { 2026-10-24T11:04:40.3619481Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T11:04:40.3619682Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T11:04:40.3619887Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T11:04:40.3620097Z ·  ──────────┬───────── 2026-10-24T11:04:40.3620363Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T11:04:40.3620587Z 68 │ return; 2026-10-24T11:04:40.3620713Z ╰──── 2026-10-24T11:04:40.3621042Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3621615Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3621914Z 2026-10-24T11:04:40.3622124Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.3622493Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T11:04:40.3622724Z 154 │ } 2026-10-24T11:04:40.3622863Z 155 │ }, [wrappedRender]); 2026-10-24T11:04:40.3623037Z ·  ──────┬────── 2026-10-24T11:04:40.3623291Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T11:04:40.3623502Z 156 │ 2026-10-24T11:04:40.3623621Z ╰──── 2026-10-24T11:04:40.3623978Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.3624666Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3625003Z 2026-10-24T11:04:40.3625251Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:04:40.3625659Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T11:04:40.3625887Z 799 │ > 2026-10-24T11:04:40.3626089Z 800 │ 2026-10-24T11:04:40.3626361Z ·  ──────────────────── 2026-10-24T11:04:40.3626597Z 801 │ 2026-10-24T11:04:40.3626770Z ╰──── 2026-10-24T11:04:40.3627067Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:04:40.3627434Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:04:40.3627617Z 2026-10-24T11:04:40.3627854Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T11:04:40.3628213Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T11:04:40.3628706Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T11:04:40.3628995Z 35 │ instanceId === configured ? true : false, 2026-10-24T11:04:40.3629669Z ·  ──────────────────────────────────────── 2026-10-24T11:04:40.3629852Z 36 │ ); 2026-10-24T11:04:40.3629975Z ╰──── 2026-10-24T11:04:40.3630129Z  help: Remove this ternary operator 2026-10-24T11:04:40.3630252Z 2026-10-24T11:04:40.3630430Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.3630751Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T11:04:40.3630969Z 465 │ 2026-10-24T11:04:40.3631141Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T11:04:40.3631340Z ·  ── 2026-10-24T11:04:40.3631492Z 467 │ } 2026-10-24T11:04:40.3631608Z ╰──── 2026-10-24T11:04:40.3631903Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.3632131Z 2026-10-24T11:04:40.3632345Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T11:04:40.3632726Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T11:04:40.3632990Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T11:04:40.3633223Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T11:04:40.3633442Z ·  ─────┬───── 2026-10-24T11:04:40.3633692Z · ╰── 'HostProcess' is imported here 2026-10-24T11:04:40.3633892Z 26 │ 2026-10-24T11:04:40.3634009Z ╰──── 2026-10-24T11:04:40.3634167Z  help: Consider removing this import. 2026-10-24T11:04:40.3634284Z 2026-10-24T11:04:40.3634563Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3634996Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T11:04:40.3635341Z 123 │ const path = yield* Path.Path; 2026-10-24T11:04:40.3635609Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T11:04:40.3635828Z ·  ──────┬───── 2026-10-24T11:04:40.3636077Z · ╰── 'serverConfig' is declared here 2026-10-24T11:04:40.3636372Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T11:04:40.3636589Z ╰──── 2026-10-24T11:04:40.3636755Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3636877Z 2026-10-24T11:04:40.3637160Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3637592Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T11:04:40.3637891Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T11:04:40.3638167Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T11:04:40.3638522Z ·  ───────┬────── 2026-10-24T11:04:40.3638773Z · ╰── 'serverSettings' is declared here 2026-10-24T11:04:40.3639064Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T11:04:40.3639273Z ╰──── 2026-10-24T11:04:40.3639439Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3639559Z 2026-10-24T11:04:40.3639750Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.3640048Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T11:04:40.3640236Z 457 │ ): Array { 2026-10-24T11:04:40.3640433Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T11:04:40.3640664Z ·  ┬ 2026-10-24T11:04:40.3640927Z · ╰── '_' is declared here 2026-10-24T11:04:40.3641148Z 459 │ for (const b of data) { 2026-10-24T11:04:40.3641294Z ╰──── 2026-10-24T11:04:40.3641459Z  help: Consider removing this parameter. 2026-10-24T11:04:40.3641577Z 2026-10-24T11:04:40.3641865Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3642284Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T11:04:40.3642495Z 12365 │ 2026-10-24T11:04:40.3642716Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T11:04:40.3642967Z ·  ────────┬─────── 2026-10-24T11:04:40.3643225Z · ╰── 'layerUnavailable' is declared here 2026-10-24T11:04:40.3643447Z 12367 │ OrchestratorV2, 2026-10-24T11:04:40.3643591Z ╰──── 2026-10-24T11:04:40.3643760Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3643883Z 2026-10-24T11:04:40.3644030Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3644347Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T11:04:40.3644572Z 493 │ > 2026-10-24T11:04:40.3644732Z 494 │ {props.children(close)} 2026-10-24T11:04:40.3644930Z ·  ──┬── 2026-10-24T11:04:40.3645287Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3645566Z 495 │ 2026-10-24T11:04:40.3645723Z ╰──── 2026-10-24T11:04:40.3646263Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3647003Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3647289Z 2026-10-24T11:04:40.3647556Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T11:04:40.3653673Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T11:04:40.3653897Z 1619 │ 2026-10-24T11:04:40.3654184Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T11:04:40.3654528Z ·  ──────────────────┬────────────────── 2026-10-24T11:04:40.3654868Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T11:04:40.3655149Z 1621 │ const meta = response._meta; 2026-10-24T11:04:40.3655310Z ╰──── 2026-10-24T11:04:40.3655477Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3655599Z 2026-10-24T11:04:40.3655865Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3656251Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T11:04:40.3656460Z 407 │ 2026-10-24T11:04:40.3656600Z 408 │ const layer: Layer.Layer< 2026-10-24T11:04:40.3656765Z ·  ──┬── 2026-10-24T11:04:40.3656985Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.3657216Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T11:04:40.3657386Z ╰──── 2026-10-24T11:04:40.3657548Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3657672Z 2026-10-24T11:04:40.3658152Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3658878Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T11:04:40.3659168Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T11:04:40.3659492Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T11:04:40.3659788Z 567 │ │ const nextEvent = { 2026-10-24T11:04:40.3660070Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T11:04:40.3660376Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T11:04:40.3660619Z 570 │ │ threadId, 2026-10-24T11:04:40.3660841Z 571 │ │ providerInstanceId, 2026-10-24T11:04:40.3661067Z 572 │ │ occurredAt: now, 2026-10-24T11:04:40.3661339Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T11:04:40.3661729Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T11:04:40.3662049Z 575 │ │ const reader = yield* eventSink 2026-10-24T11:04:40.3662302Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T11:04:40.3662578Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T11:04:40.3662830Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3663122Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T11:04:40.3663430Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T11:04:40.3663690Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T11:04:40.3664037Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T11:04:40.3664324Z 583 │ │ } 2026-10-24T11:04:40.3664597Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T11:04:40.3664914Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T11:04:40.3665209Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T11:04:40.3665487Z 587 │ ╰─▶ } 2026-10-24T11:04:40.3665693Z 588 │ }), 2026-10-24T11:04:40.3665823Z ╰──── 2026-10-24T11:04:40.3665885Z 2026-10-24T11:04:40.3666368Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3666975Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T11:04:40.3667238Z 2326 │ let settled = false; 2026-10-24T11:04:40.3667506Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T11:04:40.3667835Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T11:04:40.3668138Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T11:04:40.3668472Z 2330 │ │ ); 2026-10-24T11:04:40.3668764Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T11:04:40.3669047Z 2332 │ ╰─▶ } 2026-10-24T11:04:40.3669321Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T11:04:40.3669518Z ╰──── 2026-10-24T11:04:40.3669577Z 2026-10-24T11:04:40.3669735Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3670014Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T11:04:40.3670334Z 53 │ const child = children as ReactElement>; 2026-10-24T11:04:40.3670699Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T11:04:40.3670979Z 55 │ │ onTouchStart: (event) => { 2026-10-24T11:04:40.3671268Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T11:04:40.3671674Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T11:04:40.3672012Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T11:04:40.3672328Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T11:04:40.3672616Z 60 │ │ pendingPress.current = null; 2026-10-24T11:04:40.3672873Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T11:04:40.3673085Z 62 │ │ }, 2026-10-24T11:04:40.3673292Z 63 │ │ onPress: (event) => { 2026-10-24T11:04:40.3673581Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T11:04:40.3673901Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T11:04:40.3674225Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T11:04:40.3674602Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T11:04:40.3674892Z 68 │ │ return; 2026-10-24T11:04:40.3675081Z 69 │ │ } 2026-10-24T11:04:40.3675324Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T11:04:40.3675654Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T11:04:40.3675998Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T11:04:40.3676276Z 73 │ │ event.persist(); 2026-10-24T11:04:40.3676561Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T11:04:40.3676823Z 75 │ │ return; 2026-10-24T11:04:40.3677007Z 76 │ │ } 2026-10-24T11:04:40.3677226Z 77 │ │ child.props.onPress?.(event); 2026-10-24T11:04:40.3677433Z 78 │ │ }, 2026-10-24T11:04:40.3677663Z 79 │ ├─▶ }); 2026-10-24T11:04:40.3678049Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.3678486Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T11:04:40.3678768Z ╰──── 2026-10-24T11:04:40.3679427Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3680195Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3680481Z 2026-10-24T11:04:40.3680691Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.3681032Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T11:04:40.3681317Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T11:04:40.3681556Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T11:04:40.3681777Z ·  ───────┬────── 2026-10-24T11:04:40.3682072Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T11:04:40.3682385Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T11:04:40.3682598Z ╰──── 2026-10-24T11:04:40.3682957Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.3683560Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3683863Z 2026-10-24T11:04:40.3684036Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.3684344Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T11:04:40.3684576Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T11:04:40.3684855Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T11:04:40.3685151Z ·  ─────┬──── 2026-10-24T11:04:40.3685455Z · ╰── Cannot call impure function 2026-10-24T11:04:40.3685703Z 525 │ const id = setTimeout(() => { 2026-10-24T11:04:40.3685861Z ╰──── 2026-10-24T11:04:40.3686213Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.3686795Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.3687084Z 2026-10-24T11:04:40.3687526Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.3688129Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T11:04:40.3688437Z 262 │ ...(update._meta !== undefined 2026-10-24T11:04:40.3688715Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T11:04:40.3688983Z ·  ───────── 2026-10-24T11:04:40.3689157Z 264 │ : {}), 2026-10-24T11:04:40.3689292Z ╰──── 2026-10-24T11:04:40.3689353Z 2026-10-24T11:04:40.3689697Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3690270Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T11:04:40.3690546Z 1443 │ 2026-10-24T11:04:40.3690731Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T11:04:40.3690991Z ·  ───────────────────┬─────────────────── 2026-10-24T11:04:40.3691326Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T11:04:40.3691657Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T11:04:40.3691852Z ╰──── 2026-10-24T11:04:40.3692018Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3692143Z 2026-10-24T11:04:40.3692408Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3692831Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T11:04:40.3693059Z 1679 │ 2026-10-24T11:04:40.3693197Z 1680 │ const layer: Layer.Layer< 2026-10-24T11:04:40.3693369Z ·  ──┬── 2026-10-24T11:04:40.3700685Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.3700960Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T11:04:40.3701129Z ╰──── 2026-10-24T11:04:40.3701295Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3701415Z 2026-10-24T11:04:40.3701694Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3702063Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T11:04:40.3702238Z 35 │ 2026-10-24T11:04:40.3702445Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T11:04:40.3702672Z ·  ─────┬──── 2026-10-24T11:04:40.3702904Z · ╰── 'claudeCaps' is declared here 2026-10-24T11:04:40.3703117Z 37 │ optionDescriptors: [ 2026-10-24T11:04:40.3703257Z ╰──── 2026-10-24T11:04:40.3703418Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3703538Z 2026-10-24T11:04:40.3703686Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3704002Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T11:04:40.3704350Z 151 │ 2026-10-24T11:04:40.3704622Z 152 │ {props.children(open)} 2026-10-24T11:04:40.3704825Z ·  ──┬─ 2026-10-24T11:04:40.3705101Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3705324Z 153 │ 2026-10-24T11:04:40.3705460Z ╰──── 2026-10-24T11:04:40.3705998Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3706735Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3707020Z 2026-10-24T11:04:40.3707225Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T11:04:40.3707691Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T11:04:40.3707981Z 139 │ if (action.id !== undefined) { 2026-10-24T11:04:40.3708169Z 140 │ props.onPressAction?.({ 2026-10-24T11:04:40.3708423Z ·  ──┬── 2026-10-24T11:04:40.3708766Z · ╰── Missing dependency `props` 2026-10-24T11:04:40.3709001Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T11:04:40.3709264Z 142 │ } as Parameters>[0]); 2026-10-24T11:04:40.3709482Z 143 │ } 2026-10-24T11:04:40.3709608Z 144 │ }, 2026-10-24T11:04:40.3709761Z 145 │ [close, props.onPressAction], 2026-10-24T11:04:40.3709963Z ·  ─────────┬───────── 2026-10-24T11:04:40.3710300Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T11:04:40.3710566Z 146 │ ); 2026-10-24T11:04:40.3710685Z ╰──── 2026-10-24T11:04:40.3711234Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI. Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.3711996Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3712300Z 2026-10-24T11:04:40.3712498Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.3712847Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T11:04:40.3713096Z 35 │ { 2026-10-24T11:04:40.3719972Z ·  ────┬──── 2026-10-24T11:04:40.3720196Z · ╰── This is the containing effect 2026-10-24T11:04:40.3720400Z 68 │ setUri(null); 2026-10-24T11:04:40.3720556Z ·  ───┬── 2026-10-24T11:04:40.3720821Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3721061Z 69 │ setError(null); 2026-10-24T11:04:40.3721198Z ╰──── 2026-10-24T11:04:40.3721866Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3722740Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3723053Z 2026-10-24T11:04:40.3723262Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.3723608Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T11:04:40.3723817Z 90 │ }; 2026-10-24T11:04:40.3723961Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T11:04:40.3724179Z ·  ──────┬───── ───┬─── 2026-10-24T11:04:40.3724493Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T11:04:40.3724822Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T11:04:40.3725117Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T11:04:40.3725319Z ╰──── 2026-10-24T11:04:40.3725678Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.3726282Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3726588Z 2026-10-24T11:04:40.3726808Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:04:40.3727169Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T11:04:40.3727388Z 212 │ useEffect(() => { 2026-10-24T11:04:40.3727654Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T11:04:40.3727890Z ·  ──┬── 2026-10-24T11:04:40.3728156Z · ╰── Missing dependency `props` 2026-10-24T11:04:40.3728537Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T11:04:40.3728879Z ·  ──────────┬───────── 2026-10-24T11:04:40.3729281Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T11:04:40.3729569Z 215 │ const { source } = props; 2026-10-24T11:04:40.3729718Z ╰──── 2026-10-24T11:04:40.3730204Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.3730911Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3731213Z 2026-10-24T11:04:40.3731431Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T11:04:40.3731756Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T11:04:40.3731943Z 1078 │ } 2026-10-24T11:04:40.3732449Z ·  ───────────────────────────────────────────── 2026-10-24T11:04:40.3732677Z 1080 │ screenOptions={({ route }) => 2026-10-24T11:04:40.3732837Z ╰──── 2026-10-24T11:04:40.3733264Z  help: Move this component definition out of the parent component `AdaptiveRootStack` and pass data as props. If you want to allow component creation in props, set `allowAsProps` option to true. 2026-10-24T11:04:40.3733600Z 2026-10-24T11:04:40.3733868Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3734299Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T11:04:40.3734531Z 10577 │ 2026-10-24T11:04:40.3734674Z 10578 │ const layer: Layer.Layer< 2026-10-24T11:04:40.3734841Z ·  ──┬── 2026-10-24T11:04:40.3735064Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.3735298Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T11:04:40.3735464Z ╰──── 2026-10-24T11:04:40.3735634Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3735757Z 2026-10-24T11:04:40.3735987Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T11:04:40.3736387Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T11:04:40.3736629Z 1997 │ assert.equal( 2026-10-24T11:04:40.3736876Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T11:04:40.3737118Z ·  ────── 2026-10-24T11:04:40.3737299Z 1999 │ "authoritative answer", 2026-10-24T11:04:40.3737454Z ╰──── 2026-10-24T11:04:40.3737692Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T11:04:40.3737871Z 2026-10-24T11:04:40.3738465Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3739105Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T11:04:40.3739552Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T11:04:40.3739994Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T11:04:40.3740308Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3740574Z 3953 │ ╰─▶ } 2026-10-24T11:04:40.3740848Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T11:04:40.3741043Z ╰──── 2026-10-24T11:04:40.3741101Z 2026-10-24T11:04:40.3741577Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3742197Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T11:04:40.3742467Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T11:04:40.3742785Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T11:04:40.3743080Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3743445Z 6064 │ ╰─▶ } 2026-10-24T11:04:40.3743800Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T11:04:40.3744031Z ╰──── 2026-10-24T11:04:40.3744090Z 2026-10-24T11:04:40.3744572Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.3745170Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T11:04:40.3745436Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T11:04:40.3745733Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T11:04:40.3746029Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.3746293Z 6199 │ ╰─▶ } 2026-10-24T11:04:40.3746606Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T11:04:40.3746833Z ╰──── 2026-10-24T11:04:40.3746892Z 2026-10-24T11:04:40.3747156Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T11:04:40.3747681Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T11:04:40.3747962Z 959 │ 2026-10-24T11:04:40.3748136Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T11:04:40.3748494Z ·  ──────────────────┬───────────────── 2026-10-24T11:04:40.3748885Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T11:04:40.3749184Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T11:04:40.3749366Z ╰──── 2026-10-24T11:04:40.3749530Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3749652Z 2026-10-24T11:04:40.3749841Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:04:40.3750199Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T11:04:40.3750482Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T11:04:40.3750788Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T11:04:40.3751132Z ·  ─────┬───── 2026-10-24T11:04:40.3751488Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T11:04:40.3751767Z 101 │ const readEditor = useCallback( 2026-10-24T11:04:40.3751921Z ╰──── 2026-10-24T11:04:40.3752304Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.3752931Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3753238Z 2026-10-24T11:04:40.3753426Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:04:40.3753773Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T11:04:40.3754012Z 120 │ setEditor, 2026-10-24T11:04:40.3754158Z 121 │ startEditor, 2026-10-24T11:04:40.3754323Z ·  ─────┬───── 2026-10-24T11:04:40.3754566Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T11:04:40.3754785Z 122 │ hasChanges, 2026-10-24T11:04:40.3754920Z ╰──── 2026-10-24T11:04:40.3755302Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.3755925Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.3756228Z 2026-10-24T11:04:40.3756514Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3756929Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T11:04:40.3757147Z 60 │ ) { 2026-10-24T11:04:40.3757385Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T11:04:40.3757647Z ·  ──────┬────── 2026-10-24T11:04:40.3757978Z · ╰── 'useDragRegion' is declared here 2026-10-24T11:04:40.3758288Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T11:04:40.3758546Z ╰──── 2026-10-24T11:04:40.3758711Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3758834Z 2026-10-24T11:04:40.3759110Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3759510Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T11:04:40.3759720Z 913 │ 2026-10-24T11:04:40.3759978Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T11:04:40.3760257Z ·  ─────┬───── 2026-10-24T11:04:40.3760488Z · ╰── 'layerDaemon' is declared here 2026-10-24T11:04:40.3760728Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T11:04:40.3760894Z ╰──── 2026-10-24T11:04:40.3761058Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3761177Z 2026-10-24T11:04:40.3761339Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3761663Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T11:04:40.3761928Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T11:04:40.3762139Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T11:04:40.3762331Z ·  ──────┬────── 2026-10-24T11:04:40.3762569Z · ╰── `pulseProgress` originates here 2026-10-24T11:04:40.3762773Z 55 │ 2026-10-24T11:04:40.3762900Z 56 │ useEffect(() => { 2026-10-24T11:04:40.3763054Z 57 │ if (pulse) { 2026-10-24T11:04:40.3763228Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T11:04:40.3763421Z ·  ──────┬────── 2026-10-24T11:04:40.3763664Z · ╰── `pulseProgress` cannot be modified 2026-10-24T11:04:40.3763883Z 59 │ withTiming(1, { 2026-10-24T11:04:40.3764023Z ╰──── 2026-10-24T11:04:40.3764354Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3764933Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3765232Z 2026-10-24T11:04:40.3765498Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3765927Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T11:04:40.3766165Z 76 │ 2026-10-24T11:04:40.3766291Z 77 │ useEffect(() => { 2026-10-24T11:04:40.3766447Z ·  ────┬──── 2026-10-24T11:04:40.3766672Z · ╰── This is the containing effect 2026-10-24T11:04:40.3766941Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T11:04:40.3767156Z 79 │ setHostInput(host); 2026-10-24T11:04:40.3767321Z ·  ──────┬───── 2026-10-24T11:04:40.3767655Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3767896Z 80 │ setCodeInput(code); 2026-10-24T11:04:40.3768041Z ╰──── 2026-10-24T11:04:40.3768927Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3769851Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3770163Z 2026-10-24T11:04:40.3770424Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3770851Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T11:04:40.3771083Z 82 │ 2026-10-24T11:04:40.3771212Z 83 │ useEffect(() => { 2026-10-24T11:04:40.3771374Z ·  ────┬──── 2026-10-24T11:04:40.3771598Z · ╰── This is the containing effect 2026-10-24T11:04:40.3771829Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T11:04:40.3772003Z 85 │ return; 2026-10-24T11:04:40.3772134Z 86 │ } 2026-10-24T11:04:40.3772251Z 87 │ 2026-10-24T11:04:40.3772433Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T11:04:40.3772637Z 89 │ setHostInput(host); 2026-10-24T11:04:40.3772804Z ·  ──────┬───── 2026-10-24T11:04:40.3773067Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3773306Z 90 │ setCodeInput(code); 2026-10-24T11:04:40.3773446Z ╰──── 2026-10-24T11:04:40.3774117Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3774986Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3775298Z 2026-10-24T11:04:40.3775561Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3775985Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T11:04:40.3776221Z 92 │ 2026-10-24T11:04:40.3776345Z 93 │ useEffect(() => { 2026-10-24T11:04:40.3776502Z ·  ────┬──── 2026-10-24T11:04:40.3776724Z · ╰── This is the containing effect 2026-10-24T11:04:40.3776951Z 94 │ if (pairingConnectionError) { 2026-10-24T11:04:40.3777128Z 95 │ setIsSubmitting(false); 2026-10-24T11:04:40.3777308Z ·  ───────┬─────── 2026-10-24T11:04:40.3777580Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3777807Z 96 │ } 2026-10-24T11:04:40.3777928Z ╰──── 2026-10-24T11:04:40.3778730Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3779701Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3780045Z 2026-10-24T11:04:40.3780221Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.3780531Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T11:04:40.3780801Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T11:04:40.3781037Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T11:04:40.3781247Z ·  ─────┬──── 2026-10-24T11:04:40.3781504Z · ╰── Cannot call impure function 2026-10-24T11:04:40.3781762Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T11:04:40.3781942Z ╰──── 2026-10-24T11:04:40.3782291Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.3782867Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.3783231Z 2026-10-24T11:04:40.3783496Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3783885Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T11:04:40.3784083Z 3404 │ 2026-10-24T11:04:40.3784343Z 3405 │ const layer: Layer.Layer = 2026-10-24T11:04:40.3784613Z ·  ──┬── 2026-10-24T11:04:40.3784837Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.3785050Z 3406 │ Layer.effect( 2026-10-24T11:04:40.3785183Z ╰──── 2026-10-24T11:04:40.3785349Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3785469Z 2026-10-24T11:04:40.3785630Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3785967Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T11:04:40.3786200Z 90 │ }) { 2026-10-24T11:04:40.3786382Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T11:04:40.3786586Z ·  ────┬─── 2026-10-24T11:04:40.3786809Z · ╰── `rotation` originates here 2026-10-24T11:04:40.3787020Z 92 │ useLayoutEffect(() => { 2026-10-24T11:04:40.3787260Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T11:04:40.3787490Z ·  ────┬─── 2026-10-24T11:04:40.3787711Z · ╰── `rotation` cannot be modified 2026-10-24T11:04:40.3787931Z 94 │ }, [props.hidden, rotation]); 2026-10-24T11:04:40.3788082Z ╰──── 2026-10-24T11:04:40.3788546Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3789203Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3789505Z 2026-10-24T11:04:40.3789666Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3790001Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T11:04:40.3790361Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T11:04:40.3790639Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T11:04:40.3790878Z ·  ────────┬──────── 2026-10-24T11:04:40.3791130Z · ╰── `loadingVisibility` originates here 2026-10-24T11:04:40.3791354Z 268 │ useLayoutEffect(() => { 2026-10-24T11:04:40.3791606Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T11:04:40.3791861Z ·  ────────┬──────── 2026-10-24T11:04:40.3792110Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T11:04:40.3792354Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T11:04:40.3792515Z ╰──── 2026-10-24T11:04:40.3792845Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3793415Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3793711Z 2026-10-24T11:04:40.3793868Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3794204Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T11:04:40.3794436Z 325 │ }) { 2026-10-24T11:04:40.3794666Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T11:04:40.3794929Z ·  ─────────┬───────── 2026-10-24T11:04:40.3795192Z · ╰── `recordingVisibility` originates here 2026-10-24T11:04:40.3795421Z 327 │ useLayoutEffect(() => { 2026-10-24T11:04:40.3795703Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T11:04:40.3795980Z ·  ─────────┬───────── 2026-10-24T11:04:40.3796236Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T11:04:40.3796484Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T11:04:40.3796647Z ╰──── 2026-10-24T11:04:40.3796973Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3797546Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3797841Z 2026-10-24T11:04:40.3798070Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3798552Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T11:04:40.3798814Z 26 │ const latestInput = useRef(input); 2026-10-24T11:04:40.3798998Z 27 │ latestInput.current = input; 2026-10-24T11:04:40.3799210Z ·  ─────┬─────────┬─── 2026-10-24T11:04:40.3799522Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.3799817Z · ╰── This value is a ref 2026-10-24T11:04:40.3800018Z 28 │ const mounted = useRef(true); 2026-10-24T11:04:40.3800171Z ╰──── 2026-10-24T11:04:40.3800713Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3801450Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3801736Z 2026-10-24T11:04:40.3801896Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3802229Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T11:04:40.3802511Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T11:04:40.3802720Z 66 │ const progress = useSharedValue(0); 2026-10-24T11:04:40.3802898Z ·  ────┬─── 2026-10-24T11:04:40.3803131Z · ╰── `progress` originates here 2026-10-24T11:04:40.3803339Z 67 │ useEffect(() => { 2026-10-24T11:04:40.3803553Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T11:04:40.3803762Z ·  ────┬─── 2026-10-24T11:04:40.3803985Z · ╰── `progress` cannot be modified 2026-10-24T11:04:40.3804196Z 69 │ }, [expanded, progress]); 2026-10-24T11:04:40.3804343Z ╰──── 2026-10-24T11:04:40.3804666Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3805234Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3805529Z 2026-10-24T11:04:40.3805686Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3806007Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T11:04:40.3806338Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T11:04:40.3806639Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T11:04:40.3806907Z ·  ───────────┬────────── 2026-10-24T11:04:40.3807218Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3807510Z 123 │ const sessionRef = useRef(null); 2026-10-24T11:04:40.3807756Z ╰──── 2026-10-24T11:04:40.3808460Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3809237Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3809520Z 2026-10-24T11:04:40.3809670Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3809989Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T11:04:40.3810212Z 125 │ 2026-10-24T11:04:40.3810387Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:04:40.3810599Z ·  ─────────┬──────── 2026-10-24T11:04:40.3810854Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3811121Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:04:40.3811297Z ╰──── 2026-10-24T11:04:40.3811833Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3812561Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3812842Z 2026-10-24T11:04:40.3812991Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3813307Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T11:04:40.3813527Z 125 │ 2026-10-24T11:04:40.3813697Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:04:40.3813906Z ·  ─────────┬───────── 2026-10-24T11:04:40.3814154Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3814411Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:04:40.3814583Z ╰──── 2026-10-24T11:04:40.3815116Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3815842Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3816125Z 2026-10-24T11:04:40.3816278Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3816595Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T11:04:40.3816820Z 125 │ 2026-10-24T11:04:40.3816989Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:04:40.3817230Z ·  ─────────┬───────── 2026-10-24T11:04:40.3817522Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3817792Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:04:40.3817965Z ╰──── 2026-10-24T11:04:40.3818632Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3819446Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3819765Z 2026-10-24T11:04:40.3819915Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3820225Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T11:04:40.3820448Z 125 │ 2026-10-24T11:04:40.3820617Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:04:40.3820857Z ·  ──────────┬───────── 2026-10-24T11:04:40.3821145Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3821412Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:04:40.3821583Z ╰──── 2026-10-24T11:04:40.3822119Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3822844Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3823126Z 2026-10-24T11:04:40.3823274Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3823586Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T11:04:40.3823870Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:04:40.3824197Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:04:40.3824570Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T11:04:40.3824878Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T11:04:40.3825180Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T11:04:40.3825467Z 131 │ │ isFinished: status.isFinished, 2026-10-24T11:04:40.3825780Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T11:04:40.3826066Z 133 │ │ error: status.error, 2026-10-24T11:04:40.3826286Z 134 │ │ url: status.url, 2026-10-24T11:04:40.3826482Z 135 │ │ }); 2026-10-24T11:04:40.3826671Z 136 │ │ }, 2026-10-24T11:04:40.3826973Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T11:04:40.3827279Z 138 │ │ selectInput: (inputs) => { 2026-10-24T11:04:40.3827564Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T11:04:40.3827872Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T11:04:40.3828198Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T11:04:40.3828680Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T11:04:40.3828936Z 143 │ │ if (order !== known) { 2026-10-24T11:04:40.3829283Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T11:04:40.3829586Z 145 │ │ transform: (current) => ({ 2026-10-24T11:04:40.3829923Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T11:04:40.3830220Z 147 │ │ }), 2026-10-24T11:04:40.3830406Z 148 │ │ }); 2026-10-24T11:04:40.3830590Z 149 │ │ } 2026-10-24T11:04:40.3830837Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T11:04:40.3831069Z 151 │ │ }, 2026-10-24T11:04:40.3831303Z 152 │ ├─▶ }); 2026-10-24T11:04:40.3831692Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.3832006Z 153 │ recorderRef.current = recorder; 2026-10-24T11:04:40.3832168Z ╰──── 2026-10-24T11:04:40.3832701Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3833434Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3833714Z 2026-10-24T11:04:40.3833866Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3834186Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T11:04:40.3834413Z 152 │ }); 2026-10-24T11:04:40.3834573Z 153 │ recorderRef.current = recorder; 2026-10-24T11:04:40.3834796Z ·  ─────┬─────────┬─── 2026-10-24T11:04:40.3835107Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.3835404Z · ╰── This value is a ref 2026-10-24T11:04:40.3835640Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:04:40.3835821Z ╰──── 2026-10-24T11:04:40.3836352Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3837084Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3837372Z 2026-10-24T11:04:40.3837522Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3837836Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T11:04:40.3838092Z 153 │ recorderRef.current = recorder; 2026-10-24T11:04:40.3838523Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:04:40.3838856Z 155 │ │ recorder, 2026-10-24T11:04:40.3839094Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T11:04:40.3839360Z 157 │ │ requestPermission: async () => { 2026-10-24T11:04:40.3839745Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T11:04:40.3840146Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T11:04:40.3840425Z 160 │ │ }, 2026-10-24T11:04:40.3840668Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T11:04:40.3840962Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T11:04:40.3841248Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T11:04:40.3841512Z 164 │ │ onStateChange: (nextState) => 2026-10-24T11:04:40.3841731Z 165 │ │ setState({ 2026-10-24T11:04:40.3841947Z 166 │ │ state: nextState, 2026-10-24T11:04:40.3842212Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T11:04:40.3842502Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T11:04:40.3842724Z 169 │ │ }), 2026-10-24T11:04:40.3842958Z 170 │ ├─▶ }); 2026-10-24T11:04:40.3843299Z · ╰──── Cannot access ref value during render 2026-10-24T11:04:40.3843552Z 171 │ } 2026-10-24T11:04:40.3843674Z ╰──── 2026-10-24T11:04:40.3844205Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3844940Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3845228Z 2026-10-24T11:04:40.3845378Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3845694Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T11:04:40.3845948Z 153 │ recorderRef.current = recorder; 2026-10-24T11:04:40.3846159Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:04:40.3846397Z ·  ─────┬────────┬─── 2026-10-24T11:04:40.3846702Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.3847001Z · ╰── This value is a ref 2026-10-24T11:04:40.3847280Z 155 │ recorder, 2026-10-24T11:04:40.3847446Z ╰──── 2026-10-24T11:04:40.3848058Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3848890Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3849175Z 2026-10-24T11:04:40.3849325Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3849643Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T11:04:40.3849899Z 184 │ return () => subscription.remove(); 2026-10-24T11:04:40.3850073Z 185 │ }, [controller]); 2026-10-24T11:04:40.3850244Z ·  ─────┬──── 2026-10-24T11:04:40.3850486Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3850694Z 186 │ 2026-10-24T11:04:40.3850809Z ╰──── 2026-10-24T11:04:40.3851339Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3852061Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3852344Z 2026-10-24T11:04:40.3852495Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3852812Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T11:04:40.3853072Z 184 │ return () => subscription.remove(); 2026-10-24T11:04:40.3853246Z 185 │ }, [controller]); 2026-10-24T11:04:40.3853409Z ·  ──────┬───── 2026-10-24T11:04:40.3853648Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3853853Z 186 │ 2026-10-24T11:04:40.3853964Z ╰──── 2026-10-24T11:04:40.3854495Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3855215Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3855503Z 2026-10-24T11:04:40.3855657Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3855968Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T11:04:40.3856197Z 191 │ }, 2026-10-24T11:04:40.3856337Z 192 │ [controller, recorder], 2026-10-24T11:04:40.3856511Z ·  ─────┬──── 2026-10-24T11:04:40.3856749Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3856957Z 193 │ ); 2026-10-24T11:04:40.3857078Z ╰──── 2026-10-24T11:04:40.3857606Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3858541Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3858879Z 2026-10-24T11:04:40.3859029Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3859342Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T11:04:40.3859606Z 174 │ const controller = session.controller; 2026-10-24T11:04:40.3859806Z 175 │ const recorder = recorderRef.current; 2026-10-24T11:04:40.3860019Z ·  ─────────┬───────── 2026-10-24T11:04:40.3860302Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3860516Z 176 │ 2026-10-24T11:04:40.3860632Z ╰──── 2026-10-24T11:04:40.3861165Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3861895Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3862180Z 2026-10-24T11:04:40.3862326Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3862642Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T11:04:40.3862864Z 191 │ }, 2026-10-24T11:04:40.3863006Z 192 │ [controller, recorder], 2026-10-24T11:04:40.3863189Z ·  ───────────┬────────── 2026-10-24T11:04:40.3863447Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3863656Z 193 │ ); 2026-10-24T11:04:40.3863773Z ╰──── 2026-10-24T11:04:40.3864299Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3865020Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3865303Z 2026-10-24T11:04:40.3865448Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3865760Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T11:04:40.3866023Z 245 │ return () => clearInterval(intervalId); 2026-10-24T11:04:40.3866254Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T11:04:40.3866469Z ·  ─────┬──── 2026-10-24T11:04:40.3866734Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3866941Z 247 │ 2026-10-24T11:04:40.3867055Z ╰──── 2026-10-24T11:04:40.3867580Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3868366Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3868761Z 2026-10-24T11:04:40.3868987Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3869340Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T11:04:40.3869598Z 245 │ return () => clearInterval(intervalId); 2026-10-24T11:04:40.3869819Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T11:04:40.3870075Z ·  ────────────────────────┬─────────────────────── 2026-10-24T11:04:40.3870368Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3870578Z 247 │ 2026-10-24T11:04:40.3870689Z ╰──── 2026-10-24T11:04:40.3871227Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3871955Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3872235Z 2026-10-24T11:04:40.3872382Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3872695Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T11:04:40.3872928Z 260 │ setOwnerFocused, 2026-10-24T11:04:40.3873077Z 261 │ session, 2026-10-24T11:04:40.3873224Z ·  ───┬─── 2026-10-24T11:04:40.3873449Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.3873656Z 262 │ stop, 2026-10-24T11:04:40.3873778Z ╰──── 2026-10-24T11:04:40.3874312Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3875038Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3875321Z 2026-10-24T11:04:40.3875470Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.3875780Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T11:04:40.3876005Z 250 │ 2026-10-24T11:04:40.3876209Z 251 │ ╭─▶ return { 2026-10-24T11:04:40.3876574Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T11:04:40.3876869Z 253 │ │ state, 2026-10-24T11:04:40.3877060Z 254 │ │ audioLevels, 2026-10-24T11:04:40.3877262Z 255 │ │ elapsedSeconds, 2026-10-24T11:04:40.3877509Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T11:04:40.3877737Z 257 │ │ ownerKey, 2026-10-24T11:04:40.3877917Z 258 │ │ label, 2026-10-24T11:04:40.3878109Z 259 │ │ focusedOwners, 2026-10-24T11:04:40.3878387Z 260 │ │ setOwnerFocused, 2026-10-24T11:04:40.3878638Z 261 │ │ session, 2026-10-24T11:04:40.3878817Z 262 │ │ stop, 2026-10-24T11:04:40.3879083Z 263 │ │ cancel, 2026-10-24T11:04:40.3921747Z 264 │ ├─▶ }; 2026-10-24T11:04:40.3922115Z · ╰──── Cannot access ref value during render 2026-10-24T11:04:40.3922378Z 265 │ } 2026-10-24T11:04:40.3922499Z ╰──── 2026-10-24T11:04:40.3923045Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.3923797Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.3924088Z 2026-10-24T11:04:40.3924278Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.3924613Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T11:04:40.3924943Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T11:04:40.3925238Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T11:04:40.3925463Z ·  ─────┬───── 2026-10-24T11:04:40.3925697Z · ╰── `audioLevels` originates here 2026-10-24T11:04:40.3925957Z 123 │ const sessionRef = useRef(null); 2026-10-24T11:04:40.3926237Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T11:04:40.3926448Z 125 │ 2026-10-24T11:04:40.3926617Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T11:04:40.3926847Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T11:04:40.3927111Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T11:04:40.3927356Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T11:04:40.3927660Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T11:04:40.3927881Z 131 │ isFinished: status.isFinished, 2026-10-24T11:04:40.3928133Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T11:04:40.3928460Z 133 │ error: status.error, 2026-10-24T11:04:40.3928637Z 134 │ url: status.url, 2026-10-24T11:04:40.3928785Z 135 │ }); 2026-10-24T11:04:40.3928912Z 136 │ }, 2026-10-24T11:04:40.3929144Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T11:04:40.3929397Z 138 │ selectInput: (inputs) => { 2026-10-24T11:04:40.3929623Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T11:04:40.3929869Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T11:04:40.3930131Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T11:04:40.3930382Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T11:04:40.3930580Z 143 │ if (order !== known) { 2026-10-24T11:04:40.3930778Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T11:04:40.3930985Z 145 │ transform: (current) => ({ 2026-10-24T11:04:40.3931258Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T11:04:40.3931496Z 147 │ }), 2026-10-24T11:04:40.3931632Z 148 │ }); 2026-10-24T11:04:40.3931761Z 149 │ } 2026-10-24T11:04:40.3932105Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T11:04:40.3932332Z 151 │ }, 2026-10-24T11:04:40.3932454Z 152 │ }); 2026-10-24T11:04:40.3932600Z 153 │ recorderRef.current = recorder; 2026-10-24T11:04:40.3932806Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T11:04:40.3932986Z 155 │ recorder, 2026-10-24T11:04:40.3933158Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T11:04:40.3933359Z 157 │ requestPermission: async () => { 2026-10-24T11:04:40.3933595Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T11:04:40.3933896Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T11:04:40.3934119Z 160 │ }, 2026-10-24T11:04:40.3934296Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T11:04:40.3934534Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T11:04:40.3934762Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T11:04:40.3934959Z 164 │ onStateChange: (nextState) => 2026-10-24T11:04:40.3935125Z 165 │ setState({ 2026-10-24T11:04:40.3935274Z 166 │ state: nextState, 2026-10-24T11:04:40.3935466Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T11:04:40.3935688Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T11:04:40.3935859Z 169 │ }), 2026-10-24T11:04:40.3935984Z 170 │ }); 2026-10-24T11:04:40.3936100Z 171 │ } 2026-10-24T11:04:40.3936213Z 172 │ 2026-10-24T11:04:40.3936355Z 173 │ const session = sessionRef.current; 2026-10-24T11:04:40.3936546Z 174 │ const controller = session.controller; 2026-10-24T11:04:40.3936742Z 175 │ const recorder = recorderRef.current; 2026-10-24T11:04:40.3936899Z 176 │ 2026-10-24T11:04:40.3937022Z 177 │ useEffect(() => { 2026-10-24T11:04:40.3937255Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T11:04:40.3937556Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T11:04:40.3937842Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T11:04:40.3938095Z 181 │ // calls and route interruptions during capture. 2026-10-24T11:04:40.3938447Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T11:04:40.3938670Z 183 │ }); 2026-10-24T11:04:40.3938818Z 184 │ return () => subscription.remove(); 2026-10-24T11:04:40.3938985Z 185 │ }, [controller]); 2026-10-24T11:04:40.3939117Z 186 │ 2026-10-24T11:04:40.3939232Z 187 │ useEffect( 2026-10-24T11:04:40.3939374Z 188 │ () => () => { 2026-10-24T11:04:40.3939529Z 189 │ controller.dispose(); 2026-10-24T11:04:40.3939692Z 190 │ recorder.release(); 2026-10-24T11:04:40.3939833Z 191 │ }, 2026-10-24T11:04:40.3939968Z 192 │ [controller, recorder], 2026-10-24T11:04:40.3940110Z 193 │ ); 2026-10-24T11:04:40.3940225Z 194 │ 2026-10-24T11:04:40.3940344Z 195 │ useEffect(() => { 2026-10-24T11:04:40.3940516Z 196 │ if (state.phase !== "recording") return; 2026-10-24T11:04:40.3940678Z 197 │ 2026-10-24T11:04:40.3940885Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T11:04:40.3941146Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T11:04:40.3941346Z 200 │ void activation.catch(() => {}); 2026-10-24T11:04:40.3941509Z 201 │ return () => { 2026-10-24T11:04:40.3941815Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T11:04:40.3942144Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T11:04:40.3942344Z 204 │ }; 2026-10-24T11:04:40.3942487Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T11:04:40.3942639Z 206 │ 2026-10-24T11:04:40.3942759Z 207 │ useEffect(() => { 2026-10-24T11:04:40.3942973Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T11:04:40.3943170Z 209 │ 2026-10-24T11:04:40.3943350Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T11:04:40.3943636Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T11:04:40.3943903Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T11:04:40.3944097Z ·  ─────┬───── 2026-10-24T11:04:40.3944342Z · ╰── `audioLevels` cannot be modified 2026-10-24T11:04:40.3944543Z 213 │ } 2026-10-24T11:04:40.3944659Z ╰──── 2026-10-24T11:04:40.3944988Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.3945558Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3945854Z 2026-10-24T11:04:40.3946061Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:04:40.3946423Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T11:04:40.3946640Z 206 │ 2026-10-24T11:04:40.3946762Z 207 │ useEffect(() => { 2026-10-24T11:04:40.3946925Z ·  ───┬─── 2026-10-24T11:04:40.3947242Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T11:04:40.3947588Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T11:04:40.3947784Z 209 │ 2026-10-24T11:04:40.3947965Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T11:04:40.3948300Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T11:04:40.3948699Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T11:04:40.3948892Z ·  ─────┬───── 2026-10-24T11:04:40.3949116Z · ╰── This modifies `audioLevels` 2026-10-24T11:04:40.3949305Z 213 │ } 2026-10-24T11:04:40.3949419Z ╰──── 2026-10-24T11:04:40.3949823Z  help: This argument is a function which may reassign or mutate `audioLevels` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T11:04:40.3950451Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.3950744Z 2026-10-24T11:04:40.3950947Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T11:04:40.3951287Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T11:04:40.3951528Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T11:04:40.3951731Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T11:04:40.3951918Z ·  ────┬─── 2026-10-24T11:04:40.3952220Z · ╰── 'Duration' is imported here 2026-10-24T11:04:40.3952477Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T11:04:40.3952632Z ╰──── 2026-10-24T11:04:40.3952787Z  help: Consider removing this import. 2026-10-24T11:04:40.3952901Z 2026-10-24T11:04:40.3953131Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T11:04:40.3953470Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T11:04:40.3953651Z 11 │ 2026-10-24T11:04:40.3953804Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T11:04:40.3954018Z ·  ────────────┬──────────── 2026-10-24T11:04:40.3954301Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T11:04:40.3954539Z 13 │ readonly thread: { 2026-10-24T11:04:40.3954677Z ╰──── 2026-10-24T11:04:40.3954832Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3954951Z 2026-10-24T11:04:40.3955216Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T11:04:40.3955608Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T11:04:40.3955912Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T11:04:40.3956153Z 12 │ this.onmessage = listener; 2026-10-24T11:04:40.3956335Z ·  ───────── 2026-10-24T11:04:40.3956485Z 13 │ } 2026-10-24T11:04:40.3956600Z ╰──── 2026-10-24T11:04:40.3956977Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T11:04:40.3957279Z 2026-10-24T11:04:40.3957486Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T11:04:40.3957829Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T11:04:40.3958049Z 15 │ constructor() { 2026-10-24T11:04:40.3958200Z 16 │ source = this; 2026-10-24T11:04:40.3958457Z ·  ────── 2026-10-24T11:04:40.3958617Z 17 │ } 2026-10-24T11:04:40.3958731Z ╰──── 2026-10-24T11:04:40.3959059Z  help: Assigning a variable to this instead of properly using arrow lambdas may be a symptom of pre-ES2015 practices or not managing scope well. 2026-10-24T11:04:40.3959320Z 2026-10-24T11:04:40.3959562Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T11:04:40.3959963Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T11:04:40.3960301Z 219 │ 2026-10-24T11:04:40.3960592Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T11:04:40.3960852Z ·  ──┬─ 2026-10-24T11:04:40.3961141Z · ╰── 'U+001B' is a control character. 2026-10-24T11:04:40.3961366Z 221 │ 2026-10-24T11:04:40.3961497Z ╰──── 2026-10-24T11:04:40.3961785Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T11:04:40.3962013Z 2026-10-24T11:04:40.3962278Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3962718Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T11:04:40.3962960Z 117 │ 2026-10-24T11:04:40.3963085Z 118 │ useEffect(() => { 2026-10-24T11:04:40.3963237Z ·  ────┬──── 2026-10-24T11:04:40.3963451Z · ╰── This is the containing effect 2026-10-24T11:04:40.3963667Z 119 │ void refreshNotifications(); 2026-10-24T11:04:40.3963858Z ·  ──────────┬───────── 2026-10-24T11:04:40.3964135Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3964461Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T11:04:40.3964671Z ╰──── 2026-10-24T11:04:40.3965336Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3966204Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3966511Z 2026-10-24T11:04:40.3966770Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.3967205Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T11:04:40.3967454Z 125 │ 2026-10-24T11:04:40.3967643Z 126 │ useEffect(() => { 2026-10-24T11:04:40.3967797Z ·  ────┬──── 2026-10-24T11:04:40.3968010Z · ╰── This is the containing effect 2026-10-24T11:04:40.3968209Z 127 │ if (!isLoaded) { 2026-10-24T11:04:40.3968487Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T11:04:40.3968702Z ·  ──────────┬────────── 2026-10-24T11:04:40.3968974Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.3969207Z 129 │ return; 2026-10-24T11:04:40.3969334Z ╰──── 2026-10-24T11:04:40.3970080Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.3970983Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.3971292Z 2026-10-24T11:04:40.3971651Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3972117Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T11:04:40.3972401Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T11:04:40.3972693Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T11:04:40.3972972Z ·  ─────────────────── 2026-10-24T11:04:40.3973162Z 1787 │ cwd, 2026-10-24T11:04:40.3973290Z ╰──── 2026-10-24T11:04:40.3973346Z 2026-10-24T11:04:40.3973588Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T11:04:40.3973941Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T11:04:40.3974176Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T11:04:40.3974430Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T11:04:40.3974663Z ·  ─────────────── 2026-10-24T11:04:40.3974815Z 510 │ ) 2026-10-24T11:04:40.3974933Z ╰──── 2026-10-24T11:04:40.3975088Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T11:04:40.3975098Z 2026-10-24T11:04:40.3975314Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T11:04:40.3975462Z ╭─[packages/client-runtime/src/work-log/presentation.ts:234:10] 2026-10-24T11:04:40.3975518Z 233 │ 2026-10-24T11:04:40.3975634Z 234 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T11:04:40.3975719Z ·  ───────┬────── 2026-10-24T11:04:40.3975866Z · ╰── 'nonEmptyString' is declared here 2026-10-24T11:04:40.3976010Z 235 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T11:04:40.3976060Z ╰──── 2026-10-24T11:04:40.3976166Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3976168Z 2026-10-24T11:04:40.3976364Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T11:04:40.3976484Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T11:04:40.3976541Z 7 │ () => 2026-10-24T11:04:40.3976609Z 8 │ Gesture.Hover() 2026-10-24T11:04:40.3976687Z ·  ──┬── 2026-10-24T11:04:40.3976821Z · ╰── `Hover` may be a component 2026-10-24T11:04:40.3976895Z 9 │ .manualActivation(true) 2026-10-24T11:04:40.3976946Z ╰──── 2026-10-24T11:04:40.3977230Z  help: Render `Hover` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T11:04:40.3977765Z  note: `Hover` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T11:04:40.3977797Z 2026-10-24T11:04:40.3977985Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.3978159Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:555:70] 2026-10-24T11:04:40.3978271Z 554 │ assert.deepStrictEqual( 2026-10-24T11:04:40.3978533Z 555 │ (yield* Ref.get(fixture.syncCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T11:04:40.3978664Z ·  ┬ 2026-10-24T11:04:40.3978833Z · ╰── '_' is declared here 2026-10-24T11:04:40.3978896Z 556 │ [ 2026-10-24T11:04:40.3978947Z ╰──── 2026-10-24T11:04:40.3979060Z  help: Consider removing this parameter. 2026-10-24T11:04:40.3979066Z 2026-10-24T11:04:40.3979248Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.3979428Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T11:04:40.3979514Z 1154 │ assert.deepStrictEqual( 2026-10-24T11:04:40.3979680Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T11:04:40.3979804Z ·  ┬ 2026-10-24T11:04:40.3979972Z · ╰── '_' is declared here 2026-10-24T11:04:40.3980035Z 1156 │ [ 2026-10-24T11:04:40.3980088Z ╰──── 2026-10-24T11:04:40.3980195Z  help: Consider removing this parameter. 2026-10-24T11:04:40.3980201Z 2026-10-24T11:04:40.3980411Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:04:40.3980536Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T11:04:40.3980639Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T11:04:40.3980725Z 259 │ for (const edit of edits.reverse()) 2026-10-24T11:04:40.3980819Z ·  ─────── 2026-10-24T11:04:40.3980985Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T11:04:40.3981037Z ╰──── 2026-10-24T11:04:40.3981305Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:04:40.3981311Z 2026-10-24T11:04:40.3981520Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:04:40.3981642Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T11:04:40.3981722Z 289 │ visit(parser.parse(markdown)); 2026-10-24T11:04:40.3981806Z 290 │ for (const edit of edits.reverse()) 2026-10-24T11:04:40.3981898Z ·  ─────── 2026-10-24T11:04:40.3982061Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T11:04:40.3982113Z ╰──── 2026-10-24T11:04:40.3982372Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:04:40.3982375Z 2026-10-24T11:04:40.3982653Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T11:04:40.3982800Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T11:04:40.3982882Z 343 │ visit(parser.parse(markdown)); 2026-10-24T11:04:40.3982987Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T11:04:40.3983094Z ·  ─────── 2026-10-24T11:04:40.3983257Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T11:04:40.3983309Z ╰──── 2026-10-24T11:04:40.3983567Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T11:04:40.3983569Z 2026-10-24T11:04:40.3983761Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T11:04:40.3983890Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T11:04:40.3983999Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T11:04:40.3984069Z 187 │ let next = initial; 2026-10-24T11:04:40.3984142Z ·  ──┬─ 2026-10-24T11:04:40.3984263Z · ╰── From this accumulator 2026-10-24T11:04:40.3984345Z 188 │ let receivedSnapshot = false; 2026-10-24T11:04:40.3984421Z 189 │ for (const item of items) { 2026-10-24T11:04:40.3984490Z ·  ─┬─ 2026-10-24T11:04:40.3984594Z · ╰── For this loop 2026-10-24T11:04:40.3984686Z 190 │ if (item.kind === "synchronized") { 2026-10-24T11:04:40.3984756Z 191 │ waiting = false; 2026-10-24T11:04:40.3984858Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T11:04:40.3984978Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T11:04:40.3985064Z ·  ───┬─── 2026-10-24T11:04:40.3985194Z · ╰── From this spread 2026-10-24T11:04:40.3985254Z 194 │ } 2026-10-24T11:04:40.3985304Z ╰──── 2026-10-24T11:04:40.3985460Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T11:04:40.3985617Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T11:04:40.3985619Z 2026-10-24T11:04:40.3985907Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T11:04:40.3986081Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T11:04:40.3986147Z 472 │ onFilters, 2026-10-24T11:04:40.3986216Z 473 │ authorOptions = [], 2026-10-24T11:04:40.3986294Z ·  ── 2026-10-24T11:04:40.3986360Z 474 │ labelOptions = [], 2026-10-24T11:04:40.3986413Z ╰──── 2026-10-24T11:04:40.3986733Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T11:04:40.3986736Z 2026-10-24T11:04:40.3987019Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T11:04:40.3987187Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T11:04:40.3987253Z 473 │ authorOptions = [], 2026-10-24T11:04:40.3987397Z 474 │ labelOptions = [], 2026-10-24T11:04:40.3987507Z ·  ── 2026-10-24T11:04:40.3987570Z 475 │ optionScope, 2026-10-24T11:04:40.3987623Z ╰──── 2026-10-24T11:04:40.3987940Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T11:04:40.3987942Z 2026-10-24T11:04:40.3988536Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.3988714Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T11:04:40.3988851Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T11:04:40.3989039Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T11:04:40.3989150Z ·  ──────────────────────── 2026-10-24T11:04:40.3989215Z 182 │ version: 1, 2026-10-24T11:04:40.3989266Z ╰──── 2026-10-24T11:04:40.3989268Z 2026-10-24T11:04:40.3989636Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3989749Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T11:04:40.3989909Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T11:04:40.3990077Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T11:04:40.3990186Z ·  ──────────────────────── 2026-10-24T11:04:40.3990253Z 18 │ "review:write", 2026-10-24T11:04:40.3990306Z ╰──── 2026-10-24T11:04:40.3990309Z 2026-10-24T11:04:40.3990670Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3990780Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T11:04:40.3990838Z 19 │ ]); 2026-10-24T11:04:40.3991000Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T11:04:40.3991106Z ·  ──────────────────────── 2026-10-24T11:04:40.3991236Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T11:04:40.3991289Z ╰──── 2026-10-24T11:04:40.3991291Z 2026-10-24T11:04:40.3991724Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownSync(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.3991869Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T11:04:40.3992039Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T11:04:40.3992165Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T11:04:40.3992273Z ·  ──────────────────────── 2026-10-24T11:04:40.3992344Z 59 │ authenticated: true, 2026-10-24T11:04:40.3992394Z ╰──── 2026-10-24T11:04:40.3992397Z 2026-10-24T11:04:40.3992637Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T11:04:40.3992808Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T11:04:40.3992873Z 264 │ ): boolean { 2026-10-24T11:04:40.3993028Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T11:04:40.3993195Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T11:04:40.3993345Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T11:04:40.3993398Z ╰──── 2026-10-24T11:04:40.3993476Z  help: Switch to `Set` 2026-10-24T11:04:40.3993479Z 2026-10-24T11:04:40.3993741Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.3993885Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T11:04:40.3993940Z 3754 │ 2026-10-24T11:04:40.3994147Z 3755 │ const layer: Layer.Layer = 2026-10-24T11:04:40.3994222Z ·  ──┬── 2026-10-24T11:04:40.3994352Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.3994417Z 3756 │ Layer.effect( 2026-10-24T11:04:40.3994470Z ╰──── 2026-10-24T11:04:40.3994575Z  help: Consider removing this declaration. 2026-10-24T11:04:40.3994578Z 2026-10-24T11:04:40.3994777Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T11:04:40.3994916Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T11:04:40.3994979Z 1 │ import type { 2026-10-24T11:04:40.3995042Z 2 │ EnvironmentId, 2026-10-24T11:04:40.3995118Z ·  ──────┬────── 2026-10-24T11:04:40.3995261Z · ╰── 'EnvironmentId' is imported here 2026-10-24T11:04:40.3995351Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T11:04:40.3995401Z ╰──── 2026-10-24T11:04:40.3995502Z  help: Consider removing this import. 2026-10-24T11:04:40.3995504Z 2026-10-24T11:04:40.3995672Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.3995863Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T11:04:40.3995915Z 52 │ 2026-10-24T11:04:40.3995983Z 53 │ for (const {} of [ 2026-10-24T11:04:40.3996055Z ·  ── 2026-10-24T11:04:40.3996122Z 54 │ { healthy: true }, 2026-10-24T11:04:40.3996172Z ╰──── 2026-10-24T11:04:40.3996482Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.3996511Z 2026-10-24T11:04:40.3996706Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.3996876Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T11:04:40.3996936Z 87 │
  • event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T11:04:40.3999494Z ·  ────── 2026-10-24T11:04:40.3999615Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T11:04:40.3999666Z ╰──── 2026-10-24T11:04:40.3999837Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T11:04:40.3999840Z 2026-10-24T11:04:40.4000037Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4000205Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T11:04:40.4000277Z 813 │
    { 2026-10-24T11:04:40.4003041Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T11:04:40.4003175Z  85 │ │ const connections = new Map(); 2026-10-24T11:04:40.4003249Z  86 │ │ 2026-10-24T11:04:40.4003465Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T11:04:40.4003567Z  88 │ │ Effect.suspend(() => { 2026-10-24T11:04:40.4003704Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T11:04:40.4003818Z  90 │ │ return connection === undefined 2026-10-24T11:04:40.4004041Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T11:04:40.4004155Z  92 │ │ : Effect.succeed(connection); 2026-10-24T11:04:40.4004230Z  93 │ │ }); 2026-10-24T11:04:40.4004300Z  94 │ │ 2026-10-24T11:04:40.4004387Z  95 │ │ const send = ( 2026-10-24T11:04:40.4004488Z  96 │ │ connection: Connection, 2026-10-24T11:04:40.4004581Z  97 │ │ message: unknown, 2026-10-24T11:04:40.4004742Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T11:04:40.4004860Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T11:04:40.4004968Z 100 │ │ Effect.gen(function* () { 2026-10-24T11:04:40.4005098Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T11:04:40.4005245Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T11:04:40.4005462Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T11:04:40.4005543Z 104 │ │ } 2026-10-24T11:04:40.4005675Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T11:04:40.4005778Z 106 │ │ try: (signal) => 2026-10-24T11:04:40.4005912Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T11:04:40.4006016Z 108 │ │ method: "POST", 2026-10-24T11:04:40.4006108Z 109 │ │ signal, 2026-10-24T11:04:40.4006282Z 110 │ │ headers: { 2026-10-24T11:04:40.4006442Z 111 │ │ "content-type": "application/json", 2026-10-24T11:04:40.4006586Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T11:04:40.4006719Z 113 │ │ authorization: options.authorization, 2026-10-24T11:04:40.4006846Z 114 │ │ ...(connection.sessionId === null 2026-10-24T11:04:40.4006942Z 115 │ │ ? {} 2026-10-24T11:04:40.4007090Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T11:04:40.4007225Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T11:04:40.4007316Z 118 │ │ ? {} 2026-10-24T11:04:40.4007488Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T11:04:40.4007729Z 120 │ │ }, 2026-10-24T11:04:40.4007821Z 121 │ │ body, 2026-10-24T11:04:40.4007905Z 122 │ │ }), 2026-10-24T11:04:40.4008009Z 123 │ │ catch: bridgeError, 2026-10-24T11:04:40.4008092Z 124 │ │ }); 2026-10-24T11:04:40.4008371Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T11:04:40.4008507Z 126 │ │ if (!response.ok) { 2026-10-24T11:04:40.4008616Z 127 │ │ yield* Effect.promise( 2026-10-24T11:04:40.4008809Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T11:04:40.4008894Z 129 │ │ ); 2026-10-24T11:04:40.4009006Z 130 │ │ return yield* Effect.fail( 2026-10-24T11:04:40.4009220Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T11:04:40.4009302Z 132 │ │ ); 2026-10-24T11:04:40.4009382Z 133 │ │ } 2026-10-24T11:04:40.4009595Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T11:04:40.4009718Z 135 │ │ for (const payload of payloads) { 2026-10-24T11:04:40.4009936Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T11:04:40.4010099Z 137 │ │ } 2026-10-24T11:04:40.4010236Z 138 │ │ return payloads; 2026-10-24T11:04:40.4010362Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T11:04:40.4010440Z 140 │ │ ); 2026-10-24T11:04:40.4010511Z 141 │ │ 2026-10-24T11:04:40.4010688Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T11:04:40.4010816Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T11:04:40.4011003Z 144 │ │ ): Effect.fn.Return { 2026-10-24T11:04:40.4011166Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T11:04:40.4011299Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T11:04:40.4011426Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T11:04:40.4011529Z 148 │ │ if (sessionId !== null) { 2026-10-24T11:04:40.4011661Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T11:04:40.4011757Z 150 │ │ try: (signal) => 2026-10-24T11:04:40.4011886Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T11:04:40.4011987Z 152 │ │ method: "DELETE", 2026-10-24T11:04:40.4012077Z 153 │ │ signal, 2026-10-24T11:04:40.4012170Z 154 │ │ headers: { 2026-10-24T11:04:40.4012301Z 155 │ │ authorization: options.authorization, 2026-10-24T11:04:40.4012426Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T11:04:40.4012564Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T11:04:40.4012656Z 158 │ │ ? {} 2026-10-24T11:04:40.4012818Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T11:04:40.4012903Z 160 │ │ }, 2026-10-24T11:04:40.4012985Z 161 │ │ }), 2026-10-24T11:04:40.4013089Z 162 │ │ catch: bridgeError, 2026-10-24T11:04:40.4013167Z 163 │ │ }); 2026-10-24T11:04:40.4013302Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T11:04:40.4013419Z 165 │ │ return yield* Effect.fail( 2026-10-24T11:04:40.4013529Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T11:04:40.4013713Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T11:04:40.4013794Z 168 │ │ ), 2026-10-24T11:04:40.4013873Z 169 │ │ ); 2026-10-24T11:04:40.4013949Z 170 │ │ } 2026-10-24T11:04:40.4014052Z 171 │ │ yield* Effect.promise( 2026-10-24T11:04:40.4014235Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T11:04:40.4014314Z 173 │ │ ); 2026-10-24T11:04:40.4014389Z 174 │ │ } 2026-10-24T11:04:40.4014472Z 175 │ │ return {}; 2026-10-24T11:04:40.4014617Z 176 │ │ }); 2026-10-24T11:04:40.4014714Z 177 │ │ 2026-10-24T11:04:40.4014794Z 178 │ │ return { 2026-10-24T11:04:40.4014967Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T11:04:40.4015091Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T11:04:40.4015201Z 181 │ │ return yield* Effect.fail( 2026-10-24T11:04:40.4015389Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T11:04:40.4015467Z 183 │ │ ); 2026-10-24T11:04:40.4015544Z 184 │ │ } 2026-10-24T11:04:40.4015673Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T11:04:40.4015892Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T11:04:40.4015969Z 187 │ │ } 2026-10-24T11:04:40.4016126Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T11:04:40.4016242Z 189 │ │ connections.set(connectionId, { 2026-10-24T11:04:40.4016361Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T11:04:40.4016458Z 191 │ │ sessionId: null, 2026-10-24T11:04:40.4016565Z 192 │ │ protocolVersion: null, 2026-10-24T11:04:40.4016665Z 193 │ │ nextRequestId: 0, 2026-10-24T11:04:40.4016745Z 194 │ │ }); 2026-10-24T11:04:40.4016853Z 195 │ │ return { connectionId }; 2026-10-24T11:04:40.4016933Z 196 │ │ }), 2026-10-24T11:04:40.4017107Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T11:04:40.4017270Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T11:04:40.4017392Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T11:04:40.4017520Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T11:04:40.4017619Z 201 │ │ jsonrpc: "2.0", 2026-10-24T11:04:40.4017702Z 202 │ │ id, 2026-10-24T11:04:40.4017804Z 203 │ │ method: request.method, 2026-10-24T11:04:40.4017972Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T11:04:40.4018054Z 205 │ │ }); 2026-10-24T11:04:40.4018275Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T11:04:40.4018469Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T11:04:40.4018588Z 208 │ │ if (envelope === null) { 2026-10-24T11:04:40.4018697Z 209 │ │ return yield* Effect.fail( 2026-10-24T11:04:40.4018886Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T11:04:40.4018963Z 211 │ │ ); 2026-10-24T11:04:40.4019039Z 212 │ │ } 2026-10-24T11:04:40.4019159Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T11:04:40.4019434Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T11:04:40.4019542Z 215 │ │ } 2026-10-24T11:04:40.4019715Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T11:04:40.4019790Z 217 │ │ }), 2026-10-24T11:04:40.4019983Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T11:04:40.4020146Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T11:04:40.4020249Z 220 │ │ yield* send(connection, { 2026-10-24T11:04:40.4020346Z 221 │ │ jsonrpc: "2.0", 2026-10-24T11:04:40.4020455Z 222 │ │ method: request.method, 2026-10-24T11:04:40.4020617Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T11:04:40.4020695Z 224 │ │ }); 2026-10-24T11:04:40.4020770Z 225 │ │ }), 2026-10-24T11:04:40.4020858Z 226 │ │ disconnect, 2026-10-24T11:04:40.4020966Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T11:04:40.4021061Z 228 │ │ Effect.forEach( 2026-10-24T11:04:40.4021168Z 229 │ │ [...connections.keys()], 2026-10-24T11:04:40.4021340Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T11:04:40.4021442Z 231 │ │ { discard: true }, 2026-10-24T11:04:40.4021518Z 232 │ │ ), 2026-10-24T11:04:40.4021600Z 233 │ │ ), 2026-10-24T11:04:40.4021678Z 234 │ │ }; 2026-10-24T11:04:40.4021807Z 235 │ ╰─▶ }); 2026-10-24T11:04:40.4021859Z ╰──── 2026-10-24T11:04:40.4022115Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T11:04:40.4022118Z 2026-10-24T11:04:40.4022332Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T11:04:40.4022473Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T11:04:40.4022526Z 21 │ 2026-10-24T11:04:40.4022685Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T11:04:40.4022782Z ·  ────────┬─────── 2026-10-24T11:04:40.4022938Z · ╰── 'summarizePayload' is declared here 2026-10-24T11:04:40.4023043Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T11:04:40.4023095Z ╰──── 2026-10-24T11:04:40.4023200Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4023202Z 2026-10-24T11:04:40.4023405Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T11:04:40.4023572Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T11:04:40.4023648Z 3 │ AuthProvidersManageScope, 2026-10-24T11:04:40.4023719Z 4 │ type AuthSessionState, 2026-10-24T11:04:40.4023803Z ·  ────────┬─────── 2026-10-24T11:04:40.4024017Z · ╰── 'AuthSessionState' is imported here 2026-10-24T11:04:40.4024115Z 5 │ type EnvironmentId, 2026-10-24T11:04:40.4024167Z ╰──── 2026-10-24T11:04:40.4024266Z  help: Consider removing this import. 2026-10-24T11:04:40.4024268Z 2026-10-24T11:04:40.4024435Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4024584Z ╭─[apps/web/src/components/chat/useThreadLifecycle.tsx:178:58] 2026-10-24T11:04:40.4024696Z 177 │ if (snoozeClockState.shell !== activeThreadShell) { 2026-10-24T11:04:40.4024862Z 178 │ setSnoozeClockState({ shell: activeThreadShell, now: new Date().toISOString() }); 2026-10-24T11:04:40.4024987Z ·  ─────┬──── 2026-10-24T11:04:40.4025168Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4025228Z 179 │ } 2026-10-24T11:04:40.4025281Z ╰──── 2026-10-24T11:04:40.4025562Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4025863Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4025865Z 2026-10-24T11:04:40.4026072Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T11:04:40.4026199Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T11:04:40.4026299Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T11:04:40.4026465Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T11:04:40.4026601Z 159 │ │ constructor(data: Record) { 2026-10-24T11:04:40.4026720Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T11:04:40.4026796Z 161 │ │ } 2026-10-24T11:04:40.4026923Z 162 │ ╰─▶ }, 2026-10-24T11:04:40.4026989Z 163 │ clipboard: { 2026-10-24T11:04:40.4027042Z ╰──── 2026-10-24T11:04:40.4027214Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T11:04:40.4027216Z 2026-10-24T11:04:40.4027553Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4027681Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T11:04:40.4027846Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T11:04:40.4027969Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T11:04:40.4028049Z ·  ───────── 2026-10-24T11:04:40.4028109Z 19 │ expect( 2026-10-24T11:04:40.4028161Z ╰──── 2026-10-24T11:04:40.4028164Z 2026-10-24T11:04:40.4028668Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4028789Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T11:04:40.4028848Z 19 │ expect( 2026-10-24T11:04:40.4029015Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T11:04:40.4029164Z ·  ───────── 2026-10-24T11:04:40.4029276Z 21 │ ).toBe(true); 2026-10-24T11:04:40.4029327Z ╰──── 2026-10-24T11:04:40.4029330Z 2026-10-24T11:04:40.4029701Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4029817Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T11:04:40.4029970Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T11:04:40.4030142Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T11:04:40.4030252Z ·  ────────────────────────── 2026-10-24T11:04:40.4030398Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T11:04:40.4030457Z ╰──── 2026-10-24T11:04:40.4030463Z 2026-10-24T11:04:40.4030927Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.4031050Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T11:04:40.4031104Z 499 │ 2026-10-24T11:04:40.4031219Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T11:04:40.4031341Z ·  ────────────────────────── 2026-10-24T11:04:40.4031449Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T11:04:40.4031501Z ╰──── 2026-10-24T11:04:40.4031503Z 2026-10-24T11:04:40.4031966Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.decodeUnknownEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.4032091Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T11:04:40.4032184Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T11:04:40.4032292Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T11:04:40.4032409Z ·  ────────────────────────── 2026-10-24T11:04:40.4032477Z 130 │ Schema.Struct({ 2026-10-24T11:04:40.4032528Z ╰──── 2026-10-24T11:04:40.4032530Z 2026-10-24T11:04:40.4032865Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4033015Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T11:04:40.4033184Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T11:04:40.4033357Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T11:04:40.4033442Z ·  ───────── 2026-10-24T11:04:40.4033624Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T11:04:40.4033677Z ╰──── 2026-10-24T11:04:40.4033679Z 2026-10-24T11:04:40.4034009Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4034151Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T11:04:40.4034391Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T11:04:40.4034599Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T11:04:40.4034684Z ·  ───────── 2026-10-24T11:04:40.4034737Z 52 │ } 2026-10-24T11:04:40.4034789Z ╰──── 2026-10-24T11:04:40.4034791Z 2026-10-24T11:04:40.4035122Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4035264Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T11:04:40.4035328Z 54 │ assert.equal( 2026-10-24T11:04:40.4035499Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T11:04:40.4035577Z ·  ───────── 2026-10-24T11:04:40.4035638Z 56 │ true, 2026-10-24T11:04:40.4035688Z ╰──── 2026-10-24T11:04:40.4035690Z 2026-10-24T11:04:40.4036020Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4036162Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T11:04:40.4036226Z 58 │ assert.equal( 2026-10-24T11:04:40.4036408Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T11:04:40.4036479Z ·  ───────── 2026-10-24T11:04:40.4036537Z 60 │ true, 2026-10-24T11:04:40.4036589Z ╰──── 2026-10-24T11:04:40.4036591Z 2026-10-24T11:04:40.4036926Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.is(...) to module scope: the compiled function is rebuilt on every call. Move it to a module-level const. 2026-10-24T11:04:40.4037074Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T11:04:40.4037129Z 102 │ 2026-10-24T11:04:40.4037300Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T11:04:40.4037390Z ·  ───────── 2026-10-24T11:04:40.4037444Z 104 │ }); 2026-10-24T11:04:40.4037499Z ╰──── 2026-10-24T11:04:40.4037502Z 2026-10-24T11:04:40.4037980Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4038143Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T11:04:40.4038314Z 27 │ ) { 2026-10-24T11:04:40.4038609Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.4038759Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T11:04:40.4038891Z 30 │ │ if (predicate(available)) return available; 2026-10-24T11:04:40.4038993Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4039123Z 32 │ ╰─▶ } 2026-10-24T11:04:40.4039309Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T11:04:40.4039366Z ╰──── 2026-10-24T11:04:40.4039368Z 2026-10-24T11:04:40.4039849Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4039986Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T11:04:40.4040046Z 93 │ ) { 2026-10-24T11:04:40.4040250Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.4040426Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T11:04:40.4040549Z 96 │ │ if (predicate(project)) return project; 2026-10-24T11:04:40.4040654Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4040779Z 98 │ ╰─▶ } 2026-10-24T11:04:40.4040936Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T11:04:40.4040992Z ╰──── 2026-10-24T11:04:40.4040994Z 2026-10-24T11:04:40.4041261Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4041438Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:7] 2026-10-24T11:04:40.4041497Z 324 │ }; 2026-10-24T11:04:40.4041565Z 325 │ useEffect(() => { 2026-10-24T11:04:40.4041641Z ·  ────┬──── 2026-10-24T11:04:40.4041777Z · ╰── This is the containing effect 2026-10-24T11:04:40.4041883Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T11:04:40.4041980Z 327 │ requestedSection.current = "overview"; 2026-10-24T11:04:40.4042159Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T11:04:40.4042241Z 329 │ setSection("overview"); 2026-10-24T11:04:40.4042321Z ·  ─────┬──── 2026-10-24T11:04:40.4042495Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4042587Z 330 │ } 2026-10-24T11:04:40.4042731Z ╰──── 2026-10-24T11:04:40.4043369Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4043788Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4043838Z 2026-10-24T11:04:40.4044059Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:04:40.4044276Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:331:6] 2026-10-24T11:04:40.4044417Z 326 │ if (!guidesEnabled && section === "guide") { 2026-10-24T11:04:40.4044546Z 327 │ requestedSection.current = "overview"; 2026-10-24T11:04:40.4044644Z ·  ────────┬─────── 2026-10-24T11:04:40.4045119Z · ╰── Missing dependency `requestedSection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4045339Z 328 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T11:04:40.4045527Z ·  ─────────┬───────── ──────┬────── 2026-10-24T11:04:40.4046062Z · │ ╰── Missing dependency `scrollOffsets`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4046530Z · ╰── Missing dependency `currentScrollOffset`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4046640Z 329 │ setSection("overview"); 2026-10-24T11:04:40.4046738Z 330 │ } 2026-10-24T11:04:40.4046868Z 331 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T11:04:40.4046998Z ·  ──────────────────┬───────────────── 2026-10-24T11:04:40.4047215Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4047355Z 332 │ const tabContent = activityContent; 2026-10-24T11:04:40.4047438Z ╰──── 2026-10-24T11:04:40.4047692Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:04:40.4048043Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4048046Z 2026-10-24T11:04:40.4048338Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:04:40.4048623Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:868:6] 2026-10-24T11:04:40.4048717Z 851 │ if ( 2026-10-24T11:04:40.4048848Z 852 │ lastSelection.current.path === route.params.path && 2026-10-24T11:04:40.4048954Z ·  ──────┬────── 2026-10-24T11:04:40.4049451Z · ╰── Missing dependency `lastSelection`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4049611Z 853 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T11:04:40.4049697Z 854 │ ) 2026-10-24T11:04:40.4049772Z 855 │ return; 2026-10-24T11:04:40.4049992Z 856 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T11:04:40.4050247Z 857 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T11:04:40.4050409Z 858 │ setJumpPath(route.params.path); 2026-10-24T11:04:40.4050498Z 859 │ setSelectedRowId(null); 2026-10-24T11:04:40.4050600Z 860 │ jumpStarted.current = false; 2026-10-24T11:04:40.4050800Z 861 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T11:04:40.4050926Z 862 │ if (!file || !nativeView.current) return; 2026-10-24T11:04:40.4051035Z ·  ─────┬──── 2026-10-24T11:04:40.4051509Z · ╰── Missing dependency `nativeView`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4051672Z 863 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T11:04:40.4051794Z 864 │ jumpStarted.current = true; 2026-10-24T11:04:40.4051951Z 865 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T11:04:40.4052065Z 866 │ jumpStarted.current = false; 2026-10-24T11:04:40.4052145Z 867 │ }); 2026-10-24T11:04:40.4052393Z 868 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T11:04:40.4052613Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T11:04:40.4052877Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4053023Z 869 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T11:04:40.4053111Z ╰──── 2026-10-24T11:04:40.4053327Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:04:40.4053660Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4053663Z 2026-10-24T11:04:40.4053944Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T11:04:40.4054082Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T11:04:40.4054186Z 55 │ 2026-10-24T11:04:40.4054303Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T11:04:40.4054444Z ·  ────────────────┬──────────────── 2026-10-24T11:04:40.4054665Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T11:04:40.4054791Z 57 │ selection: TerminalContextSelection, 2026-10-24T11:04:40.4054879Z ╰──── 2026-10-24T11:04:40.4055022Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4055025Z 2026-10-24T11:04:40.4055319Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4055476Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T11:04:40.4055642Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T11:04:40.4055722Z 84 │ useEffect(() => { 2026-10-24T11:04:40.4055824Z ·  ────┬──── 2026-10-24T11:04:40.4055983Z · ╰── This is the containing effect 2026-10-24T11:04:40.4056103Z 85 │ if (!actionState.isRunning) return; 2026-10-24T11:04:40.4056195Z 86 │ setNowMs(Date.now()); 2026-10-24T11:04:40.4056373Z ·  ────┬─── 2026-10-24T11:04:40.4056599Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4056756Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T11:04:40.4056832Z ╰──── 2026-10-24T11:04:40.4057478Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4057833Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4057836Z 2026-10-24T11:04:40.4058419Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeUnknownSync(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.4058614Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T11:04:40.4058704Z 38 │ JSON.stringify( 2026-10-24T11:04:40.4058857Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T11:04:40.4058989Z ·  ──────────────────────── 2026-10-24T11:04:40.4059079Z 40 │ { name: "a" }, 2026-10-24T11:04:40.4059157Z ╰──── 2026-10-24T11:04:40.4059184Z 2026-10-24T11:04:40.4059406Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T11:04:40.4059545Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T11:04:40.4059647Z 296 │ } from "./device.ts"; 2026-10-24T11:04:40.4059777Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T11:04:40.4059866Z ·  ── 2026-10-24T11:04:40.4059958Z 298 │ import { 2026-10-24T11:04:40.4060046Z ╰──── 2026-10-24T11:04:40.4060145Z  help: Remove empty braces 2026-10-24T11:04:40.4060159Z 2026-10-24T11:04:40.4060384Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T11:04:40.4060653Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T11:04:40.4060780Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T11:04:40.4060906Z 28 │ import { identity } from "effect/Function"; 2026-10-24T11:04:40.4060990Z ·  ────┬─── 2026-10-24T11:04:40.4061185Z · ╰── 'identity' is imported here 2026-10-24T11:04:40.4061382Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T11:04:40.4061501Z ╰──── 2026-10-24T11:04:40.4061617Z  help: Consider removing this import. 2026-10-24T11:04:40.4061619Z 2026-10-24T11:04:40.4061961Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T11:04:40.4062164Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T11:04:40.4062255Z 162 │ keys, 2026-10-24T11:04:40.4062344Z 163 │ overridingProjects = [], 2026-10-24T11:04:40.4062453Z ·  ── 2026-10-24T11:04:40.4062581Z 164 │ onClearOverrides, 2026-10-24T11:04:40.4062668Z ╰──── 2026-10-24T11:04:40.4063011Z  help: Default values are re-created on every render and break referential equality, causing unnecessary re-renders. Move the value out of the component or memoize it. 2026-10-24T11:04:40.4063035Z 2026-10-24T11:04:40.4063368Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4063553Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T11:04:40.4063678Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T11:04:40.4063774Z 1315 │ retryTick, 2026-10-24T11:04:40.4063864Z ·  ────┬──── 2026-10-24T11:04:40.4064035Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T11:04:40.4064160Z 1316 │ restoreQueuedMessage, 2026-10-24T11:04:40.4064249Z ╰──── 2026-10-24T11:04:40.4064560Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4064916Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4064922Z 2026-10-24T11:04:40.4065151Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4065346Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T11:04:40.4065473Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T11:04:40.4065602Z 223 │ 2026-10-24T11:04:40.4065742Z ·  ─────────────── 2026-10-24T11:04:40.4065888Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T11:04:40.4065976Z ╰──── 2026-10-24T11:04:40.4066145Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T11:04:40.4066151Z 2026-10-24T11:04:40.4066493Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4066679Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T11:04:40.4066799Z 226 │ { 2026-10-24T11:04:40.4068392Z ·  ────┬──── 2026-10-24T11:04:40.4068623Z · ╰── This is the containing effect 2026-10-24T11:04:40.4068730Z 106 │ clearReviewCommentTarget(); 2026-10-24T11:04:40.4068856Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T11:04:40.4069011Z ·  ────────────────┬─────────────── 2026-10-24T11:04:40.4069332Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4069437Z 108 │ }, [selectedSection?.id]); 2026-10-24T11:04:40.4069526Z ╰──── 2026-10-24T11:04:40.4070169Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4070528Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4070531Z 2026-10-24T11:04:40.4070821Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4071032Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T11:04:40.4071141Z 109 │ 2026-10-24T11:04:40.4071225Z 110 │ useEffect(() => { 2026-10-24T11:04:40.4071332Z ·  ────┬──── 2026-10-24T11:04:40.4071497Z · ╰── This is the containing effect 2026-10-24T11:04:40.4071627Z 111 │ if (activeCommentTarget === null) { 2026-10-24T11:04:40.4071752Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T11:04:40.4071897Z ·  ────────────────┬─────────────── 2026-10-24T11:04:40.4072107Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4072187Z 113 │ } 2026-10-24T11:04:40.4072269Z ╰──── 2026-10-24T11:04:40.4072917Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4073375Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4073377Z 2026-10-24T11:04:40.4073612Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4073842Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T11:04:40.4073965Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T11:04:40.4074072Z 108 │ }, [selectedSection?.id]); 2026-10-24T11:04:40.4074194Z ·  ─────────┬───────── 2026-10-24T11:04:40.4074472Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T11:04:40.4074589Z 109 │ 2026-10-24T11:04:40.4074681Z ╰──── 2026-10-24T11:04:40.4075013Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4075360Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4075362Z 2026-10-24T11:04:40.4075659Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4075850Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T11:04:40.4075941Z 100 │ 2026-10-24T11:04:40.4076041Z 101 │ useEffect(() => { 2026-10-24T11:04:40.4076141Z ·  ────┬──── 2026-10-24T11:04:40.4076304Z · ╰── This is the containing effect 2026-10-24T11:04:40.4076556Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T11:04:40.4076679Z 103 │ setHighlightedLinesById({}); 2026-10-24T11:04:40.4076806Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4076989Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4077103Z 104 │ return; 2026-10-24T11:04:40.4077194Z ╰──── 2026-10-24T11:04:40.4077834Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4078183Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4078186Z 2026-10-24T11:04:40.4078552Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4078736Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T11:04:40.4078855Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T11:04:40.4078998Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T11:04:40.4079152Z ·  ──────┬────── ────┬─── 2026-10-24T11:04:40.4079418Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T11:04:40.4079605Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T11:04:40.4079699Z 455 │ const { 2026-10-24T11:04:40.4079767Z ╰──── 2026-10-24T11:04:40.4080201Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4080558Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4080560Z 2026-10-24T11:04:40.4080778Z ⚠ react(static-components): Cannot create components during render 2026-10-24T11:04:40.4080947Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T11:04:40.4081018Z 492 │ // same check. 2026-10-24T11:04:40.4081283Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T11:04:40.4081470Z ·  ─────────────┬───────────── 2026-10-24T11:04:40.4081688Z · ╰── The component is created during render here 2026-10-24T11:04:40.4081860Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T11:04:40.4082022Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T11:04:40.4082194Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T11:04:40.4082318Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T11:04:40.4082436Z 498 │ setIsPullRefreshing(true); 2026-10-24T11:04:40.4082528Z 499 │ await refreshSelectedSection(); 2026-10-24T11:04:40.4082669Z 500 │ setIsPullRefreshing(false); 2026-10-24T11:04:40.4082759Z 501 │ }; 2026-10-24T11:04:40.4083052Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T11:04:40.4083211Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T11:04:40.4083357Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T11:04:40.4083486Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T11:04:40.4083613Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T11:04:40.4083698Z 507 │ files: reviewFiles, 2026-10-24T11:04:40.4083824Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T11:04:40.4084011Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T11:04:40.4084110Z 510 │ : undefined, 2026-10-24T11:04:40.4084225Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T11:04:40.4084388Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T11:04:40.4084494Z 513 │ : undefined, 2026-10-24T11:04:40.4084591Z 514 │ }); 2026-10-24T11:04:40.4084803Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T11:04:40.4084969Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T11:04:40.4085057Z 517 │ environmentId, 2026-10-24T11:04:40.4085174Z 518 │ threadId, 2026-10-24T11:04:40.4085257Z 519 │ selectedSection, 2026-10-24T11:04:40.4085366Z 520 │ nativeReviewDiffData, 2026-10-24T11:04:40.4085556Z 521 │ }); 2026-10-24T11:04:40.4085701Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T11:04:40.4085811Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T11:04:40.4085938Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T11:04:40.4086122Z 525 │ diff: selectedSection?.diff, 2026-10-24T11:04:40.4086246Z 526 │ data: nativeReviewDiffData, 2026-10-24T11:04:40.4086360Z 527 │ collapsedFileIds, 2026-10-24T11:04:40.4086466Z 528 │ viewedFileIds, 2026-10-24T11:04:40.4086610Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T11:04:40.4086723Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T11:04:40.4086804Z 531 │ }); 2026-10-24T11:04:40.4086936Z 532 │ const showcaseReviewKey = 2026-10-24T11:04:40.4087102Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T11:04:40.4087345Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T11:04:40.4087422Z 535 │ : null; 2026-10-24T11:04:40.4092319Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T11:04:40.4092433Z 537 │ nativeBridge.onDebug(event); 2026-10-24T11:04:40.4092495Z 538 │ if ( 2026-10-24T11:04:40.4092580Z 539 │ showcaseReviewKey === null || 2026-10-24T11:04:40.4092706Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T11:04:40.4092815Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T11:04:40.4092872Z 542 │ ) { 2026-10-24T11:04:40.4092934Z 543 │ return; 2026-10-24T11:04:40.4092988Z 544 │ } 2026-10-24T11:04:40.4093103Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T11:04:40.4093269Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T11:04:40.4093326Z 547 │ }; 2026-10-24T11:04:40.4093377Z 548 │ 2026-10-24T11:04:40.4093499Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T11:04:40.4093588Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T11:04:40.4093683Z 551 │ commentSelection.clearSelection(); 2026-10-24T11:04:40.4093802Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T11:04:40.4093884Z 553 │ toggleExpandedFile(fileId); 2026-10-24T11:04:40.4093940Z 554 │ } 2026-10-24T11:04:40.4094052Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T11:04:40.4094124Z 556 │ if (!nativeView) return; 2026-10-24T11:04:40.4094218Z 557 │ const result = await settlePromise(() => 2026-10-24T11:04:40.4094394Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T11:04:40.4094451Z 559 │ ); 2026-10-24T11:04:40.4094539Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T11:04:40.4094729Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T11:04:40.4094787Z 562 │ } 2026-10-24T11:04:40.4094842Z 563 │ }; 2026-10-24T11:04:40.4094924Z 564 │ const handleVisibleFileChange = ( 2026-10-24T11:04:40.4095058Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T11:04:40.4095117Z 566 │ ) => { 2026-10-24T11:04:40.4095227Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T11:04:40.4095396Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T11:04:40.4095452Z 569 │ }; 2026-10-24T11:04:40.4095533Z 570 │ const renderInspector = () => ( 2026-10-24T11:04:40.4095601Z 571 │ void handleSelectFile(fileId)} 2026-10-24T11:04:40.4096293Z 577 │ /> 2026-10-24T11:04:40.4096349Z 578 │ ); 2026-10-24T11:04:40.4096400Z 579 │ 2026-10-24T11:04:40.4096588Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T11:04:40.4096676Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T11:04:40.4096740Z 582 │ if (fileId) { 2026-10-24T11:04:40.4096821Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T11:04:40.4096903Z 584 │ toggleExpandedFile(fileId); 2026-10-24T11:04:40.4096957Z 585 │ } 2026-10-24T11:04:40.4097012Z 586 │ }; 2026-10-24T11:04:40.4097063Z 587 │ 2026-10-24T11:04:40.4097158Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T11:04:40.4097280Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T11:04:40.4097336Z 590 │ ) => { 2026-10-24T11:04:40.4097420Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T11:04:40.4097484Z 592 │ if (fileId) { 2026-10-24T11:04:40.4097560Z 593 │ toggleViewedFile(fileId); 2026-10-24T11:04:40.4097613Z 594 │ } 2026-10-24T11:04:40.4097668Z 595 │ }; 2026-10-24T11:04:40.4097722Z 596 │ 2026-10-24T11:04:40.4097795Z 597 │ const parsedDiffNotice = 2026-10-24T11:04:40.4097956Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T11:04:40.4098078Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T11:04:40.4098268Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T11:04:40.4098469Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T11:04:40.4098643Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T11:04:40.4098756Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T11:04:40.4098857Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T11:04:40.4098929Z 605 │ hasCachedSelectedDiff, 2026-10-24T11:04:40.4098994Z 606 │ hasAnyCachedDiff, 2026-10-24T11:04:40.4099050Z 607 │ }); 2026-10-24T11:04:40.4099138Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T11:04:40.4099227Z 609 │ void retryEnvironment(environmentId); 2026-10-24T11:04:40.4099280Z 610 │ }; 2026-10-24T11:04:40.4099366Z 611 │ const handleReturnToThread = () => { 2026-10-24T11:04:40.4099445Z 612 │ if (navigation.canGoBack()) { 2026-10-24T11:04:40.4099522Z 613 │ navigation.goBack(); 2026-10-24T11:04:40.4099584Z 614 │ return; 2026-10-24T11:04:40.4099638Z 615 │ } 2026-10-24T11:04:40.4099720Z 616 │ navigation.navigate("Thread", { 2026-10-24T11:04:40.4099811Z 617 │ environmentId: String(environmentId), 2026-10-24T11:04:40.4099887Z 618 │ threadId: String(threadId), 2026-10-24T11:04:40.4099944Z 619 │ }); 2026-10-24T11:04:40.4099998Z 620 │ }; 2026-10-24T11:04:40.4100076Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T11:04:40.4100148Z 622 │ selectedSection?.title, 2026-10-24T11:04:40.4100228Z 623 │ headerDiffSummary.additions, 2026-10-24T11:04:40.4100307Z 624 │ headerDiffSummary.deletions, 2026-10-24T11:04:40.4100361Z 625 │ ] 2026-10-24T11:04:40.4100469Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T11:04:40.4100535Z 627 │ .join(" · "); 2026-10-24T11:04:40.4100587Z 628 │ 2026-10-24T11:04:40.4100840Z 629 │ const showChangedFilesPane = 2026-10-24T11:04:40.4100988Z 630 │ !showConnectionNotice && 2026-10-24T11:04:40.4101063Z 631 │ selectedSection !== null && 2026-10-24T11:04:40.4101143Z 632 │ parsedDiff.kind === "files" && 2026-10-24T11:04:40.4101223Z 633 │ NativeReviewDiffView !== null; 2026-10-24T11:04:40.4101394Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T11:04:40.4101564Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T11:04:40.4101617Z 636 │ 2026-10-24T11:04:40.4101688Z 637 │ const listHeader = (() => { 2026-10-24T11:04:40.4101775Z 638 │ const children: ReactElement[] = []; 2026-10-24T11:04:40.4101830Z 639 │ 2026-10-24T11:04:40.4101892Z 640 │ if (error) { 2026-10-24T11:04:40.4101960Z 641 │ children.push( 2026-10-24T11:04:40.4102028Z 642 │ 2026-10-24T11:04:40.4102693Z 649 │ Review unavailable 2026-10-24T11:04:40.4102855Z 650 │ {error} 2026-10-24T11:04:40.4102916Z 651 │ , 2026-10-24T11:04:40.4102972Z 652 │ ); 2026-10-24T11:04:40.4103028Z 653 │ } 2026-10-24T11:04:40.4103080Z 654 │ 2026-10-24T11:04:40.4103158Z 655 │ if (parsedDiffNotice) { 2026-10-24T11:04:40.4103320Z 656 │ children.push(); 2026-10-24T11:04:40.4103375Z 657 │ } 2026-10-24T11:04:40.4103426Z 658 │ 2026-10-24T11:04:40.4103504Z 659 │ if (children.length === 0) { 2026-10-24T11:04:40.4103567Z 660 │ return null; 2026-10-24T11:04:40.4103621Z 661 │ } 2026-10-24T11:04:40.4103673Z 662 │ 2026-10-24T11:04:40.4103741Z 663 │ return <>{children}; 2026-10-24T11:04:40.4103797Z 664 │ })(); 2026-10-24T11:04:40.4103867Z 665 │ const headerSubtitle = [ 2026-10-24T11:04:40.4103947Z 666 │ headerDiffSummary.additions, 2026-10-24T11:04:40.4104023Z 667 │ headerDiffSummary.deletions, 2026-10-24T11:04:40.4104104Z 668 │ pendingReviewCommentCount > 0 2026-10-24T11:04:40.4104285Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T11:04:40.4104349Z 670 │ : null, 2026-10-24T11:04:40.4104401Z 671 │ ] 2026-10-24T11:04:40.4104468Z 672 │ .filter(Boolean) 2026-10-24T11:04:40.4104532Z 673 │ .join(" · "); 2026-10-24T11:04:40.4104669Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T11:04:40.4104720Z 675 │ 2026-10-24T11:04:40.4104779Z 676 │ return ( 2026-10-24T11:04:40.4104835Z 677 │ <> 2026-10-24T11:04:40.4104898Z 678 │ 2026-10-24T11:04:40.4106322Z 694 │ 2026-10-24T11:04:40.4106389Z 695 │ 2026-10-24T11:04:40.4106518Z 696 │ 2026-10-24T11:04:40.4106602Z 697 │ {showConnectionNotice ? ( 2026-10-24T11:04:40.4106742Z 698 │ 2026-10-24T11:04:40.4106833Z 699 │ 2026-10-24T11:04:40.4107850Z 711 │ 2026-10-24T11:04:40.4108008Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T11:04:40.4108067Z 713 │ 2026-10-24T11:04:40.4108680Z 719 │ 2026-10-24T11:04:40.4109048Z 723 │ {listHeader} 2026-10-24T11:04:40.4109169Z 724 │ 2026-10-24T11:04:40.4109251Z 725 │ { 2026-10-24T11:04:40.4111007Z ·  ────┬──── 2026-10-24T11:04:40.4111140Z · ╰── This is the containing effect 2026-10-24T11:04:40.4111207Z 57 │ scheduler.reset(); 2026-10-24T11:04:40.4111306Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T11:04:40.4111399Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T11:04:40.4111519Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T11:04:40.4111598Z ·  ───────┬─────── 2026-10-24T11:04:40.4111772Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4111887Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T11:04:40.4111939Z ╰──── 2026-10-24T11:04:40.4112545Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4112878Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4112883Z 2026-10-24T11:04:40.4113088Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4113263Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T11:04:40.4113344Z 62 │ return () => scheduler.cancel(); 2026-10-24T11:04:40.4113445Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T11:04:40.4113576Z ·  ───┬─── ─────┬───── 2026-10-24T11:04:40.4113771Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T11:04:40.4113909Z · ╰── Unnecessary dependency `enabled` 2026-10-24T11:04:40.4113961Z 64 │ 2026-10-24T11:04:40.4114020Z ╰──── 2026-10-24T11:04:40.4114320Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4114634Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4114637Z 2026-10-24T11:04:40.4114838Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4115003Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T11:04:40.4115102Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T11:04:40.4115201Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T11:04:40.4115377Z ·  ──────┬───── 2026-10-24T11:04:40.4115585Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T11:04:40.4115690Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T11:04:40.4115742Z ╰──── 2026-10-24T11:04:40.4116035Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4116344Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4116347Z 2026-10-24T11:04:40.4116568Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:04:40.4116712Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T11:04:40.4116780Z 20 │ [instanceId]: { 2026-10-24T11:04:40.4116858Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T11:04:40.4116962Z ·  ──────────────────────────── 2026-10-24T11:04:40.4117030Z 22 │ [model]: options, 2026-10-24T11:04:40.4117082Z ╰──── 2026-10-24T11:04:40.4117348Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T11:04:40.4117351Z 2026-10-24T11:04:40.4117570Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:04:40.4117700Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T11:04:40.4117771Z 113 │ const declared = { 2026-10-24T11:04:40.4117869Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T11:04:40.4117985Z ·  ──────────────────────────────── 2026-10-24T11:04:40.4118090Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T11:04:40.4118143Z ╰──── 2026-10-24T11:04:40.4118547Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T11:04:40.4118551Z 2026-10-24T11:04:40.4118769Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:04:40.4118898Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T11:04:40.4118990Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T11:04:40.4119092Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T11:04:40.4119220Z ·  ──────────────────────────────────────── 2026-10-24T11:04:40.4119319Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T11:04:40.4119371Z ╰──── 2026-10-24T11:04:40.4119634Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T11:04:40.4119637Z 2026-10-24T11:04:40.4119854Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:04:40.4119981Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T11:04:40.4120083Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T11:04:40.4120179Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T11:04:40.4120294Z ·  ──────────────────────────────────── 2026-10-24T11:04:40.4120355Z 117 │ }; 2026-10-24T11:04:40.4120480Z ╰──── 2026-10-24T11:04:40.4120775Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T11:04:40.4120777Z 2026-10-24T11:04:40.4120995Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T11:04:40.4121130Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T11:04:40.4121198Z 1021 │ instanceId, 2026-10-24T11:04:40.4121344Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T11:04:40.4121483Z ·  ────────────────────────────────────────────────── 2026-10-24T11:04:40.4121545Z 1023 │ ]), 2026-10-24T11:04:40.4121598Z ╰──── 2026-10-24T11:04:40.4121867Z  help: Spreading falsy values in object literals won't add any unexpected properties, so it's unnecessary to add an empty object as fallback. 2026-10-24T11:04:40.4121873Z 2026-10-24T11:04:40.4122075Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4122189Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T11:04:40.4122263Z 28 │ getPendingThreadOrder(); 2026-10-24T11:04:40.4122344Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T11:04:40.4122467Z ·  ────┬──── ───────┬────── 2026-10-24T11:04:40.4122659Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T11:04:40.4122800Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T11:04:40.4122866Z 30 │ return pending; 2026-10-24T11:04:40.4122924Z ╰──── 2026-10-24T11:04:40.4123220Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4123533Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4123536Z 2026-10-24T11:04:40.4123794Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4123967Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T11:04:40.4124020Z 118 │ 2026-10-24T11:04:40.4124085Z 119 │ useEffect(() => { 2026-10-24T11:04:40.4124157Z ·  ────┬──── 2026-10-24T11:04:40.4124356Z · ╰── This is the containing effect 2026-10-24T11:04:40.4124469Z 120 │ if (orientationSettled) return; 2026-10-24T11:04:40.4124582Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T11:04:40.4124660Z 122 │ if (orientation === null) { 2026-10-24T11:04:40.4124743Z 123 │ setOrientationSettled(true); 2026-10-24T11:04:40.4124834Z ·  ──────────┬────────── 2026-10-24T11:04:40.4125014Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4125078Z 124 │ return; 2026-10-24T11:04:40.4125131Z ╰──── 2026-10-24T11:04:40.4125743Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4126067Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4126069Z 2026-10-24T11:04:40.4126327Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4126499Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T11:04:40.4126553Z 292 │ 2026-10-24T11:04:40.4126618Z 293 │ useEffect(() => { 2026-10-24T11:04:40.4126691Z ·  ────┬──── 2026-10-24T11:04:40.4126824Z · ╰── This is the containing effect 2026-10-24T11:04:40.4126889Z 294 │ if ( 2026-10-24T11:04:40.4126959Z 295 │ scene === null || 2026-10-24T11:04:40.4127038Z 296 │ requestedScene === null || 2026-10-24T11:04:40.4127116Z 297 │ scene !== requestedScene || 2026-10-24T11:04:40.4127182Z 298 │ !hasFixture || 2026-10-24T11:04:40.4127253Z 299 │ !orientationSettled || 2026-10-24T11:04:40.4127322Z 300 │ !themeApplied || 2026-10-24T11:04:40.4127440Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T11:04:40.4127633Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T11:04:40.4127689Z 303 │ ) { 2026-10-24T11:04:40.4127760Z 304 │ setReadyScene(null); 2026-10-24T11:04:40.4127840Z ·  ──────┬────── 2026-10-24T11:04:40.4128013Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4128079Z 305 │ return; 2026-10-24T11:04:40.4128136Z ╰──── 2026-10-24T11:04:40.4128858Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4129180Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4129183Z 2026-10-24T11:04:40.4129455Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4129716Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T11:04:40.4129827Z 127 │ let cancelled = false; 2026-10-24T11:04:40.4129919Z 128 │ let lastOutcome: string | null = null; 2026-10-24T11:04:40.4130000Z ·  ─────┬───── 2026-10-24T11:04:40.4130137Z · ╰── 'lastOutcome' is declared here 2026-10-24T11:04:40.4130318Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T11:04:40.4130371Z ╰──── 2026-10-24T11:04:40.4130475Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4130478Z 2026-10-24T11:04:40.4130734Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4130888Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T11:04:40.4131033Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T11:04:40.4131104Z 356 │ useEffect(() => { 2026-10-24T11:04:40.4131174Z ·  ────┬──── 2026-10-24T11:04:40.4131304Z · ╰── This is the containing effect 2026-10-24T11:04:40.4131395Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T11:04:40.4131455Z 358 │ return; 2026-10-24T11:04:40.4131509Z 359 │ } 2026-10-24T11:04:40.4131606Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T11:04:40.4131702Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T11:04:40.4131807Z ·  ──────────────┬────────────── 2026-10-24T11:04:40.4131983Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4132044Z 362 │ return; 2026-10-24T11:04:40.4132103Z ╰──── 2026-10-24T11:04:40.4132704Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4133022Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4133026Z 2026-10-24T11:04:40.4133281Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4133433Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T11:04:40.4133491Z 447 │ 2026-10-24T11:04:40.4133559Z 448 │ useEffect(() => { 2026-10-24T11:04:40.4133629Z ·  ────┬──── 2026-10-24T11:04:40.4133758Z · ╰── This is the containing effect 2026-10-24T11:04:40.4133860Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T11:04:40.4133920Z 450 │ return; 2026-10-24T11:04:40.4133975Z 451 │ } 2026-10-24T11:04:40.4134119Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T11:04:40.4134254Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T11:04:40.4134361Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T11:04:40.4134415Z 455 │ } 2026-10-24T11:04:40.4134559Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T11:04:40.4134760Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T11:04:40.4134898Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T11:04:40.4134969Z 459 │ const directProject = 2026-10-24T11:04:40.4135037Z 460 │ projects.find( 2026-10-24T11:04:40.4135103Z 461 │ (project) => 2026-10-24T11:04:40.4135277Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T11:04:40.4135337Z 463 │ ) ?? null; 2026-10-24T11:04:40.4135391Z 464 │ 2026-10-24T11:04:40.4135461Z 465 │ if (directProject) { 2026-10-24T11:04:40.4135599Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T11:04:40.4135739Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T11:04:40.4135907Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T11:04:40.4136048Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T11:04:40.4136110Z 470 │ return; 2026-10-24T11:04:40.4136170Z 471 │ } 2026-10-24T11:04:40.4136267Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T11:04:40.4136331Z 473 │ if ( 2026-10-24T11:04:40.4136474Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T11:04:40.4136574Z 475 │ selectedProject.id !== directProject.id 2026-10-24T11:04:40.4136634Z 476 │ ) { 2026-10-24T11:04:40.4136717Z 477 │ setProject(directProject); 2026-10-24T11:04:40.4136779Z 478 │ return; 2026-10-24T11:04:40.4136839Z 479 │ } 2026-10-24T11:04:40.4136922Z 480 │ if (!flow.draftKey) return; 2026-10-24T11:04:40.4137071Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T11:04:40.4137216Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T11:04:40.4137327Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T11:04:40.4137405Z 484 │ workspaceSelection: { 2026-10-24T11:04:40.4137474Z 485 │ mode: "local", 2026-10-24T11:04:40.4137578Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T11:04:40.4137716Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T11:04:40.4137798Z 488 │ startFromOrigin: false, 2026-10-24T11:04:40.4137859Z 489 │ }, 2026-10-24T11:04:40.4137917Z 490 │ }); 2026-10-24T11:04:40.4137975Z 491 │ } 2026-10-24T11:04:40.4138102Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T11:04:40.4138167Z 493 │ if ( 2026-10-24T11:04:40.4138388Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T11:04:40.4138514Z 495 │ selectedProject.id === directProject.id 2026-10-24T11:04:40.4138572Z 496 │ ) { 2026-10-24T11:04:40.4138635Z 497 │ return; 2026-10-24T11:04:40.4138693Z 498 │ } 2026-10-24T11:04:40.4138773Z 499 │ setProject(directProject); 2026-10-24T11:04:40.4138834Z 500 │ return; 2026-10-24T11:04:40.4138888Z 501 │ } 2026-10-24T11:04:40.4138940Z 502 │ 2026-10-24T11:04:40.4139018Z 503 │ if (projects.length > 0) { 2026-10-24T11:04:40.4139118Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T11:04:40.4139225Z ·  ──────────────┬────────────── 2026-10-24T11:04:40.4139486Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4139579Z 505 │ } 2026-10-24T11:04:40.4139630Z ╰──── 2026-10-24T11:04:40.4140235Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4140557Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4140560Z 2026-10-24T11:04:40.4140820Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4140978Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T11:04:40.4141036Z 545 │ 2026-10-24T11:04:40.4141100Z 546 │ useEffect(() => { 2026-10-24T11:04:40.4141172Z ·  ────┬──── 2026-10-24T11:04:40.4141301Z · ╰── This is the containing effect 2026-10-24T11:04:40.4141396Z 547 │ const shareId = props.incomingShareId; 2026-10-24T11:04:40.4141478Z 548 │ const draftKey = flow.draftKey; 2026-10-24T11:04:40.4141579Z 549 │ const destinationProject = selectedProject; 2026-10-24T11:04:40.4141720Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T11:04:40.4141849Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T11:04:40.4141938Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T11:04:40.4142015Z 553 │ !initialEnvironmentId || 2026-10-24T11:04:40.4142090Z 554 │ !initialProjectId || 2026-10-24T11:04:40.4142225Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T11:04:40.4142329Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T11:04:40.4142387Z 557 │ if ( 2026-10-24T11:04:40.4142450Z 558 │ !shareId || 2026-10-24T11:04:40.4142513Z 559 │ !draftKey || 2026-10-24T11:04:40.4142584Z 560 │ !destinationProject || 2026-10-24T11:04:40.4142672Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T11:04:40.4142761Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T11:04:40.4142818Z 563 │ ) { 2026-10-24T11:04:40.4142876Z 564 │ return; 2026-10-24T11:04:40.4142931Z 565 │ } 2026-10-24T11:04:40.4143027Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T11:04:40.4143083Z 567 │ if ( 2026-10-24T11:04:40.4143201Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T11:04:40.4143315Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T11:04:40.4143371Z 570 │ ) { 2026-10-24T11:04:40.4143429Z 571 │ return; 2026-10-24T11:04:40.4143483Z 572 │ } 2026-10-24T11:04:40.4143536Z 573 │ 2026-10-24T11:04:40.4143604Z 574 │ if (!incomingShare) { 2026-10-24T11:04:40.4143799Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T11:04:40.4143928Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T11:04:40.4143995Z 577 │ Dialog.alert( 2026-10-24T11:04:40.4144079Z 578 │ "Shared content unavailable", 2026-10-24T11:04:40.4144252Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T11:04:40.4144392Z 580 │ ); 2026-10-24T11:04:40.4144484Z 581 │ } 2026-10-24T11:04:40.4144544Z 582 │ return; 2026-10-24T11:04:40.4144597Z 583 │ } 2026-10-24T11:04:40.4144649Z 584 │ 2026-10-24T11:04:40.4144705Z 585 │ if ( 2026-10-24T11:04:40.4144865Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T11:04:40.4144966Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T11:04:40.4145021Z 588 │ ) { 2026-10-24T11:04:40.4145081Z 589 │ return; 2026-10-24T11:04:40.4145133Z 590 │ } 2026-10-24T11:04:40.4145186Z 591 │ 2026-10-24T11:04:40.4145322Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T11:04:40.4145443Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T11:04:40.4145496Z 594 │ } 2026-10-24T11:04:40.4145608Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T11:04:40.4145680Z 596 │ const draftBackup = 2026-10-24T11:04:40.4145865Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T11:04:40.4146001Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T11:04:40.4146093Z 599 │ const importToken = Symbol(importKey); 2026-10-24T11:04:40.4146170Z 600 │ let didReserveShare = false; 2026-10-24T11:04:40.4146246Z 601 │ let didConsumeShare = false; 2026-10-24T11:04:40.4146325Z 602 │ let needsDraftRestore = false; 2026-10-24T11:04:40.4146436Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T11:04:40.4146520Z 604 │ setImportingShareKey(importKey); 2026-10-24T11:04:40.4146608Z ·  ──────────┬───────── 2026-10-24T11:04:40.4146790Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4146861Z 605 │ void (async () => { 2026-10-24T11:04:40.4146913Z ╰──── 2026-10-24T11:04:40.4147512Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4147832Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4147835Z 2026-10-24T11:04:40.4148036Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4148287Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T11:04:40.4148453Z 523 │ props.initialProjectRef, 2026-10-24T11:04:40.4148560Z 524 │ props.incomingShareId, 2026-10-24T11:04:40.4148650Z ·  ──────────┬────────── 2026-10-24T11:04:40.4148821Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T11:04:40.4148892Z 525 │ props.pendingTaskId, 2026-10-24T11:04:40.4148944Z ╰──── 2026-10-24T11:04:40.4149237Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4149550Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4149552Z 2026-10-24T11:04:40.4149775Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:04:40.4149932Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T11:04:40.4150048Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T11:04:40.4150117Z 543 │ flow.loadBranches(); 2026-10-24T11:04:40.4150186Z ·  ──┬─ 2026-10-24T11:04:40.4150313Z · ╰── Missing dependency `flow` 2026-10-24T11:04:40.4150405Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T11:04:40.4150491Z ·  ────────┬──────── 2026-10-24T11:04:40.4150693Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T11:04:40.4150747Z 545 │ 2026-10-24T11:04:40.4150804Z ╰──── 2026-10-24T11:04:40.4151230Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4151542Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4151545Z 2026-10-24T11:04:40.4151745Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4151898Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T11:04:40.4151962Z 765 │ flow.draftKey, 2026-10-24T11:04:40.4152040Z 766 │ hasImportedIncomingShare, 2026-10-24T11:04:40.4152139Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4152318Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T11:04:40.4152381Z 767 │ incomingShare, 2026-10-24T11:04:40.4152462Z 768 │ isIncomingShareInboxLoading, 2026-10-24T11:04:40.4152558Z ·  ─────────────┬───────────── 2026-10-24T11:04:40.4152741Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T11:04:40.4152820Z 769 │ isIncomingShareUnavailable, 2026-10-24T11:04:40.4152893Z 770 │ props.incomingShareId, 2026-10-24T11:04:40.4152987Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T11:04:40.4153076Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T11:04:40.4153148Z 773 │ releaseShareReservation, 2026-10-24T11:04:40.4153213Z 774 │ reserveShare, 2026-10-24T11:04:40.4153376Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T11:04:40.4153474Z 776 │ selectedProject, 2026-10-24T11:04:40.4153542Z 777 │ shareImportAttempt, 2026-10-24T11:04:40.4153628Z ·  ─────────┬──────── 2026-10-24T11:04:40.4153794Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T11:04:40.4153850Z 778 │ ]); 2026-10-24T11:04:40.4153900Z ╰──── 2026-10-24T11:04:40.4154193Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4154505Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4154508Z 2026-10-24T11:04:40.4154712Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4154863Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T11:04:40.4154960Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T11:04:40.4155040Z 257 │ }, [props.path, targetIndex]); 2026-10-24T11:04:40.4155116Z ·  ─────┬──── 2026-10-24T11:04:40.4155261Z · ╰── Unnecessary dependency `props.path` 2026-10-24T11:04:40.4155315Z 258 │ 2026-10-24T11:04:40.4155365Z ╰──── 2026-10-24T11:04:40.4155658Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4155974Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4155980Z 2026-10-24T11:04:40.4156170Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4156320Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T11:04:40.4156394Z 292 │ 2026-10-24T11:04:40.4157483Z ·  ─────────── 2026-10-24T11:04:40.4157550Z 310 │ {body} 2026-10-24T11:04:40.4157601Z ╰──── 2026-10-24T11:04:40.4157747Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T11:04:40.4157749Z 2026-10-24T11:04:40.4157928Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T11:04:40.4158049Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T11:04:40.4158281Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T11:04:40.4158464Z 194 │ const codes = new Array(count); 2026-10-24T11:04:40.4158627Z ·  ──────────────────────── 2026-10-24T11:04:40.4158732Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T11:04:40.4158784Z ╰──── 2026-10-24T11:04:40.4159209Z  help: It's not clear whether the argument is meant to be the length of the array or the only element. If the argument is the array's length, consider using `Array.from({ length: n })`. If the argument is the only element, use `[element]`. 2026-10-24T11:04:40.4159212Z 2026-10-24T11:04:40.4159471Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4159633Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T11:04:40.4159758Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T11:04:40.4159828Z 284 │ useEffect(() => { 2026-10-24T11:04:40.4159900Z ·  ────┬──── 2026-10-24T11:04:40.4160032Z · ╰── This is the containing effect 2026-10-24T11:04:40.4160117Z 285 │ setNow(new Date().toISOString()); 2026-10-24T11:04:40.4160187Z ·  ───┬── 2026-10-24T11:04:40.4160356Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4160493Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T11:04:40.4160544Z ╰──── 2026-10-24T11:04:40.4161150Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4161475Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4161477Z 2026-10-24T11:04:40.4161679Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4161846Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T11:04:40.4161979Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T11:04:40.4162069Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T11:04:40.4162171Z ·  ───────┬────── 2026-10-24T11:04:40.4162345Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T11:04:40.4162461Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T11:04:40.4162513Z ╰──── 2026-10-24T11:04:40.4162806Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4163116Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4163120Z 2026-10-24T11:04:40.4163287Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4163452Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T11:04:40.4163612Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T11:04:40.4163809Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T11:04:40.4163930Z ·  ─────┬──── 2026-10-24T11:04:40.4164102Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4164182Z 357 │ const id = setTimeout(() => { 2026-10-24T11:04:40.4164233Z ╰──── 2026-10-24T11:04:40.4164519Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4164815Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4164819Z 2026-10-24T11:04:40.4165018Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T11:04:40.4165165Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T11:04:40.4165304Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T11:04:40.4165422Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T11:04:40.4165495Z ·  ──┬── 2026-10-24T11:04:40.4165624Z · ╰── 'Image' is imported here 2026-10-24T11:04:40.4165677Z 18 │ 2026-10-24T11:04:40.4165730Z ╰──── 2026-10-24T11:04:40.4165830Z  help: Consider removing this import. 2026-10-24T11:04:40.4165833Z 2026-10-24T11:04:40.4166045Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:04:40.4166192Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T11:04:40.4166355Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T11:04:40.4166447Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4166540Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4167010Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4167084Z 227 │ mostRecentEventCount, 2026-10-24T11:04:40.4167141Z 228 │ ); 2026-10-24T11:04:40.4167267Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T11:04:40.4167410Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T11:04:40.4167684Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4167771Z 230 │ const assumedValue = props.value; 2026-10-24T11:04:40.4167822Z ╰──── 2026-10-24T11:04:40.4167992Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:04:40.4168381Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4168385Z 2026-10-24T11:04:40.4168660Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:04:40.4168804Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T11:04:40.4169035Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T11:04:40.4169170Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4169260Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4169725Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4169799Z 238 │ controlledEventCount, 2026-10-24T11:04:40.4169864Z 239 │ assumedValue, 2026-10-24T11:04:40.4169919Z 240 │ ); 2026-10-24T11:04:40.4170077Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T11:04:40.4170224Z ·  ───────────┬────────── 2026-10-24T11:04:40.4170440Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T11:04:40.4170529Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T11:04:40.4170581Z ╰──── 2026-10-24T11:04:40.4171005Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4171319Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4171322Z 2026-10-24T11:04:40.4171468Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4171617Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T11:04:40.4171744Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:04:40.4171858Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:04:40.4171978Z ·  ─────────────┬──────────── 2026-10-24T11:04:40.4172147Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.4172204Z 163 │ }); 2026-10-24T11:04:40.4172255Z ╰──── 2026-10-24T11:04:40.4172724Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4173093Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4173126Z 2026-10-24T11:04:40.4173272Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4173417Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T11:04:40.4173540Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:04:40.4173652Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:04:40.4173768Z ·  ─────────────┬──────────── 2026-10-24T11:04:40.4173979Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4174036Z 163 │ }); 2026-10-24T11:04:40.4174092Z ╰──── 2026-10-24T11:04:40.4174563Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4174856Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4174859Z 2026-10-24T11:04:40.4175003Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4175146Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T11:04:40.4175204Z 163 │ }); 2026-10-24T11:04:40.4175293Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T11:04:40.4175423Z ·  ─────────┬────────────┬─── 2026-10-24T11:04:40.4175616Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.4175735Z · ╰── This value is a ref 2026-10-24T11:04:40.4175807Z 165 │ return JSON.stringify( 2026-10-24T11:04:40.4175860Z ╰──── 2026-10-24T11:04:40.4176327Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4176617Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4176620Z 2026-10-24T11:04:40.4176766Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4176912Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T11:04:40.4176986Z 205 │ mostRecentEventCount, 2026-10-24T11:04:40.4177074Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4177179Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4177371Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4177427Z 207 │ ); 2026-10-24T11:04:40.4177480Z ╰──── 2026-10-24T11:04:40.4178283Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4179032Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4179035Z 2026-10-24T11:04:40.4179204Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4179346Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T11:04:40.4179417Z 211 │ mostRecentEventCount, 2026-10-24T11:04:40.4179502Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4179607Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4179795Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4179849Z 213 │ ); 2026-10-24T11:04:40.4179899Z ╰──── 2026-10-24T11:04:40.4180367Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4180664Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4180666Z 2026-10-24T11:04:40.4180855Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:04:40.4180998Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T11:04:40.4181120Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:04:40.4181231Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:04:40.4181347Z ·  ─────────┬──────── 2026-10-24T11:04:40.4181824Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4181878Z 163 │ }); 2026-10-24T11:04:40.4181969Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T11:04:40.4182039Z 165 │ return JSON.stringify( 2026-10-24T11:04:40.4182203Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T11:04:40.4182271Z 167 │ const record = 2026-10-24T11:04:40.4182350Z 168 │ token.type === "context" 2026-10-24T11:04:40.4182514Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T11:04:40.4182586Z 170 │ : undefined; 2026-10-24T11:04:40.4182697Z 171 │ const presentation = contextChipPresentation( 2026-10-24T11:04:40.4182809Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T11:04:40.4182871Z 173 │ record, 2026-10-24T11:04:40.4182929Z 174 │ ); 2026-10-24T11:04:40.4183011Z 175 │ const icon = contextChipIcon( 2026-10-24T11:04:40.4183078Z 176 │ presentation, 2026-10-24T11:04:40.4183221Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T11:04:40.4183280Z 178 │ ); 2026-10-24T11:04:40.4183340Z 179 │ return { 2026-10-24T11:04:40.4183410Z 180 │ type: token.type, 2026-10-24T11:04:40.4183485Z 181 │ source: token.source, 2026-10-24T11:04:40.4183559Z 182 │ start: token.start, 2026-10-24T11:04:40.4183706Z 183 │ end: token.end, 2026-10-24T11:04:40.4183890Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T11:04:40.4183951Z 185 │ label: 2026-10-24T11:04:40.4184028Z 186 │ token.type === "skill" 2026-10-24T11:04:40.4184133Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T11:04:40.4184218Z 188 │ : token.type === "context" 2026-10-24T11:04:40.4184455Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T11:04:40.4184539Z 190 │ : basename(token.value), 2026-10-24T11:04:40.4184683Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T11:04:40.4184776Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T11:04:40.4184869Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T11:04:40.4184931Z 194 │ }; 2026-10-24T11:04:40.4184987Z 195 │ }), 2026-10-24T11:04:40.4185043Z 196 │ ); 2026-10-24T11:04:40.4185176Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T11:04:40.4185330Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T11:04:40.4185538Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4185677Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T11:04:40.4185728Z ╰──── 2026-10-24T11:04:40.4185938Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:04:40.4186257Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4186263Z 2026-10-24T11:04:40.4186452Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:04:40.4186596Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T11:04:40.4186727Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T11:04:40.4186829Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T11:04:40.4186923Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4187391Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4187487Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T11:04:40.4187548Z 254 │ value, 2026-10-24T11:04:40.4187625Z 255 │ selection: nextSelection, 2026-10-24T11:04:40.4187684Z 256 │ }); 2026-10-24T11:04:40.4187768Z 257 │ return acknowledgedEventCount; 2026-10-24T11:04:40.4187823Z 258 │ }, 2026-10-24T11:04:40.4187875Z 259 │ [], 2026-10-24T11:04:40.4187943Z ·  ─┬ 2026-10-24T11:04:40.4188126Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4188179Z 260 │ ); 2026-10-24T11:04:40.4188286Z ╰──── 2026-10-24T11:04:40.4188632Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:04:40.4189041Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4189081Z 2026-10-24T11:04:40.4189342Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4189481Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T11:04:40.4189535Z 150 │ 2026-10-24T11:04:40.4189602Z 151 │ useEffect(() => { 2026-10-24T11:04:40.4189675Z ·  ────┬──── 2026-10-24T11:04:40.4189804Z · ╰── This is the containing effect 2026-10-24T11:04:40.4189888Z 152 │ if (!controlledSelectedPath) { 2026-10-24T11:04:40.4189949Z 153 │ return; 2026-10-24T11:04:40.4190003Z 154 │ } 2026-10-24T11:04:40.4190084Z 155 │ setExpandedPaths((current) => { 2026-10-24T11:04:40.4190169Z ·  ────────┬─────── 2026-10-24T11:04:40.4190344Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4190468Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T11:04:40.4190519Z ╰──── 2026-10-24T11:04:40.4191121Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4191443Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4191445Z 2026-10-24T11:04:40.4191899Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.4192029Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T11:04:40.4192201Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T11:04:40.4192388Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T11:04:40.4192503Z ·  ─────────────────── 2026-10-24T11:04:40.4192610Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T11:04:40.4192660Z ╰──── 2026-10-24T11:04:40.4192663Z 2026-10-24T11:04:40.4193184Z ⚠ t3code(no-inline-schema-compile): Hoist Schema.encodeEffect(...) to module scope: both the inline schema literal and the compiled function are rebuilt on every call. Move the compiled function to a module-level const. 2026-10-24T11:04:40.4193339Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T11:04:40.4193523Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T11:04:40.4193630Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T11:04:40.4193747Z ·  ─────────────────── 2026-10-24T11:04:40.4193865Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T11:04:40.4193918Z ╰──── 2026-10-24T11:04:40.4193920Z 2026-10-24T11:04:40.4194130Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T11:04:40.4194269Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T11:04:40.4194433Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T11:04:40.4194523Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4194616Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4195077Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4195150Z 229 │ mostRecentEventCount, 2026-10-24T11:04:40.4195206Z 230 │ ); 2026-10-24T11:04:40.4195329Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T11:04:40.4195470Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T11:04:40.4195677Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4195761Z 232 │ const assumedValue = props.value; 2026-10-24T11:04:40.4195813Z ╰──── 2026-10-24T11:04:40.4195982Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T11:04:40.4196295Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4196298Z 2026-10-24T11:04:40.4196513Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:04:40.4196649Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T11:04:40.4196798Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T11:04:40.4196888Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4196979Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4197438Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4197511Z 240 │ controlledEventCount, 2026-10-24T11:04:40.4197576Z 241 │ assumedValue, 2026-10-24T11:04:40.4197632Z 242 │ ); 2026-10-24T11:04:40.4197789Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T11:04:40.4197996Z ·  ───────────┬────────── 2026-10-24T11:04:40.4198282Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T11:04:40.4198421Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T11:04:40.4198504Z ╰──── 2026-10-24T11:04:40.4198933Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4199246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4199249Z 2026-10-24T11:04:40.4199392Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4199535Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T11:04:40.4199661Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:04:40.4199775Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:04:40.4199893Z ·  ─────────────┬──────────── 2026-10-24T11:04:40.4200064Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.4200121Z 165 │ }); 2026-10-24T11:04:40.4200172Z ╰──── 2026-10-24T11:04:40.4200639Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4200936Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4200942Z 2026-10-24T11:04:40.4201088Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4201225Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T11:04:40.4201348Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:04:40.4201458Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:04:40.4201577Z ·  ─────────────┬──────────── 2026-10-24T11:04:40.4201787Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4201843Z 165 │ }); 2026-10-24T11:04:40.4201898Z ╰──── 2026-10-24T11:04:40.4202368Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4202659Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4202662Z 2026-10-24T11:04:40.4202806Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4202941Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T11:04:40.4202995Z 165 │ }); 2026-10-24T11:04:40.4203086Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T11:04:40.4203291Z ·  ─────────┬────────────┬─── 2026-10-24T11:04:40.4203514Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.4203630Z · ╰── This value is a ref 2026-10-24T11:04:40.4203702Z 167 │ return JSON.stringify( 2026-10-24T11:04:40.4203754Z ╰──── 2026-10-24T11:04:40.4204222Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4204511Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4204515Z 2026-10-24T11:04:40.4204662Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4204800Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T11:04:40.4204871Z 207 │ mostRecentEventCount, 2026-10-24T11:04:40.4204958Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4205062Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4205253Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4205307Z 209 │ ); 2026-10-24T11:04:40.4205358Z ╰──── 2026-10-24T11:04:40.4205824Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4206122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4206128Z 2026-10-24T11:04:40.4206274Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4206409Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T11:04:40.4206477Z 213 │ mostRecentEventCount, 2026-10-24T11:04:40.4206564Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T11:04:40.4206668Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4206857Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4206911Z 215 │ ); 2026-10-24T11:04:40.4206963Z ╰──── 2026-10-24T11:04:40.4207432Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4207780Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4207783Z 2026-10-24T11:04:40.4207974Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:04:40.4208107Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T11:04:40.4208229Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T11:04:40.4208429Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T11:04:40.4208657Z ·  ─────────┬──────── 2026-10-24T11:04:40.4209169Z · ╰── Missing dependency `confirmedTokensRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4209228Z 165 │ }); 2026-10-24T11:04:40.4209318Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T11:04:40.4209388Z 167 │ return JSON.stringify( 2026-10-24T11:04:40.4209552Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T11:04:40.4209618Z 169 │ const record = 2026-10-24T11:04:40.4209700Z 170 │ token.type === "context" 2026-10-24T11:04:40.4209863Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T11:04:40.4209934Z 172 │ : undefined; 2026-10-24T11:04:40.4210044Z 173 │ const presentation = contextChipPresentation( 2026-10-24T11:04:40.4210155Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T11:04:40.4210218Z 175 │ record, 2026-10-24T11:04:40.4210275Z 176 │ ); 2026-10-24T11:04:40.4210360Z 177 │ const icon = contextChipIcon( 2026-10-24T11:04:40.4210427Z 178 │ presentation, 2026-10-24T11:04:40.4210570Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T11:04:40.4210626Z 180 │ ); 2026-10-24T11:04:40.4210688Z 181 │ return { 2026-10-24T11:04:40.4210759Z 182 │ type: token.type, 2026-10-24T11:04:40.4210834Z 183 │ source: token.source, 2026-10-24T11:04:40.4210904Z 184 │ start: token.start, 2026-10-24T11:04:40.4210975Z 185 │ end: token.end, 2026-10-24T11:04:40.4211126Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T11:04:40.4211187Z 187 │ label: 2026-10-24T11:04:40.4211263Z 188 │ token.type === "skill" 2026-10-24T11:04:40.4211368Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T11:04:40.4211450Z 190 │ : token.type === "context" 2026-10-24T11:04:40.4211689Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T11:04:40.4211770Z 192 │ : basename(token.value), 2026-10-24T11:04:40.4211913Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T11:04:40.4212006Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T11:04:40.4212163Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T11:04:40.4212251Z 196 │ }; 2026-10-24T11:04:40.4212310Z 197 │ }), 2026-10-24T11:04:40.4212366Z 198 │ ); 2026-10-24T11:04:40.4212497Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T11:04:40.4212650Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T11:04:40.4212858Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4213000Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T11:04:40.4213052Z ╰──── 2026-10-24T11:04:40.4213259Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:04:40.4213579Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4213585Z 2026-10-24T11:04:40.4213773Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:04:40.4213909Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T11:04:40.4214037Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T11:04:40.4214138Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T11:04:40.4214230Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4214693Z · ╰── Missing dependency `nativeEventSnapshotsRef`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4214792Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T11:04:40.4214856Z 256 │ value, 2026-10-24T11:04:40.4214934Z 257 │ selection: nextSelection, 2026-10-24T11:04:40.4214991Z 258 │ }); 2026-10-24T11:04:40.4215075Z 259 │ return acknowledgedEventCount; 2026-10-24T11:04:40.4215128Z 260 │ }, 2026-10-24T11:04:40.4215183Z 261 │ [], 2026-10-24T11:04:40.4215252Z ·  ─┬ 2026-10-24T11:04:40.4215434Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4215488Z 262 │ ); 2026-10-24T11:04:40.4215539Z ╰──── 2026-10-24T11:04:40.4215746Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:04:40.4216063Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4216069Z 2026-10-24T11:04:40.4216329Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4216490Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T11:04:40.4216554Z 259 │ .join("|"); 2026-10-24T11:04:40.4216619Z 260 │ useEffect(() => { 2026-10-24T11:04:40.4216691Z ·  ────┬──── 2026-10-24T11:04:40.4216823Z · ╰── This is the containing effect 2026-10-24T11:04:40.4216885Z 261 │ stop(); 2026-10-24T11:04:40.4216952Z ·  ──┬─ 2026-10-24T11:04:40.4217117Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4217261Z 262 │ }, [orderVersion]); 2026-10-24T11:04:40.4217355Z ╰──── 2026-10-24T11:04:40.4217957Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4218338Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4218342Z 2026-10-24T11:04:40.4218620Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:04:40.4218782Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T11:04:40.4218852Z 260 │ useEffect(() => { 2026-10-24T11:04:40.4218914Z 261 │ stop(); 2026-10-24T11:04:40.4218982Z ·  ──┬─ 2026-10-24T11:04:40.4219108Z · ╰── Missing dependency `stop` 2026-10-24T11:04:40.4219174Z 262 │ }, [orderVersion]); 2026-10-24T11:04:40.4219253Z ·  ──────┬───── 2026-10-24T11:04:40.4219400Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T11:04:40.4219462Z 263 │ useEffect( 2026-10-24T11:04:40.4219514Z ╰──── 2026-10-24T11:04:40.4219939Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4220260Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4220266Z 2026-10-24T11:04:40.4220410Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4220567Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T11:04:40.4220645Z 95 │ const latest = useRef(props); 2026-10-24T11:04:40.4220714Z 96 │ latest.current = props; 2026-10-24T11:04:40.4220820Z ·  ───┬──────┬─── 2026-10-24T11:04:40.4220999Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.4221113Z · ╰── This value is a ref 2026-10-24T11:04:40.4221181Z 97 │ const gesture = useMemo( 2026-10-24T11:04:40.4221239Z ╰──── 2026-10-24T11:04:40.4221712Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4222005Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4222007Z 2026-10-24T11:04:40.4222151Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4222310Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T11:04:40.4222376Z 103 │ .runOnJS(true) 2026-10-24T11:04:40.4222477Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T11:04:40.4222664Z ·  ───────────────┬────────────── 2026-10-24T11:04:40.4222896Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4223032Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4223084Z ╰──── 2026-10-24T11:04:40.4223552Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4223843Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4223845Z 2026-10-24T11:04:40.4223993Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4224155Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T11:04:40.4224253Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T11:04:40.4224386Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4224528Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T11:04:40.4224741Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4224867Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4224918Z ╰──── 2026-10-24T11:04:40.4225391Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4225683Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4225686Z 2026-10-24T11:04:40.4225829Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4225988Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T11:04:40.4226117Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4226240Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4226382Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T11:04:40.4226594Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4226724Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T11:04:40.4226776Z ╰──── 2026-10-24T11:04:40.4227241Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4227533Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4227536Z 2026-10-24T11:04:40.4227680Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4227949Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T11:04:40.4228103Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4228225Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T11:04:40.4228487Z ·  ───────────────────────┬────────────────────── 2026-10-24T11:04:40.4228721Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4228790Z 108 │ [props.disabled], 2026-10-24T11:04:40.4228840Z ╰──── 2026-10-24T11:04:40.4229312Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4229610Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4229613Z 2026-10-24T11:04:40.4229756Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4229914Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T11:04:40.4230030Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T11:04:40.4230136Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T11:04:40.4230242Z ·  ───┬──────┬─── 2026-10-24T11:04:40.4230423Z · │ ╰── Cannot update ref value during render 2026-10-24T11:04:40.4230544Z · ╰── This value is a ref 2026-10-24T11:04:40.4230600Z 250 │ 2026-10-24T11:04:40.4230651Z ╰──── 2026-10-24T11:04:40.4231117Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4231408Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4231410Z 2026-10-24T11:04:40.4231556Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4231715Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T11:04:40.4231909Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T11:04:40.4232055Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T11:04:40.4232185Z ·  ──────────────────┬────────────────── 2026-10-24T11:04:40.4232356Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.4232471Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T11:04:40.4232521Z ╰──── 2026-10-24T11:04:40.4232989Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4233286Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4233292Z 2026-10-24T11:04:40.4233463Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4233624Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T11:04:40.4233689Z 323 │ update(0); 2026-10-24T11:04:40.4233772Z 324 │ let last = performance.now(); 2026-10-24T11:04:40.4233870Z ·  ────────┬──────── 2026-10-24T11:04:40.4234014Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4234081Z 325 │ const tick = () => { 2026-10-24T11:04:40.4234135Z ╰──── 2026-10-24T11:04:40.4234445Z  help: `performance.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4234746Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4234749Z 2026-10-24T11:04:40.4234939Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T11:04:40.4235097Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T11:04:40.4235157Z  98 │ () => 2026-10-24T11:04:40.4235223Z  99 │ Gesture.Pan() 2026-10-24T11:04:40.4235298Z ·  ─┬─ 2026-10-24T11:04:40.4235428Z · ╰── `Pan` may be a component 2026-10-24T11:04:40.4235510Z 100 │ .enabled(!props.disabled) 2026-10-24T11:04:40.4235560Z ╰──── 2026-10-24T11:04:40.4235843Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T11:04:40.4236292Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T11:04:40.4236295Z 2026-10-24T11:04:40.4236482Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T11:04:40.4236643Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T11:04:40.4236711Z 103 │ .runOnJS(true) 2026-10-24T11:04:40.4236811Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T11:04:40.4236900Z ·  ───┬── 2026-10-24T11:04:40.4237418Z · ╰── Missing dependency `latest`. Refs, setState functions, and other "stable" values generally do not need to be added as dependencies, but this variable may change over time to point to different values 2026-10-24T11:04:40.4237591Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4237716Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T11:04:40.4237838Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T11:04:40.4237906Z 108 │ [props.disabled], 2026-10-24T11:04:40.4237988Z ·  ────────┬─────── 2026-10-24T11:04:40.4238179Z · ╰── This dependency list is missing values used by the callback 2026-10-24T11:04:40.4238282Z 109 │ ); 2026-10-24T11:04:40.4238362Z ╰──── 2026-10-24T11:04:40.4238702Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T11:04:40.4239224Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4239227Z 2026-10-24T11:04:40.4239590Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4239755Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T11:04:40.4239810Z 345 │ 2026-10-24T11:04:40.4239915Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T11:04:40.4240008Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4240180Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T11:04:40.4240262Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T11:04:40.4240314Z ╰──── 2026-10-24T11:04:40.4240419Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4240421Z 2026-10-24T11:04:40.4240565Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4240683Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T11:04:40.4240749Z 184 │ "options", 2026-10-24T11:04:40.4240843Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T11:04:40.4240952Z ·  ────────────────┬─────────────── 2026-10-24T11:04:40.4241146Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4241250Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T11:04:40.4241303Z ╰──── 2026-10-24T11:04:40.4241773Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4242067Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4242070Z 2026-10-24T11:04:40.4242215Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4242333Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T11:04:40.4242425Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T11:04:40.4242593Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T11:04:40.4242733Z ·  ────────────────┬──────────────── 2026-10-24T11:04:40.4242925Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T11:04:40.4243016Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T11:04:40.4243069Z ╰──── 2026-10-24T11:04:40.4243538Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4243829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4243831Z 2026-10-24T11:04:40.4244064Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T11:04:40.4244211Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T11:04:40.4244274Z 227 │ ): string { 2026-10-24T11:04:40.4244429Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T11:04:40.4244544Z ·  ────── 2026-10-24T11:04:40.4244675Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T11:04:40.4244728Z ╰──── 2026-10-24T11:04:40.4244900Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T11:04:40.4244903Z 2026-10-24T11:04:40.4245383Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4245543Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T11:04:40.4245654Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T11:04:40.4245872Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T11:04:40.4246008Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T11:04:40.4246118Z 137 │ │ if (predicate(lastState)) { 2026-10-24T11:04:40.4246215Z 138 │ │ return lastState; 2026-10-24T11:04:40.4246292Z 139 │ │ } 2026-10-24T11:04:40.4246396Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4246529Z 141 │ ╰─▶ } 2026-10-24T11:04:40.4246608Z 142 │ return yield* Effect.die( 2026-10-24T11:04:40.4246660Z ╰──── 2026-10-24T11:04:40.4246662Z 2026-10-24T11:04:40.4246833Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4246956Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T11:04:40.4247058Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T11:04:40.4247219Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T11:04:40.4247347Z ·  ─────┬──── 2026-10-24T11:04:40.4247526Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4247765Z 822 │ return AsyncResult.failure( 2026-10-24T11:04:40.4247865Z ╰──── 2026-10-24T11:04:40.4248152Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4248634Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4248638Z 2026-10-24T11:04:40.4248918Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4249108Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T11:04:40.4249223Z 708 │ const wokeAt = resolved 2026-10-24T11:04:40.4249380Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T11:04:40.4249502Z ·  ─────┬──── 2026-10-24T11:04:40.4249671Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4249735Z 710 │ : null; 2026-10-24T11:04:40.4249789Z ╰──── 2026-10-24T11:04:40.4250073Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4250373Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4250376Z 2026-10-24T11:04:40.4250640Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4250770Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T11:04:40.4250826Z 727 │ 2026-10-24T11:04:40.4250909Z 728 │ const layer = layerWithOptions(); 2026-10-24T11:04:40.4250980Z ·  ──┬── 2026-10-24T11:04:40.4251106Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.4251159Z ╰──── 2026-10-24T11:04:40.4251263Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4251268Z 2026-10-24T11:04:40.4251435Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4251600Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T11:04:40.4251788Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T11:04:40.4251966Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T11:04:40.4252109Z ·  ─────┬──── 2026-10-24T11:04:40.4252300Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4252437Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T11:04:40.4252491Z ╰──── 2026-10-24T11:04:40.4252782Z  help: `Date.now` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4253083Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4253086Z 2026-10-24T11:04:40.4253327Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4253625Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T11:04:40.4255522Z 717 │ const snoozePresets = useMemo( 2026-10-24T11:04:40.4255718Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T11:04:40.4255857Z ·  ─────┬──── 2026-10-24T11:04:40.4256046Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4256166Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T11:04:40.4256217Z ╰──── 2026-10-24T11:04:40.4256509Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4256816Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4256819Z 2026-10-24T11:04:40.4257005Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:04:40.4257164Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T11:04:40.4257342Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T11:04:40.4257460Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T11:04:40.4257554Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4257740Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T11:04:40.4257799Z 720 │ ); 2026-10-24T11:04:40.4257850Z ╰──── 2026-10-24T11:04:40.4258172Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.4258576Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4258579Z 2026-10-24T11:04:40.4258757Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:04:40.4258913Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T11:04:40.4258983Z 764 │ thread.pinnedAt, 2026-10-24T11:04:40.4259045Z 765 │ variant, 2026-10-24T11:04:40.4259121Z ·  ───┬─── 2026-10-24T11:04:40.4259262Z · ╰── Unnecessary dependency `variant` 2026-10-24T11:04:40.4259317Z 766 │ ], 2026-10-24T11:04:40.4259367Z ╰──── 2026-10-24T11:04:40.4259678Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.4259988Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4259990Z 2026-10-24T11:04:40.4260185Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4260432Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T11:04:40.4260599Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T11:04:40.4260734Z 1215 │ 2026-10-24T11:04:40.4260850Z ·  ────────────────────────── 2026-10-24T11:04:40.4260962Z 1216 │ 2026-10-24T11:04:40.4261014Z ╰──── 2026-10-24T11:04:40.4261161Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T11:04:40.4261163Z 2026-10-24T11:04:40.4261372Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T11:04:40.4261542Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T11:04:40.4261616Z 14 │ } from "@t3tools/contracts"; 2026-10-24T11:04:40.4261712Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T11:04:40.4261785Z ·  ── 2026-10-24T11:04:40.4261965Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T11:04:40.4262017Z ╰──── 2026-10-24T11:04:40.4262097Z  help: Remove empty braces 2026-10-24T11:04:40.4262100Z 2026-10-24T11:04:40.4262270Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T11:04:40.4262390Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T11:04:40.4262443Z 265 │ 2026-10-24T11:04:40.4262549Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T11:04:40.4262622Z ·  ── 2026-10-24T11:04:40.4262677Z 267 │ } 2026-10-24T11:04:40.4262727Z ╰──── 2026-10-24T11:04:40.4262964Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T11:04:40.4262969Z 2026-10-24T11:04:40.4263135Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4263282Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T11:04:40.4263415Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T11:04:40.4263569Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T11:04:40.4263684Z ·  ─────┬──── 2026-10-24T11:04:40.4263848Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4263909Z 373 │ return ( 2026-10-24T11:04:40.4263960Z ╰──── 2026-10-24T11:04:40.4264312Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4264642Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4264645Z 2026-10-24T11:04:40.4264811Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4264957Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T11:04:40.4265051Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T11:04:40.4265181Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T11:04:40.4265289Z ·  ─────┬──── 2026-10-24T11:04:40.4265450Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4265506Z 854 │ } 2026-10-24T11:04:40.4265557Z ╰──── 2026-10-24T11:04:40.4265833Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4266128Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4266130Z 2026-10-24T11:04:40.4266424Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4266548Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T11:04:40.4266600Z 217 │ 2026-10-24T11:04:40.4266754Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T11:04:40.4266846Z ·  ──────────┬────────── 2026-10-24T11:04:40.4267002Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T11:04:40.4267193Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T11:04:40.4267243Z ╰──── 2026-10-24T11:04:40.4267347Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4267349Z 2026-10-24T11:04:40.4267655Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4267780Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T11:04:40.4267832Z 220 │ 2026-10-24T11:04:40.4267971Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T11:04:40.4268076Z ·  ──────────────┬────────────── 2026-10-24T11:04:40.4268306Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T11:04:40.4268569Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T11:04:40.4268655Z ╰──── 2026-10-24T11:04:40.4268821Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4268825Z 2026-10-24T11:04:40.4269129Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4269286Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T11:04:40.4269522Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T11:04:40.4269643Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T11:04:40.4269726Z ·  ┬ 2026-10-24T11:04:40.4269857Z · ╰── '_' is declared here 2026-10-24T11:04:40.4269959Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T11:04:40.4270008Z ╰──── 2026-10-24T11:04:40.4270111Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4270113Z 2026-10-24T11:04:40.4270296Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4270431Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T11:04:40.4270485Z 133 │ ); 2026-10-24T11:04:40.4270589Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T11:04:40.4270692Z ·  ┬ 2026-10-24T11:04:40.4270836Z · ╰── '_' is declared here 2026-10-24T11:04:40.4270904Z 135 │ Effect.succeed( 2026-10-24T11:04:40.4270953Z ╰──── 2026-10-24T11:04:40.4271052Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4271055Z 2026-10-24T11:04:40.4271234Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4271367Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T11:04:40.4271421Z 177 │ }); 2026-10-24T11:04:40.4271519Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T11:04:40.4271606Z ·  ┬ 2026-10-24T11:04:40.4271746Z · ╰── '_' is declared here 2026-10-24T11:04:40.4271847Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T11:04:40.4271897Z ╰──── 2026-10-24T11:04:40.4271995Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4271998Z 2026-10-24T11:04:40.4272177Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4272308Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T11:04:40.4272362Z 202 │ ); 2026-10-24T11:04:40.4272459Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T11:04:40.4272548Z ·  ┬ 2026-10-24T11:04:40.4272683Z · ╰── '_' is declared here 2026-10-24T11:04:40.4272762Z 204 │ options.removeWorktreeFails 2026-10-24T11:04:40.4272818Z ╰──── 2026-10-24T11:04:40.4272919Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4272921Z 2026-10-24T11:04:40.4273100Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4273233Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T11:04:40.4273287Z 207 │ ); 2026-10-24T11:04:40.4273388Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T11:04:40.4273481Z ·  ┬ 2026-10-24T11:04:40.4273620Z · ╰── '_' is declared here 2026-10-24T11:04:40.4273705Z 209 │ options.deleteLocalBranchFails 2026-10-24T11:04:40.4273757Z ╰──── 2026-10-24T11:04:40.4273852Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4273855Z 2026-10-24T11:04:40.4274106Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4274276Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T11:04:40.4274329Z 212 │ ); 2026-10-24T11:04:40.4274442Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T11:04:40.4274541Z ·  ┬ 2026-10-24T11:04:40.4274683Z · ╰── '_' is declared here 2026-10-24T11:04:40.4274767Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T11:04:40.4274818Z ╰──── 2026-10-24T11:04:40.4274916Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4274918Z 2026-10-24T11:04:40.4275103Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4275238Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T11:04:40.4275291Z 253 │ ); 2026-10-24T11:04:40.4275382Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T11:04:40.4275468Z ·  ┬ 2026-10-24T11:04:40.4275602Z · ╰── '_' is declared here 2026-10-24T11:04:40.4275668Z 255 │ Effect.succeed({ 2026-10-24T11:04:40.4275719Z ╰──── 2026-10-24T11:04:40.4275816Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4275819Z 2026-10-24T11:04:40.4276000Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T11:04:40.4276131Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T11:04:40.4276190Z 263 │ ); 2026-10-24T11:04:40.4276343Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T11:04:40.4276433Z ·  ┬ 2026-10-24T11:04:40.4276567Z · ╰── '_' is declared here 2026-10-24T11:04:40.4276714Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T11:04:40.4276764Z ╰──── 2026-10-24T11:04:40.4276862Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4276864Z 2026-10-24T11:04:40.4277107Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:04:40.4277264Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T11:04:40.4277324Z 289 │ return ( 2026-10-24T11:04:40.4277466Z 290 │ 2026-10-24T11:04:40.4277586Z ·  ───────────── 2026-10-24T11:04:40.4277654Z 291 │ {props.children} 2026-10-24T11:04:40.4277705Z ╰──── 2026-10-24T11:04:40.4277930Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:04:40.4278070Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:04:40.4278072Z 2026-10-24T11:04:40.4278389Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:04:40.4278641Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T11:04:40.4278735Z 653 │ return ( 2026-10-24T11:04:40.4278951Z 654 │ 2026-10-24T11:04:40.4279097Z ·  ───────────── 2026-10-24T11:04:40.4279164Z 655 │ {props.children} 2026-10-24T11:04:40.4279215Z ╰──── 2026-10-24T11:04:40.4279436Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:04:40.4279573Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:04:40.4279575Z 2026-10-24T11:04:40.4279814Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:04:40.4279973Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T11:04:40.4280033Z 1461 │ return ( 2026-10-24T11:04:40.4280200Z 1462 │ 2026-10-24T11:04:40.4280334Z ·  ──────────────────── 2026-10-24T11:04:40.4280431Z 1463 │ { 2026-10-24T11:04:40.4281462Z ·  ────┬──── 2026-10-24T11:04:40.4281596Z · ╰── This is the containing effect 2026-10-24T11:04:40.4281709Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T11:04:40.4281769Z 641 │ return; 2026-10-24T11:04:40.4281824Z 642 │ } 2026-10-24T11:04:40.4281898Z 643 │ setPendingLaunchEntry({ 2026-10-24T11:04:40.4281986Z ·  ──────────┬────────── 2026-10-24T11:04:40.4282157Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4282228Z 644 │ key: launchTargetKey, 2026-10-24T11:04:40.4282279Z ╰──── 2026-10-24T11:04:40.4282892Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4283221Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4283224Z 2026-10-24T11:04:40.4283481Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4283647Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T11:04:40.4283700Z 648 │ 2026-10-24T11:04:40.4283766Z 649 │ useEffect(() => { 2026-10-24T11:04:40.4283903Z ·  ────┬──── 2026-10-24T11:04:40.4284076Z · ╰── This is the containing effect 2026-10-24T11:04:40.4284191Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T11:04:40.4284250Z 651 │ return; 2026-10-24T11:04:40.4284304Z 652 │ } 2026-10-24T11:04:40.4284384Z 653 │ setInitialAttachGridEntry({ 2026-10-24T11:04:40.4284476Z ·  ────────────┬──────────── 2026-10-24T11:04:40.4284649Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4284720Z 654 │ key: launchTargetKey, 2026-10-24T11:04:40.4284771Z ╰──── 2026-10-24T11:04:40.4285381Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4285708Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4285711Z 2026-10-24T11:04:40.4285965Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4286132Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T11:04:40.4286183Z 743 │ 2026-10-24T11:04:40.4286247Z 744 │ useEffect(() => { 2026-10-24T11:04:40.4286315Z ·  ────┬──── 2026-10-24T11:04:40.4286443Z · ╰── This is the containing effect 2026-10-24T11:04:40.4286549Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T11:04:40.4286619Z 746 │ setLastGridSize({ 2026-10-24T11:04:40.4286700Z ·  ───────┬─────── 2026-10-24T11:04:40.4286871Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4286953Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T11:04:40.4287003Z ╰──── 2026-10-24T11:04:40.4287776Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4288190Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4288265Z 2026-10-24T11:04:40.4288593Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4288806Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T11:04:40.4288864Z 537 │ }); 2026-10-24T11:04:40.4288987Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T11:04:40.4289098Z ·  ───────────┬────────── 2026-10-24T11:04:40.4289344Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T11:04:40.4289509Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T11:04:40.4289564Z ╰──── 2026-10-24T11:04:40.4289863Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4290176Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4290179Z 2026-10-24T11:04:40.4290378Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4290546Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T11:04:40.4290642Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T11:04:40.4290709Z 709 │ }, [terminalKey]); 2026-10-24T11:04:40.4290784Z ·  ─────┬───── 2026-10-24T11:04:40.4290932Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T11:04:40.4290985Z 710 │ 2026-10-24T11:04:40.4291036Z ╰──── 2026-10-24T11:04:40.4291328Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4291637Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4291640Z 2026-10-24T11:04:40.4291838Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4292006Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T11:04:40.4292061Z 799 │ }; 2026-10-24T11:04:40.4292247Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T11:04:40.4292428Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T11:04:40.4292662Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T11:04:40.4292873Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T11:04:40.4292927Z 801 │ 2026-10-24T11:04:40.4292977Z ╰──── 2026-10-24T11:04:40.4293268Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4293662Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4293705Z 2026-10-24T11:04:40.4293851Z ⚠ react(refs): Cannot access refs during render 2026-10-24T11:04:40.4294020Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T11:04:40.4294074Z 792 │ } 2026-10-24T11:04:40.4294178Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T11:04:40.4294290Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4294453Z · ╰── Cannot access ref value during render 2026-10-24T11:04:40.4294505Z 794 │ 2026-10-24T11:04:40.4294554Z ╰──── 2026-10-24T11:04:40.4295032Z  help: React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the `current` property) during render can cause your component not to update as expected 2026-10-24T11:04:40.4295326Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T11:04:40.4295329Z 2026-10-24T11:04:40.4295563Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T11:04:40.4295702Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T11:04:40.4295824Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T11:04:40.4296073Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T11:04:40.4296199Z 986 │ │ (approval) => approval.requestId, 2026-10-24T11:04:40.4296335Z 987 │ ╰─▶ ); 2026-10-24T11:04:40.4296473Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T11:04:40.4296524Z ╰──── 2026-10-24T11:04:40.4296600Z  help: Switch to `Set` 2026-10-24T11:04:40.4296603Z 2026-10-24T11:04:40.4296796Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4296953Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T11:04:40.4297019Z 71 │ { 2026-10-24T11:04:40.4300945Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T11:04:40.4301032Z 202 │ terminalKey: props.terminalKey, 2026-10-24T11:04:40.4301116Z 203 │ native: hasNativeSurface, 2026-10-24T11:04:40.4301255Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T11:04:40.4301341Z 205 │ bufferLen: props.buffer.length, 2026-10-24T11:04:40.4301418Z 206 │ isRunning: props.isRunning, 2026-10-24T11:04:40.4301475Z 207 │ }); 2026-10-24T11:04:40.4301635Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T11:04:40.4301723Z 209 │ const handleNativeInput = useCallback( 2026-10-24T11:04:40.4301839Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T11:04:40.4301936Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T11:04:40.4301998Z 212 │ return; 2026-10-24T11:04:40.4302052Z 213 │ } 2026-10-24T11:04:40.4302141Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T11:04:40.4302297Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T11:04:40.4302358Z 216 │ }); 2026-10-24T11:04:40.4302444Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T11:04:40.4302500Z 218 │ }, 2026-10-24T11:04:40.4302596Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T11:04:40.4302650Z 220 │ ); 2026-10-24T11:04:40.4302738Z 221 │ const handleNativeResize = useCallback( 2026-10-24T11:04:40.4302852Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T11:04:40.4302914Z 223 │ onResize({ 2026-10-24T11:04:40.4302996Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T11:04:40.4303078Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T11:04:40.4303135Z 226 │ }); 2026-10-24T11:04:40.4303187Z 227 │ }, 2026-10-24T11:04:40.4303249Z 228 │ [onResize], 2026-10-24T11:04:40.4303378Z 229 │ ); 2026-10-24T11:04:40.4303464Z 230 │ 2026-10-24T11:04:40.4303545Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T11:04:40.4303604Z 232 │ return ( 2026-10-24T11:04:40.4303680Z 233 │ 2026-10-24T11:04:40.4303759Z 234 │ ({ key: input.targetKey, location: candidate })); 2026-10-24T11:04:40.4305395Z 113 │ useEffect(() => { 2026-10-24T11:04:40.4305467Z ·  ────┬──── 2026-10-24T11:04:40.4305598Z · ╰── This is the containing effect 2026-10-24T11:04:40.4305761Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T11:04:40.4305827Z 115 │ return; 2026-10-24T11:04:40.4305885Z 116 │ } 2026-10-24T11:04:40.4306005Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T11:04:40.4306076Z ·  ────┬─── 2026-10-24T11:04:40.4306246Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4306366Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T11:04:40.4306417Z ╰──── 2026-10-24T11:04:40.4307019Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4307348Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4307353Z 2026-10-24T11:04:40.4307556Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T11:04:40.4307725Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T11:04:40.4307791Z 1782 │ assert.equal( 2026-10-24T11:04:40.4307935Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T11:04:40.4308039Z ·  ────────────────────────── 2026-10-24T11:04:40.4308119Z 1784 │ stored.attachments[0]?.id, 2026-10-24T11:04:40.4308171Z ╰──── 2026-10-24T11:04:40.4308438Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T11:04:40.4308442Z 2026-10-24T11:04:40.4308930Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4309130Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T11:04:40.4309192Z 434 │ : null; 2026-10-24T11:04:40.4309256Z 435 │ useEffect(() => { 2026-10-24T11:04:40.4309328Z ·  ────┬──── 2026-10-24T11:04:40.4309460Z · ╰── This is the containing effect 2026-10-24T11:04:40.4309519Z 436 │ if ( 2026-10-24T11:04:40.4309594Z 437 │ props.active === false || 2026-10-24T11:04:40.4309671Z 438 │ activeDraftKey !== null || 2026-10-24T11:04:40.4309754Z 439 │ editingPendingTask !== null || 2026-10-24T11:04:40.4309829Z 440 │ selectedProject === null 2026-10-24T11:04:40.4309883Z 441 │ ) { 2026-10-24T11:04:40.4309949Z 442 │ return; 2026-10-24T11:04:40.4310005Z 443 │ } 2026-10-24T11:04:40.4310073Z 444 │ setActiveDraftKey( 2026-10-24T11:04:40.4310153Z ·  ────────┬──────── 2026-10-24T11:04:40.4310323Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4310393Z 445 │ createNewTaskDraft({ 2026-10-24T11:04:40.4310443Z ╰──── 2026-10-24T11:04:40.4311044Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4311372Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4311377Z 2026-10-24T11:04:40.4311619Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T11:04:40.4311784Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T11:04:40.4311892Z 1243 │ 2026-10-24T11:04:40.4312085Z 1244 │ {props.children} 2026-10-24T11:04:40.4312196Z ·  ───────────── 2026-10-24T11:04:40.4312269Z 1245 │ 2026-10-24T11:04:40.4312320Z ╰──── 2026-10-24T11:04:40.4312618Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T11:04:40.4312787Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T11:04:40.4312790Z 2026-10-24T11:04:40.4313047Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4313201Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:523:5] 2026-10-24T11:04:40.4313257Z 521 │ }, []); 2026-10-24T11:04:40.4313322Z 522 │ useEffect(() => { 2026-10-24T11:04:40.4313392Z ·  ────┬──── 2026-10-24T11:04:40.4313520Z · ╰── This is the containing effect 2026-10-24T11:04:40.4313604Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T11:04:40.4313694Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4313874Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4313978Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T11:04:40.4314028Z ╰──── 2026-10-24T11:04:40.4314626Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4314948Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4314951Z 2026-10-24T11:04:40.4315211Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4315366Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:888:7] 2026-10-24T11:04:40.4315520Z 885 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T11:04:40.4315584Z 886 │ useEffect(() => { 2026-10-24T11:04:40.4315655Z ·  ────┬──── 2026-10-24T11:04:40.4315782Z · ╰── This is the containing effect 2026-10-24T11:04:40.4315940Z 887 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T11:04:40.4316051Z 888 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T11:04:40.4316148Z ·  ─────────────┬──────────── 2026-10-24T11:04:40.4316326Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4316386Z 889 │ } 2026-10-24T11:04:40.4316441Z ╰──── 2026-10-24T11:04:40.4317043Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4317363Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4317366Z 2026-10-24T11:04:40.4317622Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4317844Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1135:5] 2026-10-24T11:04:40.4317929Z 1133 │ 2026-10-24T11:04:40.4317996Z 1134 │ useEffect(() => { 2026-10-24T11:04:40.4318067Z ·  ────┬──── 2026-10-24T11:04:40.4318198Z · ╰── This is the containing effect 2026-10-24T11:04:40.4318327Z 1135 │ setAnchorMessageId(null); 2026-10-24T11:04:40.4318457Z ·  ─────────┬──────── 2026-10-24T11:04:40.4318738Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4318863Z 1136 │ setSubmittedMessageId(null); 2026-10-24T11:04:40.4318942Z ╰──── 2026-10-24T11:04:40.4319548Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4319871Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4319874Z 2026-10-24T11:04:40.4320076Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4320226Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:524:7] 2026-10-24T11:04:40.4320312Z 523 │ setKeyboardStateSuspect(false); 2026-10-24T11:04:40.4320411Z 524 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T11:04:40.4320552Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T11:04:40.4320767Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T11:04:40.4320929Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T11:04:40.4321056Z 525 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T11:04:40.4321106Z ╰──── 2026-10-24T11:04:40.4321401Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4321712Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4321714Z 2026-10-24T11:04:40.4321911Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4322072Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1083:7] 2026-10-24T11:04:40.4322159Z 1082 │ userInputInsetProgress.set(1); 2026-10-24T11:04:40.4322320Z 1083 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T11:04:40.4322414Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4322594Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T11:04:40.4322700Z 1084 │ const showContent = props.showContent ?? true; 2026-10-24T11:04:40.4322751Z ╰──── 2026-10-24T11:04:40.4323045Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4323433Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4323470Z 2026-10-24T11:04:40.4323670Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4323827Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1141:15] 2026-10-24T11:04:40.4323895Z 1140 │ freeze.set(false); 2026-10-24T11:04:40.4323977Z 1141 │ }, [freeze, selectedThreadKey]); 2026-10-24T11:04:40.4324071Z ·  ────────┬──────── 2026-10-24T11:04:40.4324235Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T11:04:40.4324287Z 1142 │ 2026-10-24T11:04:40.4324339Z ╰──── 2026-10-24T11:04:40.4324635Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4324947Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4324950Z 2026-10-24T11:04:40.4325105Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4325256Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:971:5] 2026-10-24T11:04:40.4325365Z 966 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T11:04:40.4325469Z 967 │ const floatingControlCoverage = useSharedValue( 2026-10-24T11:04:40.4325563Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4325725Z · ╰── `floatingControlCoverage` originates here 2026-10-24T11:04:40.4325857Z 968 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T11:04:40.4325914Z 969 │ ); 2026-10-24T11:04:40.4325978Z 970 │ useEffect(() => { 2026-10-24T11:04:40.4326081Z 971 │ floatingControlCoverage.value = withTiming( 2026-10-24T11:04:40.4326171Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4326333Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T11:04:40.4326457Z 972 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T11:04:40.4326508Z ╰──── 2026-10-24T11:04:40.4326774Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4327085Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4327092Z 2026-10-24T11:04:40.4327248Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4327397Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:989:7] 2026-10-24T11:04:40.4327686Z 979 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T11:04:40.4327808Z 980 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T11:04:40.4327919Z ·  ────────────────┬──────────────── 2026-10-24T11:04:40.4328106Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T11:04:40.4328380Z 981 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T11:04:40.4328467Z 982 │ ); 2026-10-24T11:04:40.4328682Z 983 │ useAnimatedReaction( 2026-10-24T11:04:40.4328781Z 984 │ () => 2026-10-24T11:04:40.4328874Z 985 │ contentInsetEndAdjustment.value + 2026-10-24T11:04:40.4328964Z 986 │ floatingControlCoverage.value + 2026-10-24T11:04:40.4329160Z 987 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T11:04:40.4329221Z 988 │ (value) => { 2026-10-24T11:04:40.4329334Z 989 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T11:04:40.4329443Z ·  ────────────────┬──────────────── 2026-10-24T11:04:40.4329636Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T11:04:40.4329691Z 990 │ }, 2026-10-24T11:04:40.4329742Z ╰──── 2026-10-24T11:04:40.4330013Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4330323Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4330326Z 2026-10-24T11:04:40.4330586Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4330736Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T11:04:40.4330898Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T11:04:40.4330963Z 29 │ useEffect(() => { 2026-10-24T11:04:40.4331035Z ·  ────┬──── 2026-10-24T11:04:40.4331163Z · ╰── This is the containing effect 2026-10-24T11:04:40.4331291Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T11:04:40.4331398Z ·  ───┬─── 2026-10-24T11:04:40.4331590Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4331660Z 31 │ }, [key, live, snapshot]); 2026-10-24T11:04:40.4331712Z ╰──── 2026-10-24T11:04:40.4332312Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4332815Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4332864Z 2026-10-24T11:04:40.4333337Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4333515Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T11:04:40.4333588Z 222 │ let idlePasses = 0; 2026-10-24T11:04:40.4333735Z 223 │ ╭─▶ for (;;) { 2026-10-24T11:04:40.4333875Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T11:04:40.4334021Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T11:04:40.4334123Z 226 │ │ if (!pending) { 2026-10-24T11:04:40.4334221Z 227 │ │ idlePasses++; 2026-10-24T11:04:40.4334327Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T11:04:40.4334413Z 229 │ │ return; 2026-10-24T11:04:40.4334492Z 230 │ │ } 2026-10-24T11:04:40.4334578Z 231 │ │ continue; 2026-10-24T11:04:40.4334655Z 232 │ │ } 2026-10-24T11:04:40.4334746Z 233 │ │ idlePasses = 0; 2026-10-24T11:04:40.4334862Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T11:04:40.4335075Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T11:04:40.4335153Z 236 │ │ ); 2026-10-24T11:04:40.4335266Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T11:04:40.4335372Z 238 │ │ pending.resolve(exit); 2026-10-24T11:04:40.4335450Z 239 │ │ }); 2026-10-24T11:04:40.4335581Z 240 │ ╰─▶ } 2026-10-24T11:04:40.4335638Z 241 │ }, 2026-10-24T11:04:40.4335690Z ╰──── 2026-10-24T11:04:40.4335692Z 2026-10-24T11:04:40.4335950Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4336087Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T11:04:40.4336142Z 2137 │ ); 2026-10-24T11:04:40.4336209Z 2138 │ useEffect(() => { 2026-10-24T11:04:40.4336284Z ·  ────┬──── 2026-10-24T11:04:40.4336422Z · ╰── This is the containing effect 2026-10-24T11:04:40.4336497Z 2139 │ setExpandedVideo(null); 2026-10-24T11:04:40.4336579Z ·  ────────┬─────── 2026-10-24T11:04:40.4336751Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4336824Z 2140 │ setExpandedFile(null); 2026-10-24T11:04:40.4336875Z ╰──── 2026-10-24T11:04:40.4337476Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4337873Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4337908Z 2026-10-24T11:04:40.4338137Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T11:04:40.4338318Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T11:04:40.4338542Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T11:04:40.4338692Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T11:04:40.4338787Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4338954Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T11:04:40.4339112Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T11:04:40.4339170Z ╰──── 2026-10-24T11:04:40.4339271Z  help: Consider removing this import. 2026-10-24T11:04:40.4339274Z 2026-10-24T11:04:40.4339482Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T11:04:40.4339613Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T11:04:40.4339671Z 91 │ import { 2026-10-24T11:04:40.4339735Z 92 │ createContext, 2026-10-24T11:04:40.4339809Z ·  ──────┬────── 2026-10-24T11:04:40.4339944Z · ╰── 'createContext' is imported here 2026-10-24T11:04:40.4340001Z 93 │ memo, 2026-10-24T11:04:40.4340053Z ╰──── 2026-10-24T11:04:40.4340151Z  help: Consider removing this import. 2026-10-24T11:04:40.4340154Z 2026-10-24T11:04:40.4340372Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T11:04:40.4340508Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T11:04:40.4340567Z 107 │ import { 2026-10-24T11:04:40.4340635Z 108 │ ActivityIndicator, 2026-10-24T11:04:40.4340716Z ·  ────────┬──────── 2026-10-24T11:04:40.4340861Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T11:04:40.4340921Z 109 │ Image, 2026-10-24T11:04:40.4340972Z ╰──── 2026-10-24T11:04:40.4341066Z  help: Consider removing this import. 2026-10-24T11:04:40.4341071Z 2026-10-24T11:04:40.4341270Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T11:04:40.4341403Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T11:04:40.4341470Z 114 │ Pressable, 2026-10-24T11:04:40.4341536Z 115 │ ScrollView, 2026-10-24T11:04:40.4341608Z ·  ─────┬──── 2026-10-24T11:04:40.4341738Z · ╰── 'ScrollView' is imported here 2026-10-24T11:04:40.4341801Z 116 │ StyleSheet, 2026-10-24T11:04:40.4341851Z ╰──── 2026-10-24T11:04:40.4341946Z  help: Consider removing this import. 2026-10-24T11:04:40.4341949Z 2026-10-24T11:04:40.4342146Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T11:04:40.4342279Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T11:04:40.4342339Z 116 │ StyleSheet, 2026-10-24T11:04:40.4342406Z 117 │ Text as NativeText, 2026-10-24T11:04:40.4342485Z ·  ─────┬──── 2026-10-24T11:04:40.4342699Z · ╰── 'NativeText' is imported here 2026-10-24T11:04:40.4342795Z 118 │ type ColorValue, 2026-10-24T11:04:40.4342847Z ╰──── 2026-10-24T11:04:40.4342941Z  help: Consider removing this import. 2026-10-24T11:04:40.4342943Z 2026-10-24T11:04:40.4343156Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T11:04:40.4343290Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T11:04:40.4343426Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T11:04:40.4343554Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T11:04:40.4343642Z ·  ─────────┬──────── 2026-10-24T11:04:40.4343802Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T11:04:40.4343950Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T11:04:40.4344002Z ╰──── 2026-10-24T11:04:40.4344098Z  help: Consider removing this import. 2026-10-24T11:04:40.4344101Z 2026-10-24T11:04:40.4344318Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T11:04:40.4344450Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T11:04:40.4344585Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T11:04:40.4344710Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T11:04:40.4344799Z ·  ─────────┬───────── 2026-10-24T11:04:40.4344958Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T11:04:40.4345021Z 144 │ import { 2026-10-24T11:04:40.4345071Z ╰──── 2026-10-24T11:04:40.4345164Z  help: Consider removing this import. 2026-10-24T11:04:40.4345167Z 2026-10-24T11:04:40.4345377Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T11:04:40.4345508Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T11:04:40.4345654Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T11:04:40.4345788Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T11:04:40.4345874Z ·  ────────┬─────── 2026-10-24T11:04:40.4346023Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T11:04:40.4346168Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T11:04:40.4346222Z ╰──── 2026-10-24T11:04:40.4346315Z  help: Consider removing this import. 2026-10-24T11:04:40.4346318Z 2026-10-24T11:04:40.4346539Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T11:04:40.4346672Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T11:04:40.4346754Z 160 │ attachmentVideoPreviewSource, 2026-10-24T11:04:40.4346824Z 161 │ mediaVideoPreviewUri, 2026-10-24T11:04:40.4346907Z ·  ──────────┬───────── 2026-10-24T11:04:40.4347059Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T11:04:40.4347131Z 162 │ mediaVideoThumbnailKey, 2026-10-24T11:04:40.4347180Z ╰──── 2026-10-24T11:04:40.4347347Z  help: Consider removing this import. 2026-10-24T11:04:40.4347386Z 2026-10-24T11:04:40.4347609Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T11:04:40.4347741Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T11:04:40.4347810Z 161 │ mediaVideoPreviewUri, 2026-10-24T11:04:40.4347879Z 162 │ mediaVideoThumbnailKey, 2026-10-24T11:04:40.4347967Z ·  ───────────┬────────── 2026-10-24T11:04:40.4348122Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T11:04:40.4348203Z 163 │ type MediaVideoPreviewSource, 2026-10-24T11:04:40.4348294Z ╰──── 2026-10-24T11:04:40.4348445Z  help: Consider removing this import. 2026-10-24T11:04:40.4348449Z 2026-10-24T11:04:40.4348758Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T11:04:40.4348895Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T11:04:40.4348963Z 162 │ mediaVideoThumbnailKey, 2026-10-24T11:04:40.4349042Z 163 │ type MediaVideoPreviewSource, 2026-10-24T11:04:40.4349135Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4349297Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T11:04:40.4349383Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T11:04:40.4349435Z ╰──── 2026-10-24T11:04:40.4349529Z  help: Consider removing this import. 2026-10-24T11:04:40.4349531Z 2026-10-24T11:04:40.4349730Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T11:04:40.4349866Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T11:04:40.4350046Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T11:04:40.4350186Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T11:04:40.4350275Z ·  ───────┬─────── 2026-10-24T11:04:40.4350423Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T11:04:40.4350481Z 172 │ import { 2026-10-24T11:04:40.4350532Z ╰──── 2026-10-24T11:04:40.4350626Z  help: Consider removing this import. 2026-10-24T11:04:40.4350628Z 2026-10-24T11:04:40.4350857Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T11:04:40.4350995Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T11:04:40.4351056Z 185 │ import { 2026-10-24T11:04:40.4351130Z 186 │ resolveMarkdownFontSizes, 2026-10-24T11:04:40.4351219Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4351378Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T11:04:40.4351464Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T11:04:40.4351517Z ╰──── 2026-10-24T11:04:40.4351609Z  help: Consider removing this import. 2026-10-24T11:04:40.4351611Z 2026-10-24T11:04:40.4351833Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T11:04:40.4351965Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T11:04:40.4352175Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T11:04:40.4352340Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T11:04:40.4352434Z ·  ───────────┬────────── 2026-10-24T11:04:40.4352594Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T11:04:40.4352652Z 192 │ import { 2026-10-24T11:04:40.4352701Z ╰──── 2026-10-24T11:04:40.4352795Z  help: Consider removing this import. 2026-10-24T11:04:40.4352797Z 2026-10-24T11:04:40.4353057Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T11:04:40.4353188Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T11:04:40.4353265Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T11:04:40.4353364Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T11:04:40.4353477Z ·  ──────────────────┬────────────────── 2026-10-24T11:04:40.4353673Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T11:04:40.4353745Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T11:04:40.4353795Z ╰──── 2026-10-24T11:04:40.4353888Z  help: Consider removing this import. 2026-10-24T11:04:40.4353891Z 2026-10-24T11:04:40.4354114Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T11:04:40.4354244Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T11:04:40.4354336Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T11:04:40.4354409Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T11:04:40.4354502Z ·  ───────────┬─────────── 2026-10-24T11:04:40.4354663Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T11:04:40.4354747Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T11:04:40.4354798Z ╰──── 2026-10-24T11:04:40.4354891Z  help: Consider removing this import. 2026-10-24T11:04:40.4354894Z 2026-10-24T11:04:40.4355120Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T11:04:40.4355250Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T11:04:40.4355353Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T11:04:40.4355498Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T11:04:40.4355598Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4355835Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T11:04:40.4355934Z 235 │ import { 2026-10-24T11:04:40.4355984Z ╰──── 2026-10-24T11:04:40.4356078Z  help: Consider removing this import. 2026-10-24T11:04:40.4356080Z 2026-10-24T11:04:40.4356290Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T11:04:40.4356421Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T11:04:40.4356485Z 237 │ useAssetUrl, 2026-10-24T11:04:40.4356551Z 238 │ useAssetUrlState, 2026-10-24T11:04:40.4356629Z ·  ────────┬─────── 2026-10-24T11:04:40.4356771Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T11:04:40.4356839Z 239 │ useRefreshAssetUrl, 2026-10-24T11:04:40.4356895Z ╰──── 2026-10-24T11:04:40.4356992Z  help: Consider removing this import. 2026-10-24T11:04:40.4356994Z 2026-10-24T11:04:40.4357195Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4357333Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T11:04:40.4357405Z 2140 │ setExpandedFile(null); 2026-10-24T11:04:40.4357562Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T11:04:40.4357786Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T11:04:40.4358086Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T11:04:40.4358360Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T11:04:40.4358631Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T11:04:40.4358777Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T11:04:40.4358830Z ╰──── 2026-10-24T11:04:40.4359128Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4359445Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4359448Z 2026-10-24T11:04:40.4359655Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4359792Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T11:04:40.4359889Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T11:04:40.4360003Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T11:04:40.4360084Z ·  ──────┬────── 2026-10-24T11:04:40.4360232Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T11:04:40.4360286Z 2610 │ 2026-10-24T11:04:40.4360337Z ╰──── 2026-10-24T11:04:40.4360629Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4361014Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4361050Z 2026-10-24T11:04:40.4361251Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4361385Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T11:04:40.4361441Z 2624 │ } 2026-10-24T11:04:40.4361571Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T11:04:40.4361650Z ·  ──────┬───── 2026-10-24T11:04:40.4361798Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T11:04:40.4361852Z 2626 │ 2026-10-24T11:04:40.4361902Z ╰──── 2026-10-24T11:04:40.4362198Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4362512Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4362515Z 2026-10-24T11:04:40.4362713Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4362847Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T11:04:40.4362902Z 2781 │ } 2026-10-24T11:04:40.4363085Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T11:04:40.4363286Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T11:04:40.4363547Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T11:04:40.4363755Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T11:04:40.4363910Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T11:04:40.4363964Z 2783 │ 2026-10-24T11:04:40.4364017Z ╰──── 2026-10-24T11:04:40.4364308Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4364618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4364620Z 2026-10-24T11:04:40.4364806Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T11:04:40.4364942Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T11:04:40.4365001Z 612 │ }; 2026-10-24T11:04:40.4365116Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T11:04:40.4365306Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T11:04:40.4365549Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T11:04:40.4365746Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T11:04:40.4366113Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T11:04:40.4366239Z 614 │ ); 2026-10-24T11:04:40.4366290Z ╰──── 2026-10-24T11:04:40.4366604Z  help: Extra dependencies can cause a value to update more often than it should, resulting in performance problems such as excessive renders or effects firing too often 2026-10-24T11:04:40.4366916Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4366918Z 2026-10-24T11:04:40.4367074Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4367232Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T11:04:40.4367286Z  86 │ 2026-10-24T11:04:40.4367380Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T11:04:40.4367464Z ·  ──────┬───── 2026-10-24T11:04:40.4367906Z · ╰── `cardCoverage` originates here 2026-10-24T11:04:40.4367987Z  88 │ const barHeightRef = useRef(0); 2026-10-24T11:04:40.4368066Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T11:04:40.4368149Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T11:04:40.4368281Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T11:04:40.4368386Z  92 │ if (!cardCoverage) { 2026-10-24T11:04:40.4368481Z  93 │ return; 2026-10-24T11:04:40.4368564Z  94 │ } 2026-10-24T11:04:40.4368745Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T11:04:40.4368833Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T11:04:40.4368893Z  97 │ return; 2026-10-24T11:04:40.4368946Z  98 │ } 2026-10-24T11:04:40.4369033Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:04:40.4369118Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:04:40.4369196Z ·  ──────┬───── 2026-10-24T11:04:40.4369337Z · ╰── `cardCoverage` cannot be modified 2026-10-24T11:04:40.4369397Z 101 │ return; 2026-10-24T11:04:40.4369448Z ╰──── 2026-10-24T11:04:40.4369746Z  help: Do not mutate component props or hook arguments. If the value should change, update it where it is owned and pass an update callback, or use local state 2026-10-24T11:04:40.4370053Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4370056Z 2026-10-24T11:04:40.4370299Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4370493Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T11:04:40.4370573Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T11:04:40.4370656Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T11:04:40.4370733Z ·  ─────┬──── 2026-10-24T11:04:40.4370866Z · ╰── `cardHeight` originates here 2026-10-24T11:04:40.4370958Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T11:04:40.4371024Z  92 │ if (!cardCoverage) { 2026-10-24T11:04:40.4371082Z  93 │ return; 2026-10-24T11:04:40.4371135Z  94 │ } 2026-10-24T11:04:40.4371284Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T11:04:40.4371369Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T11:04:40.4371433Z  97 │ return; 2026-10-24T11:04:40.4371489Z  98 │ } 2026-10-24T11:04:40.4371567Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:04:40.4371648Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:04:40.4371707Z 101 │ return; 2026-10-24T11:04:40.4371761Z 102 │ } 2026-10-24T11:04:40.4371860Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T11:04:40.4371957Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T11:04:40.4372041Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T11:04:40.4372097Z 106 │ }); 2026-10-24T11:04:40.4372162Z 107 │ }, [cardCoverage]); 2026-10-24T11:04:40.4372246Z 108 │ const handleBarLayout = useCallback( 2026-10-24T11:04:40.4372326Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4372451Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:04:40.4372524Z 111 │ notifyCoverage(); 2026-10-24T11:04:40.4372585Z 112 │ }, 2026-10-24T11:04:40.4372650Z 113 │ [notifyCoverage], 2026-10-24T11:04:40.4372705Z 114 │ ); 2026-10-24T11:04:40.4372788Z 115 │ const handleCardLayout = useCallback( 2026-10-24T11:04:40.4372868Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4372992Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:04:40.4373106Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T11:04:40.4373181Z ·  ─────┬──── 2026-10-24T11:04:40.4373320Z · ╰── `cardHeight` cannot be modified 2026-10-24T11:04:40.4373386Z 119 │ notifyCoverage(); 2026-10-24T11:04:40.4373438Z ╰──── 2026-10-24T11:04:40.4373710Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4374022Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4374025Z 2026-10-24T11:04:40.4374226Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:04:40.4374382Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T11:04:40.4374467Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T11:04:40.4374558Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T11:04:40.4374662Z ·  ───┬─── 2026-10-24T11:04:40.4374977Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T11:04:40.4375083Z  92 │ if (!cardCoverage) { 2026-10-24T11:04:40.4375143Z  93 │ return; 2026-10-24T11:04:40.4375195Z  94 │ } 2026-10-24T11:04:40.4375345Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T11:04:40.4375430Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T11:04:40.4375489Z  97 │ return; 2026-10-24T11:04:40.4375543Z  98 │ } 2026-10-24T11:04:40.4375622Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:04:40.4375702Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:04:40.4375780Z ·  ──────┬───── 2026-10-24T11:04:40.4375915Z · ╰── This modifies `cardCoverage` 2026-10-24T11:04:40.4375974Z 101 │ return; 2026-10-24T11:04:40.4376023Z ╰──── 2026-10-24T11:04:40.4376372Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T11:04:40.4376681Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4376684Z 2026-10-24T11:04:40.4376884Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:04:40.4377038Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T11:04:40.4377117Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T11:04:40.4377198Z 100 │ cardCoverage.value = coverage; 2026-10-24T11:04:40.4377277Z ·  ──────┬───── 2026-10-24T11:04:40.4377412Z · ╰── This modifies `cardCoverage` 2026-10-24T11:04:40.4377474Z 101 │ return; 2026-10-24T11:04:40.4377529Z 102 │ } 2026-10-24T11:04:40.4377631Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T11:04:40.4377727Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T11:04:40.4377812Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T11:04:40.4377867Z 106 │ }); 2026-10-24T11:04:40.4377933Z 107 │ }, [cardCoverage]); 2026-10-24T11:04:40.4378017Z 108 │ const handleBarLayout = useCallback( 2026-10-24T11:04:40.4378098Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4378204Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4378590Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T11:04:40.4378721Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:04:40.4378778Z ╰──── 2026-10-24T11:04:40.4379119Z  help: This argument is a function which may reassign or mutate `cardCoverage` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T11:04:40.4379426Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4379429Z 2026-10-24T11:04:40.4379628Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:04:40.4379783Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T11:04:40.4379870Z 115 │ const handleCardLayout = useCallback( 2026-10-24T11:04:40.4380023Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4380160Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4380378Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T11:04:40.4380507Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T11:04:40.4380621Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T11:04:40.4380698Z ·  ─────┬──── 2026-10-24T11:04:40.4380826Z · ╰── This modifies `cardHeight` 2026-10-24T11:04:40.4380895Z 119 │ notifyCoverage(); 2026-10-24T11:04:40.4380947Z ╰──── 2026-10-24T11:04:40.4381291Z  help: This argument is a function which may reassign or mutate `cardHeight` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T11:04:40.4381598Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4381604Z 2026-10-24T11:04:40.4381792Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T11:04:40.4381948Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T11:04:40.4382119Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T11:04:40.4382197Z 602 │ const gesture = Gesture.Pan() 2026-10-24T11:04:40.4382284Z ·  ─┬─ 2026-10-24T11:04:40.4382427Z · ╰── `Pan` may be a component 2026-10-24T11:04:40.4382510Z 603 │ .enabled(!props.disabled) 2026-10-24T11:04:40.4382565Z ╰──── 2026-10-24T11:04:40.4382841Z  help: Render `Pan` with JSX if it is a component; otherwise rename it to start with a lowercase letter or allowlist it in the compiler configuration 2026-10-24T11:04:40.4383289Z  note: `Pan` is treated as a component because it begins with an uppercase letter; React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/static-components 2026-10-24T11:04:40.4383292Z 2026-10-24T11:04:40.4383551Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4383726Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T11:04:40.4383779Z 58 │ 2026-10-24T11:04:40.4383843Z 59 │ useEffect(() => { 2026-10-24T11:04:40.4383919Z ·  ────┬──── 2026-10-24T11:04:40.4384052Z · ╰── This is the containing effect 2026-10-24T11:04:40.4384132Z 60 │ setMountedModes((current) => { 2026-10-24T11:04:40.4384212Z ·  ───────┬─────── 2026-10-24T11:04:40.4384381Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4384463Z 61 │ if (current.has(props.mode)) { 2026-10-24T11:04:40.4384513Z ╰──── 2026-10-24T11:04:40.4385120Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4385523Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4385557Z 2026-10-24T11:04:40.4385814Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4385965Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T11:04:40.4386017Z 398 │ 2026-10-24T11:04:40.4386083Z 399 │ useEffect(() => { 2026-10-24T11:04:40.4386157Z ·  ────┬──── 2026-10-24T11:04:40.4386287Z · ╰── This is the containing effect 2026-10-24T11:04:40.4386378Z 400 │ setInspectorSelection((current) => { 2026-10-24T11:04:40.4386465Z ·  ──────────┬────────── 2026-10-24T11:04:40.4386643Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4386749Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T11:04:40.4386799Z ╰──── 2026-10-24T11:04:40.4387398Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4387720Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4387722Z 2026-10-24T11:04:40.4387946Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T11:04:40.4388102Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T11:04:40.4388306Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T11:04:40.4388582Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T11:04:40.4388717Z 529 │ │ 2026-10-24T11:04:40.4389341Z 534 │ ╰─▶ ); 2026-10-24T11:04:40.4389424Z 535 │ const FilesInspector = () => 2026-10-24T11:04:40.4389474Z ╰──── 2026-10-24T11:04:40.4389694Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T11:04:40.4389696Z 2026-10-24T11:04:40.4389910Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T11:04:40.4390062Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T11:04:40.4390118Z 534 │ ); 2026-10-24T11:04:40.4390284Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T11:04:40.4390435Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T11:04:40.4390615Z 537 │ │ 2026-10-24T11:04:40.4391613Z 545 │ ╰─▶ ) : null; 2026-10-24T11:04:40.4391769Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T11:04:40.4391824Z ╰──── 2026-10-24T11:04:40.4392043Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T11:04:40.4392045Z 2026-10-24T11:04:40.4392304Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4392457Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T11:04:40.4392508Z 55 │ 2026-10-24T11:04:40.4392573Z 56 │ useEffect(() => { 2026-10-24T11:04:40.4392644Z ·  ────┬──── 2026-10-24T11:04:40.4392774Z · ╰── This is the containing effect 2026-10-24T11:04:40.4392842Z 57 │ setDecodedSize(null); 2026-10-24T11:04:40.4392921Z ·  ───────┬────── 2026-10-24T11:04:40.4393096Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4393170Z 58 │ }, [props.sourceKey]); 2026-10-24T11:04:40.4393220Z ╰──── 2026-10-24T11:04:40.4393821Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4394145Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4394147Z 2026-10-24T11:04:40.4394481Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4394665Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T11:04:40.4394716Z 59 │ 2026-10-24T11:04:40.4394780Z 60 │ useEffect(() => { 2026-10-24T11:04:40.4394848Z ·  ────┬──── 2026-10-24T11:04:40.4394975Z · ╰── This is the containing effect 2026-10-24T11:04:40.4395042Z 61 │ setFailedUri(null); 2026-10-24T11:04:40.4395118Z ·  ──────┬───── 2026-10-24T11:04:40.4395285Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4395349Z 62 │ }, [props.uri]); 2026-10-24T11:04:40.4395400Z ╰──── 2026-10-24T11:04:40.4396004Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4396328Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4396331Z 2026-10-24T11:04:40.4396545Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T11:04:40.4396694Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T11:04:40.4396818Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T11:04:40.4396996Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T11:04:40.4397089Z ·  ────────┬──────── 2026-10-24T11:04:40.4397243Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T11:04:40.4397296Z 8 │ 2026-10-24T11:04:40.4397349Z ╰──── 2026-10-24T11:04:40.4397447Z  help: Consider removing this import. 2026-10-24T11:04:40.4397450Z 2026-10-24T11:04:40.4397648Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4397799Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T11:04:40.4397867Z 57 │ setDecodedSize(null); 2026-10-24T11:04:40.4397935Z 58 │ }, [props.sourceKey]); 2026-10-24T11:04:40.4398015Z ·  ───────┬─────── 2026-10-24T11:04:40.4398169Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T11:04:40.4398228Z 59 │ 2026-10-24T11:04:40.4398346Z ╰──── 2026-10-24T11:04:40.4398824Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4399139Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4399142Z 2026-10-24T11:04:40.4399342Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4399491Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T11:04:40.4399558Z 61 │ setFailedUri(null); 2026-10-24T11:04:40.4399621Z 62 │ }, [props.uri]); 2026-10-24T11:04:40.4399695Z ·  ────┬──── 2026-10-24T11:04:40.4399905Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T11:04:40.4399993Z 63 │ 2026-10-24T11:04:40.4400043Z ╰──── 2026-10-24T11:04:40.4400335Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4400648Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4400651Z 2026-10-24T11:04:40.4400806Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4400970Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T11:04:40.4401025Z 107 │ ); 2026-10-24T11:04:40.4401184Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T11:04:40.4401278Z ·  ─────────┬──────── 2026-10-24T11:04:40.4401427Z · ╰── `separationProgress` originates here 2026-10-24T11:04:40.4401481Z 109 │ 2026-10-24T11:04:40.4401548Z 110 │ useEffect(() => { 2026-10-24T11:04:40.4401724Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T11:04:40.4401807Z ·  ─────────┬──────── 2026-10-24T11:04:40.4401958Z · ╰── `separationProgress` cannot be modified 2026-10-24T11:04:40.4402067Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T11:04:40.4402120Z ╰──── 2026-10-24T11:04:40.4402391Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4402700Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4402703Z 2026-10-24T11:04:40.4402857Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4403021Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T11:04:40.4403133Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T11:04:40.4403249Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T11:04:40.4403330Z ·  ──────┬───── 2026-10-24T11:04:40.4403465Z · ╰── `capsuleWidth` originates here 2026-10-24T11:04:40.4403583Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T11:04:40.4403701Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4403807Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T11:04:40.4403906Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T11:04:40.4403969Z 134 │ return; 2026-10-24T11:04:40.4404022Z 135 │ } 2026-10-24T11:04:40.4404127Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T11:04:40.4404215Z 137 │ measuredWidthRef.current = width; 2026-10-24T11:04:40.4404357Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T11:04:40.4404433Z ·  ──────┬───── 2026-10-24T11:04:40.4404572Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T11:04:40.4404628Z 139 │ }; 2026-10-24T11:04:40.4404758Z ╰──── 2026-10-24T11:04:40.4405055Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4405360Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4405362Z 2026-10-24T11:04:40.4405519Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4405681Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T11:04:40.4405790Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T11:04:40.4405904Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T11:04:40.4405984Z ·  ──────┬───── 2026-10-24T11:04:40.4406124Z · ╰── `capsuleWidth` originates here 2026-10-24T11:04:40.4406234Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T11:04:40.4406349Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4406453Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T11:04:40.4406549Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T11:04:40.4406608Z 134 │ return; 2026-10-24T11:04:40.4406665Z 135 │ } 2026-10-24T11:04:40.4406772Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T11:04:40.4406858Z 137 │ measuredWidthRef.current = width; 2026-10-24T11:04:40.4406998Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T11:04:40.4407052Z 139 │ }; 2026-10-24T11:04:40.4407148Z 140 │ const hasStatus = props.status !== null; 2026-10-24T11:04:40.4407283Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T11:04:40.4407347Z 142 │ useEffect(() => { 2026-10-24T11:04:40.4407414Z 143 │ if (!hasStatus) { 2026-10-24T11:04:40.4407500Z 144 │ measuredWidthRef.current = null; 2026-10-24T11:04:40.4407635Z 145 │ capsuleWidth.value = null; 2026-10-24T11:04:40.4407711Z ·  ──────┬───── 2026-10-24T11:04:40.4407852Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T11:04:40.4407907Z 146 │ } 2026-10-24T11:04:40.4407959Z ╰──── 2026-10-24T11:04:40.4408222Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4408753Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4408759Z 2026-10-24T11:04:40.4408961Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:04:40.4409125Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T11:04:40.4409260Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T11:04:40.4409325Z 142 │ useEffect(() => { 2026-10-24T11:04:40.4409403Z ·  ───┬─── 2026-10-24T11:04:40.4409623Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T11:04:40.4409689Z 143 │ if (!hasStatus) { 2026-10-24T11:04:40.4409775Z 144 │ measuredWidthRef.current = null; 2026-10-24T11:04:40.4410034Z 145 │ capsuleWidth.value = null; 2026-10-24T11:04:40.4410153Z ·  ──────┬───── 2026-10-24T11:04:40.4410286Z · ╰── This modifies `capsuleWidth` 2026-10-24T11:04:40.4410341Z 146 │ } 2026-10-24T11:04:40.4410394Z ╰──── 2026-10-24T11:04:40.4410734Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T11:04:40.4411041Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4411044Z 2026-10-24T11:04:40.4411242Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T11:04:40.4411409Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T11:04:40.4411523Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T11:04:40.4411639Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T11:04:40.4411762Z ·  ───────────────┬─────────────── 2026-10-24T11:04:40.4412003Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T11:04:40.4412110Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T11:04:40.4412207Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T11:04:40.4412266Z 134 │ return; 2026-10-24T11:04:40.4412322Z 135 │ } 2026-10-24T11:04:40.4412427Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T11:04:40.4412520Z 137 │ measuredWidthRef.current = width; 2026-10-24T11:04:40.4412665Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T11:04:40.4412743Z ·  ──────┬───── 2026-10-24T11:04:40.4412877Z · ╰── This modifies `capsuleWidth` 2026-10-24T11:04:40.4412930Z 139 │ }; 2026-10-24T11:04:40.4412980Z ╰──── 2026-10-24T11:04:40.4413319Z  help: This argument is a function which may reassign or mutate `capsuleWidth` after render, which can cause inconsistent behavior on subsequent renders. Consider using state instead 2026-10-24T11:04:40.4413624Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4413627Z 2026-10-24T11:04:40.4413801Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T11:04:40.4413940Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T11:04:40.4414075Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T11:04:40.4414223Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T11:04:40.4414350Z ·  ─────┬──── 2026-10-24T11:04:40.4414522Z · ╰── Cannot call impure function 2026-10-24T11:04:40.4414619Z 141 │ onSelect={(selected) => { 2026-10-24T11:04:40.4414670Z ╰──── 2026-10-24T11:04:40.4415019Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T11:04:40.4415347Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T11:04:40.4415350Z 2026-10-24T11:04:40.4415609Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4415771Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T11:04:40.4415827Z 211 │ }; 2026-10-24T11:04:40.4415893Z 212 │ useEffect(() => { 2026-10-24T11:04:40.4415965Z ·  ────┬──── 2026-10-24T11:04:40.4416093Z · ╰── This is the containing effect 2026-10-24T11:04:40.4416272Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T11:04:40.4416339Z 214 │ if (inserted) { 2026-10-24T11:04:40.4416415Z 215 │ setSelection((current) => 2026-10-24T11:04:40.4416491Z ·  ──────┬───── 2026-10-24T11:04:40.4416661Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4416833Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T11:04:40.4416884Z ╰──── 2026-10-24T11:04:40.4417487Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4417815Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4417820Z 2026-10-24T11:04:40.4418078Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4418277Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T11:04:40.4418396Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T11:04:40.4418495Z 285 │ useEffect(() => { 2026-10-24T11:04:40.4418584Z ·  ────┬──── 2026-10-24T11:04:40.4418715Z · ╰── This is the containing effect 2026-10-24T11:04:40.4418864Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T11:04:40.4419016Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T11:04:40.4419090Z 288 │ const now = Date.now(); 2026-10-24T11:04:40.4419202Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T11:04:40.4420752Z 290 │ if ( 2026-10-24T11:04:40.4420836Z 291 │ lastRequest?.key === key && 2026-10-24T11:04:40.4420978Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T11:04:40.4421033Z 293 │ ) 2026-10-24T11:04:40.4421092Z 294 │ return; 2026-10-24T11:04:40.4421268Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T11:04:40.4421354Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T11:04:40.4421451Z ·  ────────────┬─────────── 2026-10-24T11:04:40.4421711Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4421814Z 297 │ return; 2026-10-24T11:04:40.4421865Z ╰──── 2026-10-24T11:04:40.4422468Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4422792Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4422795Z 2026-10-24T11:04:40.4422998Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T11:04:40.4423162Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T11:04:40.4423223Z 325 │ }, [ 2026-10-24T11:04:40.4423290Z 326 │ draftMessage, 2026-10-24T11:04:40.4423366Z ·  ──────┬───── 2026-10-24T11:04:40.4423511Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T11:04:40.4423576Z 327 │ environmentId, 2026-10-24T11:04:40.4423627Z ╰──── 2026-10-24T11:04:40.4423920Z  help: Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4424232Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4424234Z 2026-10-24T11:04:40.4424390Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4424542Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T11:04:40.4424690Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T11:04:40.4424826Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T11:04:40.4424901Z ·  ────┬─── 2026-10-24T11:04:40.4425032Z · ╰── `rotation` originates here 2026-10-24T11:04:40.4425086Z 172 │ 2026-10-24T11:04:40.4425156Z 173 │ useLayoutEffect(() => { 2026-10-24T11:04:40.4425291Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T11:04:40.4425363Z ·  ────┬─── 2026-10-24T11:04:40.4425493Z · ╰── `rotation` cannot be modified 2026-10-24T11:04:40.4425669Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T11:04:40.4425751Z ╰──── 2026-10-24T11:04:40.4426019Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4426325Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4426327Z 2026-10-24T11:04:40.4426521Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T11:04:40.4426674Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T11:04:40.4426742Z 1245 │ { 2026-10-24T11:04:40.4427914Z ·  ───────┬─────── 2026-10-24T11:04:40.4428045Z · ╰── This is the containing effect 2026-10-24T11:04:40.4428112Z 39 │ reset(); 2026-10-24T11:04:40.4428183Z 40 │ setInitialized(true); 2026-10-24T11:04:40.4428303Z ·  ───────┬────── 2026-10-24T11:04:40.4428575Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4428673Z 41 │ }, [reset]); 2026-10-24T11:04:40.4428755Z ╰──── 2026-10-24T11:04:40.4429365Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4429688Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4429696Z 2026-10-24T11:04:40.4429957Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T11:04:40.4430118Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T11:04:40.4430171Z 88 │ 2026-10-24T11:04:40.4430235Z 89 │ useEffect(() => { 2026-10-24T11:04:40.4430304Z ·  ────┬──── 2026-10-24T11:04:40.4430434Z · ╰── This is the containing effect 2026-10-24T11:04:40.4430593Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T11:04:40.4430694Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T11:04:40.4430760Z 92 │ let active = true; 2026-10-24T11:04:40.4430856Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T11:04:40.4431013Z ·  ─────────┬───────── 2026-10-24T11:04:40.4431213Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T11:04:40.4431367Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T11:04:40.4431418Z ╰──── 2026-10-24T11:04:40.4432014Z  help: Effects should synchronize React with external systems. Calling setState synchronously inside an effect starts another render and is usually unnecessary. Derive the value during render, initialize state directly, or update it from the event that caused the change. Use an effect only when synchronizing with an external system. 2026-10-24T11:04:40.4432334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/set-state-in-effect 2026-10-24T11:04:40.4432337Z 2026-10-24T11:04:40.4432556Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T11:04:40.4432704Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T11:04:40.4432805Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T11:04:40.4432938Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T11:04:40.4433031Z ·  ────────────┬──────────── 2026-10-24T11:04:40.4433204Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T11:04:40.4433260Z 774 │ } 2026-10-24T11:04:40.4433465Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T11:04:40.4433573Z ·  ────────────────┬──────────────── 2026-10-24T11:04:40.4433862Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T11:04:40.4433920Z 776 │ 2026-10-24T11:04:40.4433970Z ╰──── 2026-10-24T11:04:40.4434393Z  help: Missing dependencies can cause an effect to fire less often than it should. Extra dependencies can cause an effect to fire more often than it should, resulting in performance problems such as excessive renders and side effects 2026-10-24T11:04:40.4434704Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T11:04:40.4434707Z 2026-10-24T11:04:40.4434863Z ⚠ react(immutability): This value cannot be modified 2026-10-24T11:04:40.4435010Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T11:04:40.4435171Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T11:04:40.4435308Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T11:04:40.4435399Z ·  ──────────┬───────── 2026-10-24T11:04:40.4435554Z · ╰── `animatedBorderRadius` originates here 2026-10-24T11:04:40.4435712Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T11:04:40.4435782Z 390 │ useLayoutEffect(() => { 2026-10-24T11:04:40.4435882Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T11:04:40.4435969Z ·  ──────────┬───────── 2026-10-24T11:04:40.4436126Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T11:04:40.4436285Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T11:04:40.4436367Z ╰──── 2026-10-24T11:04:40.4436633Z  help: Modifying a value returned from a hook is not allowed. Consider moving the modification into the hook where the value is constructed 2026-10-24T11:04:40.4436938Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T11:04:40.4436940Z 2026-10-24T11:04:40.4437409Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4437544Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T11:04:40.4437603Z 225 │ ) { 2026-10-24T11:04:40.4437816Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.4437932Z 227 │ │ const socket = sockets[index]; 2026-10-24T11:04:40.4438019Z 228 │ │ if (socket) { 2026-10-24T11:04:40.4438112Z 229 │ │ return socket; 2026-10-24T11:04:40.4438186Z 230 │ │ } 2026-10-24T11:04:40.4438343Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4438543Z 232 │ ╰─▶ } 2026-10-24T11:04:40.4438793Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T11:04:40.4438846Z ╰──── 2026-10-24T11:04:40.4438849Z 2026-10-24T11:04:40.4439326Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4439464Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T11:04:40.4439519Z 239 │ ) { 2026-10-24T11:04:40.4439724Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.4439940Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T11:04:40.4440031Z 242 │ │ if (request) { 2026-10-24T11:04:40.4440124Z 243 │ │ return request; 2026-10-24T11:04:40.4440198Z 244 │ │ } 2026-10-24T11:04:40.4440305Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4440434Z 246 │ ╰─▶ } 2026-10-24T11:04:40.4440601Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T11:04:40.4440652Z ╰──── 2026-10-24T11:04:40.4440654Z 2026-10-24T11:04:40.4441118Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4441250Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T11:04:40.4441311Z 130 │ ) { 2026-10-24T11:04:40.4441591Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T11:04:40.4441754Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T11:04:40.4441844Z 133 │ │ return; 2026-10-24T11:04:40.4441925Z 134 │ │ } 2026-10-24T11:04:40.4442032Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4442166Z 136 │ ╰─▶ } 2026-10-24T11:04:40.4442330Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T11:04:40.4442381Z ╰──── 2026-10-24T11:04:40.4442384Z 2026-10-24T11:04:40.4442850Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4442988Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T11:04:40.4443150Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T11:04:40.4443404Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T11:04:40.4443510Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4443640Z 254 │ ╰─▶ } 2026-10-24T11:04:40.4443764Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T11:04:40.4443815Z ╰──── 2026-10-24T11:04:40.4443818Z 2026-10-24T11:04:40.4444287Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4444421Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T11:04:40.4444475Z 257 │ 2026-10-24T11:04:40.4444725Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T11:04:40.4444829Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4444958Z 260 │ ╰─▶ } 2026-10-24T11:04:40.4445063Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T11:04:40.4445114Z ╰──── 2026-10-24T11:04:40.4445116Z 2026-10-24T11:04:40.4445581Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4445715Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T11:04:40.4445774Z 321 │ ); 2026-10-24T11:04:40.4446030Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T11:04:40.4446133Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4446262Z 324 │ ╰─▶ } 2026-10-24T11:04:40.4446315Z 325 │ 2026-10-24T11:04:40.4446367Z ╰──── 2026-10-24T11:04:40.4446369Z 2026-10-24T11:04:40.4446904Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4447065Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T11:04:40.4447227Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T11:04:40.4447475Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T11:04:40.4447655Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4447785Z 332 │ ╰─▶ } 2026-10-24T11:04:40.4447888Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T11:04:40.4447942Z ╰──── 2026-10-24T11:04:40.4447948Z 2026-10-24T11:04:40.4448550Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4448737Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T11:04:40.4448868Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T11:04:40.4449010Z 133 │ ╭─▶ for ( 2026-10-24T11:04:40.4449111Z 134 │ │ let attempt = 0; 2026-10-24T11:04:40.4449282Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T11:04:40.4449386Z 136 │ │ attempt += 1 2026-10-24T11:04:40.4449470Z 137 │ │ ) { 2026-10-24T11:04:40.4449580Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4449715Z 139 │ ╰─▶ } 2026-10-24T11:04:40.4449839Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T11:04:40.4449890Z ╰──── 2026-10-24T11:04:40.4449892Z 2026-10-24T11:04:40.4450153Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4450319Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T11:04:40.4450372Z 412 │ 2026-10-24T11:04:40.4450586Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T11:04:40.4450697Z ·  ──┬── 2026-10-24T11:04:40.4450822Z · ╰── 'layer' is declared here 2026-10-24T11:04:40.4450874Z ╰──── 2026-10-24T11:04:40.4450978Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4450981Z 2026-10-24T11:04:40.4451446Z ⚠ t3code(no-polling-loop-in-tests): Polling loop in a test. Spinning on `yieldNow`/`sleep` is scheduler- and load-dependent. Await the `Deferred`, `Queue.take`, `Stream` element, `drain()`, or `expect.poll` that marks the milestone. 2026-10-24T11:04:40.4451630Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T11:04:40.4451702Z 520 │ })).delivery; 2026-10-24T11:04:40.4451904Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T11:04:40.4452021Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T11:04:40.4452166Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T11:04:40.4452267Z 524 │ │ id: task.id, 2026-10-24T11:04:40.4452384Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T11:04:40.4452482Z 526 │ │ })).delivery; 2026-10-24T11:04:40.4452619Z 527 │ ╰─▶ } 2026-10-24T11:04:40.4452736Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T11:04:40.4452787Z ╰──── 2026-10-24T11:04:40.4452789Z 2026-10-24T11:04:40.4453006Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T11:04:40.4453135Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T11:04:40.4453188Z 78 │ 2026-10-24T11:04:40.4453323Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T11:04:40.4453410Z ·  ────────┬─────── 2026-10-24T11:04:40.4453559Z · ╰── 'describeSchedule' is declared here 2026-10-24T11:04:40.4453665Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T11:04:40.4453716Z ╰──── 2026-10-24T11:04:40.4453819Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4453822Z 2026-10-24T11:04:40.4454103Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T11:04:40.4454267Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T11:04:40.4454322Z 14 │ 2026-10-24T11:04:40.4454394Z 15 │ const legacyCredentials = { 2026-10-24T11:04:40.4454477Z ·  ────────┬──────── 2026-10-24T11:04:40.4454624Z · ╰── 'legacyCredentials' is declared here 2026-10-24T11:04:40.4454693Z 16 │ version: 1 as const, 2026-10-24T11:04:40.4454744Z ╰──── 2026-10-24T11:04:40.4454845Z  help: Consider removing this declaration. 2026-10-24T11:04:40.4454848Z 2026-10-24T11:04:40.4455128Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T11:04:40.4455258Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T11:04:40.4455314Z 248 │ }, 2026-10-24T11:04:40.4455466Z 249 │ (effect, flow, stopSessions) => 2026-10-24T11:04:40.4455591Z ·  ──────┬───── 2026-10-24T11:04:40.4455739Z · ╰── 'stopSessions' is declared here 2026-10-24T11:04:40.4455804Z 250 │ effect.pipe( 2026-10-24T11:04:40.4455854Z ╰──── 2026-10-24T11:04:40.4455958Z  help: Consider removing this parameter. 2026-10-24T11:04:40.4455960Z 2026-10-24T11:04:40.4456043Z Found 0 errors and 362 warnings in 5420 files (5.2s, 8 threads) 2026-10-24T11:04:40.4923998Z Post job cleanup. 2026-10-24T11:04:40.5579085Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T11:04:40.5643738Z Post job cleanup. 2026-10-24T11:04:40.5657175Z ##[start-action display=Cache full pnpm store;id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.__actions_cache] 2026-10-24T11:04:40.6376137Z Post job cleanup. 2026-10-24T11:04:40.6992062Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, not saving cache. 2026-10-24T11:04:40.7025058Z ##[end-action id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.__actions_cache;outcome=success;conclusion=success;duration_ms=136] 2026-10-24T11:04:40.7026703Z ##[start-action display=Cache Vite+;id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.vp_cache] 2026-10-24T11:04:40.7047088Z Post job cleanup. 2026-10-24T11:04:40.7693516Z Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache. 2026-10-24T11:04:40.7730202Z ##[end-action id=__72382c44-2b10-4661-a05e-44d3e0f5c7b4.vp_cache;outcome=success;conclusion=success;duration_ms=70] 2026-10-24T11:04:40.7775941Z Post job cleanup. 2026-10-24T11:04:40.8226179Z [command]/usr/local/bin/git version 2026-10-24T11:04:40.8259927Z git version 2.55.0 2026-10-24T11:04:40.8280967Z Temporarily overriding HOME='/home/runner/_work/_temp/0b78dfb6-42ca-4c8c-94e3-fad64bccfe33' before making global git config changes 2026-10-24T11:04:40.8281373Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T11:04:40.8284681Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T11:04:40.8312177Z Removing SSH command configuration 2026-10-24T11:04:40.8315286Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T11:04:40.8341662Z [command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :" 2026-10-24T11:04:40.8478435Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T11:04:40.8501690Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T11:04:40.8547067Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T11:04:40.8575100Z ##[group]Run '/job_completed.sh' 2026-10-24T11:04:40.8587961Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T11:04:40.8588133Z env: 2026-10-24T11:04:40.8588270Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 155 2026-10-24T11:04:40.8588423Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 370 2026-10-24T11:04:40.8588569Z BLACKSMITH_CHECK_RUN_ID: 120855859117 2026-10-24T11:04:40.8588716Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T11:04:40.8588860Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T11:04:40.8588998Z ##[endgroup] 2026-10-24T11:04:40.8675054Z Docker container cache not activated, skipping hash computation. 2026-10-24T11:04:40.8967350Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T11:04:40.9009214Z Cleaning up orphan processes