2026-10-24T22:13:31.7067256Z Current runner version: '2.338.1' 2026-10-24T22:13:31.7070119Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-dzqz5n7i473n44gu' 2026-10-24T22:13:31.7070671Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T22:13:31.7071248Z Machine name: 'ip-172-31-73-130' 2026-10-24T22:13:31.7072457Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T22:13:31.7073519Z Contents: read 2026-10-24T22:13:31.7073800Z Metadata: read 2026-10-24T22:13:31.7074192Z ##[endgroup] 2026-10-24T22:13:31.7075279Z Secret source: Actions 2026-10-24T22:13:31.7075745Z Cache mode: write 2026-10-24T22:13:31.7076132Z Prepare workflow directory 2026-10-24T22:13:31.7246449Z Prepare all required actions 2026-10-24T22:13:31.7271540Z Getting action download info 2026-10-24T22:13:31.8305931Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T22:13:31.8586523Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T22:13:31.9667984Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T22:13:31.9703630Z Complete job name: Lint 2026-10-24T22:13:32.0071801Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T22:13:32.0158022Z ##[group]Run '/setup.sh' 2026-10-24T22:13:32.0171163Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T22:13:32.0171552Z env: 2026-10-24T22:13:32.0171774Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:32.0172058Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:32.0172330Z BLACKSMITH_CHECK_RUN_ID: 121002392470 2026-10-24T22:13:32.0172601Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T22:13:32.0172860Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T22:13:32.0173111Z ##[endgroup] 2026-10-24T22:13:32.0396464Z Logging daemon started (blacksmithd for logs) 2026-10-24T22:13:32.0483607Z Results daemon started (blacksmithd for results) 2026-10-24T22:13:32.0606187Z Background adoption and SSH setup started (PID: 3125) 2026-10-24T22:13:32.0608678Z 2026-10-24T22:13:32.0608781Z ---------------------------------------- 2026-10-24T22:13:32.0609261Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40137622594/jobs/121002392470 2026-10-24T22:13:32.0609677Z SSH Access (using your GitHub SSH key): 2026-10-24T22:13:32.0610088Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-dzqz5n7i473n44gu.vm.blacksmith.sh 2026-10-24T22:13:32.0610380Z 2026-10-24T22:13:32.0610486Z No GitHub SSH key? Add one at: 2026-10-24T22:13:32.0610960Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T22:13:32.0611351Z 2026-10-24T22:13:32.0611453Z ---------------------------------------- 2026-10-24T22:13:32.0611622Z 2026-10-24T22:13:32.0611759Z VM ID: blacksmith-8vcpu-ubuntu-2404-dzqz5n7i473n44gu 2026-10-24T22:13:32.0612065Z Host: production-152.236.39.67-x8664 2026-10-24T22:13:32.0612322Z Host Agent PID: 3719270 2026-10-24T22:13:32.0612559Z Host Agent Git SHA: 1637818df 2026-10-24T22:13:32.0612822Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T22:13:32.0613094Z Blacksmith Host Generation: gen 2 2026-10-24T22:13:32.0613366Z Petname: production-inviting-ant-bdfe4938 2026-10-24T22:13:32.0613636Z Region: us-east 2026-10-24T22:13:32.0613858Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T22:13:32.0619527Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T22:13:32.0620102Z 2026-10-24T22:13:32.0620215Z Enabling Blacksmith transparent cache 2026-10-24T22:13:32.0837415Z ##[group]Run actions/checkout@v6 2026-10-24T22:13:32.0837709Z with: 2026-10-24T22:13:32.0838028Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T22:13:32.0838414Z sparse-checkout-cone-mode: false 2026-10-24T22:13:32.0838684Z repository: pingdotgg/t3code 2026-10-24T22:13:32.0840472Z token: *** 2026-10-24T22:13:32.0840677Z ssh-strict: true 2026-10-24T22:13:32.0840893Z ssh-user: git 2026-10-24T22:13:32.0841107Z persist-credentials: true 2026-10-24T22:13:32.0841513Z clean: true 2026-10-24T22:13:32.0841720Z fetch-depth: 1 2026-10-24T22:13:32.0841928Z fetch-tags: false 2026-10-24T22:13:32.0842148Z show-progress: true 2026-10-24T22:13:32.0842363Z lfs: false 2026-10-24T22:13:32.0842569Z submodules: false 2026-10-24T22:13:32.0842792Z set-safe-directory: true 2026-10-24T22:13:32.0843039Z allow-unsafe-pr-checkout: false 2026-10-24T22:13:32.0843291Z env: 2026-10-24T22:13:32.0843519Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:32.0843798Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:32.0844119Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:32.0844371Z ##[endgroup] 2026-10-24T22:13:32.1788452Z Syncing repository: pingdotgg/t3code 2026-10-24T22:13:32.1789320Z ##[group]Getting Git version info 2026-10-24T22:13:32.1789651Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T22:13:32.1790118Z [command]/usr/local/bin/git version 2026-10-24T22:13:32.1797790Z git version 2.55.0 2026-10-24T22:13:32.1814945Z ##[endgroup] 2026-10-24T22:13:32.1818459Z Temporarily overriding HOME='/home/runner/_work/_temp/dcce98ff-5349-44a6-a14b-d145fe4623c9' before making global git config changes 2026-10-24T22:13:32.1819114Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T22:13:32.1821770Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T22:13:32.1853239Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T22:13:32.1854953Z ##[group]Determining repository object format 2026-10-24T22:13:32.1856653Z ##[endgroup] 2026-10-24T22:13:32.1857035Z ##[group]Initializing the repository 2026-10-24T22:13:32.1859210Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T22:13:32.1892610Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T22:13:32.1893070Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T22:13:32.1893535Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T22:13:32.1893889Z hint: call: 2026-10-24T22:13:32.1894125Z hint: 2026-10-24T22:13:32.1894389Z hint: git config --global init.defaultBranch 2026-10-24T22:13:32.1894686Z hint: 2026-10-24T22:13:32.1894964Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T22:13:32.1895410Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T22:13:32.1895763Z hint: 2026-10-24T22:13:32.1895969Z hint: git branch -m 2026-10-24T22:13:32.1896204Z hint: 2026-10-24T22:13:32.1896502Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T22:13:32.1896961Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T22:13:32.1897806Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T22:13:32.1922819Z ##[endgroup] 2026-10-24T22:13:32.1923193Z ##[group]Disabling automatic garbage collection 2026-10-24T22:13:32.1924904Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T22:13:32.1946114Z ##[endgroup] 2026-10-24T22:13:32.1946451Z ##[group]Setting up auth 2026-10-24T22:13:32.1946708Z Removing SSH command configuration 2026-10-24T22:13:32.1950075Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T22:13:32.1972280Z [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-24T22:13:32.2088612Z Removing HTTP extra header 2026-10-24T22:13:32.2091345Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T22:13:32.2113260Z [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-24T22:13:32.2202633Z Removing includeIf entries pointing to credentials config files 2026-10-24T22:13:32.2206184Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T22:13:32.2229689Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T22:13:32.2319509Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-8ebb67aa-2b16-472e-b4f2-3d0a4e6ece8b.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T22:13:32.2341210Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-8ebb67aa-2b16-472e-b4f2-3d0a4e6ece8b.config 2026-10-24T22:13:32.2358453Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-8ebb67aa-2b16-472e-b4f2-3d0a4e6ece8b.config 2026-10-24T22:13:32.2376717Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-8ebb67aa-2b16-472e-b4f2-3d0a4e6ece8b.config 2026-10-24T22:13:32.2394091Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-8ebb67aa-2b16-472e-b4f2-3d0a4e6ece8b.config 2026-10-24T22:13:32.2409861Z ##[endgroup] 2026-10-24T22:13:32.2410436Z ##[group]Fetching the repository 2026-10-24T22:13:32.2414500Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +909e4c948278afc2b3e1e665075fb1755a13f894:refs/remotes/origin/main 2026-10-24T22:13:32.5178378Z From https://github.com/pingdotgg/t3code 2026-10-24T22:13:32.5179449Z * [new ref] 909e4c948278afc2b3e1e665075fb1755a13f894 -> origin/main 2026-10-24T22:13:32.5203121Z [command]/usr/local/bin/git branch --list --remote origin/main 2026-10-24T22:13:32.5225830Z origin/main 2026-10-24T22:13:32.5229893Z [command]/usr/local/bin/git rev-parse refs/remotes/origin/main 2026-10-24T22:13:32.5247001Z 909e4c948278afc2b3e1e665075fb1755a13f894 2026-10-24T22:13:32.5248827Z ##[endgroup] 2026-10-24T22:13:32.5249759Z ##[group]Determining the checkout info 2026-10-24T22:13:32.5250645Z ##[endgroup] 2026-10-24T22:13:32.5251377Z ##[group]Setting up sparse checkout 2026-10-24T22:13:32.5252070Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T22:13:32.5271320Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T22:13:32.5287038Z .git/info/sparse-checkout 2026-10-24T22:13:32.5290410Z ##[endgroup] 2026-10-24T22:13:32.5291341Z ##[group]Checking out the ref 2026-10-24T22:13:32.5293098Z [command]/usr/local/bin/git checkout --progress --force -B main refs/remotes/origin/main 2026-10-24T22:13:39.7819360Z Updating files: 0% (1/6402) 2026-10-24T22:13:39.7847375Z Updating files: 1% (65/6402) 2026-10-24T22:13:39.7864837Z Updating files: 2% (129/6402) 2026-10-24T22:13:39.7885468Z Updating files: 3% (193/6402) 2026-10-24T22:13:39.7906134Z Updating files: 4% (257/6402) 2026-10-24T22:13:39.7935727Z Updating files: 5% (321/6402) 2026-10-24T22:13:39.7957816Z Updating files: 6% (385/6402) 2026-10-24T22:13:39.8009785Z Updating files: 7% (449/6402) 2026-10-24T22:13:39.8039753Z Updating files: 8% (513/6402) 2026-10-24T22:13:39.8062408Z Updating files: 9% (577/6402) 2026-10-24T22:13:39.8320350Z Updating files: 10% (641/6402) 2026-10-24T22:13:39.8336150Z Updating files: 11% (705/6402) 2026-10-24T22:13:39.8346816Z Updating files: 12% (769/6402) 2026-10-24T22:13:39.8361827Z Updating files: 13% (833/6402) 2026-10-24T22:13:39.8377935Z Updating files: 14% (897/6402) 2026-10-24T22:13:39.8395741Z Updating files: 15% (961/6402) 2026-10-24T22:13:39.8413855Z Updating files: 16% (1025/6402) 2026-10-24T22:13:39.8429447Z Updating files: 17% (1089/6402) 2026-10-24T22:13:39.8447156Z Updating files: 18% (1153/6402) 2026-10-24T22:13:39.8461751Z Updating files: 19% (1217/6402) 2026-10-24T22:13:39.8485604Z Updating files: 20% (1281/6402) 2026-10-24T22:13:39.8501539Z Updating files: 21% (1345/6402) 2026-10-24T22:13:39.8520000Z Updating files: 22% (1409/6402) 2026-10-24T22:13:39.8533094Z Updating files: 23% (1473/6402) 2026-10-24T22:13:39.8546432Z Updating files: 24% (1537/6402) 2026-10-24T22:13:39.8561567Z Updating files: 25% (1601/6402) 2026-10-24T22:13:39.8575323Z Updating files: 26% (1665/6402) 2026-10-24T22:13:39.8588916Z Updating files: 27% (1729/6402) 2026-10-24T22:13:39.8607720Z Updating files: 28% (1793/6402) 2026-10-24T22:13:39.8640598Z Updating files: 29% (1857/6402) 2026-10-24T22:13:39.8660557Z Updating files: 30% (1921/6402) 2026-10-24T22:13:39.8683770Z Updating files: 31% (1985/6402) 2026-10-24T22:13:39.8713402Z Updating files: 32% (2049/6402) 2026-10-24T22:13:39.8742062Z Updating files: 33% (2113/6402) 2026-10-24T22:13:39.8811713Z Updating files: 34% (2177/6402) 2026-10-24T22:13:39.8870396Z Updating files: 35% (2241/6402) 2026-10-24T22:13:39.8905767Z Updating files: 36% (2305/6402) 2026-10-24T22:13:39.8936281Z Updating files: 37% (2369/6402) 2026-10-24T22:13:39.8981626Z Updating files: 38% (2433/6402) 2026-10-24T22:13:39.9008332Z Updating files: 39% (2497/6402) 2026-10-24T22:13:39.9037486Z Updating files: 40% (2561/6402) 2026-10-24T22:13:39.9063578Z Updating files: 41% (2625/6402) 2026-10-24T22:13:39.9079302Z Updating files: 42% (2689/6402) 2026-10-24T22:13:39.9089085Z Updating files: 43% (2753/6402) 2026-10-24T22:13:39.9118613Z Updating files: 44% (2817/6402) 2026-10-24T22:13:39.9146170Z Updating files: 45% (2881/6402) 2026-10-24T22:13:39.9172678Z Updating files: 46% (2945/6402) 2026-10-24T22:13:39.9197623Z Updating files: 47% (3009/6402) 2026-10-24T22:13:39.9224717Z Updating files: 48% (3073/6402) 2026-10-24T22:13:39.9263056Z Updating files: 49% (3137/6402) 2026-10-24T22:13:39.9290706Z Updating files: 50% (3201/6402) 2026-10-24T22:13:39.9306015Z Updating files: 51% (3266/6402) 2026-10-24T22:13:39.9341045Z Updating files: 52% (3330/6402) 2026-10-24T22:13:39.9368762Z Updating files: 53% (3394/6402) 2026-10-24T22:13:39.9387614Z Updating files: 54% (3458/6402) 2026-10-24T22:13:39.9409606Z Updating files: 55% (3522/6402) 2026-10-24T22:13:39.9424787Z Updating files: 56% (3586/6402) 2026-10-24T22:13:39.9444251Z Updating files: 57% (3650/6402) 2026-10-24T22:13:39.9462255Z Updating files: 58% (3714/6402) 2026-10-24T22:13:39.9816255Z Updating files: 59% (3778/6402) 2026-10-24T22:13:39.9830855Z Updating files: 60% (3842/6402) 2026-10-24T22:13:39.9850903Z Updating files: 61% (3906/6402) 2026-10-24T22:13:39.9868770Z Updating files: 62% (3970/6402) 2026-10-24T22:13:39.9890409Z Updating files: 63% (4034/6402) 2026-10-24T22:13:39.9918152Z Updating files: 64% (4098/6402) 2026-10-24T22:13:39.9937400Z Updating files: 65% (4162/6402) 2026-10-24T22:13:39.9954210Z Updating files: 66% (4226/6402) 2026-10-24T22:13:39.9976953Z Updating files: 67% (4290/6402) 2026-10-24T22:13:39.9991239Z Updating files: 68% (4354/6402) 2026-10-24T22:13:40.0008509Z Updating files: 69% (4418/6402) 2026-10-24T22:13:40.0021057Z Updating files: 70% (4482/6402) 2026-10-24T22:13:40.0040847Z Updating files: 71% (4546/6402) 2026-10-24T22:13:40.0053358Z Updating files: 72% (4610/6402) 2026-10-24T22:13:40.0098582Z Updating files: 73% (4674/6402) 2026-10-24T22:13:40.0489759Z Updating files: 74% (4738/6402) 2026-10-24T22:13:40.0513707Z Updating files: 75% (4802/6402) 2026-10-24T22:13:40.0535334Z Updating files: 76% (4866/6402) 2026-10-24T22:13:40.0561081Z Updating files: 77% (4930/6402) 2026-10-24T22:13:40.0583387Z Updating files: 78% (4994/6402) 2026-10-24T22:13:40.0599050Z Updating files: 79% (5058/6402) 2026-10-24T22:13:40.0620515Z Updating files: 80% (5122/6402) 2026-10-24T22:13:40.0636056Z Updating files: 81% (5186/6402) 2026-10-24T22:13:40.0653405Z Updating files: 82% (5250/6402) 2026-10-24T22:13:40.0675265Z Updating files: 83% (5314/6402) 2026-10-24T22:13:40.0701440Z Updating files: 84% (5378/6402) 2026-10-24T22:13:40.0719010Z Updating files: 85% (5442/6402) 2026-10-24T22:13:40.0743213Z Updating files: 86% (5506/6402) 2026-10-24T22:13:40.0813215Z Updating files: 87% (5570/6402) 2026-10-24T22:13:40.0842148Z Updating files: 88% (5634/6402) 2026-10-24T22:13:40.0861268Z Updating files: 89% (5698/6402) 2026-10-24T22:13:40.0889678Z Updating files: 90% (5762/6402) 2026-10-24T22:13:40.0916786Z Updating files: 91% (5826/6402) 2026-10-24T22:13:40.0931390Z Updating files: 92% (5890/6402) 2026-10-24T22:13:40.0953806Z Updating files: 93% (5954/6402) 2026-10-24T22:13:40.0973552Z Updating files: 94% (6018/6402) 2026-10-24T22:13:40.0996557Z Updating files: 95% (6082/6402) 2026-10-24T22:13:40.1051707Z Updating files: 96% (6146/6402) 2026-10-24T22:13:40.1073596Z Updating files: 97% (6210/6402) 2026-10-24T22:13:40.1118216Z Updating files: 98% (6274/6402) 2026-10-24T22:13:40.1137252Z Updating files: 99% (6338/6402) 2026-10-24T22:13:40.1137529Z Updating files: 100% (6402/6402) 2026-10-24T22:13:40.1137768Z Updating files: 100% (6402/6402), done. 2026-10-24T22:13:40.1286229Z Switched to a new branch 'main' 2026-10-24T22:13:40.1287035Z branch 'main' set up to track 'origin/main'. 2026-10-24T22:13:40.1299190Z ##[endgroup] 2026-10-24T22:13:40.1330152Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T22:13:40.1346384Z 909e4c948278afc2b3e1e665075fb1755a13f894 2026-10-24T22:13:40.1420457Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T22:13:40.1420709Z files="$(git ls-files .github/pr-assets)" 2026-10-24T22:13:40.1420913Z if test -n "$files"; then 2026-10-24T22:13:40.1421158Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T22:13:40.1421386Z  exit 1 2026-10-24T22:13:40.1421512Z fi 2026-10-24T22:13:40.1437540Z shell: /usr/bin/bash -e {0} 2026-10-24T22:13:40.1437688Z env: 2026-10-24T22:13:40.1437823Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:40.1438003Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:40.1438164Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:40.1438315Z ##[endgroup] 2026-10-24T22:13:40.1580949Z Prepare all required actions 2026-10-24T22:13:40.1581316Z Getting action download info 2026-10-24T22:13:40.2274692Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T22:13:40.3315490Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T22:13:40.3315674Z env: 2026-10-24T22:13:40.3315809Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:40.3315975Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:40.3316173Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:40.3316326Z ##[endgroup] 2026-10-24T22:13:40.3391082Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T22:13:40.3404502Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T22:13:40.3404880Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T22:13:40.3405250Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T22:13:40.3405501Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T22:13:40.3420913Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T22:13:40.3421094Z env: 2026-10-24T22:13:40.3421225Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:40.3421390Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:40.3421551Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:40.3421704Z ##[endgroup] 2026-10-24T22:13:40.3492945Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=10] 2026-10-24T22:13:40.3494446Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T22:13:40.3540917Z ##[group]Run actions/cache@v6 2026-10-24T22:13:40.3541072Z with: 2026-10-24T22:13:40.3541346Z path: ~/.vite-plus 2026-10-24T22:13:40.3541526Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T22:13:40.3541742Z enableCrossOsArchive: false 2026-10-24T22:13:40.3541891Z fail-on-cache-miss: false 2026-10-24T22:13:40.3542102Z lookup-only: false 2026-10-24T22:13:40.3542253Z save-always: false 2026-10-24T22:13:40.3542382Z env: 2026-10-24T22:13:40.3542511Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:40.3542684Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:40.3543064Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:40.3543306Z ##[endgroup] 2026-10-24T22:13:40.5451534Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T22:13:40.8961435Z Received 170349591 of 170349591 (100.0%), 495.3 MBs/sec 2026-10-24T22:13:40.8962101Z Cache Size: ~162 MB (170349591 B) 2026-10-24T22:13:40.9012158Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/888ba116-1eea-42e3-a754-aff938fac055/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T22:13:41.4811618Z Cache restored successfully 2026-10-24T22:13:41.4941647Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T22:13:41.4993713Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1149] 2026-10-24T22:13:41.4996214Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T22:13:41.5014375Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T22:13:41.5014588Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T22:13:41.5014759Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T22:13:41.5033362Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T22:13:41.5033544Z env: 2026-10-24T22:13:41.5033658Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:41.5033810Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:41.5033949Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:41.5034088Z ##[endgroup] 2026-10-24T22:13:41.5073809Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T22:13:41.5080987Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=8] 2026-10-24T22:13:41.5082213Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T22:13:41.5086053Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T22:13:41.5087413Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T22:13:41.5096222Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T22:13:41.5096386Z store_path="$(vp pm cache dir)" 2026-10-24T22:13:41.5096541Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T22:13:41.5110181Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T22:13:41.5110353Z env: 2026-10-24T22:13:41.5110461Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:41.5110603Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:41.5110758Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:41.5110915Z ##[endgroup] 2026-10-24T22:13:41.5236065Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=14] 2026-10-24T22:13:41.5237235Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T22:13:41.5545340Z ##[group]Run actions/cache@v6 2026-10-24T22:13:41.5545476Z with: 2026-10-24T22:13:41.5545596Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T22:13:41.5545855Z key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T22:13:41.5546102Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T22:13:41.5546298Z enableCrossOsArchive: false 2026-10-24T22:13:41.5546460Z fail-on-cache-miss: false 2026-10-24T22:13:41.5546620Z lookup-only: false 2026-10-24T22:13:41.5546852Z save-always: false 2026-10-24T22:13:41.5546993Z env: 2026-10-24T22:13:41.5547151Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:41.5547470Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:41.5547646Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:41.5547839Z ##[endgroup] 2026-10-24T22:13:41.7410963Z Cache hit for: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T22:13:42.8207484Z Received 671088640 of 995395870 (67.4%), 604.3 MBs/sec 2026-10-24T22:13:43.2621785Z Received 995395870 of 995395870 (100.0%), 632.4 MBs/sec 2026-10-24T22:13:43.2623474Z Cache Size: ~949 MB (995395870 B) 2026-10-24T22:13:43.2642875Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/355db9b3-92b5-4538-8879-2c577284bd57/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T22:13:48.2666980Z Cache restored successfully 2026-10-24T22:13:48.3105320Z Cache restored from key: pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6 2026-10-24T22:13:48.3180492Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=6794] 2026-10-24T22:13:48.3182590Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T22:13:48.3193305Z ##[group]Run vp install 2026-10-24T22:13:48.3193447Z vp install 2026-10-24T22:13:48.3208775Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T22:13:48.3208936Z env: 2026-10-24T22:13:48.3209048Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:48.3209190Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:48.3209332Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:48.3209460Z ##[endgroup] 2026-10-24T22:13:48.3506730Z Scope: all 34 workspace projects 2026-10-24T22:13:48.4417954Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T22:13:48.6760720Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T22:13:48.6761039Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T22:13:48.6761254Z Virtual store is at: node_modules/.pnpm 2026-10-24T22:13:50.7230236Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.3s) 2026-10-24T22:13:50.7230532Z Lockfile is up to date, resolution step is skipped 2026-10-24T22:13:50.7387452Z Packages: +1721 2026-10-24T22:13:50.7387678Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T22:13:50.7690407Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T22:13:51.6264427Z . prepare$ vp config --no-agent 2026-10-24T22:13:51.7160402Z . prepare: Done 2026-10-24T22:13:51.7173043Z 2026-10-24T22:13:51.7173309Z devDependencies: 2026-10-24T22:13:51.7173518Z + @coderabbitai/config 1.1.0 2026-10-24T22:13:51.7173749Z + @shadcn/lint 0.1.5 2026-10-24T22:13:51.7173961Z + @types/node 24.12.4 2026-10-24T22:13:51.7174152Z + knip 6.34.0 2026-10-24T22:13:51.7174355Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T22:13:51.7174575Z + vite-plus 1.3.0 2026-10-24T22:13:51.7174677Z 2026-10-24T22:13:51.7191340Z Done in 3.4s using pnpm v12.14.0 2026-10-24T22:13:51.7352375Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3416] 2026-10-24T22:13:51.7824186Z ##[group]Run actions/cache@v6 2026-10-24T22:13:51.7824369Z with: 2026-10-24T22:13:51.7824532Z path: ~/.cache/electron 2026-10-24T22:13:51.7824920Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T22:13:51.7825302Z enableCrossOsArchive: false 2026-10-24T22:13:51.7825523Z fail-on-cache-miss: false 2026-10-24T22:13:51.7825719Z lookup-only: false 2026-10-24T22:13:51.7825905Z save-always: false 2026-10-24T22:13:51.7826080Z env: 2026-10-24T22:13:51.7826262Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:51.7826500Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:51.7826756Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:51.7826972Z ##[endgroup] 2026-10-24T22:13:52.0129282Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T22:13:52.1541046Z Received 122906203 of 122906203 (100.0%), 930.3 MBs/sec 2026-10-24T22:13:52.1541389Z Cache Size: ~117 MB (122906203 B) 2026-10-24T22:13:52.1575291Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/4a23e2ad-4b5f-4afc-b728-0ae5eadd94a5/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T22:13:52.2165765Z Cache restored successfully 2026-10-24T22:13:52.2327048Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T22:13:52.2428915Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T22:13:52.2429566Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T22:13:52.2451461Z shell: /usr/bin/bash -e {0} 2026-10-24T22:13:52.2451676Z env: 2026-10-24T22:13:52.2452143Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:52.2452301Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:52.2452459Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:52.2452609Z ##[endgroup] 2026-10-24T22:13:52.4035514Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T22:13:52.9364516Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T22:13:52.9385758Z 2026-10-24T22:13:52.9539088Z ##[group]Run vp run knip:check 2026-10-24T22:13:52.9539386Z vp run knip:check 2026-10-24T22:13:52.9562034Z shell: /usr/bin/bash -e {0} 2026-10-24T22:13:52.9562206Z env: 2026-10-24T22:13:52.9562349Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:13:52.9562509Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:13:52.9562662Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:13:52.9562807Z ##[endgroup] 2026-10-24T22:13:53.1164299Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T22:13:56.6364578Z 2026-10-24T22:13:56.6367682Z $ 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-definitions --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-24T22:14:04.4292375Z 2026-10-24T22:14:04.4293406Z --- 2026-10-24T22:14:04.4293667Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T22:14:04.4360037Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T22:14:04.4360309Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T22:14:04.4376413Z shell: /usr/bin/bash -e {0} 2026-10-24T22:14:04.4376556Z env: 2026-10-24T22:14:04.4376666Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:14:04.4376811Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:14:04.4376950Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:14:04.4377082Z ##[endgroup] 2026-10-24T22:14:04.5775990Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T22:14:04.7572843Z 2026-10-24T22:14:04.7646031Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T22:14:04.7646254Z vp run --filter t3 generate --check 2026-10-24T22:14:04.7661625Z shell: /usr/bin/bash -e {0} 2026-10-24T22:14:04.7661747Z env: 2026-10-24T22:14:04.7661869Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:14:04.7662008Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:14:04.7662148Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:14:04.7662276Z ##[endgroup] 2026-10-24T22:14:04.9066926Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T22:14:05.0512483Z 2026-10-24T22:14:05.0575544Z ##[group]Run vp check 2026-10-24T22:14:05.0575717Z vp check 2026-10-24T22:14:05.0591560Z shell: /usr/bin/bash -e {0} 2026-10-24T22:14:05.0591683Z env: 2026-10-24T22:14:05.0591791Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:14:05.0591934Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:14:05.0592071Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T22:14:05.0592206Z ##[endgroup] 2026-10-24T22:14:05.5685783Z pass: All 5751 files are correctly formatted (374ms, 8 threads) 2026-10-24T22:14:10.5515640Z warn: Lint warnings found 2026-10-24T22:14:10.5516854Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T22:14:10.5517499Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T22:14:10.5517830Z 89 │ let cursor = prompt.length; 2026-10-24T22:14:10.5518052Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T22:14:10.5518318Z ·  ─────── 2026-10-24T22:14:10.5518516Z 91 │ let { start, end } = occurrence; 2026-10-24T22:14:10.5518667Z ╰──── 2026-10-24T22:14:10.5519113Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T22:14:10.5519508Z 2026-10-24T22:14:10.5519809Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T22:14:10.5520271Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T22:14:10.5520696Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T22:14:10.5521176Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T22:14:10.5521704Z ·  ─────┬───── 2026-10-24T22:14:10.5522262Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T22:14:10.5522681Z 101 │ const readEditor = useCallback( 2026-10-24T22:14:10.5522920Z ╰──── 2026-10-24T22:14:10.5524037Z  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-24T22:14:10.5525070Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5525548Z 2026-10-24T22:14:10.5525829Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T22:14:10.5526362Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T22:14:10.5526722Z 120 │ setEditor, 2026-10-24T22:14:10.5526943Z 121 │ startEditor, 2026-10-24T22:14:10.5527184Z ·  ─────┬───── 2026-10-24T22:14:10.5527553Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T22:14:10.5527885Z 122 │ hasChanges, 2026-10-24T22:14:10.5528093Z ╰──── 2026-10-24T22:14:10.5528683Z  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-24T22:14:10.5529652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5530120Z 2026-10-24T22:14:10.5530526Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5531205Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T22:14:10.5531583Z 117 │ 2026-10-24T22:14:10.5531778Z 118 │ useEffect(() => { 2026-10-24T22:14:10.5532013Z ·  ────┬──── 2026-10-24T22:14:10.5532522Z · ╰── This is the containing effect 2026-10-24T22:14:10.5532900Z 119 │ void refreshNotifications(); 2026-10-24T22:14:10.5533193Z ·  ──────────┬───────── 2026-10-24T22:14:10.5533623Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5534112Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T22:14:10.5534440Z ╰──── 2026-10-24T22:14:10.5535449Z  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-24T22:14:10.5536820Z  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-24T22:14:10.5537222Z 2026-10-24T22:14:10.5537472Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5537885Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T22:14:10.5538123Z 125 │ 2026-10-24T22:14:10.5538241Z 126 │ useEffect(() => { 2026-10-24T22:14:10.5538393Z ·  ────┬──── 2026-10-24T22:14:10.5538597Z · ╰── This is the containing effect 2026-10-24T22:14:10.5538790Z 127 │ if (!isLoaded) { 2026-10-24T22:14:10.5538963Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T22:14:10.5539163Z ·  ──────────┬────────── 2026-10-24T22:14:10.5539597Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5539989Z 129 │ return; 2026-10-24T22:14:10.5540184Z ╰──── 2026-10-24T22:14:10.5541190Z  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-24T22:14:10.5542534Z  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-24T22:14:10.5543937Z 2026-10-24T22:14:10.5544158Z ⚠ eslint(no-unused-vars): Identifier 'HostProcess' is imported but never used. 2026-10-24T22:14:10.5544524Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:25:13] 2026-10-24T22:14:10.5544821Z 24 │ import * as Schema from "effect/Schema"; 2026-10-24T22:14:10.5545048Z 25 │ import * as HostProcess from "@t3tools/shared/HostProcess"; 2026-10-24T22:14:10.5545258Z ·  ─────┬───── 2026-10-24T22:14:10.5545495Z · ╰── 'HostProcess' is imported here 2026-10-24T22:14:10.5545685Z 26 │ 2026-10-24T22:14:10.5545794Z ╰──── 2026-10-24T22:14:10.5545942Z  help: Consider removing this import. 2026-10-24T22:14:10.5546153Z 2026-10-24T22:14:10.5546425Z ⚠ eslint(no-unused-vars): Variable 'serverConfig' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5547019Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:124:11] 2026-10-24T22:14:10.5547316Z 123 │ const path = yield* Path.Path; 2026-10-24T22:14:10.5547538Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T22:14:10.5547748Z ·  ──────┬───── 2026-10-24T22:14:10.5547976Z · ╰── 'serverConfig' is declared here 2026-10-24T22:14:10.5548254Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T22:14:10.5548452Z ╰──── 2026-10-24T22:14:10.5548611Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5548725Z 2026-10-24T22:14:10.5549012Z ⚠ eslint(no-unused-vars): Variable 'serverSettings' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5549428Z ╭─[apps/server/src/orchestration-v2/ProviderTurnStartService.ts:125:11] 2026-10-24T22:14:10.5549708Z 124 │ const serverConfig = yield* ServerConfig.ServerConfig; 2026-10-24T22:14:10.5549970Z 125 │ const serverSettings = yield* ServerSettings.ServerSettingsService; 2026-10-24T22:14:10.5550204Z ·  ───────┬────── 2026-10-24T22:14:10.5550436Z · ╰── 'serverSettings' is declared here 2026-10-24T22:14:10.5550721Z 126 │ const gitWorkflow = yield* GitWorkflowService.GitWorkflowService; 2026-10-24T22:14:10.5550919Z ╰──── 2026-10-24T22:14:10.5551071Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5551190Z 2026-10-24T22:14:10.5551388Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5551689Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T22:14:10.5551894Z 28 │ getPendingThreadOrder(); 2026-10-24T22:14:10.5552156Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T22:14:10.5552495Z ·  ────┬──── ───────┬────── 2026-10-24T22:14:10.5552815Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T22:14:10.5553131Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T22:14:10.5553334Z 30 │ return pending; 2026-10-24T22:14:10.5553469Z ╰──── 2026-10-24T22:14:10.5553812Z  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-24T22:14:10.5554400Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5554735Z 2026-10-24T22:14:10.5554941Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T22:14:10.5555265Z ╭─[apps/web/src/lib/announce.browser.test.ts:41:46] 2026-10-24T22:14:10.5555448Z 40 │ 2026-10-24T22:14:10.5555614Z 41 │ expect(regionTexts()).toEqual([...first].reverse()); 2026-10-24T22:14:10.5555842Z ·  ─────── 2026-10-24T22:14:10.5556054Z 42 │ expect(regionTexts()).toContain("Claude"); 2026-10-24T22:14:10.5556214Z ╰──── 2026-10-24T22:14:10.5556519Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T22:14:10.5556768Z 2026-10-24T22:14:10.5556999Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5557359Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T22:14:10.5557582Z 90 │ }) { 2026-10-24T22:14:10.5557756Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T22:14:10.5557954Z ·  ────┬─── 2026-10-24T22:14:10.5558169Z · ╰── `rotation` originates here 2026-10-24T22:14:10.5558369Z 92 │ useLayoutEffect(() => { 2026-10-24T22:14:10.5558594Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T22:14:10.5558813Z ·  ────┬─── 2026-10-24T22:14:10.5559026Z · ╰── `rotation` cannot be modified 2026-10-24T22:14:10.5559238Z 94 │ }, [props.hidden, rotation]); 2026-10-24T22:14:10.5559388Z ╰──── 2026-10-24T22:14:10.5559702Z  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-24T22:14:10.5560246Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5560532Z 2026-10-24T22:14:10.5560685Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5561009Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T22:14:10.5561274Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T22:14:10.5561524Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T22:14:10.5561754Z ·  ────────┬──────── 2026-10-24T22:14:10.5562001Z · ╰── `loadingVisibility` originates here 2026-10-24T22:14:10.5562213Z 268 │ useLayoutEffect(() => { 2026-10-24T22:14:10.5562459Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T22:14:10.5562702Z ·  ────────┬──────── 2026-10-24T22:14:10.5562946Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T22:14:10.5563176Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T22:14:10.5563337Z ╰──── 2026-10-24T22:14:10.5563647Z  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-24T22:14:10.5564204Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5564494Z 2026-10-24T22:14:10.5564667Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5564988Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T22:14:10.5565209Z 325 │ }) { 2026-10-24T22:14:10.5565435Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T22:14:10.5565688Z ·  ─────────┬───────── 2026-10-24T22:14:10.5565937Z · ╰── `recordingVisibility` originates here 2026-10-24T22:14:10.5566153Z 327 │ useLayoutEffect(() => { 2026-10-24T22:14:10.5566428Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T22:14:10.5566704Z ·  ─────────┬───────── 2026-10-24T22:14:10.5567021Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T22:14:10.5567301Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T22:14:10.5567458Z ╰──── 2026-10-24T22:14:10.5567772Z  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-24T22:14:10.5568316Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5568603Z 2026-10-24T22:14:10.5568758Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5569076Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T22:14:10.5569348Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T22:14:10.5569550Z 66 │ const progress = useSharedValue(0); 2026-10-24T22:14:10.5569731Z ·  ────┬─── 2026-10-24T22:14:10.5569945Z · ╰── `progress` originates here 2026-10-24T22:14:10.5570146Z 67 │ useEffect(() => { 2026-10-24T22:14:10.5570348Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T22:14:10.5570551Z ·  ────┬─── 2026-10-24T22:14:10.5570790Z · ╰── `progress` cannot be modified 2026-10-24T22:14:10.5570994Z 69 │ }, [expanded, progress]); 2026-10-24T22:14:10.5571135Z ╰──── 2026-10-24T22:14:10.5571447Z  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-24T22:14:10.5572122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5572566Z 2026-10-24T22:14:10.5572786Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5573263Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T22:14:10.5573790Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T22:14:10.5574078Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T22:14:10.5574338Z ·  ───────────┬────────── 2026-10-24T22:14:10.5574658Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5575069Z 123 │ const sessionRef = useRef(null); 2026-10-24T22:14:10.5575299Z ╰──── 2026-10-24T22:14:10.5576019Z  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-24T22:14:10.5577157Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5577614Z 2026-10-24T22:14:10.5577793Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5578099Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T22:14:10.5578314Z 125 │ 2026-10-24T22:14:10.5578488Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T22:14:10.5578695Z ·  ─────────┬──────── 2026-10-24T22:14:10.5578939Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5579185Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T22:14:10.5579352Z ╰──── 2026-10-24T22:14:10.5579857Z  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-24T22:14:10.5580557Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5580830Z 2026-10-24T22:14:10.5580977Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5581278Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T22:14:10.5581489Z 125 │ 2026-10-24T22:14:10.5581652Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T22:14:10.5581854Z ·  ─────────┬───────── 2026-10-24T22:14:10.5582096Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5582339Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T22:14:10.5582507Z ╰──── 2026-10-24T22:14:10.5583090Z  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-24T22:14:10.5583796Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5584079Z 2026-10-24T22:14:10.5584219Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5584520Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T22:14:10.5584756Z 125 │ 2026-10-24T22:14:10.5584923Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T22:14:10.5585155Z ·  ─────────┬───────── 2026-10-24T22:14:10.5585453Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5585714Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T22:14:10.5585878Z ╰──── 2026-10-24T22:14:10.5586469Z  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-24T22:14:10.5587232Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5587507Z 2026-10-24T22:14:10.5587649Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5587945Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T22:14:10.5588157Z 125 │ 2026-10-24T22:14:10.5588318Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T22:14:10.5588551Z ·  ──────────┬───────── 2026-10-24T22:14:10.5588827Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5589086Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T22:14:10.5589251Z ╰──── 2026-10-24T22:14:10.5589759Z  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-24T22:14:10.5590452Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5590729Z 2026-10-24T22:14:10.5590869Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5591170Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T22:14:10.5591442Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T22:14:10.5591752Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T22:14:10.5592105Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T22:14:10.5592402Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T22:14:10.5592692Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T22:14:10.5592965Z 131 │ │ isFinished: status.isFinished, 2026-10-24T22:14:10.5593265Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T22:14:10.5593547Z 133 │ │ error: status.error, 2026-10-24T22:14:10.5593763Z 134 │ │ url: status.url, 2026-10-24T22:14:10.5593953Z 135 │ │ }); 2026-10-24T22:14:10.5594140Z 136 │ │ }, 2026-10-24T22:14:10.5594425Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T22:14:10.5594767Z 138 │ │ selectInput: (inputs) => { 2026-10-24T22:14:10.5595038Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T22:14:10.5595335Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T22:14:10.5595648Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T22:14:10.5596016Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T22:14:10.5596296Z 143 │ │ if (order !== known) { 2026-10-24T22:14:10.5596545Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T22:14:10.5596805Z 145 │ │ transform: (current) => ({ 2026-10-24T22:14:10.5597129Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T22:14:10.5597417Z 147 │ │ }), 2026-10-24T22:14:10.5597597Z 148 │ │ }); 2026-10-24T22:14:10.5597772Z 149 │ │ } 2026-10-24T22:14:10.5598004Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T22:14:10.5598234Z 151 │ │ }, 2026-10-24T22:14:10.5598459Z 152 │ ├─▶ }); 2026-10-24T22:14:10.5598823Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.5599119Z 153 │ recorderRef.current = recorder; 2026-10-24T22:14:10.5599279Z ╰──── 2026-10-24T22:14:10.5599789Z  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-24T22:14:10.5600491Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5600767Z 2026-10-24T22:14:10.5600913Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5601221Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T22:14:10.5601438Z 152 │ }); 2026-10-24T22:14:10.5601589Z 153 │ recorderRef.current = recorder; 2026-10-24T22:14:10.5601803Z ·  ─────┬─────────┬─── 2026-10-24T22:14:10.5602098Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.5602380Z · ╰── This value is a ref 2026-10-24T22:14:10.5602604Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T22:14:10.5602772Z ╰──── 2026-10-24T22:14:10.5603705Z  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-24T22:14:10.5604404Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5604701Z 2026-10-24T22:14:10.5604845Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5605146Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T22:14:10.5605392Z 153 │ recorderRef.current = recorder; 2026-10-24T22:14:10.5605682Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T22:14:10.5605949Z 155 │ │ recorder, 2026-10-24T22:14:10.5606241Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T22:14:10.5606530Z 157 │ │ requestPermission: async () => { 2026-10-24T22:14:10.5606817Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T22:14:10.5607169Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T22:14:10.5607433Z 160 │ │ }, 2026-10-24T22:14:10.5607667Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T22:14:10.5607950Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T22:14:10.5608226Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T22:14:10.5608490Z 164 │ │ onStateChange: (nextState) => 2026-10-24T22:14:10.5608705Z 165 │ │ setState({ 2026-10-24T22:14:10.5608914Z 166 │ │ state: nextState, 2026-10-24T22:14:10.5609162Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T22:14:10.5609438Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T22:14:10.5609655Z 169 │ │ }), 2026-10-24T22:14:10.5609884Z 170 │ ├─▶ }); 2026-10-24T22:14:10.5610220Z · ╰──── Cannot access ref value during render 2026-10-24T22:14:10.5610468Z 171 │ } 2026-10-24T22:14:10.5610586Z ╰──── 2026-10-24T22:14:10.5611101Z  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-24T22:14:10.5611801Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5612074Z 2026-10-24T22:14:10.5612219Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5612525Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T22:14:10.5612775Z 153 │ recorderRef.current = recorder; 2026-10-24T22:14:10.5612978Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T22:14:10.5613213Z ·  ─────┬────────┬─── 2026-10-24T22:14:10.5613521Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.5613821Z · ╰── This value is a ref 2026-10-24T22:14:10.5614009Z 155 │ recorder, 2026-10-24T22:14:10.5614135Z ╰──── 2026-10-24T22:14:10.5614675Z  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-24T22:14:10.5615373Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5615644Z 2026-10-24T22:14:10.5615788Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5616144Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T22:14:10.5616527Z 184 │ return () => subscription.remove(); 2026-10-24T22:14:10.5616697Z 185 │ }, [controller]); 2026-10-24T22:14:10.5616858Z ·  ─────┬──── 2026-10-24T22:14:10.5617090Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5617289Z 186 │ 2026-10-24T22:14:10.5617400Z ╰──── 2026-10-24T22:14:10.5617917Z  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-24T22:14:10.5618617Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5618899Z 2026-10-24T22:14:10.5619045Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5619348Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T22:14:10.5619598Z 184 │ return () => subscription.remove(); 2026-10-24T22:14:10.5619765Z 185 │ }, [controller]); 2026-10-24T22:14:10.5619928Z ·  ──────┬───── 2026-10-24T22:14:10.5620161Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5620360Z 186 │ 2026-10-24T22:14:10.5620466Z ╰──── 2026-10-24T22:14:10.5620983Z  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-24T22:14:10.5621681Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5621957Z 2026-10-24T22:14:10.5622100Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5622399Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T22:14:10.5622619Z 191 │ }, 2026-10-24T22:14:10.5622755Z 192 │ [controller, recorder], 2026-10-24T22:14:10.5623242Z ·  ─────┬──── 2026-10-24T22:14:10.5623477Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5623679Z 193 │ ); 2026-10-24T22:14:10.5623793Z ╰──── 2026-10-24T22:14:10.5624308Z  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-24T22:14:10.5625049Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5625322Z 2026-10-24T22:14:10.5625466Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5625767Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T22:14:10.5626020Z 174 │ const controller = session.controller; 2026-10-24T22:14:10.5626213Z 175 │ const recorder = recorderRef.current; 2026-10-24T22:14:10.5626494Z ·  ─────────┬───────── 2026-10-24T22:14:10.5626800Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5627004Z 176 │ 2026-10-24T22:14:10.5627116Z ╰──── 2026-10-24T22:14:10.5627620Z  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-24T22:14:10.5628317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5628593Z 2026-10-24T22:14:10.5628737Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5629044Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T22:14:10.5629262Z 191 │ }, 2026-10-24T22:14:10.5629401Z 192 │ [controller, recorder], 2026-10-24T22:14:10.5629579Z ·  ───────────┬────────── 2026-10-24T22:14:10.5629829Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5630030Z 193 │ ); 2026-10-24T22:14:10.5630145Z ╰──── 2026-10-24T22:14:10.5630655Z  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-24T22:14:10.5631352Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5631628Z 2026-10-24T22:14:10.5631776Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5632083Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T22:14:10.5632334Z 245 │ return () => clearInterval(intervalId); 2026-10-24T22:14:10.5632554Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T22:14:10.5632763Z ·  ─────┬──── 2026-10-24T22:14:10.5633019Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5633224Z 247 │ 2026-10-24T22:14:10.5633333Z ╰──── 2026-10-24T22:14:10.5633907Z  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-24T22:14:10.5634649Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5634951Z 2026-10-24T22:14:10.5635094Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5635399Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T22:14:10.5635650Z 245 │ return () => clearInterval(intervalId); 2026-10-24T22:14:10.5635867Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T22:14:10.5636124Z ·  ────────────────────────┬─────────────────────── 2026-10-24T22:14:10.5636417Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5636624Z 247 │ 2026-10-24T22:14:10.5636739Z ╰──── 2026-10-24T22:14:10.5637246Z  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-24T22:14:10.5637943Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5638215Z 2026-10-24T22:14:10.5638360Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5638663Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T22:14:10.5638898Z 260 │ setOwnerFocused, 2026-10-24T22:14:10.5639047Z 261 │ session, 2026-10-24T22:14:10.5639194Z ·  ───┬─── 2026-10-24T22:14:10.5639421Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.5639621Z 262 │ stop, 2026-10-24T22:14:10.5639741Z ╰──── 2026-10-24T22:14:10.5640255Z  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-24T22:14:10.5640954Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5641231Z 2026-10-24T22:14:10.5641376Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5641685Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T22:14:10.5641907Z 250 │ 2026-10-24T22:14:10.5642112Z 251 │ ╭─▶ return { 2026-10-24T22:14:10.5642465Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T22:14:10.5642744Z 253 │ │ state, 2026-10-24T22:14:10.5642936Z 254 │ │ audioLevels, 2026-10-24T22:14:10.5643132Z 255 │ │ elapsedSeconds, 2026-10-24T22:14:10.5643374Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T22:14:10.5643597Z 257 │ │ ownerKey, 2026-10-24T22:14:10.5643799Z 258 │ │ label, 2026-10-24T22:14:10.5643993Z 259 │ │ focusedOwners, 2026-10-24T22:14:10.5644256Z 260 │ │ setOwnerFocused, 2026-10-24T22:14:10.5644472Z 261 │ │ session, 2026-10-24T22:14:10.5658845Z 262 │ │ stop, 2026-10-24T22:14:10.5659032Z 263 │ │ cancel, 2026-10-24T22:14:10.5659268Z 264 │ ├─▶ }; 2026-10-24T22:14:10.5659604Z · ╰──── Cannot access ref value during render 2026-10-24T22:14:10.5659846Z 265 │ } 2026-10-24T22:14:10.5659961Z ╰──── 2026-10-24T22:14:10.5660483Z  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-24T22:14:10.5661197Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5661477Z 2026-10-24T22:14:10.5661638Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5661952Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T22:14:10.5662271Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T22:14:10.5662555Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T22:14:10.5662769Z ·  ─────┬───── 2026-10-24T22:14:10.5663177Z · ╰── `audioLevels` originates here 2026-10-24T22:14:10.5663501Z 123 │ const sessionRef = useRef(null); 2026-10-24T22:14:10.5663780Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T22:14:10.5663987Z 125 │ 2026-10-24T22:14:10.5664149Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T22:14:10.5664367Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T22:14:10.5664666Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T22:14:10.5664909Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T22:14:10.5665141Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T22:14:10.5665360Z 131 │ isFinished: status.isFinished, 2026-10-24T22:14:10.5665608Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T22:14:10.5665834Z 133 │ error: status.error, 2026-10-24T22:14:10.5665997Z 134 │ url: status.url, 2026-10-24T22:14:10.5666149Z 135 │ }); 2026-10-24T22:14:10.5666276Z 136 │ }, 2026-10-24T22:14:10.5666505Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T22:14:10.5666748Z 138 │ selectInput: (inputs) => { 2026-10-24T22:14:10.5666967Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T22:14:10.5667213Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T22:14:10.5667472Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T22:14:10.5667717Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T22:14:10.5667912Z 143 │ if (order !== known) { 2026-10-24T22:14:10.5668109Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T22:14:10.5668313Z 145 │ transform: (current) => ({ 2026-10-24T22:14:10.5668701Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T22:14:10.5668982Z 147 │ }), 2026-10-24T22:14:10.5669116Z 148 │ }); 2026-10-24T22:14:10.5669245Z 149 │ } 2026-10-24T22:14:10.5669423Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T22:14:10.5669600Z 151 │ }, 2026-10-24T22:14:10.5669723Z 152 │ }); 2026-10-24T22:14:10.5669869Z 153 │ recorderRef.current = recorder; 2026-10-24T22:14:10.5670073Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T22:14:10.5670249Z 155 │ recorder, 2026-10-24T22:14:10.5670421Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T22:14:10.5670616Z 157 │ requestPermission: async () => { 2026-10-24T22:14:10.5670848Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T22:14:10.5671152Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T22:14:10.5671373Z 160 │ }, 2026-10-24T22:14:10.5671548Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T22:14:10.5671773Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T22:14:10.5671997Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T22:14:10.5672192Z 164 │ onStateChange: (nextState) => 2026-10-24T22:14:10.5672357Z 165 │ setState({ 2026-10-24T22:14:10.5672508Z 166 │ state: nextState, 2026-10-24T22:14:10.5672701Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T22:14:10.5672918Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T22:14:10.5673088Z 169 │ }), 2026-10-24T22:14:10.5673215Z 170 │ }); 2026-10-24T22:14:10.5673331Z 171 │ } 2026-10-24T22:14:10.5673452Z 172 │ 2026-10-24T22:14:10.5673595Z 173 │ const session = sessionRef.current; 2026-10-24T22:14:10.5673784Z 174 │ const controller = session.controller; 2026-10-24T22:14:10.5674010Z 175 │ const recorder = recorderRef.current; 2026-10-24T22:14:10.5674167Z 176 │ 2026-10-24T22:14:10.5674288Z 177 │ useEffect(() => { 2026-10-24T22:14:10.5674517Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T22:14:10.5674862Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T22:14:10.5675144Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T22:14:10.5675398Z 181 │ // calls and route interruptions during capture. 2026-10-24T22:14:10.5675648Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T22:14:10.5675861Z 183 │ }); 2026-10-24T22:14:10.5676012Z 184 │ return () => subscription.remove(); 2026-10-24T22:14:10.5676181Z 185 │ }, [controller]); 2026-10-24T22:14:10.5676314Z 186 │ 2026-10-24T22:14:10.5676437Z 187 │ useEffect( 2026-10-24T22:14:10.5676570Z 188 │ () => () => { 2026-10-24T22:14:10.5676722Z 189 │ controller.dispose(); 2026-10-24T22:14:10.5676882Z 190 │ recorder.release(); 2026-10-24T22:14:10.5677021Z 191 │ }, 2026-10-24T22:14:10.5677159Z 192 │ [controller, recorder], 2026-10-24T22:14:10.5677300Z 193 │ ); 2026-10-24T22:14:10.5677414Z 194 │ 2026-10-24T22:14:10.5677535Z 195 │ useEffect(() => { 2026-10-24T22:14:10.5677706Z 196 │ if (state.phase !== "recording") return; 2026-10-24T22:14:10.5677866Z 197 │ 2026-10-24T22:14:10.5678069Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T22:14:10.5678401Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T22:14:10.5678631Z 200 │ void activation.catch(() => {}); 2026-10-24T22:14:10.5678794Z 201 │ return () => { 2026-10-24T22:14:10.5679022Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T22:14:10.5679316Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T22:14:10.5679519Z 204 │ }; 2026-10-24T22:14:10.5679666Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T22:14:10.5679813Z 206 │ 2026-10-24T22:14:10.5679934Z 207 │ useEffect(() => { 2026-10-24T22:14:10.5680147Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T22:14:10.5680340Z 209 │ 2026-10-24T22:14:10.5680519Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T22:14:10.5680807Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T22:14:10.5681075Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T22:14:10.5681272Z ·  ─────┬───── 2026-10-24T22:14:10.5681509Z · ╰── `audioLevels` cannot be modified 2026-10-24T22:14:10.5681704Z 213 │ } 2026-10-24T22:14:10.5681821Z ╰──── 2026-10-24T22:14:10.5682143Z  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-24T22:14:10.5682698Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5682987Z 2026-10-24T22:14:10.5683197Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T22:14:10.5683555Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T22:14:10.5683768Z 206 │ 2026-10-24T22:14:10.5683893Z 207 │ useEffect(() => { 2026-10-24T22:14:10.5684052Z ·  ───┬─── 2026-10-24T22:14:10.5684372Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T22:14:10.5684752Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T22:14:10.5684948Z 209 │ 2026-10-24T22:14:10.5685131Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T22:14:10.5685415Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T22:14:10.5685683Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T22:14:10.5685884Z ·  ─────┬───── 2026-10-24T22:14:10.5686113Z · ╰── This modifies `audioLevels` 2026-10-24T22:14:10.5686302Z 213 │ } 2026-10-24T22:14:10.5686422Z ╰──── 2026-10-24T22:14:10.5686818Z  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-24T22:14:10.5687431Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5687715Z 2026-10-24T22:14:10.5687863Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.5688180Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T22:14:10.5688491Z 26 │ const latestInput = useRef(input); 2026-10-24T22:14:10.5688702Z 27 │ latestInput.current = input; 2026-10-24T22:14:10.5688910Z ·  ─────┬─────────┬─── 2026-10-24T22:14:10.5689209Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.5689496Z · ╰── This value is a ref 2026-10-24T22:14:10.5689689Z 28 │ const mounted = useRef(true); 2026-10-24T22:14:10.5689834Z ╰──── 2026-10-24T22:14:10.5690344Z  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-24T22:14:10.5691052Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.5691328Z 2026-10-24T22:14:10.5691549Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T22:14:10.5691895Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T22:14:10.5692103Z 113 │ const declared = { 2026-10-24T22:14:10.5692284Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T22:14:10.5692504Z ·  ──────────────────────────────── 2026-10-24T22:14:10.5692729Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T22:14:10.5692897Z ╰──── 2026-10-24T22:14:10.5693224Z  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-24T22:14:10.5693477Z 2026-10-24T22:14:10.5693690Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T22:14:10.5694031Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T22:14:10.5694251Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T22:14:10.5694460Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T22:14:10.5694727Z ·  ──────────────────────────────────────── 2026-10-24T22:14:10.5694949Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T22:14:10.5695113Z ╰──── 2026-10-24T22:14:10.5695430Z  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-24T22:14:10.5695677Z 2026-10-24T22:14:10.5695894Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T22:14:10.5696230Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T22:14:10.5696465Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T22:14:10.5696675Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T22:14:10.5696903Z ·  ──────────────────────────────────── 2026-10-24T22:14:10.5697085Z 117 │ }; 2026-10-24T22:14:10.5697203Z ╰──── 2026-10-24T22:14:10.5697514Z  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-24T22:14:10.5697763Z 2026-10-24T22:14:10.5697930Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.5698345Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T22:14:10.5698623Z 52 │ 2026-10-24T22:14:10.5698743Z 53 │ for (const {} of [ 2026-10-24T22:14:10.5698895Z ·  ── 2026-10-24T22:14:10.5699048Z 54 │ { healthy: true }, 2026-10-24T22:14:10.5699185Z ╰──── 2026-10-24T22:14:10.5699467Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.5699693Z 2026-10-24T22:14:10.5699974Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5700376Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12395:7] 2026-10-24T22:14:10.5700584Z 12394 │ 2026-10-24T22:14:10.5700793Z 12395 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T22:14:10.5701035Z ·  ────────┬─────── 2026-10-24T22:14:10.5701281Z · ╰── 'layerUnavailable' is declared here 2026-10-24T22:14:10.5701493Z 12396 │ OrchestratorV2, 2026-10-24T22:14:10.5701625Z ╰──── 2026-10-24T22:14:10.5701782Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5701901Z 2026-10-24T22:14:10.5702156Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5702567Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T22:14:10.5702789Z 118 │ 2026-10-24T22:14:10.5703187Z 119 │ useEffect(() => { 2026-10-24T22:14:10.5703340Z ·  ────┬──── 2026-10-24T22:14:10.5703561Z · ╰── This is the containing effect 2026-10-24T22:14:10.5703785Z 120 │ if (orientationSettled) return; 2026-10-24T22:14:10.5703997Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T22:14:10.5704198Z 122 │ if (orientation === null) { 2026-10-24T22:14:10.5704373Z 123 │ setOrientationSettled(true); 2026-10-24T22:14:10.5704596Z ·  ──────────┬────────── 2026-10-24T22:14:10.5704884Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5705113Z 124 │ return; 2026-10-24T22:14:10.5705237Z ╰──── 2026-10-24T22:14:10.5705962Z  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-24T22:14:10.5706849Z  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-24T22:14:10.5707151Z 2026-10-24T22:14:10.5707406Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5707812Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T22:14:10.5708036Z 292 │ 2026-10-24T22:14:10.5708157Z 293 │ useEffect(() => { 2026-10-24T22:14:10.5708307Z ·  ────┬──── 2026-10-24T22:14:10.5708520Z · ╰── This is the containing effect 2026-10-24T22:14:10.5708715Z 294 │ if ( 2026-10-24T22:14:10.5708849Z 295 │ scene === null || 2026-10-24T22:14:10.5709004Z 296 │ requestedScene === null || 2026-10-24T22:14:10.5709177Z 297 │ scene !== requestedScene || 2026-10-24T22:14:10.5709337Z 298 │ !hasFixture || 2026-10-24T22:14:10.5709489Z 299 │ !orientationSettled || 2026-10-24T22:14:10.5709647Z 300 │ !themeApplied || 2026-10-24T22:14:10.5709844Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T22:14:10.5710109Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T22:14:10.5710309Z 303 │ ) { 2026-10-24T22:14:10.5710443Z 304 │ setReadyScene(null); 2026-10-24T22:14:10.5710608Z ·  ──────┬────── 2026-10-24T22:14:10.5710874Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5711105Z 305 │ return; 2026-10-24T22:14:10.5711237Z ╰──── 2026-10-24T22:14:10.5711888Z  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-24T22:14:10.5712729Z  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-24T22:14:10.5713028Z 2026-10-24T22:14:10.5713296Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5713727Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T22:14:10.5713966Z 127 │ let cancelled = false; 2026-10-24T22:14:10.5714147Z 128 │ let lastOutcome: string | null = null; 2026-10-24T22:14:10.5714331Z ·  ─────┬───── 2026-10-24T22:14:10.5714590Z · ╰── 'lastOutcome' is declared here 2026-10-24T22:14:10.5714936Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T22:14:10.5715177Z ╰──── 2026-10-24T22:14:10.5715333Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5715450Z 2026-10-24T22:14:10.5715647Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T22:14:10.5716007Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T22:14:10.5716304Z 1782 │ assert.equal( 2026-10-24T22:14:10.5716558Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T22:14:10.5716813Z ·  ────────────────────────── 2026-10-24T22:14:10.5717004Z 1784 │ stored.attachments[0]?.id, 2026-10-24T22:14:10.5717150Z ╰──── 2026-10-24T22:14:10.5717375Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T22:14:10.5717547Z 2026-10-24T22:14:10.5717743Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5718076Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1321:5] 2026-10-24T22:14:10.5718301Z 1320 │ queuedMessagesByThreadKey, 2026-10-24T22:14:10.5718463Z 1321 │ retryTick, 2026-10-24T22:14:10.5718611Z ·  ────┬──── 2026-10-24T22:14:10.5718844Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T22:14:10.5719059Z 1322 │ restoreQueuedMessage, 2026-10-24T22:14:10.5719201Z ╰──── 2026-10-24T22:14:10.5719544Z  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-24T22:14:10.5720129Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5720424Z 2026-10-24T22:14:10.5720874Z ⚠ 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-24T22:14:10.5721419Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T22:14:10.5721699Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T22:14:10.5722027Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T22:14:10.5722317Z ·  ──────────────────────── 2026-10-24T22:14:10.5722496Z 182 │ version: 1, 2026-10-24T22:14:10.5722623Z ╰──── 2026-10-24T22:14:10.5722681Z 2026-10-24T22:14:10.5722950Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5723334Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T22:14:10.5723532Z 913 │ 2026-10-24T22:14:10.5723786Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T22:14:10.5724054Z ·  ─────┬───── 2026-10-24T22:14:10.5724278Z · ╰── 'layerDaemon' is declared here 2026-10-24T22:14:10.5724501Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T22:14:10.5724707Z ╰──── 2026-10-24T22:14:10.5724860Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5724977Z 2026-10-24T22:14:10.5725164Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T22:14:10.5725487Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T22:14:10.5725695Z  80 │ 2026-10-24T22:14:10.5726023Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T22:14:10.5726443Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T22:14:10.5726716Z  83 │ │ ): Effect.fn.Return { 2026-10-24T22:14:10.5727011Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T22:14:10.5727309Z  85 │ │ const connections = new Map(); 2026-10-24T22:14:10.5727520Z  86 │ │ 2026-10-24T22:14:10.5727812Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T22:14:10.5728116Z  88 │ │ Effect.suspend(() => { 2026-10-24T22:14:10.5728358Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T22:14:10.5728609Z  90 │ │ return connection === undefined 2026-10-24T22:14:10.5728941Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T22:14:10.5729252Z  92 │ │ : Effect.succeed(connection); 2026-10-24T22:14:10.5729445Z  93 │ │ }); 2026-10-24T22:14:10.5729600Z  94 │ │ 2026-10-24T22:14:10.5729766Z  95 │ │ const send = ( 2026-10-24T22:14:10.5729958Z  96 │ │ connection: Connection, 2026-10-24T22:14:10.5730160Z  97 │ │ message: unknown, 2026-10-24T22:14:10.5730420Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T22:14:10.5730689Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T22:14:10.5730921Z 100 │ │ Effect.gen(function* () { 2026-10-24T22:14:10.5731162Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T22:14:10.5731428Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T22:14:10.5731787Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T22:14:10.5732063Z 104 │ │ } 2026-10-24T22:14:10.5732290Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T22:14:10.5732524Z 106 │ │ try: (signal) => 2026-10-24T22:14:10.5732762Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T22:14:10.5732999Z 108 │ │ method: "POST", 2026-10-24T22:14:10.5733208Z 109 │ │ signal, 2026-10-24T22:14:10.5733411Z 110 │ │ headers: { 2026-10-24T22:14:10.5733645Z 111 │ │ "content-type": "application/json", 2026-10-24T22:14:10.5733919Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T22:14:10.5734196Z 113 │ │ authorization: options.authorization, 2026-10-24T22:14:10.5734456Z 114 │ │ ...(connection.sessionId === null 2026-10-24T22:14:10.5734709Z 115 │ │ ? {} 2026-10-24T22:14:10.5734962Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T22:14:10.5735236Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T22:14:10.5735517Z 118 │ │ ? {} 2026-10-24T22:14:10.5735812Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T22:14:10.5736064Z 120 │ │ }, 2026-10-24T22:14:10.5736254Z 121 │ │ body, 2026-10-24T22:14:10.5736444Z 122 │ │ }), 2026-10-24T22:14:10.5736645Z 123 │ │ catch: bridgeError, 2026-10-24T22:14:10.5736841Z 124 │ │ }); 2026-10-24T22:14:10.5737153Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T22:14:10.5737461Z 126 │ │ if (!response.ok) { 2026-10-24T22:14:10.5737685Z 127 │ │ yield* Effect.promise( 2026-10-24T22:14:10.5737989Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T22:14:10.5738249Z 129 │ │ ); 2026-10-24T22:14:10.5738459Z 130 │ │ return yield* Effect.fail( 2026-10-24T22:14:10.5738790Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T22:14:10.5739072Z 132 │ │ ); 2026-10-24T22:14:10.5739244Z 133 │ │ } 2026-10-24T22:14:10.5739546Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T22:14:10.5739867Z 135 │ │ for (const payload of payloads) { 2026-10-24T22:14:10.5740215Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T22:14:10.5740507Z 137 │ │ } 2026-10-24T22:14:10.5740700Z 138 │ │ return payloads; 2026-10-24T22:14:10.5740938Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T22:14:10.5741146Z 140 │ │ ); 2026-10-24T22:14:10.5741311Z 141 │ │ 2026-10-24T22:14:10.5741574Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T22:14:10.5741879Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T22:14:10.5742198Z 144 │ │ ): Effect.fn.Return { 2026-10-24T22:14:10.5742550Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T22:14:10.5742856Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T22:14:10.5743298Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T22:14:10.5743665Z 148 │ │ if (sessionId !== null) { 2026-10-24T22:14:10.5743930Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T22:14:10.5744167Z 150 │ │ try: (signal) => 2026-10-24T22:14:10.5744409Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T22:14:10.5744686Z 152 │ │ method: "DELETE", 2026-10-24T22:14:10.5744889Z 153 │ │ signal, 2026-10-24T22:14:10.5745089Z 154 │ │ headers: { 2026-10-24T22:14:10.5745396Z 155 │ │ authorization: options.authorization, 2026-10-24T22:14:10.5745701Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T22:14:10.5745961Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T22:14:10.5746195Z 158 │ │ ? {} 2026-10-24T22:14:10.5746462Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T22:14:10.5746710Z 160 │ │ }, 2026-10-24T22:14:10.5746889Z 161 │ │ }), 2026-10-24T22:14:10.5747088Z 162 │ │ catch: bridgeError, 2026-10-24T22:14:10.5747275Z 163 │ │ }); 2026-10-24T22:14:10.5747510Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T22:14:10.5747763Z 165 │ │ return yield* Effect.fail( 2026-10-24T22:14:10.5747997Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T22:14:10.5748298Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T22:14:10.5748555Z 168 │ │ ), 2026-10-24T22:14:10.5748732Z 169 │ │ ); 2026-10-24T22:14:10.5748901Z 170 │ │ } 2026-10-24T22:14:10.5749098Z 171 │ │ yield* Effect.promise( 2026-10-24T22:14:10.5749388Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T22:14:10.5749646Z 173 │ │ ); 2026-10-24T22:14:10.5749820Z 174 │ │ } 2026-10-24T22:14:10.5750006Z 175 │ │ return {}; 2026-10-24T22:14:10.5750177Z 176 │ │ }); 2026-10-24T22:14:10.5750336Z 177 │ │ 2026-10-24T22:14:10.5750499Z 178 │ │ return { 2026-10-24T22:14:10.5750764Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T22:14:10.5751058Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T22:14:10.5751300Z 181 │ │ return yield* Effect.fail( 2026-10-24T22:14:10.5751606Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T22:14:10.5751866Z 183 │ │ ); 2026-10-24T22:14:10.5752038Z 184 │ │ } 2026-10-24T22:14:10.5752259Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T22:14:10.5752612Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T22:14:10.5752888Z 187 │ │ } 2026-10-24T22:14:10.5753139Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T22:14:10.5753409Z 189 │ │ connections.set(connectionId, { 2026-10-24T22:14:10.5753655Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T22:14:10.5753882Z 191 │ │ sessionId: null, 2026-10-24T22:14:10.5754101Z 192 │ │ protocolVersion: null, 2026-10-24T22:14:10.5754318Z 193 │ │ nextRequestId: 0, 2026-10-24T22:14:10.5754600Z 194 │ │ }); 2026-10-24T22:14:10.5754826Z 195 │ │ return { connectionId }; 2026-10-24T22:14:10.5755017Z 196 │ │ }), 2026-10-24T22:14:10.5755276Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T22:14:10.5755612Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T22:14:10.5755899Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T22:14:10.5756155Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T22:14:10.5756386Z 201 │ │ jsonrpc: "2.0", 2026-10-24T22:14:10.5756576Z 202 │ │ id, 2026-10-24T22:14:10.5756776Z 203 │ │ method: request.method, 2026-10-24T22:14:10.5757050Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T22:14:10.5757291Z 205 │ │ }); 2026-10-24T22:14:10.5757571Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T22:14:10.5757875Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T22:14:10.5758106Z 208 │ │ if (envelope === null) { 2026-10-24T22:14:10.5758330Z 209 │ │ return yield* Effect.fail( 2026-10-24T22:14:10.5758636Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T22:14:10.5758900Z 211 │ │ ); 2026-10-24T22:14:10.5759069Z 212 │ │ } 2026-10-24T22:14:10.5759282Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T22:14:10.5759608Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T22:14:10.5759867Z 215 │ │ } 2026-10-24T22:14:10.5760128Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T22:14:10.5760369Z 217 │ │ }), 2026-10-24T22:14:10.5760652Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T22:14:10.5760996Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T22:14:10.5761265Z 220 │ │ yield* send(connection, { 2026-10-24T22:14:10.5761530Z 221 │ │ jsonrpc: "2.0", 2026-10-24T22:14:10.5761773Z 222 │ │ method: request.method, 2026-10-24T22:14:10.5762042Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T22:14:10.5762280Z 224 │ │ }); 2026-10-24T22:14:10.5762447Z 225 │ │ }), 2026-10-24T22:14:10.5762625Z 226 │ │ disconnect, 2026-10-24T22:14:10.5762830Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T22:14:10.5763048Z 228 │ │ Effect.forEach( 2026-10-24T22:14:10.5763261Z 229 │ │ [...connections.keys()], 2026-10-24T22:14:10.5763546Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T22:14:10.5763820Z 231 │ │ { discard: true }, 2026-10-24T22:14:10.5764009Z 232 │ │ ), 2026-10-24T22:14:10.5764179Z 233 │ │ ), 2026-10-24T22:14:10.5764342Z 234 │ │ }; 2026-10-24T22:14:10.5764596Z 235 │ ╰─▶ }); 2026-10-24T22:14:10.5764780Z ╰──── 2026-10-24T22:14:10.5765083Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T22:14:10.5765322Z 2026-10-24T22:14:10.5765529Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T22:14:10.5765871Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T22:14:10.5766067Z 21 │ 2026-10-24T22:14:10.5766288Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T22:14:10.5766541Z ·  ────────┬─────── 2026-10-24T22:14:10.5766788Z · ╰── 'summarizePayload' is declared here 2026-10-24T22:14:10.5767034Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T22:14:10.5767203Z ╰──── 2026-10-24T22:14:10.5767358Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5767474Z 2026-10-24T22:14:10.5767726Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5768140Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T22:14:10.5768362Z 55 │ 2026-10-24T22:14:10.5768485Z 56 │ useEffect(() => { 2026-10-24T22:14:10.5768635Z ·  ────┬──── 2026-10-24T22:14:10.5768857Z · ╰── This is the containing effect 2026-10-24T22:14:10.5769059Z 57 │ scheduler.reset(); 2026-10-24T22:14:10.5769240Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T22:14:10.5769436Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T22:14:10.5769652Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T22:14:10.5769859Z ·  ───────┬─────── 2026-10-24T22:14:10.5770121Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5770393Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T22:14:10.5770570Z ╰──── 2026-10-24T22:14:10.5771280Z  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-24T22:14:10.5772165Z  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-24T22:14:10.5772468Z 2026-10-24T22:14:10.5772671Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5773039Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T22:14:10.5773293Z 62 │ return () => scheduler.cancel(); 2026-10-24T22:14:10.5773497Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T22:14:10.5773737Z ·  ───┬─── ─────┬───── 2026-10-24T22:14:10.5774064Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T22:14:10.5774382Z · ╰── Unnecessary dependency `enabled` 2026-10-24T22:14:10.5774599Z 64 │ 2026-10-24T22:14:10.5774708Z ╰──── 2026-10-24T22:14:10.5775051Z  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-24T22:14:10.5775628Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5775920Z 2026-10-24T22:14:10.5776137Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T22:14:10.5776484Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T22:14:10.5776699Z 20 │ [instanceId]: { 2026-10-24T22:14:10.5776854Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T22:14:10.5777050Z ·  ──────────────────────────── 2026-10-24T22:14:10.5777228Z 22 │ [model]: options, 2026-10-24T22:14:10.5777361Z ╰──── 2026-10-24T22:14:10.5777674Z  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-24T22:14:10.5777926Z 2026-10-24T22:14:10.5778180Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5778607Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:107:5] 2026-10-24T22:14:10.5778846Z 104 │ 2026-10-24T22:14:10.5778980Z 105 │ useEffect(() => { 2026-10-24T22:14:10.5779139Z ·  ────┬──── 2026-10-24T22:14:10.5779361Z · ╰── This is the containing effect 2026-10-24T22:14:10.5779577Z 106 │ clearReviewCommentTarget(); 2026-10-24T22:14:10.5779774Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T22:14:10.5779988Z ·  ────────────────┬─────────────── 2026-10-24T22:14:10.5780271Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5780516Z 108 │ }, [selectedSection?.id]); 2026-10-24T22:14:10.5780658Z ╰──── 2026-10-24T22:14:10.5781367Z  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-24T22:14:10.5782247Z  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-24T22:14:10.5782546Z 2026-10-24T22:14:10.5782859Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5783321Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T22:14:10.5783556Z 109 │ 2026-10-24T22:14:10.5783679Z 110 │ useEffect(() => { 2026-10-24T22:14:10.5783830Z ·  ────┬──── 2026-10-24T22:14:10.5784038Z · ╰── This is the containing effect 2026-10-24T22:14:10.5784262Z 111 │ if (activeCommentTarget === null) { 2026-10-24T22:14:10.5784469Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T22:14:10.5784728Z ·  ────────────────┬─────────────── 2026-10-24T22:14:10.5785015Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5785243Z 113 │ } 2026-10-24T22:14:10.5785358Z ╰──── 2026-10-24T22:14:10.5786002Z  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-24T22:14:10.5786846Z  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-24T22:14:10.5787151Z 2026-10-24T22:14:10.5787347Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5787718Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T22:14:10.5787995Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T22:14:10.5788174Z 108 │ }, [selectedSection?.id]); 2026-10-24T22:14:10.5788352Z ·  ─────────┬───────── 2026-10-24T22:14:10.5788604Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T22:14:10.5788812Z 109 │ 2026-10-24T22:14:10.5788919Z ╰──── 2026-10-24T22:14:10.5789266Z  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-24T22:14:10.5789847Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5790139Z 2026-10-24T22:14:10.5790336Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5790658Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T22:14:10.5790880Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T22:14:10.5791084Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T22:14:10.5791351Z ·  ──────┬────── ────┬─── 2026-10-24T22:14:10.5791756Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T22:14:10.5792118Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T22:14:10.5792322Z 455 │ const { 2026-10-24T22:14:10.5792443Z ╰──── 2026-10-24T22:14:10.5792784Z  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-24T22:14:10.5793361Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5793651Z 2026-10-24T22:14:10.5793834Z ⚠ react(static-components): Cannot create components during render 2026-10-24T22:14:10.5794153Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T22:14:10.5794363Z 492 │ // same check. 2026-10-24T22:14:10.5794577Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T22:14:10.5794866Z ·  ─────────────┬───────────── 2026-10-24T22:14:10.5795162Z · ╰── The component is created during render here 2026-10-24T22:14:10.5795472Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T22:14:10.5795746Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T22:14:10.5796006Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T22:14:10.5796236Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T22:14:10.5796422Z 498 │ setIsPullRefreshing(true); 2026-10-24T22:14:10.5796595Z 499 │ await refreshSelectedSection(); 2026-10-24T22:14:10.5796774Z 500 │ setIsPullRefreshing(false); 2026-10-24T22:14:10.5796925Z 501 │ }; 2026-10-24T22:14:10.5797125Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T22:14:10.5797413Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T22:14:10.5797667Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T22:14:10.5797865Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T22:14:10.5798051Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T22:14:10.5798225Z 507 │ files: reviewFiles, 2026-10-24T22:14:10.5798408Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T22:14:10.5798653Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T22:14:10.5798852Z 510 │ : undefined, 2026-10-24T22:14:10.5799076Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T22:14:10.5799334Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T22:14:10.5799527Z 513 │ : undefined, 2026-10-24T22:14:10.5799654Z 514 │ }); 2026-10-24T22:14:10.5799904Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T22:14:10.5800220Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T22:14:10.5800423Z 517 │ environmentId, 2026-10-24T22:14:10.5800564Z 518 │ threadId, 2026-10-24T22:14:10.5800699Z 519 │ selectedSection, 2026-10-24T22:14:10.5800851Z 520 │ nativeReviewDiffData, 2026-10-24T22:14:10.5800989Z 521 │ }); 2026-10-24T22:14:10.5801154Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T22:14:10.5801355Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T22:14:10.5801555Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T22:14:10.5801736Z 525 │ diff: selectedSection?.diff, 2026-10-24T22:14:10.5801900Z 526 │ data: nativeReviewDiffData, 2026-10-24T22:14:10.5802061Z 527 │ collapsedFileIds, 2026-10-24T22:14:10.5802207Z 528 │ viewedFileIds, 2026-10-24T22:14:10.5802394Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T22:14:10.5802611Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T22:14:10.5802779Z 531 │ }); 2026-10-24T22:14:10.5802912Z 532 │ const showcaseReviewKey = 2026-10-24T22:14:10.5803132Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T22:14:10.5803477Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T22:14:10.5803743Z 535 │ : null; 2026-10-24T22:14:10.5803984Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T22:14:10.5804230Z 537 │ nativeBridge.onDebug(event); 2026-10-24T22:14:10.5804387Z 538 │ if ( 2026-10-24T22:14:10.5804536Z 539 │ showcaseReviewKey === null || 2026-10-24T22:14:10.5804804Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T22:14:10.5805043Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T22:14:10.5805222Z 542 │ ) { 2026-10-24T22:14:10.5805346Z 543 │ return; 2026-10-24T22:14:10.5805473Z 544 │ } 2026-10-24T22:14:10.5805646Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T22:14:10.5805929Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T22:14:10.5806153Z 547 │ }; 2026-10-24T22:14:10.5806265Z 548 │ 2026-10-24T22:14:10.5806449Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T22:14:10.5806659Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T22:14:10.5806847Z 551 │ commentSelection.clearSelection(); 2026-10-24T22:14:10.5807140Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T22:14:10.5807354Z 553 │ toggleExpandedFile(fileId); 2026-10-24T22:14:10.5807503Z 554 │ } 2026-10-24T22:14:10.5807677Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T22:14:10.5807874Z 556 │ if (!nativeView) return; 2026-10-24T22:14:10.5808053Z 557 │ const result = await settlePromise(() => 2026-10-24T22:14:10.5808333Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T22:14:10.5808562Z 559 │ ); 2026-10-24T22:14:10.5808716Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T22:14:10.5814507Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T22:14:10.5814828Z 562 │ } 2026-10-24T22:14:10.5814940Z 563 │ }; 2026-10-24T22:14:10.5815079Z 564 │ const handleVisibleFileChange = ( 2026-10-24T22:14:10.5815308Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T22:14:10.5815505Z 566 │ ) => { 2026-10-24T22:14:10.5815674Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T22:14:10.5815958Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T22:14:10.5816179Z 569 │ }; 2026-10-24T22:14:10.5816313Z 570 │ const renderInspector = () => ( 2026-10-24T22:14:10.5816476Z 571 │ void handleSelectFile(fileId)} 2026-10-24T22:14:10.5817588Z 577 │ /> 2026-10-24T22:14:10.5817704Z 578 │ ); 2026-10-24T22:14:10.5817815Z 579 │ 2026-10-24T22:14:10.5818059Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T22:14:10.5818331Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T22:14:10.5818501Z 582 │ if (fileId) { 2026-10-24T22:14:10.5818657Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T22:14:10.5818833Z 584 │ toggleExpandedFile(fileId); 2026-10-24T22:14:10.5818981Z 585 │ } 2026-10-24T22:14:10.5819092Z 586 │ }; 2026-10-24T22:14:10.5819205Z 587 │ 2026-10-24T22:14:10.5819356Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T22:14:10.5819581Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T22:14:10.5819767Z 590 │ ) => { 2026-10-24T22:14:10.5819917Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T22:14:10.5820078Z 592 │ if (fileId) { 2026-10-24T22:14:10.5820230Z 593 │ toggleViewedFile(fileId); 2026-10-24T22:14:10.5820375Z 594 │ } 2026-10-24T22:14:10.5820485Z 595 │ }; 2026-10-24T22:14:10.5820593Z 596 │ 2026-10-24T22:14:10.5820720Z 597 │ const parsedDiffNotice = 2026-10-24T22:14:10.5820969Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T22:14:10.5821250Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T22:14:10.5821548Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T22:14:10.5821830Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T22:14:10.5822121Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T22:14:10.5822397Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T22:14:10.5822620Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T22:14:10.5822886Z 605 │ hasCachedSelectedDiff, 2026-10-24T22:14:10.5823081Z 606 │ hasAnyCachedDiff, 2026-10-24T22:14:10.5823222Z 607 │ }); 2026-10-24T22:14:10.5823371Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T22:14:10.5823564Z 609 │ void retryEnvironment(environmentId); 2026-10-24T22:14:10.5823716Z 610 │ }; 2026-10-24T22:14:10.5823861Z 611 │ const handleReturnToThread = () => { 2026-10-24T22:14:10.5824035Z 612 │ if (navigation.canGoBack()) { 2026-10-24T22:14:10.5824279Z 613 │ navigation.goBack(); 2026-10-24T22:14:10.5824465Z 614 │ return; 2026-10-24T22:14:10.5824770Z 615 │ } 2026-10-24T22:14:10.5824853Z 616 │ navigation.navigate("Thread", { 2026-10-24T22:14:10.5824944Z 617 │ environmentId: String(environmentId), 2026-10-24T22:14:10.5825019Z 618 │ threadId: String(threadId), 2026-10-24T22:14:10.5825073Z 619 │ }); 2026-10-24T22:14:10.5825125Z 620 │ }; 2026-10-24T22:14:10.5825204Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T22:14:10.5825275Z 622 │ selectedSection?.title, 2026-10-24T22:14:10.5825352Z 623 │ headerDiffSummary.additions, 2026-10-24T22:14:10.5825430Z 624 │ headerDiffSummary.deletions, 2026-10-24T22:14:10.5825483Z 625 │ ] 2026-10-24T22:14:10.5825590Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T22:14:10.5825652Z 627 │ .join(" · "); 2026-10-24T22:14:10.5825709Z 628 │ 2026-10-24T22:14:10.5825791Z 629 │ const showChangedFilesPane = 2026-10-24T22:14:10.5825859Z 630 │ !showConnectionNotice && 2026-10-24T22:14:10.5825932Z 631 │ selectedSection !== null && 2026-10-24T22:14:10.5826010Z 632 │ parsedDiff.kind === "files" && 2026-10-24T22:14:10.5826089Z 633 │ NativeReviewDiffView !== null; 2026-10-24T22:14:10.5826254Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T22:14:10.5826422Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T22:14:10.5826474Z 636 │ 2026-10-24T22:14:10.5826545Z 637 │ const listHeader = (() => { 2026-10-24T22:14:10.5826627Z 638 │ const children: ReactElement[] = []; 2026-10-24T22:14:10.5826679Z 639 │ 2026-10-24T22:14:10.5826742Z 640 │ if (error) { 2026-10-24T22:14:10.5826814Z 641 │ children.push( 2026-10-24T22:14:10.5826874Z 642 │ 2026-10-24T22:14:10.5827518Z 649 │ Review unavailable 2026-10-24T22:14:10.5827672Z 650 │ {error} 2026-10-24T22:14:10.5827733Z 651 │ , 2026-10-24T22:14:10.5827789Z 652 │ ); 2026-10-24T22:14:10.5827842Z 653 │ } 2026-10-24T22:14:10.5827898Z 654 │ 2026-10-24T22:14:10.5827972Z 655 │ if (parsedDiffNotice) { 2026-10-24T22:14:10.5828127Z 656 │ children.push(); 2026-10-24T22:14:10.5828180Z 657 │ } 2026-10-24T22:14:10.5828231Z 658 │ 2026-10-24T22:14:10.5828308Z 659 │ if (children.length === 0) { 2026-10-24T22:14:10.5828372Z 660 │ return null; 2026-10-24T22:14:10.5828423Z 661 │ } 2026-10-24T22:14:10.5828475Z 662 │ 2026-10-24T22:14:10.5828546Z 663 │ return <>{children}; 2026-10-24T22:14:10.5828601Z 664 │ })(); 2026-10-24T22:14:10.5828667Z 665 │ const headerSubtitle = [ 2026-10-24T22:14:10.5828745Z 666 │ headerDiffSummary.additions, 2026-10-24T22:14:10.5828821Z 667 │ headerDiffSummary.deletions, 2026-10-24T22:14:10.5828901Z 668 │ pendingReviewCommentCount > 0 2026-10-24T22:14:10.5829122Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T22:14:10.5829219Z 670 │ : null, 2026-10-24T22:14:10.5829271Z 671 │ ] 2026-10-24T22:14:10.5829333Z 672 │ .filter(Boolean) 2026-10-24T22:14:10.5829396Z 673 │ .join(" · "); 2026-10-24T22:14:10.5829532Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T22:14:10.5829585Z 675 │ 2026-10-24T22:14:10.5829641Z 676 │ return ( 2026-10-24T22:14:10.5829695Z 677 │ <> 2026-10-24T22:14:10.5829758Z 678 │ 2026-10-24T22:14:10.5831049Z 694 │ 2026-10-24T22:14:10.5831113Z 695 │ 2026-10-24T22:14:10.5831238Z 696 │ 2026-10-24T22:14:10.5831319Z 697 │ {showConnectionNotice ? ( 2026-10-24T22:14:10.5831459Z 698 │ 2026-10-24T22:14:10.5831545Z 699 │ 2026-10-24T22:14:10.5832537Z 711 │ 2026-10-24T22:14:10.5832690Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T22:14:10.5832750Z 713 │ 2026-10-24T22:14:10.5833177Z 719 │ 2026-10-24T22:14:10.5833599Z 723 │ {listHeader} 2026-10-24T22:14:10.5833718Z 724 │ 2026-10-24T22:14:10.5833800Z 725 │ { 2026-10-24T22:14:10.5835625Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T22:14:10.5835726Z ·  ──────────────────────── 2026-10-24T22:14:10.5835792Z 18 │ "review:write", 2026-10-24T22:14:10.5835852Z ╰──── 2026-10-24T22:14:10.5835858Z 2026-10-24T22:14:10.5836214Z ⚠ 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-24T22:14:10.5836323Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T22:14:10.5836382Z 19 │ ]); 2026-10-24T22:14:10.5836540Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T22:14:10.5836646Z ·  ──────────────────────── 2026-10-24T22:14:10.5836773Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T22:14:10.5836826Z ╰──── 2026-10-24T22:14:10.5836829Z 2026-10-24T22:14:10.5837187Z ⚠ 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-24T22:14:10.5837299Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T22:14:10.5837464Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T22:14:10.5837586Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T22:14:10.5837693Z ·  ──────────────────────── 2026-10-24T22:14:10.5837763Z 59 │ authenticated: true, 2026-10-24T22:14:10.5837811Z ╰──── 2026-10-24T22:14:10.5837814Z 2026-10-24T22:14:10.5838030Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T22:14:10.5838165Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T22:14:10.5838233Z 1021 │ instanceId, 2026-10-24T22:14:10.5838418Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T22:14:10.5838586Z ·  ────────────────────────────────────────────────── 2026-10-24T22:14:10.5838648Z 1023 │ ]), 2026-10-24T22:14:10.5838700Z ╰──── 2026-10-24T22:14:10.5838964Z  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-24T22:14:10.5838967Z 2026-10-24T22:14:10.5839155Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.5839308Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T22:14:10.5839413Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T22:14:10.5839512Z 223 │ 2026-10-24T22:14:10.5839618Z ·  ─────────────── 2026-10-24T22:14:10.5839710Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T22:14:10.5839761Z ╰──── 2026-10-24T22:14:10.5839909Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T22:14:10.5839913Z 2026-10-24T22:14:10.5840100Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.5840246Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T22:14:10.5840319Z 226 │ { 2026-10-24T22:14:10.5841375Z ·  ────┬──── 2026-10-24T22:14:10.5841507Z · ╰── This is the containing effect 2026-10-24T22:14:10.5841607Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T22:14:10.5841688Z 103 │ setHighlightedLinesById({}); 2026-10-24T22:14:10.5841783Z ·  ───────────┬─────────── 2026-10-24T22:14:10.5841957Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5842018Z 104 │ return; 2026-10-24T22:14:10.5842069Z ╰──── 2026-10-24T22:14:10.5842658Z  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-24T22:14:10.5842979Z  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-24T22:14:10.5842982Z 2026-10-24T22:14:10.5843267Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T22:14:10.5843454Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:262:9] 2026-10-24T22:14:10.5843519Z 261 │ ): boolean { 2026-10-24T22:14:10.5843666Z 262 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T22:14:10.5843834Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T22:14:10.5843976Z 263 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T22:14:10.5844025Z ╰──── 2026-10-24T22:14:10.5844099Z  help: Switch to `Set` 2026-10-24T22:14:10.5844101Z 2026-10-24T22:14:10.5844264Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.5844398Z ╭─[apps/web/src/components/CommandPalette.tsx:2037:20] 2026-10-24T22:14:10.5844515Z 2036 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T22:14:10.5844638Z 2037 │ createdAt: new Date().toISOString(), 2026-10-24T22:14:10.5844725Z ·  ─────┬──── 2026-10-24T22:14:10.5844870Z · ╰── Cannot call impure function 2026-10-24T22:14:10.5844976Z 2038 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T22:14:10.5845028Z ╰──── 2026-10-24T22:14:10.5845300Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.5845589Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.5845598Z 2026-10-24T22:14:10.5845802Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T22:14:10.5845905Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T22:14:10.5845970Z 296 │ } from "./device.ts"; 2026-10-24T22:14:10.5846057Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T22:14:10.5846125Z ·  ── 2026-10-24T22:14:10.5846182Z 298 │ import { 2026-10-24T22:14:10.5846233Z ╰──── 2026-10-24T22:14:10.5846310Z  help: Remove empty braces 2026-10-24T22:14:10.5846313Z 2026-10-24T22:14:10.5846762Z ⚠ 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-24T22:14:10.5846934Z ╭─[packages/contracts/src/baseSchemas.test.ts:39:9] 2026-10-24T22:14:10.5847029Z 38 │ JSON.stringify( 2026-10-24T22:14:10.5847143Z 39 │ Schema.encodeUnknownSync(Schema.toCodecJson(Named))([ 2026-10-24T22:14:10.5847238Z ·  ──────────────────────── 2026-10-24T22:14:10.5847301Z 40 │ { name: "a" }, 2026-10-24T22:14:10.5847351Z ╰──── 2026-10-24T22:14:10.5847353Z 2026-10-24T22:14:10.5847603Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5847731Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T22:14:10.5847834Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T22:14:10.5847897Z 84 │ useEffect(() => { 2026-10-24T22:14:10.5847964Z ·  ────┬──── 2026-10-24T22:14:10.5848099Z · ╰── This is the containing effect 2026-10-24T22:14:10.5848190Z 85 │ if (!actionState.isRunning) return; 2026-10-24T22:14:10.5848255Z 86 │ setNowMs(Date.now()); 2026-10-24T22:14:10.5848322Z ·  ────┬─── 2026-10-24T22:14:10.5848485Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5848607Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T22:14:10.5848657Z ╰──── 2026-10-24T22:14:10.5849240Z  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-24T22:14:10.5849558Z  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-24T22:14:10.5849563Z 2026-10-24T22:14:10.5849770Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T22:14:10.5849891Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T22:14:10.5849989Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T22:14:10.5850070Z 259 │ for (const edit of edits.reverse()) 2026-10-24T22:14:10.5850161Z ·  ─────── 2026-10-24T22:14:10.5850321Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T22:14:10.5850370Z ╰──── 2026-10-24T22:14:10.5850627Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T22:14:10.5850634Z 2026-10-24T22:14:10.5850835Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T22:14:10.5850955Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T22:14:10.5851032Z 289 │ visit(parser.parse(markdown)); 2026-10-24T22:14:10.5851114Z 290 │ for (const edit of edits.reverse()) 2026-10-24T22:14:10.5851203Z ·  ─────── 2026-10-24T22:14:10.5851359Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T22:14:10.5851410Z ╰──── 2026-10-24T22:14:10.5851715Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T22:14:10.5851747Z 2026-10-24T22:14:10.5851947Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T22:14:10.5852065Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T22:14:10.5852146Z 343 │ visit(parser.parse(markdown)); 2026-10-24T22:14:10.5852249Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T22:14:10.5852347Z ·  ─────── 2026-10-24T22:14:10.5852506Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T22:14:10.5852555Z ╰──── 2026-10-24T22:14:10.5852806Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T22:14:10.5852809Z 2026-10-24T22:14:10.5853043Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T22:14:10.5853162Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:517:11] 2026-10-24T22:14:10.5853258Z 516 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T22:14:10.5853392Z 517 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T22:14:10.5853475Z ·  ─────────────── 2026-10-24T22:14:10.5853530Z 518 │ ) 2026-10-24T22:14:10.5853580Z ╰──── 2026-10-24T22:14:10.5853730Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T22:14:10.5853732Z 2026-10-24T22:14:10.5854083Z ⚠ 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-24T22:14:10.5854217Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T22:14:10.5854350Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T22:14:10.5854494Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T22:14:10.5854760Z ·  ─────────────────── 2026-10-24T22:14:10.5854821Z 1787 │ cwd, 2026-10-24T22:14:10.5854874Z ╰──── 2026-10-24T22:14:10.5854876Z 2026-10-24T22:14:10.5855150Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T22:14:10.5855276Z ╭─[packages/provider-cursor/src/server/auth.ts:249:20] 2026-10-24T22:14:10.5855329Z 248 │ }, 2026-10-24T22:14:10.5855415Z 249 │ (effect, flow, stopSessions) => 2026-10-24T22:14:10.5855507Z ·  ──────┬───── 2026-10-24T22:14:10.5855653Z · ╰── 'stopSessions' is declared here 2026-10-24T22:14:10.5855715Z 250 │ effect.pipe( 2026-10-24T22:14:10.5855765Z ╰──── 2026-10-24T22:14:10.5855863Z  help: Consider removing this parameter. 2026-10-24T22:14:10.5855865Z 2026-10-24T22:14:10.5856136Z ⚠ eslint(no-unused-vars): Variable 'legacyCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5856287Z ╭─[packages/provider-cursor/src/server/credentialStore.test.ts:15:7] 2026-10-24T22:14:10.5856340Z 14 │ 2026-10-24T22:14:10.5856409Z 15 │ const legacyCredentials = { 2026-10-24T22:14:10.5856541Z ·  ────────┬──────── 2026-10-24T22:14:10.5856717Z · ╰── 'legacyCredentials' is declared here 2026-10-24T22:14:10.5856783Z 16 │ version: 1 as const, 2026-10-24T22:14:10.5856833Z ╰──── 2026-10-24T22:14:10.5856934Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5856936Z 2026-10-24T22:14:10.5857098Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.5857216Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T22:14:10.5857269Z 265 │ 2026-10-24T22:14:10.5857371Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T22:14:10.5857439Z ·  ── 2026-10-24T22:14:10.5857491Z 267 │ } 2026-10-24T22:14:10.5857539Z ╰──── 2026-10-24T22:14:10.5857770Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.5857775Z 2026-10-24T22:14:10.5858048Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T22:14:10.5858212Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T22:14:10.5858271Z 472 │ onFilters, 2026-10-24T22:14:10.5858335Z 473 │ authorOptions = [], 2026-10-24T22:14:10.5858409Z ·  ── 2026-10-24T22:14:10.5858473Z 474 │ labelOptions = [], 2026-10-24T22:14:10.5858521Z ╰──── 2026-10-24T22:14:10.5858831Z  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-24T22:14:10.5858833Z 2026-10-24T22:14:10.5859111Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T22:14:10.5859274Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T22:14:10.5859338Z 473 │ authorOptions = [], 2026-10-24T22:14:10.5859401Z 474 │ labelOptions = [], 2026-10-24T22:14:10.5859474Z ·  ── 2026-10-24T22:14:10.5859534Z 475 │ optionScope, 2026-10-24T22:14:10.5859583Z ╰──── 2026-10-24T22:14:10.5859887Z  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-24T22:14:10.5859890Z 2026-10-24T22:14:10.5860355Z ⚠ 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-24T22:14:10.5860500Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T22:14:10.5860629Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T22:14:10.5860771Z 133 │ ╭─▶ for ( 2026-10-24T22:14:10.5860872Z 134 │ │ let attempt = 0; 2026-10-24T22:14:10.5861035Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T22:14:10.5861131Z 136 │ │ attempt += 1 2026-10-24T22:14:10.5861209Z 137 │ │ ) { 2026-10-24T22:14:10.5861370Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5861531Z 139 │ ╰─▶ } 2026-10-24T22:14:10.5861651Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T22:14:10.5861700Z ╰──── 2026-10-24T22:14:10.5861703Z 2026-10-24T22:14:10.5861867Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T22:14:10.5862020Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1437:12] 2026-10-24T22:14:10.5862071Z 1436 │ 2026-10-24T22:14:10.5862135Z 1437 │ for (const [] of [ 2026-10-24T22:14:10.5862205Z ·  ── 2026-10-24T22:14:10.5862277Z 1438 │ ["github", "github.com"], 2026-10-24T22:14:10.5862326Z ╰──── 2026-10-24T22:14:10.5862604Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T22:14:10.5862609Z 2026-10-24T22:14:10.5862877Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5863089Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T22:14:10.5863139Z 150 │ 2026-10-24T22:14:10.5863204Z 151 │ useEffect(() => { 2026-10-24T22:14:10.5863275Z ·  ────┬──── 2026-10-24T22:14:10.5863403Z · ╰── This is the containing effect 2026-10-24T22:14:10.5863484Z 152 │ if (!controlledSelectedPath) { 2026-10-24T22:14:10.5863545Z 153 │ return; 2026-10-24T22:14:10.5863598Z 154 │ } 2026-10-24T22:14:10.5863678Z 155 │ setExpandedPaths((current) => { 2026-10-24T22:14:10.5863760Z ·  ────────┬─────── 2026-10-24T22:14:10.5863930Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5864051Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T22:14:10.5864100Z ╰──── 2026-10-24T22:14:10.5864722Z  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-24T22:14:10.5865037Z  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-24T22:14:10.5865040Z 2026-10-24T22:14:10.5865247Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T22:14:10.5865371Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T22:14:10.5865421Z 78 │ 2026-10-24T22:14:10.5865553Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T22:14:10.5865636Z ·  ────────┬─────── 2026-10-24T22:14:10.5865784Z · ╰── 'describeSchedule' is declared here 2026-10-24T22:14:10.5865888Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T22:14:10.5865937Z ╰──── 2026-10-24T22:14:10.5866037Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5866040Z 2026-10-24T22:14:10.5866241Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T22:14:10.5866403Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T22:14:10.5866572Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T22:14:10.5866682Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T22:14:10.5866766Z ·  ──────┬────── 2026-10-24T22:14:10.5866906Z · ╰── 'HookForwarder' is imported here 2026-10-24T22:14:10.5867004Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T22:14:10.5867054Z ╰──── 2026-10-24T22:14:10.5867149Z  help: Consider removing this import. 2026-10-24T22:14:10.5867151Z 2026-10-24T22:14:10.5867346Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5867493Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T22:14:10.5867589Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T22:14:10.5867667Z 257 │ }, [props.path, targetIndex]); 2026-10-24T22:14:10.5867743Z ·  ─────┬──── 2026-10-24T22:14:10.5867885Z · ╰── Unnecessary dependency `props.path` 2026-10-24T22:14:10.5867937Z 258 │ 2026-10-24T22:14:10.5867987Z ╰──── 2026-10-24T22:14:10.5868275Z  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-24T22:14:10.5868578Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5868582Z 2026-10-24T22:14:10.5868773Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.5868921Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T22:14:10.5868991Z 292 │ 2026-10-24T22:14:10.5870106Z ·  ─────────── 2026-10-24T22:14:10.5870170Z 310 │ {body} 2026-10-24T22:14:10.5870221Z ╰──── 2026-10-24T22:14:10.5870360Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T22:14:10.5870363Z 2026-10-24T22:14:10.5870633Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T22:14:10.5870759Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T22:14:10.5870812Z 284 │ }, 2026-10-24T22:14:10.5870891Z 285 │ (effect, flow, stopSessions) => 2026-10-24T22:14:10.5870983Z ·  ──────┬───── 2026-10-24T22:14:10.5871132Z · ╰── 'stopSessions' is declared here 2026-10-24T22:14:10.5871195Z 286 │ effect.pipe( 2026-10-24T22:14:10.5871244Z ╰──── 2026-10-24T22:14:10.5871341Z  help: Consider removing this parameter. 2026-10-24T22:14:10.5871344Z 2026-10-24T22:14:10.5871607Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T22:14:10.5871746Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T22:14:10.5871899Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T22:14:10.5871975Z 12 │ this.onmessage = listener; 2026-10-24T22:14:10.5872053Z ·  ───────── 2026-10-24T22:14:10.5872112Z 13 │ } 2026-10-24T22:14:10.5872164Z ╰──── 2026-10-24T22:14:10.5872470Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T22:14:10.5872472Z 2026-10-24T22:14:10.5872673Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T22:14:10.5872809Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T22:14:10.5872873Z 15 │ constructor() { 2026-10-24T22:14:10.5872935Z 16 │ source = this; 2026-10-24T22:14:10.5873005Z ·  ────── 2026-10-24T22:14:10.5873057Z 17 │ } 2026-10-24T22:14:10.5873106Z ╰──── 2026-10-24T22:14:10.5873375Z  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-24T22:14:10.5873382Z 2026-10-24T22:14:10.5873565Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T22:14:10.5873689Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T22:14:10.5873800Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T22:14:10.5873866Z 187 │ let next = initial; 2026-10-24T22:14:10.5873932Z ·  ──┬─ 2026-10-24T22:14:10.5874052Z · ╰── From this accumulator 2026-10-24T22:14:10.5874131Z 188 │ let receivedSnapshot = false; 2026-10-24T22:14:10.5874202Z 189 │ for (const item of items) { 2026-10-24T22:14:10.5874268Z ·  ─┬─ 2026-10-24T22:14:10.5874370Z · ╰── For this loop 2026-10-24T22:14:10.5874506Z 190 │ if (item.kind === "synchronized") { 2026-10-24T22:14:10.5874616Z 191 │ waiting = false; 2026-10-24T22:14:10.5874723Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T22:14:10.5874837Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T22:14:10.5874922Z ·  ───┬─── 2026-10-24T22:14:10.5875045Z · ╰── From this spread 2026-10-24T22:14:10.5875102Z 194 │ } 2026-10-24T22:14:10.5875153Z ╰──── 2026-10-24T22:14:10.5875303Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T22:14:10.5875454Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T22:14:10.5875457Z 2026-10-24T22:14:10.5875660Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T22:14:10.5875789Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T22:14:10.5875859Z 2 │ AuthFilesystemReadScope, 2026-10-24T22:14:10.5875925Z 3 │ type AuthSessionState, 2026-10-24T22:14:10.5876006Z ·  ────────┬─────── 2026-10-24T22:14:10.5876148Z · ╰── 'AuthSessionState' is imported here 2026-10-24T22:14:10.5876220Z 4 │ type FilesystemBrowseEntry, 2026-10-24T22:14:10.5876269Z ╰──── 2026-10-24T22:14:10.5876365Z  help: Consider removing this import. 2026-10-24T22:14:10.5876368Z 2026-10-24T22:14:10.5876628Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5876761Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T22:14:10.5876815Z 339 │ 2026-10-24T22:14:10.5876912Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T22:14:10.5876984Z ·  ────┬──── 2026-10-24T22:14:10.5877114Z · ╰── 'layerTest' is declared here 2026-10-24T22:14:10.5877164Z ╰──── 2026-10-24T22:14:10.5877263Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5877265Z 2026-10-24T22:14:10.5877462Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T22:14:10.5877583Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T22:14:10.5877679Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T22:14:10.5877843Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T22:14:10.5877973Z 159 │ │ constructor(data: Record) { 2026-10-24T22:14:10.5878087Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T22:14:10.5878158Z 161 │ │ } 2026-10-24T22:14:10.5878280Z 162 │ ╰─▶ }, 2026-10-24T22:14:10.5878344Z 163 │ clipboard: { 2026-10-24T22:14:10.5878395Z ╰──── 2026-10-24T22:14:10.5878563Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T22:14:10.5878566Z 2026-10-24T22:14:10.5878757Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T22:14:10.5878857Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T22:14:10.5878989Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T22:14:10.5879104Z 28 │ import { identity } from "effect/Function"; 2026-10-24T22:14:10.5879177Z ·  ────┬─── 2026-10-24T22:14:10.5879307Z · ╰── 'identity' is imported here 2026-10-24T22:14:10.5879388Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T22:14:10.5879437Z ╰──── 2026-10-24T22:14:10.5879529Z  help: Consider removing this import. 2026-10-24T22:14:10.5879532Z 2026-10-24T22:14:10.5879727Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5879886Z ╭─[apps/mobile/src/features/workspace/WorkspaceToolbar.ios.tsx:114:33] 2026-10-24T22:14:10.5879979Z 113 │ return () => cancelAnimationFrame(frame); 2026-10-24T22:14:10.5880073Z 114 │ }, [restoreSearch, tabActive, bottomSearch]); 2026-10-24T22:14:10.5880183Z ·  ──────┬───── 2026-10-24T22:14:10.5880350Z · ╰── Unnecessary dependency `bottomSearch` 2026-10-24T22:14:10.5880454Z 115 │ const composeButton = nativeToolbarCompose ? ( 2026-10-24T22:14:10.5880502Z ╰──── 2026-10-24T22:14:10.5880796Z  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-24T22:14:10.5881106Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5881108Z 2026-10-24T22:14:10.5881472Z ⚠ 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-24T22:14:10.5881595Z ╭─[apps/server/src/auth/RpcAuthorization.ts:237:17] 2026-10-24T22:14:10.5881728Z 236 │ const requiredScopesForSettingsUpdate = (payload: unknown) => { 2026-10-24T22:14:10.5881858Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T22:14:10.5881962Z ·  ──────────────────────── 2026-10-24T22:14:10.5882095Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T22:14:10.5882143Z ╰──── 2026-10-24T22:14:10.5882146Z 2026-10-24T22:14:10.5882501Z ⚠ 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-24T22:14:10.5882626Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T22:14:10.5882724Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T22:14:10.5882877Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T22:14:10.5882988Z ·  ──────────────────────── 2026-10-24T22:14:10.5883049Z 257 │ return [ 2026-10-24T22:14:10.5883099Z ╰──── 2026-10-24T22:14:10.5883101Z 2026-10-24T22:14:10.5883354Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5883479Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T22:14:10.5883531Z 407 │ 2026-10-24T22:14:10.5883599Z 408 │ const layer: Layer.Layer< 2026-10-24T22:14:10.5883666Z ·  ──┬── 2026-10-24T22:14:10.5883835Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.5883961Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T22:14:10.5884011Z ╰──── 2026-10-24T22:14:10.5884112Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5884115Z 2026-10-24T22:14:10.5884366Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T22:14:10.5884516Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T22:14:10.5884592Z 1619 │ 2026-10-24T22:14:10.5884798Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T22:14:10.5884911Z ·  ──────────────────┬────────────────── 2026-10-24T22:14:10.5885116Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T22:14:10.5885196Z 1621 │ const meta = response._meta; 2026-10-24T22:14:10.5885249Z ╰──── 2026-10-24T22:14:10.5885346Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5885349Z 2026-10-24T22:14:10.5885810Z ⚠ 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-24T22:14:10.5885956Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T22:14:10.5886017Z 168 │ }); 2026-10-24T22:14:10.5886214Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T22:14:10.5886406Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T22:14:10.5886512Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5886642Z 172 │ ╰─▶ } 2026-10-24T22:14:10.5886696Z 173 │ 2026-10-24T22:14:10.5886745Z ╰──── 2026-10-24T22:14:10.5886747Z 2026-10-24T22:14:10.5887200Z ⚠ 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-24T22:14:10.5887343Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T22:14:10.5887451Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T22:14:10.5887690Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T22:14:10.5887849Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T22:14:10.5887953Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5888082Z 181 │ ╰─▶ } 2026-10-24T22:14:10.5888134Z 182 │ 2026-10-24T22:14:10.5888185Z ╰──── 2026-10-24T22:14:10.5888187Z 2026-10-24T22:14:10.5888638Z ⚠ 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-24T22:14:10.5888780Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T22:14:10.5888909Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T22:14:10.5889100Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T22:14:10.5889222Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T22:14:10.5889413Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T22:14:10.5889498Z 310 │ │ break; 2026-10-24T22:14:10.5889574Z 311 │ │ } 2026-10-24T22:14:10.5889679Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5889809Z 313 │ ╰─▶ } 2026-10-24T22:14:10.5889861Z 314 │ 2026-10-24T22:14:10.5889917Z ╰──── 2026-10-24T22:14:10.5889922Z 2026-10-24T22:14:10.5890288Z ⚠ 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-24T22:14:10.5890412Z ╭─[apps/server/src/assets/AssetAccess.test.ts:975:35] 2026-10-24T22:14:10.5890558Z 974 │ // Every client and server release spells the resource this way on the wire. 2026-10-24T22:14:10.5890711Z 975 │ const { resource } = yield* Schema.decodeUnknownEffect(AssetCreateUrlInput)({ 2026-10-24T22:14:10.5890832Z ·  ────────────────────────── 2026-10-24T22:14:10.5890944Z 976 │ resource: { _tag: "github-media", cwd: "/repo", url }, 2026-10-24T22:14:10.5890996Z ╰──── 2026-10-24T22:14:10.5890999Z 2026-10-24T22:14:10.5891440Z ⚠ 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-24T22:14:10.5891571Z ╭─[apps/server/src/assets/AssetAccess.test.ts:1012:32] 2026-10-24T22:14:10.5891706Z 1011 │ expect(error._tag).toBe("AssetGitHubMediaUrlValidationError"); 2026-10-24T22:14:10.5891890Z 1012 │ const encoded = yield* Schema.encodeEffect(Schema.fromJsonString(AssetAccessError))(error); 2026-10-24T22:14:10.5892002Z ·  ─────────────────── 2026-10-24T22:14:10.5892092Z 1013 │ expect(encoded).not.toContain(url); 2026-10-24T22:14:10.5892146Z ╰──── 2026-10-24T22:14:10.5892148Z 2026-10-24T22:14:10.5892397Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T22:14:10.5892554Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T22:14:10.5892624Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T22:14:10.5892693Z 3 │ type AuthSessionState, 2026-10-24T22:14:10.5892775Z ·  ────────┬─────── 2026-10-24T22:14:10.5892918Z · ╰── 'AuthSessionState' is imported here 2026-10-24T22:14:10.5892984Z 4 │ sessionGrantsScope, 2026-10-24T22:14:10.5893037Z ╰──── 2026-10-24T22:14:10.5893133Z  help: Consider removing this import. 2026-10-24T22:14:10.5893136Z 2026-10-24T22:14:10.5893289Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5893445Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T22:14:10.5893498Z 35 │ 2026-10-24T22:14:10.5893635Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T22:14:10.5893724Z ·  ────────┬──────── 2026-10-24T22:14:10.5893868Z · ╰── `inspectorProgress` originates here 2026-10-24T22:14:10.5893960Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T22:14:10.5894089Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T22:14:10.5894140Z 39 │ 2026-10-24T22:14:10.5894217Z 40 │ const onClosed = props.onClosed; 2026-10-24T22:14:10.5894281Z 41 │ useEffect(() => { 2026-10-24T22:14:10.5894369Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T22:14:10.5894451Z ·  ────────┬──────── 2026-10-24T22:14:10.5894621Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T22:14:10.5894703Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T22:14:10.5894757Z ╰──── 2026-10-24T22:14:10.5895020Z  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-24T22:14:10.5895320Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5895324Z 2026-10-24T22:14:10.5895475Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5895630Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T22:14:10.5895720Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T22:14:10.5895881Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T22:14:10.5895971Z ·  ──────────┬───────── 2026-10-24T22:14:10.5896124Z · ╰── `renderedContentWidth` originates here 2026-10-24T22:14:10.5896175Z 39 │ 2026-10-24T22:14:10.5896254Z 40 │ const onClosed = props.onClosed; 2026-10-24T22:14:10.5896316Z 41 │ useEffect(() => { 2026-10-24T22:14:10.5896404Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T22:14:10.5896478Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T22:14:10.5896548Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T22:14:10.5896611Z 45 │ (finished) => { 2026-10-24T22:14:10.5896746Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T22:14:10.5896816Z 47 │ runOnJS(onClosed)(); 2026-10-24T22:14:10.5896870Z 48 │ } 2026-10-24T22:14:10.5896924Z 49 │ }, 2026-10-24T22:14:10.5896977Z 50 │ ); 2026-10-24T22:14:10.5897153Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T22:14:10.5897255Z 52 │ renderedInspectorWidth.set( 2026-10-24T22:14:10.5897395Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T22:14:10.5897454Z 54 │ ); 2026-10-24T22:14:10.5897506Z 55 │ }, [ 2026-10-24T22:14:10.5897571Z 56 │ inspectorProgress, 2026-10-24T22:14:10.5897636Z 57 │ inspectorVisible, 2026-10-24T22:14:10.5897698Z 58 │ inspectorWidth, 2026-10-24T22:14:10.5897757Z 59 │ onClosed, 2026-10-24T22:14:10.5897827Z 60 │ renderedInspectorWidth, 2026-10-24T22:14:10.5897885Z 61 │ resizing, 2026-10-24T22:14:10.5897938Z 62 │ ]); 2026-10-24T22:14:10.5897987Z 63 │ 2026-10-24T22:14:10.5898049Z 64 │ useEffect(() => { 2026-10-24T22:14:10.5898140Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T22:14:10.5898229Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T22:14:10.5898325Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T22:14:10.5898411Z ·  ──────────┬───────── 2026-10-24T22:14:10.5898568Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T22:14:10.5898625Z 68 │ return; 2026-10-24T22:14:10.5898675Z ╰──── 2026-10-24T22:14:10.5898934Z  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-24T22:14:10.5899236Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5899239Z 2026-10-24T22:14:10.5899440Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5899599Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:155:7] 2026-10-24T22:14:10.5899652Z 154 │ } 2026-10-24T22:14:10.5899719Z 155 │ }, [wrappedRender]); 2026-10-24T22:14:10.5899796Z ·  ──────┬────── 2026-10-24T22:14:10.5899946Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T22:14:10.5899997Z 156 │ 2026-10-24T22:14:10.5900047Z ╰──── 2026-10-24T22:14:10.5900337Z  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-24T22:14:10.5900644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5900652Z 2026-10-24T22:14:10.5900888Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T22:14:10.5901045Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:800:42] 2026-10-24T22:14:10.5901099Z 799 │ > 2026-10-24T22:14:10.5901225Z 800 │ 2026-10-24T22:14:10.5901343Z ·  ──────────────────── 2026-10-24T22:14:10.5901441Z 801 │ 2026-10-24T22:14:10.5901493Z ╰──── 2026-10-24T22:14:10.5901716Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T22:14:10.5901900Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T22:14:10.5901930Z 2026-10-24T22:14:10.5902090Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.5902204Z ╭─[apps/web/src/components/Sidebar.tsx:1136:11] 2026-10-24T22:14:10.5902302Z 1135 │ foldSearchQuery(threadSearchQuery), 2026-10-24T22:14:10.5902368Z 1136 │ Date.now(), 2026-10-24T22:14:10.5902444Z ·  ─────┬──── 2026-10-24T22:14:10.5902581Z · ╰── Cannot call impure function 2026-10-24T22:14:10.5902718Z 1137 │ // A list filter, as on mobile: a pick would move rows unexplained. 2026-10-24T22:14:10.5902770Z ╰──── 2026-10-24T22:14:10.5903145Z  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-24T22:14:10.5903436Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.5903439Z 2026-10-24T22:14:10.5903873Z ⚠ 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-24T22:14:10.5903993Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T22:14:10.5904159Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T22:14:10.5904336Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T22:14:10.5904451Z ·  ─────────────────── 2026-10-24T22:14:10.5904594Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T22:14:10.5904645Z ╰──── 2026-10-24T22:14:10.5904648Z 2026-10-24T22:14:10.5905076Z ⚠ 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-24T22:14:10.5905195Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T22:14:10.5905371Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T22:14:10.5905474Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T22:14:10.5905584Z ·  ─────────────────── 2026-10-24T22:14:10.5905703Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T22:14:10.5905757Z ╰──── 2026-10-24T22:14:10.5905759Z 2026-10-24T22:14:10.5905922Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.5906056Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T22:14:10.5906184Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T22:14:10.5906329Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T22:14:10.5906449Z ·  ─────┬──── 2026-10-24T22:14:10.5906615Z · ╰── Cannot call impure function 2026-10-24T22:14:10.5906768Z 141 │ onSelect={(selected) => { 2026-10-24T22:14:10.5906856Z ╰──── 2026-10-24T22:14:10.5907127Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.5907412Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.5907414Z 2026-10-24T22:14:10.5907738Z ⚠ 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-24T22:14:10.5907879Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T22:14:10.5908037Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T22:14:10.5908209Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T22:14:10.5908293Z ·  ───────── 2026-10-24T22:14:10.5908466Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T22:14:10.5908517Z ╰──── 2026-10-24T22:14:10.5908520Z 2026-10-24T22:14:10.5908844Z ⚠ 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-24T22:14:10.5908983Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T22:14:10.5909143Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T22:14:10.5909316Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T22:14:10.5909402Z ·  ───────── 2026-10-24T22:14:10.5909455Z 52 │ } 2026-10-24T22:14:10.5909504Z ╰──── 2026-10-24T22:14:10.5909507Z 2026-10-24T22:14:10.5909828Z ⚠ 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-24T22:14:10.5909966Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T22:14:10.5910028Z 54 │ assert.equal( 2026-10-24T22:14:10.5910195Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T22:14:10.5910265Z ·  ───────── 2026-10-24T22:14:10.5910321Z 56 │ true, 2026-10-24T22:14:10.5910370Z ╰──── 2026-10-24T22:14:10.5910373Z 2026-10-24T22:14:10.5910743Z ⚠ 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-24T22:14:10.5910904Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T22:14:10.5910966Z 58 │ assert.equal( 2026-10-24T22:14:10.5911145Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T22:14:10.5911213Z ·  ───────── 2026-10-24T22:14:10.5911268Z 60 │ true, 2026-10-24T22:14:10.5911317Z ╰──── 2026-10-24T22:14:10.5911319Z 2026-10-24T22:14:10.5911639Z ⚠ 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-24T22:14:10.5911783Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T22:14:10.5911839Z 102 │ 2026-10-24T22:14:10.5912005Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T22:14:10.5912088Z ·  ───────── 2026-10-24T22:14:10.5912141Z 104 │ }); 2026-10-24T22:14:10.5912188Z ╰──── 2026-10-24T22:14:10.5912191Z 2026-10-24T22:14:10.5912343Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5912486Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T22:14:10.5912625Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T22:14:10.5912757Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T22:14:10.5912832Z ·  ────┬─── 2026-10-24T22:14:10.5912962Z · ╰── `rotation` originates here 2026-10-24T22:14:10.5913019Z 172 │ 2026-10-24T22:14:10.5913089Z 173 │ useLayoutEffect(() => { 2026-10-24T22:14:10.5913219Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T22:14:10.5913288Z ·  ────┬─── 2026-10-24T22:14:10.5913416Z · ╰── `rotation` cannot be modified 2026-10-24T22:14:10.5913511Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T22:14:10.5913562Z ╰──── 2026-10-24T22:14:10.5913821Z  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-24T22:14:10.5914122Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5914125Z 2026-10-24T22:14:10.5914320Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.5914468Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T22:14:10.5914535Z 1245 │ = 2) { 2026-10-24T22:14:10.5916260Z 1682 │ │ break; 2026-10-24T22:14:10.5916336Z 1683 │ │ } 2026-10-24T22:14:10.5916441Z 1684 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5916569Z 1685 │ ╰─▶ } 2026-10-24T22:14:10.5916645Z 1686 │ yield* Queue.offer( 2026-10-24T22:14:10.5916699Z ╰──── 2026-10-24T22:14:10.5916702Z 2026-10-24T22:14:10.5917156Z ⚠ 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-24T22:14:10.5917304Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1789:7] 2026-10-24T22:14:10.5917391Z 1788 │ yield* harness.replaceSession; 2026-10-24T22:14:10.5917592Z 1789 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T22:14:10.5917750Z 1790 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T22:14:10.5917861Z 1791 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5917991Z 1792 │ ╰─▶ } 2026-10-24T22:14:10.5918115Z 1793 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T22:14:10.5918166Z ╰──── 2026-10-24T22:14:10.5918168Z 2026-10-24T22:14:10.5918423Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5918550Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T22:14:10.5918601Z 3404 │ 2026-10-24T22:14:10.5918784Z 3405 │ const layer: Layer.Layer = 2026-10-24T22:14:10.5918854Z ·  ──┬── 2026-10-24T22:14:10.5918977Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.5919044Z 3406 │ Layer.effect( 2026-10-24T22:14:10.5919098Z ╰──── 2026-10-24T22:14:10.5919199Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5919202Z 2026-10-24T22:14:10.5919398Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T22:14:10.5919529Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T22:14:10.5919621Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T22:14:10.5919709Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T22:14:10.5919785Z ·  ────┬─── 2026-10-24T22:14:10.5919916Z · ╰── 'Duration' is imported here 2026-10-24T22:14:10.5919998Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T22:14:10.5920048Z ╰──── 2026-10-24T22:14:10.5920193Z  help: Consider removing this import. 2026-10-24T22:14:10.5920226Z 2026-10-24T22:14:10.5920418Z ⚠ eslint(no-unused-vars): Type 'EnvironmentId' is imported but never used. 2026-10-24T22:14:10.5920550Z ╭─[packages/client-runtime/src/state/sharedSettings.ts:2:3] 2026-10-24T22:14:10.5920614Z 1 │ import type { 2026-10-24T22:14:10.5920676Z 2 │ EnvironmentId, 2026-10-24T22:14:10.5920748Z ·  ──────┬────── 2026-10-24T22:14:10.5920880Z · ╰── 'EnvironmentId' is imported here 2026-10-24T22:14:10.5920964Z 3 │ ExecutionEnvironmentCapabilities, 2026-10-24T22:14:10.5921013Z ╰──── 2026-10-24T22:14:10.5921106Z  help: Consider removing this import. 2026-10-24T22:14:10.5921110Z 2026-10-24T22:14:10.5921365Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5921528Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T22:14:10.5921588Z 434 │ : null; 2026-10-24T22:14:10.5921653Z 435 │ useEffect(() => { 2026-10-24T22:14:10.5921722Z ·  ────┬──── 2026-10-24T22:14:10.5921850Z · ╰── This is the containing effect 2026-10-24T22:14:10.5921905Z 436 │ if ( 2026-10-24T22:14:10.5921978Z 437 │ props.active === false || 2026-10-24T22:14:10.5922054Z 438 │ activeDraftKey !== null || 2026-10-24T22:14:10.5922134Z 439 │ editingPendingTask !== null || 2026-10-24T22:14:10.5922207Z 440 │ selectedProject === null 2026-10-24T22:14:10.5922259Z 441 │ ) { 2026-10-24T22:14:10.5922317Z 442 │ return; 2026-10-24T22:14:10.5922375Z 443 │ } 2026-10-24T22:14:10.5922445Z 444 │ setActiveDraftKey( 2026-10-24T22:14:10.5922524Z ·  ────────┬──────── 2026-10-24T22:14:10.5922691Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5922763Z 445 │ createNewTaskDraft({ 2026-10-24T22:14:10.5922813Z ╰──── 2026-10-24T22:14:10.5923399Z  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-24T22:14:10.5923718Z  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-24T22:14:10.5923726Z 2026-10-24T22:14:10.5923962Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T22:14:10.5924122Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T22:14:10.5924228Z 1243 │ 2026-10-24T22:14:10.5924414Z 1244 │ {props.children} 2026-10-24T22:14:10.5924524Z ·  ───────────── 2026-10-24T22:14:10.5924607Z 1245 │ 2026-10-24T22:14:10.5924685Z ╰──── 2026-10-24T22:14:10.5924902Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T22:14:10.5925089Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T22:14:10.5925126Z 2026-10-24T22:14:10.5925412Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5925537Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T22:14:10.5925590Z 217 │ 2026-10-24T22:14:10.5925735Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T22:14:10.5925825Z ·  ──────────┬────────── 2026-10-24T22:14:10.5925983Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T22:14:10.5926166Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T22:14:10.5926215Z ╰──── 2026-10-24T22:14:10.5926324Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5926329Z 2026-10-24T22:14:10.5926631Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5926752Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T22:14:10.5926804Z 220 │ 2026-10-24T22:14:10.5926937Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T22:14:10.5927037Z ·  ──────────────┬────────────── 2026-10-24T22:14:10.5927211Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T22:14:10.5927366Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T22:14:10.5927416Z ╰──── 2026-10-24T22:14:10.5927520Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5927525Z 2026-10-24T22:14:10.5927700Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T22:14:10.5927878Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T22:14:10.5927944Z 115 │ return [...commands]; 2026-10-24T22:14:10.5928073Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T22:14:10.5928183Z ·  ─────────┬───────── 2026-10-24T22:14:10.5928361Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T22:14:10.5928413Z 117 │ 2026-10-24T22:14:10.5928464Z ╰──── 2026-10-24T22:14:10.5928776Z  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-24T22:14:10.5929083Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5929085Z 2026-10-24T22:14:10.5929271Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T22:14:10.5929400Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T22:14:10.5929514Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T22:14:10.5929595Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T22:14:10.5929664Z ·  ─┬─ 2026-10-24T22:14:10.5929786Z · ╰── 'Arr' is imported here 2026-10-24T22:14:10.5929925Z 5 │ import * as Order from "effect/Order"; 2026-10-24T22:14:10.5930004Z ╰──── 2026-10-24T22:14:10.5930098Z  help: Consider removing this import. 2026-10-24T22:14:10.5930100Z 2026-10-24T22:14:10.5930288Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T22:14:10.5930416Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T22:14:10.5930494Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T22:14:10.5930570Z 5 │ import * as Order from "effect/Order"; 2026-10-24T22:14:10.5930644Z ·  ──┬── 2026-10-24T22:14:10.5930771Z · ╰── 'Order' is imported here 2026-10-24T22:14:10.5930822Z 6 │ 2026-10-24T22:14:10.5930871Z ╰──── 2026-10-24T22:14:10.5930965Z  help: Consider removing this import. 2026-10-24T22:14:10.5930973Z 2026-10-24T22:14:10.5931226Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5931398Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T22:14:10.5931448Z 58 │ 2026-10-24T22:14:10.5931519Z 59 │ useEffect(() => { 2026-10-24T22:14:10.5931590Z ·  ────┬──── 2026-10-24T22:14:10.5931717Z · ╰── This is the containing effect 2026-10-24T22:14:10.5931795Z 60 │ setMountedModes((current) => { 2026-10-24T22:14:10.5931874Z ·  ───────┬─────── 2026-10-24T22:14:10.5932041Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5932120Z 61 │ if (current.has(props.mode)) { 2026-10-24T22:14:10.5932176Z ╰──── 2026-10-24T22:14:10.5932765Z  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-24T22:14:10.5933081Z  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-24T22:14:10.5933084Z 2026-10-24T22:14:10.5933237Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5933388Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T22:14:10.5933438Z 83 │ 2026-10-24T22:14:10.5933573Z 84 │ const cardCoverage = props.cardCoverage; 2026-10-24T22:14:10.5933673Z ·  ──────┬───── 2026-10-24T22:14:10.5933805Z · ╰── `cardCoverage` originates here 2026-10-24T22:14:10.5933880Z 85 │ const barHeightRef = useRef(0); 2026-10-24T22:14:10.5933958Z 86 │ const cardHeightRef = useRef(0); 2026-10-24T22:14:10.5934041Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T22:14:10.5934131Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T22:14:10.5934196Z 89 │ if (!cardCoverage) { 2026-10-24T22:14:10.5934255Z 90 │ return; 2026-10-24T22:14:10.5934310Z 91 │ } 2026-10-24T22:14:10.5934471Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T22:14:10.5934594Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T22:14:10.5934758Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T22:14:10.5934834Z ·  ──────┬───── 2026-10-24T22:14:10.5934968Z · ╰── `cardCoverage` cannot be modified 2026-10-24T22:14:10.5935031Z 95 │ }, [cardCoverage]); 2026-10-24T22:14:10.5935081Z ╰──── 2026-10-24T22:14:10.5935370Z  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-24T22:14:10.5935670Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5935672Z 2026-10-24T22:14:10.5935824Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.5935983Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T22:14:10.5936063Z  86 │ const cardHeightRef = useRef(0); 2026-10-24T22:14:10.5936147Z  87 │ const cardHeight = useSharedValue(0); 2026-10-24T22:14:10.5936221Z ·  ─────┬──── 2026-10-24T22:14:10.5936353Z · ╰── `cardHeight` originates here 2026-10-24T22:14:10.5936446Z  88 │ const notifyCoverage = useCallback(() => { 2026-10-24T22:14:10.5936512Z  89 │ if (!cardCoverage) { 2026-10-24T22:14:10.5936570Z  90 │ return; 2026-10-24T22:14:10.5936624Z  91 │ } 2026-10-24T22:14:10.5936784Z  92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T22:14:10.5936883Z  93 │ // feed inset and floating controls trailing it. 2026-10-24T22:14:10.5937039Z  94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T22:14:10.5937108Z  95 │ }, [cardCoverage]); 2026-10-24T22:14:10.5937190Z  96 │ const handleBarLayout = useCallback( 2026-10-24T22:14:10.5937268Z  97 │ (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.5937387Z  98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T22:14:10.5937452Z  99 │ notifyCoverage(); 2026-10-24T22:14:10.5937505Z 100 │ }, 2026-10-24T22:14:10.5937569Z 101 │ [notifyCoverage], 2026-10-24T22:14:10.5937620Z 102 │ ); 2026-10-24T22:14:10.5937705Z 103 │ const handleCardLayout = useCallback( 2026-10-24T22:14:10.5937784Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.5937908Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T22:14:10.5938016Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T22:14:10.5938142Z ·  ─────┬──── 2026-10-24T22:14:10.5938304Z · ╰── `cardHeight` cannot be modified 2026-10-24T22:14:10.5938373Z 107 │ notifyCoverage(); 2026-10-24T22:14:10.5938425Z ╰──── 2026-10-24T22:14:10.5938689Z  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-24T22:14:10.5938985Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5938987Z 2026-10-24T22:14:10.5939181Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T22:14:10.5939333Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T22:14:10.5939422Z 87 │ const cardHeight = useSharedValue(0); 2026-10-24T22:14:10.5939512Z 88 │ const notifyCoverage = useCallback(() => { 2026-10-24T22:14:10.5939613Z ·  ───┬─── 2026-10-24T22:14:10.5939844Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T22:14:10.5939909Z 89 │ if (!cardCoverage) { 2026-10-24T22:14:10.5939967Z 90 │ return; 2026-10-24T22:14:10.5940019Z 91 │ } 2026-10-24T22:14:10.5940177Z 92 │ // The card resizes with the keyboard every frame, so easing each sample would leave the 2026-10-24T22:14:10.5940274Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T22:14:10.5940425Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T22:14:10.5940505Z ·  ──────┬───── 2026-10-24T22:14:10.5940634Z · ╰── This modifies `cardCoverage` 2026-10-24T22:14:10.5940699Z 95 │ }, [cardCoverage]); 2026-10-24T22:14:10.5940750Z ╰──── 2026-10-24T22:14:10.5941086Z  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-24T22:14:10.5941380Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5941384Z 2026-10-24T22:14:10.5941576Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T22:14:10.5941726Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:94:5] 2026-10-24T22:14:10.5941827Z 93 │ // feed inset and floating controls trailing it. 2026-10-24T22:14:10.5941980Z 94 │ cardCoverage.value = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T22:14:10.5942052Z ·  ──────┬───── 2026-10-24T22:14:10.5942178Z · ╰── This modifies `cardCoverage` 2026-10-24T22:14:10.5942243Z 95 │ }, [cardCoverage]); 2026-10-24T22:14:10.5942326Z 96 │ const handleBarLayout = useCallback( 2026-10-24T22:14:10.5942402Z 97 │ (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.5942505Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.5942722Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T22:14:10.5942858Z 98 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T22:14:10.5943021Z ╰──── 2026-10-24T22:14:10.5943397Z  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-24T22:14:10.5943692Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5943695Z 2026-10-24T22:14:10.5943887Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T22:14:10.5944041Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:106:7] 2026-10-24T22:14:10.5944124Z 103 │ const handleCardLayout = useCallback( 2026-10-24T22:14:10.5944203Z 104 │ (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.5944310Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.5944527Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T22:14:10.5944686Z 105 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T22:14:10.5944800Z 106 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T22:14:10.5944876Z ·  ─────┬──── 2026-10-24T22:14:10.5945002Z · ╰── This modifies `cardHeight` 2026-10-24T22:14:10.5945066Z 107 │ notifyCoverage(); 2026-10-24T22:14:10.5945119Z ╰──── 2026-10-24T22:14:10.5945446Z  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-24T22:14:10.5945746Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.5945751Z 2026-10-24T22:14:10.5946072Z ⚠ eslint(no-unused-vars): Variable 'layerCodexAppServerClientFactoryCommand' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5946234Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1444:7] 2026-10-24T22:14:10.5946288Z 1443 │ 2026-10-24T22:14:10.5946403Z 1444 │ const layerCodexAppServerClientFactoryCommand = ( 2026-10-24T22:14:10.5946517Z ·  ───────────────────┬─────────────────── 2026-10-24T22:14:10.5946718Z · ╰── 'layerCodexAppServerClientFactoryCommand' is declared here 2026-10-24T22:14:10.5946843Z 1445 │ options: CodexClient.CodexAppServerClientOptions & { 2026-10-24T22:14:10.5946897Z ╰──── 2026-10-24T22:14:10.5946995Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5946999Z 2026-10-24T22:14:10.5947250Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5947413Z ╭─[apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts:1680:7] 2026-10-24T22:14:10.5947466Z 1679 │ 2026-10-24T22:14:10.5947536Z 1680 │ const layer: Layer.Layer< 2026-10-24T22:14:10.5947603Z ·  ──┬── 2026-10-24T22:14:10.5947729Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.5947822Z 1681 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T22:14:10.5947873Z ╰──── 2026-10-24T22:14:10.5947970Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5948021Z 2026-10-24T22:14:10.5948321Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.5948488Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10602:7] 2026-10-24T22:14:10.5948542Z 10601 │ 2026-10-24T22:14:10.5948612Z 10602 │ const layer: Layer.Layer< 2026-10-24T22:14:10.5948682Z ·  ──┬── 2026-10-24T22:14:10.5948805Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.5948899Z 10603 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T22:14:10.5948948Z ╰──── 2026-10-24T22:14:10.5949048Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5949051Z 2026-10-24T22:14:10.5949309Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.5949473Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:279:5] 2026-10-24T22:14:10.5949592Z 277 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T22:14:10.5949658Z 278 │ useEffect(() => { 2026-10-24T22:14:10.5949727Z ·  ────┬──── 2026-10-24T22:14:10.5949857Z · ╰── This is the containing effect 2026-10-24T22:14:10.5949938Z 279 │ setNow(new Date().toISOString()); 2026-10-24T22:14:10.5950007Z ·  ───┬── 2026-10-24T22:14:10.5950172Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.5950306Z 280 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T22:14:10.5950354Z ╰──── 2026-10-24T22:14:10.5950957Z  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-24T22:14:10.5951277Z  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-24T22:14:10.5951280Z 2026-10-24T22:14:10.5951503Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T22:14:10.5951661Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:13:8] 2026-10-24T22:14:10.5951730Z 12 │ threadSearchMatchKey, 2026-10-24T22:14:10.5951818Z 13 │ type EnvironmentThreadSearchMatch, 2026-10-24T22:14:10.5951922Z ·  ──────────────┬───────────── 2026-10-24T22:14:10.5952095Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T22:14:10.5952201Z 14 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T22:14:10.5952251Z ╰──── 2026-10-24T22:14:10.5952346Z  help: Consider removing this import. 2026-10-24T22:14:10.5952349Z 2026-10-24T22:14:10.5952546Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.5952708Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:359:25] 2026-10-24T22:14:10.5952836Z 358 │ // range) the boundary string is identical and the chain would die. 2026-10-24T22:14:10.5952974Z 359 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T22:14:10.5953100Z ·  ───────┬────── 2026-10-24T22:14:10.5953261Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T22:14:10.5953370Z 360 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T22:14:10.5953426Z ╰──── 2026-10-24T22:14:10.5953717Z  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-24T22:14:10.5954024Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.5954027Z 2026-10-24T22:14:10.5954192Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.5954358Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:350:53] 2026-10-24T22:14:10.5954445Z 349 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T22:14:10.5954626Z 350 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T22:14:10.5954742Z ·  ─────┬──── 2026-10-24T22:14:10.5954907Z · ╰── Cannot call impure function 2026-10-24T22:14:10.5954986Z 351 │ const id = setTimeout(() => { 2026-10-24T22:14:10.5955036Z ╰──── 2026-10-24T22:14:10.5955316Z  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-24T22:14:10.5955613Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.5955618Z 2026-10-24T22:14:10.5955868Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T22:14:10.5956047Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T22:14:10.5956101Z 959 │ 2026-10-24T22:14:10.5956208Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T22:14:10.5956321Z ·  ──────────────────┬───────────────── 2026-10-24T22:14:10.5956516Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T22:14:10.5956615Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T22:14:10.5956664Z ╰──── 2026-10-24T22:14:10.5956811Z  help: Consider removing this declaration. 2026-10-24T22:14:10.5956842Z 2026-10-24T22:14:10.5957063Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T22:14:10.5957233Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T22:14:10.5957298Z 1997 │ assert.equal( 2026-10-24T22:14:10.5957446Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T22:14:10.5957525Z ·  ────── 2026-10-24T22:14:10.5957605Z 1999 │ "authoritative answer", 2026-10-24T22:14:10.5957655Z ╰──── 2026-10-24T22:14:10.5957825Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T22:14:10.5957828Z 2026-10-24T22:14:10.5958299Z ⚠ 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-24T22:14:10.5991120Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T22:14:10.5991407Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T22:14:10.5991641Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T22:14:10.5991751Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5991885Z 3953 │ ╰─▶ } 2026-10-24T22:14:10.5992017Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T22:14:10.5992072Z ╰──── 2026-10-24T22:14:10.5992076Z 2026-10-24T22:14:10.5992549Z ⚠ 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-24T22:14:10.5992721Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T22:14:10.5992810Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T22:14:10.5992993Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T22:14:10.5993102Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5993235Z 6064 │ ╰─▶ } 2026-10-24T22:14:10.5993406Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T22:14:10.5993458Z ╰──── 2026-10-24T22:14:10.5993461Z 2026-10-24T22:14:10.5993917Z ⚠ 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-24T22:14:10.5994083Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T22:14:10.5994167Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T22:14:10.5994346Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T22:14:10.5994449Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.5994740Z 6199 │ ╰─▶ } 2026-10-24T22:14:10.5994950Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T22:14:10.5994999Z ╰──── 2026-10-24T22:14:10.5995001Z 2026-10-24T22:14:10.5995152Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T22:14:10.5995277Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T22:14:10.5995387Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T22:14:10.5995479Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T22:14:10.5995578Z ·  ───────────────────────────── 2026-10-24T22:14:10.5995703Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T22:14:10.5995752Z ╰──── 2026-10-24T22:14:10.5995914Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T22:14:10.5995919Z 2026-10-24T22:14:10.5996099Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.5996235Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T22:14:10.5996390Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T22:14:10.5996476Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T22:14:10.5996555Z ·  ┬ 2026-10-24T22:14:10.5996682Z · ╰── '_' is declared here 2026-10-24T22:14:10.5996781Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T22:14:10.5996830Z ╰──── 2026-10-24T22:14:10.5996933Z  help: Consider removing this parameter. 2026-10-24T22:14:10.5996939Z 2026-10-24T22:14:10.5997119Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.5997252Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T22:14:10.5997306Z 133 │ ); 2026-10-24T22:14:10.5997407Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T22:14:10.5997504Z ·  ┬ 2026-10-24T22:14:10.5997640Z · ╰── '_' is declared here 2026-10-24T22:14:10.5997705Z 135 │ Effect.succeed( 2026-10-24T22:14:10.5997752Z ╰──── 2026-10-24T22:14:10.5997849Z  help: Consider removing this parameter. 2026-10-24T22:14:10.5997851Z 2026-10-24T22:14:10.5998034Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.5998165Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T22:14:10.5998216Z 177 │ }); 2026-10-24T22:14:10.5998312Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T22:14:10.5998395Z ·  ┬ 2026-10-24T22:14:10.5998525Z · ╰── '_' is declared here 2026-10-24T22:14:10.5998620Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T22:14:10.5998674Z ╰──── 2026-10-24T22:14:10.5998770Z  help: Consider removing this parameter. 2026-10-24T22:14:10.5998773Z 2026-10-24T22:14:10.5998949Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.5999127Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T22:14:10.5999205Z 202 │ ); 2026-10-24T22:14:10.5999300Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T22:14:10.5999386Z ·  ┬ 2026-10-24T22:14:10.5999517Z · ╰── '_' is declared here 2026-10-24T22:14:10.5999594Z 204 │ options.removeWorktreeFails 2026-10-24T22:14:10.5999642Z ╰──── 2026-10-24T22:14:10.5999736Z  help: Consider removing this parameter. 2026-10-24T22:14:10.5999738Z 2026-10-24T22:14:10.5999912Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.6000039Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T22:14:10.6000091Z 207 │ ); 2026-10-24T22:14:10.6000192Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T22:14:10.6000286Z ·  ┬ 2026-10-24T22:14:10.6000417Z · ╰── '_' is declared here 2026-10-24T22:14:10.6000499Z 209 │ options.deleteLocalBranchFails 2026-10-24T22:14:10.6000547Z ╰──── 2026-10-24T22:14:10.6000641Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6000643Z 2026-10-24T22:14:10.6000816Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.6000944Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T22:14:10.6000997Z 212 │ ); 2026-10-24T22:14:10.6001107Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T22:14:10.6001201Z ·  ┬ 2026-10-24T22:14:10.6001343Z · ╰── '_' is declared here 2026-10-24T22:14:10.6001427Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T22:14:10.6001475Z ╰──── 2026-10-24T22:14:10.6001567Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6001570Z 2026-10-24T22:14:10.6001745Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.6001874Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T22:14:10.6001925Z 253 │ ); 2026-10-24T22:14:10.6002011Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T22:14:10.6002096Z ·  ┬ 2026-10-24T22:14:10.6002224Z · ╰── '_' is declared here 2026-10-24T22:14:10.6002295Z 255 │ Effect.succeed({ 2026-10-24T22:14:10.6002345Z ╰──── 2026-10-24T22:14:10.6002441Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6002443Z 2026-10-24T22:14:10.6002618Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.6002746Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T22:14:10.6002797Z 263 │ ); 2026-10-24T22:14:10.6002945Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T22:14:10.6003031Z ·  ┬ 2026-10-24T22:14:10.6003162Z · ╰── '_' is declared here 2026-10-24T22:14:10.6003303Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T22:14:10.6003352Z ╰──── 2026-10-24T22:14:10.6003498Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6003528Z 2026-10-24T22:14:10.6003781Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6003927Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T22:14:10.6004061Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T22:14:10.6004127Z 356 │ useEffect(() => { 2026-10-24T22:14:10.6004198Z ·  ────┬──── 2026-10-24T22:14:10.6004324Z · ╰── This is the containing effect 2026-10-24T22:14:10.6004410Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T22:14:10.6004469Z 358 │ return; 2026-10-24T22:14:10.6004521Z 359 │ } 2026-10-24T22:14:10.6004651Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T22:14:10.6004744Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T22:14:10.6004844Z ·  ──────────────┬────────────── 2026-10-24T22:14:10.6005019Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6005077Z 362 │ return; 2026-10-24T22:14:10.6005127Z ╰──── 2026-10-24T22:14:10.6005721Z  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-24T22:14:10.6006055Z  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-24T22:14:10.6006060Z 2026-10-24T22:14:10.6006312Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6006459Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T22:14:10.6006511Z 447 │ 2026-10-24T22:14:10.6006574Z 448 │ useEffect(() => { 2026-10-24T22:14:10.6006643Z ·  ────┬──── 2026-10-24T22:14:10.6006767Z · ╰── This is the containing effect 2026-10-24T22:14:10.6006865Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T22:14:10.6006923Z 450 │ return; 2026-10-24T22:14:10.6006974Z 451 │ } 2026-10-24T22:14:10.6007117Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T22:14:10.6007251Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T22:14:10.6007355Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T22:14:10.6007406Z 455 │ } 2026-10-24T22:14:10.6007542Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T22:14:10.6007666Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T22:14:10.6007767Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T22:14:10.6007836Z 459 │ const directProject = 2026-10-24T22:14:10.6007901Z 460 │ projects.find( 2026-10-24T22:14:10.6007965Z 461 │ (project) => 2026-10-24T22:14:10.6008135Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T22:14:10.6008194Z 463 │ ) ?? null; 2026-10-24T22:14:10.6008292Z 464 │ 2026-10-24T22:14:10.6008393Z 465 │ if (directProject) { 2026-10-24T22:14:10.6008529Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T22:14:10.6008663Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T22:14:10.6008820Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T22:14:10.6008952Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T22:14:10.6009012Z 470 │ return; 2026-10-24T22:14:10.6009067Z 471 │ } 2026-10-24T22:14:10.6009160Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T22:14:10.6009220Z 473 │ if ( 2026-10-24T22:14:10.6009360Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T22:14:10.6009461Z 475 │ selectedProject.id !== directProject.id 2026-10-24T22:14:10.6009519Z 476 │ ) { 2026-10-24T22:14:10.6009600Z 477 │ setProject(directProject); 2026-10-24T22:14:10.6009660Z 478 │ return; 2026-10-24T22:14:10.6009715Z 479 │ } 2026-10-24T22:14:10.6009795Z 480 │ if (!flow.draftKey) return; 2026-10-24T22:14:10.6009930Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T22:14:10.6010070Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T22:14:10.6010175Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T22:14:10.6010252Z 484 │ workspaceSelection: { 2026-10-24T22:14:10.6010319Z 485 │ mode: "local", 2026-10-24T22:14:10.6010420Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T22:14:10.6010557Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T22:14:10.6010638Z 488 │ startFromOrigin: false, 2026-10-24T22:14:10.6010695Z 489 │ }, 2026-10-24T22:14:10.6010751Z 490 │ }); 2026-10-24T22:14:10.6010805Z 491 │ } 2026-10-24T22:14:10.6010928Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T22:14:10.6010983Z 493 │ if ( 2026-10-24T22:14:10.6011122Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T22:14:10.6011214Z 495 │ selectedProject.id === directProject.id 2026-10-24T22:14:10.6011271Z 496 │ ) { 2026-10-24T22:14:10.6011330Z 497 │ return; 2026-10-24T22:14:10.6011384Z 498 │ } 2026-10-24T22:14:10.6011459Z 499 │ setProject(directProject); 2026-10-24T22:14:10.6011518Z 500 │ return; 2026-10-24T22:14:10.6011575Z 501 │ } 2026-10-24T22:14:10.6011627Z 502 │ 2026-10-24T22:14:10.6011701Z 503 │ if (projects.length > 0) { 2026-10-24T22:14:10.6011794Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T22:14:10.6011899Z ·  ──────────────┬────────────── 2026-10-24T22:14:10.6012075Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6012128Z 505 │ } 2026-10-24T22:14:10.6012178Z ╰──── 2026-10-24T22:14:10.6012764Z  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-24T22:14:10.6013131Z  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-24T22:14:10.6013162Z 2026-10-24T22:14:10.6013411Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6013561Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T22:14:10.6013612Z 545 │ 2026-10-24T22:14:10.6013675Z 546 │ useEffect(() => { 2026-10-24T22:14:10.6013742Z ·  ────┬──── 2026-10-24T22:14:10.6013868Z · ╰── This is the containing effect 2026-10-24T22:14:10.6013964Z 547 │ const shareId = props.incomingShareId; 2026-10-24T22:14:10.6014044Z 548 │ const draftKey = flow.draftKey; 2026-10-24T22:14:10.6014145Z 549 │ const destinationProject = selectedProject; 2026-10-24T22:14:10.6014283Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T22:14:10.6014406Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T22:14:10.6014492Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T22:14:10.6014574Z 553 │ !initialEnvironmentId || 2026-10-24T22:14:10.6014644Z 554 │ !initialProjectId || 2026-10-24T22:14:10.6014795Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T22:14:10.6014896Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T22:14:10.6014950Z 557 │ if ( 2026-10-24T22:14:10.6015010Z 558 │ !shareId || 2026-10-24T22:14:10.6015071Z 559 │ !draftKey || 2026-10-24T22:14:10.6015141Z 560 │ !destinationProject || 2026-10-24T22:14:10.6015230Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T22:14:10.6015318Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T22:14:10.6015371Z 563 │ ) { 2026-10-24T22:14:10.6015427Z 564 │ return; 2026-10-24T22:14:10.6015477Z 565 │ } 2026-10-24T22:14:10.6015569Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T22:14:10.6015624Z 567 │ if ( 2026-10-24T22:14:10.6015731Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T22:14:10.6015838Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T22:14:10.6015890Z 570 │ ) { 2026-10-24T22:14:10.6015947Z 571 │ return; 2026-10-24T22:14:10.6015997Z 572 │ } 2026-10-24T22:14:10.6016046Z 573 │ 2026-10-24T22:14:10.6016112Z 574 │ if (!incomingShare) { 2026-10-24T22:14:10.6016360Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T22:14:10.6016514Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T22:14:10.6016578Z 577 │ Dialog.alert( 2026-10-24T22:14:10.6016662Z 578 │ "Shared content unavailable", 2026-10-24T22:14:10.6016832Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T22:14:10.6016887Z 580 │ ); 2026-10-24T22:14:10.6016939Z 581 │ } 2026-10-24T22:14:10.6016995Z 582 │ return; 2026-10-24T22:14:10.6017046Z 583 │ } 2026-10-24T22:14:10.6017093Z 584 │ 2026-10-24T22:14:10.6017148Z 585 │ if ( 2026-10-24T22:14:10.6017304Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T22:14:10.6017402Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T22:14:10.6017453Z 588 │ ) { 2026-10-24T22:14:10.6017515Z 589 │ return; 2026-10-24T22:14:10.6017568Z 590 │ } 2026-10-24T22:14:10.6017616Z 591 │ 2026-10-24T22:14:10.6017750Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T22:14:10.6017869Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T22:14:10.6017920Z 594 │ } 2026-10-24T22:14:10.6018021Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T22:14:10.6018087Z 596 │ const draftBackup = 2026-10-24T22:14:10.6018268Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T22:14:10.6018403Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T22:14:10.6018489Z 599 │ const importToken = Symbol(importKey); 2026-10-24T22:14:10.6018565Z 600 │ let didReserveShare = false; 2026-10-24T22:14:10.6018643Z 601 │ let didConsumeShare = false; 2026-10-24T22:14:10.6018723Z 602 │ let needsDraftRestore = false; 2026-10-24T22:14:10.6018829Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T22:14:10.6018908Z 604 │ setImportingShareKey(importKey); 2026-10-24T22:14:10.6018993Z ·  ──────────┬───────── 2026-10-24T22:14:10.6019162Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6019227Z 605 │ void (async () => { 2026-10-24T22:14:10.6019276Z ╰──── 2026-10-24T22:14:10.6019863Z  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-24T22:14:10.6020189Z  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-24T22:14:10.6020194Z 2026-10-24T22:14:10.6020391Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6020538Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T22:14:10.6020611Z 523 │ props.initialProjectRef, 2026-10-24T22:14:10.6020679Z 524 │ props.incomingShareId, 2026-10-24T22:14:10.6020765Z ·  ──────────┬────────── 2026-10-24T22:14:10.6020928Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T22:14:10.6020996Z 525 │ props.pendingTaskId, 2026-10-24T22:14:10.6021045Z ╰──── 2026-10-24T22:14:10.6021381Z  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-24T22:14:10.6021718Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6021722Z 2026-10-24T22:14:10.6021929Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6022077Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T22:14:10.6022189Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T22:14:10.6022254Z 543 │ flow.loadBranches(); 2026-10-24T22:14:10.6022321Z ·  ──┬─ 2026-10-24T22:14:10.6022447Z · ╰── Missing dependency `flow` 2026-10-24T22:14:10.6022540Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T22:14:10.6022623Z ·  ────────┬──────── 2026-10-24T22:14:10.6022833Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T22:14:10.6022887Z 545 │ 2026-10-24T22:14:10.6023016Z ╰──── 2026-10-24T22:14:10.6023434Z  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-24T22:14:10.6023739Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6023742Z 2026-10-24T22:14:10.6023943Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6024092Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T22:14:10.6024154Z 765 │ flow.draftKey, 2026-10-24T22:14:10.6024227Z 766 │ hasImportedIncomingShare, 2026-10-24T22:14:10.6024315Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6024485Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T22:14:10.6024547Z 767 │ incomingShare, 2026-10-24T22:14:10.6024658Z 768 │ isIncomingShareInboxLoading, 2026-10-24T22:14:10.6024751Z ·  ─────────────┬───────────── 2026-10-24T22:14:10.6024934Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T22:14:10.6025017Z 769 │ isIncomingShareUnavailable, 2026-10-24T22:14:10.6025088Z 770 │ props.incomingShareId, 2026-10-24T22:14:10.6025182Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T22:14:10.6025271Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T22:14:10.6025342Z 773 │ releaseShareReservation, 2026-10-24T22:14:10.6025402Z 774 │ reserveShare, 2026-10-24T22:14:10.6025485Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T22:14:10.6025552Z 776 │ selectedProject, 2026-10-24T22:14:10.6025621Z 777 │ shareImportAttempt, 2026-10-24T22:14:10.6025703Z ·  ─────────┬──────── 2026-10-24T22:14:10.6025866Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T22:14:10.6025920Z 778 │ ]); 2026-10-24T22:14:10.6025969Z ╰──── 2026-10-24T22:14:10.6026330Z  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-24T22:14:10.6026672Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6026674Z 2026-10-24T22:14:10.6026839Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.6026978Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T22:14:10.6027029Z 185 │ 2026-10-24T22:14:10.6027127Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T22:14:10.6027196Z ·  ── 2026-10-24T22:14:10.6027246Z 187 │ } 2026-10-24T22:14:10.6027293Z ╰──── 2026-10-24T22:14:10.6027525Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.6027530Z 2026-10-24T22:14:10.6027691Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.6027828Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T22:14:10.6027879Z 188 │ 2026-10-24T22:14:10.6027940Z 189 │ for (const {} of [ 2026-10-24T22:14:10.6028007Z ·  ── 2026-10-24T22:14:10.6028094Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T22:14:10.6028142Z ╰──── 2026-10-24T22:14:10.6028362Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.6028365Z 2026-10-24T22:14:10.6028532Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.6028668Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T22:14:10.6028720Z 310 │ 2026-10-24T22:14:10.6028841Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T22:14:10.6028910Z ·  ── 2026-10-24T22:14:10.6028960Z 312 │ } 2026-10-24T22:14:10.6029008Z ╰──── 2026-10-24T22:14:10.6029228Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.6029231Z 2026-10-24T22:14:10.6029391Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.6029523Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T22:14:10.6029571Z 313 │ 2026-10-24T22:14:10.6029631Z 314 │ for (const {} of [ 2026-10-24T22:14:10.6029702Z ·  ── 2026-10-24T22:14:10.6029757Z 315 │ { 2026-10-24T22:14:10.6029805Z ╰──── 2026-10-24T22:14:10.6030025Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.6030028Z 2026-10-24T22:14:10.6030170Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6030325Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T22:14:10.6030376Z 276 │ 2026-10-24T22:14:10.6030556Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T22:14:10.6030650Z 278 │ │ ...nativeProps, 2026-10-24T22:14:10.6030845Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T22:14:10.6030961Z 280 │ │ ref: nativeRef, 2026-10-24T22:14:10.6031087Z 281 │ ├─▶ }); 2026-10-24T22:14:10.6031323Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6031377Z 282 │ } 2026-10-24T22:14:10.6031426Z ╰──── 2026-10-24T22:14:10.6031889Z  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-24T22:14:10.6032180Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6032187Z 2026-10-24T22:14:10.6032424Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T22:14:10.6032578Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T22:14:10.6032636Z 289 │ return ( 2026-10-24T22:14:10.6032767Z 290 │ 2026-10-24T22:14:10.6032887Z ·  ───────────── 2026-10-24T22:14:10.6032954Z 291 │ {props.children} 2026-10-24T22:14:10.6033002Z ╰──── 2026-10-24T22:14:10.6033220Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T22:14:10.6033358Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T22:14:10.6033366Z 2026-10-24T22:14:10.6033601Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T22:14:10.6033751Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T22:14:10.6033807Z 653 │ return ( 2026-10-24T22:14:10.6033925Z 654 │ 2026-10-24T22:14:10.6034037Z ·  ───────────── 2026-10-24T22:14:10.6034102Z 655 │ {props.children} 2026-10-24T22:14:10.6034149Z ╰──── 2026-10-24T22:14:10.6034367Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T22:14:10.6034501Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T22:14:10.6034508Z 2026-10-24T22:14:10.6034777Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T22:14:10.6034933Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T22:14:10.6034990Z 1461 │ return ( 2026-10-24T22:14:10.6035150Z 1462 │ 2026-10-24T22:14:10.6035280Z ·  ──────────────────── 2026-10-24T22:14:10.6035374Z 1463 │ ({ thread, now: Date.now() })); 2026-10-24T22:14:10.6036507Z 698 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T22:14:10.6036639Z ·  ─────┬──── 2026-10-24T22:14:10.6036820Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6036959Z 699 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T22:14:10.6037010Z ╰──── 2026-10-24T22:14:10.6037289Z  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-24T22:14:10.6037581Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6037583Z 2026-10-24T22:14:10.6037744Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6037897Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:71] 2026-10-24T22:14:10.6037975Z 718 │ const snoozePresets = useMemo( 2026-10-24T22:14:10.6038149Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T22:14:10.6038282Z ·  ─────┬──── 2026-10-24T22:14:10.6038460Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6038576Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T22:14:10.6038626Z ╰──── 2026-10-24T22:14:10.6038897Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.6039185Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6039188Z 2026-10-24T22:14:10.6039368Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T22:14:10.6039522Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:720:6] 2026-10-24T22:14:10.6039693Z 719 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T22:14:10.6039805Z 720 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T22:14:10.6039897Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6040071Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T22:14:10.6040124Z 721 │ ); 2026-10-24T22:14:10.6040172Z ╰──── 2026-10-24T22:14:10.6040486Z  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-24T22:14:10.6040841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6040870Z 2026-10-24T22:14:10.6041047Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T22:14:10.6041198Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:766:7] 2026-10-24T22:14:10.6041264Z 765 │ thread.pinnedAt, 2026-10-24T22:14:10.6041329Z 766 │ variant, 2026-10-24T22:14:10.6041400Z ·  ───┬─── 2026-10-24T22:14:10.6041532Z · ╰── Unnecessary dependency `variant` 2026-10-24T22:14:10.6041584Z 767 │ ], 2026-10-24T22:14:10.6041633Z ╰──── 2026-10-24T22:14:10.6041944Z  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-24T22:14:10.6042251Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6042254Z 2026-10-24T22:14:10.6042444Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.6042602Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1216:21] 2026-10-24T22:14:10.6042729Z 1215 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T22:14:10.6042859Z 1216 │ 2026-10-24T22:14:10.6042969Z ·  ────────────────────────── 2026-10-24T22:14:10.6043078Z 1217 │ 2026-10-24T22:14:10.6043133Z ╰──── 2026-10-24T22:14:10.6043281Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T22:14:10.6043284Z 2026-10-24T22:14:10.6043749Z ⚠ 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-24T22:14:10.6043898Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T22:14:10.6044007Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T22:14:10.6044218Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T22:14:10.6044352Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T22:14:10.6044502Z 137 │ │ if (predicate(lastState)) { 2026-10-24T22:14:10.6044651Z 138 │ │ return lastState; 2026-10-24T22:14:10.6044723Z 139 │ │ } 2026-10-24T22:14:10.6044823Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6044945Z 141 │ ╰─▶ } 2026-10-24T22:14:10.6045018Z 142 │ return yield* Effect.die( 2026-10-24T22:14:10.6045067Z ╰──── 2026-10-24T22:14:10.6045069Z 2026-10-24T22:14:10.6045331Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6045442Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T22:14:10.6045493Z 168 │ 2026-10-24T22:14:10.6045576Z 169 │ const layerTest = Layer.succeed( 2026-10-24T22:14:10.6045652Z ·  ────┬──── 2026-10-24T22:14:10.6045781Z · ╰── 'layerTest' is declared here 2026-10-24T22:14:10.6045844Z 170 │ UsageService, 2026-10-24T22:14:10.6045893Z ╰──── 2026-10-24T22:14:10.6045995Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6045997Z 2026-10-24T22:14:10.6046455Z ⚠ 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-24T22:14:10.6046584Z ╭─[apps/server/src/usage/UsageService.test.ts:2615:7] 2026-10-24T22:14:10.6046681Z 2614 │ let orphanedAt: number | undefined; 2026-10-24T22:14:10.6046913Z 2615 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T22:14:10.6047037Z 2616 │ │ const tasks: Array<() => void> = []; 2026-10-24T22:14:10.6047184Z 2617 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T22:14:10.6047317Z 2618 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T22:14:10.6047414Z 2619 │ │ flush: () => { 2026-10-24T22:14:10.6047535Z 2620 │ │ let task: (() => void) | undefined; 2026-10-24T22:14:10.6047678Z 2621 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T22:14:10.6047759Z 2622 │ │ }, 2026-10-24T22:14:10.6047837Z 2623 │ │ }; 2026-10-24T22:14:10.6047912Z 2624 │ │ 2026-10-24T22:14:10.6048069Z 2625 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T22:14:10.6048171Z 2626 │ │ let requestChecks = 0; 2026-10-24T22:14:10.6048298Z 2627 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T22:14:10.6048404Z 2628 │ │ executionMode: "async", 2026-10-24T22:14:10.6048522Z 2629 │ │ makeDispatcher: () => dispatcher, 2026-10-24T22:14:10.6048633Z 2630 │ │ shouldYield: (fiber) => { 2026-10-24T22:14:10.6048766Z 2631 │ │ if (fiber !== requestFiber) return false; 2026-10-24T22:14:10.6048868Z 2632 │ │ requestChecks += 1; 2026-10-24T22:14:10.6049055Z 2633 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T22:14:10.6049197Z 2634 │ │ fiber.interruptUnsafe(); 2026-10-24T22:14:10.6049292Z 2635 │ │ return true; 2026-10-24T22:14:10.6049372Z 2636 │ │ }, 2026-10-24T22:14:10.6049449Z 2637 │ │ }; 2026-10-24T22:14:10.6049518Z 2638 │ │ 2026-10-24T22:14:10.6049636Z 2639 │ │ const input: UsageSummaryInput = { 2026-10-24T22:14:10.6049727Z 2640 │ │ ...WINDOW, 2026-10-24T22:14:10.6049850Z 2641 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T22:14:10.6050039Z 2642 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T22:14:10.6050122Z 2643 │ │ }; 2026-10-24T22:14:10.6050233Z 2644 │ │ const first = yield* service 2026-10-24T22:14:10.6050334Z 2645 │ │ .readSummary(input) 2026-10-24T22:14:10.6050420Z 2646 │ │ .pipe( 2026-10-24T22:14:10.6050515Z 2647 │ │ Effect.exit, 2026-10-24T22:14:10.6050670Z 2648 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T22:14:10.6050769Z 2649 │ │ Effect.forkChild, 2026-10-24T22:14:10.6050848Z 2650 │ │ ); 2026-10-24T22:14:10.6050949Z 2651 │ │ requestFiber = first; 2026-10-24T22:14:10.6051051Z 2652 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6051155Z 2653 │ │ dispatcher.flush(); 2026-10-24T22:14:10.6051226Z 2654 │ │ 2026-10-24T22:14:10.6051374Z 2655 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T22:14:10.6051468Z 2656 │ │ Effect.match({ 2026-10-24T22:14:10.6051589Z 2657 │ │ onFailure: (error) => error.reason, 2026-10-24T22:14:10.6051708Z 2658 │ │ onSuccess: () => "success" as const, 2026-10-24T22:14:10.6051793Z 2659 │ │ }), 2026-10-24T22:14:10.6051947Z 2660 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T22:14:10.6052046Z 2661 │ │ Effect.forkChild, 2026-10-24T22:14:10.6052122Z 2662 │ │ ); 2026-10-24T22:14:10.6052229Z 2663 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6052334Z 2664 │ │ dispatcher.flush(); 2026-10-24T22:14:10.6052461Z 2665 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T22:14:10.6052573Z 2666 │ │ if (secondExit === undefined) { 2026-10-24T22:14:10.6052684Z 2667 │ │ second.interruptUnsafe(); 2026-10-24T22:14:10.6052793Z 2668 │ │ orphanedAt = interruptAt; 2026-10-24T22:14:10.6052878Z 2669 │ │ break; 2026-10-24T22:14:10.6052953Z 2670 │ │ } 2026-10-24T22:14:10.6053068Z 2671 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T22:14:10.6053269Z 2672 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T22:14:10.6053374Z 2673 │ │ } 2026-10-24T22:14:10.6053523Z 2674 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T22:14:10.6053655Z 2675 │ ╰─▶ } 2026-10-24T22:14:10.6053709Z 2676 │ 2026-10-24T22:14:10.6053759Z ╰──── 2026-10-24T22:14:10.6053761Z 2026-10-24T22:14:10.6054025Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6054133Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T22:14:10.6054183Z 35 │ 2026-10-24T22:14:10.6054310Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T22:14:10.6054382Z ·  ─────┬──── 2026-10-24T22:14:10.6054521Z · ╰── 'claudeCaps' is declared here 2026-10-24T22:14:10.6054601Z 37 │ optionDescriptors: [ 2026-10-24T22:14:10.6054650Z ╰──── 2026-10-24T22:14:10.6054775Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6054777Z 2026-10-24T22:14:10.6054922Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6055071Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T22:14:10.6055129Z 493 │ > 2026-10-24T22:14:10.6055203Z 494 │ {props.children(close)} 2026-10-24T22:14:10.6055292Z ·  ──┬── 2026-10-24T22:14:10.6055448Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.6055528Z 495 │ 2026-10-24T22:14:10.6055579Z ╰──── 2026-10-24T22:14:10.6056038Z  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-24T22:14:10.6056324Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6056326Z 2026-10-24T22:14:10.6056583Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6056739Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T22:14:10.6056850Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T22:14:10.6056918Z 38 │ useLayoutEffect(() => { 2026-10-24T22:14:10.6056992Z ·  ───────┬─────── 2026-10-24T22:14:10.6057120Z · ╰── This is the containing effect 2026-10-24T22:14:10.6057177Z 39 │ reset(); 2026-10-24T22:14:10.6057242Z 40 │ setInitialized(true); 2026-10-24T22:14:10.6057316Z ·  ───────┬────── 2026-10-24T22:14:10.6057480Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6057538Z 41 │ }, [reset]); 2026-10-24T22:14:10.6057588Z ╰──── 2026-10-24T22:14:10.6058227Z  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-24T22:14:10.6058583Z  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-24T22:14:10.6058586Z 2026-10-24T22:14:10.6058839Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6058994Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T22:14:10.6059045Z 88 │ 2026-10-24T22:14:10.6059107Z 89 │ useEffect(() => { 2026-10-24T22:14:10.6059175Z ·  ────┬──── 2026-10-24T22:14:10.6059299Z · ╰── This is the containing effect 2026-10-24T22:14:10.6059459Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T22:14:10.6059562Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T22:14:10.6059625Z 92 │ let active = true; 2026-10-24T22:14:10.6059717Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T22:14:10.6059798Z ·  ─────────┬───────── 2026-10-24T22:14:10.6059965Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6060114Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T22:14:10.6060160Z ╰──── 2026-10-24T22:14:10.6060756Z  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-24T22:14:10.6061074Z  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-24T22:14:10.6061076Z 2026-10-24T22:14:10.6061326Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6061472Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T22:14:10.6061626Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T22:14:10.6061690Z 29 │ useEffect(() => { 2026-10-24T22:14:10.6061759Z ·  ────┬──── 2026-10-24T22:14:10.6061885Z · ╰── This is the containing effect 2026-10-24T22:14:10.6062007Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T22:14:10.6062111Z ·  ───┬─── 2026-10-24T22:14:10.6062298Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6062367Z 31 │ }, [key, live, snapshot]); 2026-10-24T22:14:10.6062415Z ╰──── 2026-10-24T22:14:10.6063084Z  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-24T22:14:10.6063460Z  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-24T22:14:10.6063497Z 2026-10-24T22:14:10.6063697Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T22:14:10.6063862Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T22:14:10.6063930Z 14 │ } from "@t3tools/contracts"; 2026-10-24T22:14:10.6064018Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T22:14:10.6064085Z ·  ── 2026-10-24T22:14:10.6064137Z 16 │ 2026-10-24T22:14:10.6064184Z ╰──── 2026-10-24T22:14:10.6064265Z  help: Remove empty braces 2026-10-24T22:14:10.6064268Z 2026-10-24T22:14:10.6064469Z ⚠ eslint(no-unused-vars): Function 'nonEmptyString' is declared but never used. 2026-10-24T22:14:10.6064650Z ╭─[packages/client-runtime/src/work-log/presentation.ts:237:10] 2026-10-24T22:14:10.6064702Z 236 │ 2026-10-24T22:14:10.6064818Z 237 │ function nonEmptyString(value: unknown): string | null { 2026-10-24T22:14:10.6064901Z ·  ───────┬────── 2026-10-24T22:14:10.6065043Z · ╰── 'nonEmptyString' is declared here 2026-10-24T22:14:10.6065183Z 238 │ return typeof value === "string" && value.trim().length > 0 ? value : null; 2026-10-24T22:14:10.6065235Z ╰──── 2026-10-24T22:14:10.6065336Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6065339Z 2026-10-24T22:14:10.6065522Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T22:14:10.6065672Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T22:14:10.6065844Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T22:14:10.6065924Z 602 │ const gesture = Gesture.Pan() 2026-10-24T22:14:10.6066008Z ·  ─┬─ 2026-10-24T22:14:10.6066145Z · ╰── `Pan` may be a component 2026-10-24T22:14:10.6066217Z 603 │ .enabled(!props.disabled) 2026-10-24T22:14:10.6066265Z ╰──── 2026-10-24T22:14:10.6066536Z  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-24T22:14:10.6066971Z  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-24T22:14:10.6066975Z 2026-10-24T22:14:10.6067271Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6067417Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T22:14:10.6067469Z 727 │ 2026-10-24T22:14:10.6067548Z 728 │ const layer = layerWithOptions(); 2026-10-24T22:14:10.6067616Z ·  ──┬── 2026-10-24T22:14:10.6067739Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.6067787Z ╰──── 2026-10-24T22:14:10.6067887Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6067889Z 2026-10-24T22:14:10.6068351Z ⚠ 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-24T22:14:10.6068487Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T22:14:10.6068542Z 225 │ ) { 2026-10-24T22:14:10.6068747Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T22:14:10.6068855Z 227 │ │ const socket = sockets[index]; 2026-10-24T22:14:10.6068941Z 228 │ │ if (socket) { 2026-10-24T22:14:10.6069034Z 229 │ │ return socket; 2026-10-24T22:14:10.6069105Z 230 │ │ } 2026-10-24T22:14:10.6069204Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6069328Z 232 │ ╰─▶ } 2026-10-24T22:14:10.6069506Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T22:14:10.6069559Z ╰──── 2026-10-24T22:14:10.6069561Z 2026-10-24T22:14:10.6070015Z ⚠ 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-24T22:14:10.6070144Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T22:14:10.6070198Z 239 │ ) { 2026-10-24T22:14:10.6070398Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T22:14:10.6070612Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T22:14:10.6070705Z 242 │ │ if (request) { 2026-10-24T22:14:10.6070799Z 243 │ │ return request; 2026-10-24T22:14:10.6070870Z 244 │ │ } 2026-10-24T22:14:10.6070968Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6071090Z 246 │ ╰─▶ } 2026-10-24T22:14:10.6071253Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T22:14:10.6071302Z ╰──── 2026-10-24T22:14:10.6071305Z 2026-10-24T22:14:10.6071504Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T22:14:10.6071592Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T22:14:10.6071659Z 21 │ EnvironmentThreadShell, 2026-10-24T22:14:10.6071725Z 22 │ ThreadRunSummary, 2026-10-24T22:14:10.6071847Z ·  ────────┬─────── 2026-10-24T22:14:10.6072010Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T22:14:10.6072078Z 23 │ ThreadRuntimeSummary, 2026-10-24T22:14:10.6072128Z ╰──── 2026-10-24T22:14:10.6072223Z  help: Consider removing this import. 2026-10-24T22:14:10.6072226Z 2026-10-24T22:14:10.6072477Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6072625Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T22:14:10.6072674Z 55 │ 2026-10-24T22:14:10.6072736Z 56 │ useEffect(() => { 2026-10-24T22:14:10.6072803Z ·  ────┬──── 2026-10-24T22:14:10.6072934Z · ╰── This is the containing effect 2026-10-24T22:14:10.6073004Z 57 │ setDecodedSize(null); 2026-10-24T22:14:10.6073078Z ·  ───────┬────── 2026-10-24T22:14:10.6073243Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6073311Z 58 │ }, [props.sourceKey]); 2026-10-24T22:14:10.6073360Z ╰──── 2026-10-24T22:14:10.6073945Z  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-24T22:14:10.6074262Z  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-24T22:14:10.6074269Z 2026-10-24T22:14:10.6074521Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6074703Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T22:14:10.6074753Z 59 │ 2026-10-24T22:14:10.6074815Z 60 │ useEffect(() => { 2026-10-24T22:14:10.6074880Z ·  ────┬──── 2026-10-24T22:14:10.6075010Z · ╰── This is the containing effect 2026-10-24T22:14:10.6075075Z 61 │ setFailedUri(null); 2026-10-24T22:14:10.6075148Z ·  ──────┬───── 2026-10-24T22:14:10.6075309Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6075372Z 62 │ }, [props.uri]); 2026-10-24T22:14:10.6075420Z ╰──── 2026-10-24T22:14:10.6076009Z  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-24T22:14:10.6076325Z  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-24T22:14:10.6076327Z 2026-10-24T22:14:10.6076538Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T22:14:10.6076686Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T22:14:10.6076807Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T22:14:10.6077028Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T22:14:10.6077148Z ·  ────────┬──────── 2026-10-24T22:14:10.6077296Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T22:14:10.6077346Z 8 │ 2026-10-24T22:14:10.6077396Z ╰──── 2026-10-24T22:14:10.6077491Z  help: Consider removing this import. 2026-10-24T22:14:10.6077494Z 2026-10-24T22:14:10.6077693Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6077839Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T22:14:10.6077906Z 57 │ setDecodedSize(null); 2026-10-24T22:14:10.6077970Z 58 │ }, [props.sourceKey]); 2026-10-24T22:14:10.6078056Z ·  ───────┬─────── 2026-10-24T22:14:10.6078209Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T22:14:10.6078261Z 59 │ 2026-10-24T22:14:10.6078307Z ╰──── 2026-10-24T22:14:10.6078596Z  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-24T22:14:10.6078902Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6078904Z 2026-10-24T22:14:10.6079098Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6079242Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T22:14:10.6079310Z 61 │ setFailedUri(null); 2026-10-24T22:14:10.6079374Z 62 │ }, [props.uri]); 2026-10-24T22:14:10.6079445Z ·  ────┬──── 2026-10-24T22:14:10.6079583Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T22:14:10.6079632Z 63 │ 2026-10-24T22:14:10.6079679Z ╰──── 2026-10-24T22:14:10.6079964Z  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-24T22:14:10.6080268Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6080271Z 2026-10-24T22:14:10.6080731Z ⚠ 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-24T22:14:10.6080864Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T22:14:10.6080924Z 130 │ ) { 2026-10-24T22:14:10.6081133Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T22:14:10.6081257Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T22:14:10.6081344Z 133 │ │ return; 2026-10-24T22:14:10.6081422Z 134 │ │ } 2026-10-24T22:14:10.6081527Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6081657Z 136 │ ╰─▶ } 2026-10-24T22:14:10.6081863Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T22:14:10.6081935Z ╰──── 2026-10-24T22:14:10.6081938Z 2026-10-24T22:14:10.6082393Z ⚠ 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-24T22:14:10.6082522Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T22:14:10.6082679Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T22:14:10.6082929Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T22:14:10.6083032Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6083165Z 254 │ ╰─▶ } 2026-10-24T22:14:10.6083287Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T22:14:10.6083337Z ╰──── 2026-10-24T22:14:10.6083339Z 2026-10-24T22:14:10.6083792Z ⚠ 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-24T22:14:10.6083919Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T22:14:10.6083972Z 257 │ 2026-10-24T22:14:10.6084217Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T22:14:10.6084325Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6084455Z 260 │ ╰─▶ } 2026-10-24T22:14:10.6084585Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T22:14:10.6084633Z ╰──── 2026-10-24T22:14:10.6084636Z 2026-10-24T22:14:10.6085087Z ⚠ 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-24T22:14:10.6085216Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T22:14:10.6085276Z 321 │ ); 2026-10-24T22:14:10.6085533Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T22:14:10.6085634Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6085762Z 324 │ ╰─▶ } 2026-10-24T22:14:10.6085815Z 325 │ 2026-10-24T22:14:10.6085865Z ╰──── 2026-10-24T22:14:10.6085868Z 2026-10-24T22:14:10.6086313Z ⚠ 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-24T22:14:10.6086439Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T22:14:10.6086597Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T22:14:10.6086885Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T22:14:10.6087011Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6087136Z 332 │ ╰─▶ } 2026-10-24T22:14:10.6087237Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T22:14:10.6087287Z ╰──── 2026-10-24T22:14:10.6087289Z 2026-10-24T22:14:10.6087739Z ⚠ 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-24T22:14:10.6087890Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T22:14:10.6087943Z 27 │ ) { 2026-10-24T22:14:10.6088144Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T22:14:10.6088291Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T22:14:10.6088412Z 30 │ │ if (predicate(available)) return available; 2026-10-24T22:14:10.6088507Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6088627Z 32 │ ╰─▶ } 2026-10-24T22:14:10.6088804Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T22:14:10.6088854Z ╰──── 2026-10-24T22:14:10.6088856Z 2026-10-24T22:14:10.6089077Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T22:14:10.6089222Z ╭─[packages/client-runtime/src/operations/projects.ts:238:51] 2026-10-24T22:14:10.6089284Z 237 │ ): string { 2026-10-24T22:14:10.6089434Z 238 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T22:14:10.6089542Z ·  ────── 2026-10-24T22:14:10.6089669Z 239 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T22:14:10.6089718Z ╰──── 2026-10-24T22:14:10.6089886Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T22:14:10.6089889Z 2026-10-24T22:14:10.6090142Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6090304Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:217:7] 2026-10-24T22:14:10.6090362Z 213 │ }; 2026-10-24T22:14:10.6090431Z 214 │ useEffect(() => { 2026-10-24T22:14:10.6090500Z ·  ────┬──── 2026-10-24T22:14:10.6090628Z · ╰── This is the containing effect 2026-10-24T22:14:10.6090798Z 215 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T22:14:10.6090862Z 216 │ if (inserted) { 2026-10-24T22:14:10.6090935Z 217 │ setSelection((current) => 2026-10-24T22:14:10.6091010Z ·  ──────┬───── 2026-10-24T22:14:10.6091177Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6091343Z 218 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T22:14:10.6091390Z ╰──── 2026-10-24T22:14:10.6092040Z  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-24T22:14:10.6092384Z  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-24T22:14:10.6092386Z 2026-10-24T22:14:10.6092638Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6092798Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:298:7] 2026-10-24T22:14:10.6092871Z 286 │ }, [hasWorkspaceSnapshot]); 2026-10-24T22:14:10.6092934Z 287 │ useEffect(() => { 2026-10-24T22:14:10.6093007Z ·  ────┬──── 2026-10-24T22:14:10.6093134Z · ╰── This is the containing effect 2026-10-24T22:14:10.6093276Z 288 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T22:14:10.6093422Z 289 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T22:14:10.6093493Z 290 │ const now = Date.now(); 2026-10-24T22:14:10.6093603Z 291 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T22:14:10.6093657Z 292 │ if ( 2026-10-24T22:14:10.6093732Z 293 │ lastRequest?.key === key && 2026-10-24T22:14:10.6093871Z 294 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T22:14:10.6093924Z 295 │ ) 2026-10-24T22:14:10.6093982Z 296 │ return; 2026-10-24T22:14:10.6094161Z 297 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T22:14:10.6094247Z 298 │ setWorkspaceRefreshRetry(null); 2026-10-24T22:14:10.6094340Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6094513Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6094593Z 299 │ return; 2026-10-24T22:14:10.6094642Z ╰──── 2026-10-24T22:14:10.6095226Z  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-24T22:14:10.6095592Z  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-24T22:14:10.6095625Z 2026-10-24T22:14:10.6095821Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6095981Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:328:5] 2026-10-24T22:14:10.6096034Z 327 │ }, [ 2026-10-24T22:14:10.6096095Z 328 │ draftMessage, 2026-10-24T22:14:10.6096169Z ·  ──────┬───── 2026-10-24T22:14:10.6096311Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T22:14:10.6096374Z 329 │ environmentId, 2026-10-24T22:14:10.6096421Z ╰──── 2026-10-24T22:14:10.6096710Z  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-24T22:14:10.6097022Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6097027Z 2026-10-24T22:14:10.6097483Z ⚠ 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-24T22:14:10.6097613Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T22:14:10.6097665Z 93 │ ) { 2026-10-24T22:14:10.6097863Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T22:14:10.6098037Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T22:14:10.6098157Z 96 │ │ if (predicate(project)) return project; 2026-10-24T22:14:10.6098255Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6098374Z 98 │ ╰─▶ } 2026-10-24T22:14:10.6098521Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T22:14:10.6098570Z ╰──── 2026-10-24T22:14:10.6098573Z 2026-10-24T22:14:10.6099032Z ⚠ 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-24T22:14:10.6099206Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T22:14:10.6099282Z 222 │ let idlePasses = 0; 2026-10-24T22:14:10.6099426Z 223 │ ╭─▶ for (;;) { 2026-10-24T22:14:10.6099559Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T22:14:10.6099699Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T22:14:10.6099793Z 226 │ │ if (!pending) { 2026-10-24T22:14:10.6099883Z 227 │ │ idlePasses++; 2026-10-24T22:14:10.6099984Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T22:14:10.6100067Z 229 │ │ return; 2026-10-24T22:14:10.6100142Z 230 │ │ } 2026-10-24T22:14:10.6100225Z 231 │ │ continue; 2026-10-24T22:14:10.6100299Z 232 │ │ } 2026-10-24T22:14:10.6100441Z 233 │ │ idlePasses = 0; 2026-10-24T22:14:10.6100588Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T22:14:10.6100796Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T22:14:10.6100870Z 236 │ │ ); 2026-10-24T22:14:10.6100973Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T22:14:10.6101075Z 238 │ │ pending.resolve(exit); 2026-10-24T22:14:10.6101148Z 239 │ │ }); 2026-10-24T22:14:10.6101275Z 240 │ ╰─▶ } 2026-10-24T22:14:10.6101329Z 241 │ }, 2026-10-24T22:14:10.6101379Z ╰──── 2026-10-24T22:14:10.6101382Z 2026-10-24T22:14:10.6101842Z ⚠ 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-24T22:14:10.6101967Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T22:14:10.6102018Z 499 │ 2026-10-24T22:14:10.6102127Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T22:14:10.6102244Z ·  ────────────────────────── 2026-10-24T22:14:10.6102347Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T22:14:10.6102396Z ╰──── 2026-10-24T22:14:10.6102398Z 2026-10-24T22:14:10.6102766Z ⚠ 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-24T22:14:10.6102942Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T22:14:10.6103099Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T22:14:10.6103267Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T22:14:10.6103368Z ·  ────────────────────────── 2026-10-24T22:14:10.6103512Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T22:14:10.6103563Z ╰──── 2026-10-24T22:14:10.6103566Z 2026-10-24T22:14:10.6104017Z ⚠ 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-24T22:14:10.6104141Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T22:14:10.6104232Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T22:14:10.6104338Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T22:14:10.6104452Z ·  ────────────────────────── 2026-10-24T22:14:10.6104517Z 130 │ Schema.Struct({ 2026-10-24T22:14:10.6104595Z ╰──── 2026-10-24T22:14:10.6104598Z 2026-10-24T22:14:10.6104926Z ⚠ 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-24T22:14:10.6105040Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T22:14:10.6105200Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T22:14:10.6105388Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T22:14:10.6105504Z ·  ───────── 2026-10-24T22:14:10.6105562Z 19 │ expect( 2026-10-24T22:14:10.6105611Z ╰──── 2026-10-24T22:14:10.6105613Z 2026-10-24T22:14:10.6105936Z ⚠ 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-24T22:14:10.6106052Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T22:14:10.6106110Z 19 │ expect( 2026-10-24T22:14:10.6106274Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T22:14:10.6106345Z ·  ───────── 2026-10-24T22:14:10.6106406Z 21 │ ).toBe(true); 2026-10-24T22:14:10.6106457Z ╰──── 2026-10-24T22:14:10.6106460Z 2026-10-24T22:14:10.6106645Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T22:14:10.6106764Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T22:14:10.6106887Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T22:14:10.6106977Z 194 │ const codes = new Array(count); 2026-10-24T22:14:10.6107083Z ·  ──────────────────────── 2026-10-24T22:14:10.6107182Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T22:14:10.6107233Z ╰──── 2026-10-24T22:14:10.6107650Z  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-24T22:14:10.6107653Z 2026-10-24T22:14:10.6107852Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.6108000Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T22:14:10.6108085Z 35 │ event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T22:14:10.6109185Z ·  ────── 2026-10-24T22:14:10.6109299Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T22:14:10.6109349Z ╰──── 2026-10-24T22:14:10.6109517Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T22:14:10.6109520Z 2026-10-24T22:14:10.6109723Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T22:14:10.6109890Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T22:14:10.6109962Z 3 │ AuthProvidersManageScope, 2026-10-24T22:14:10.6110033Z 4 │ type AuthSessionState, 2026-10-24T22:14:10.6110174Z ·  ────────┬─────── 2026-10-24T22:14:10.6110353Z · ╰── 'AuthSessionState' is imported here 2026-10-24T22:14:10.6110418Z 5 │ type EnvironmentId, 2026-10-24T22:14:10.6110471Z ╰──── 2026-10-24T22:14:10.6110571Z  help: Consider removing this import. 2026-10-24T22:14:10.6110573Z 2026-10-24T22:14:10.6110765Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.6110930Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:818:17] 2026-10-24T22:14:10.6110995Z 817 │
rest), 2026-10-24T22:14:10.6113908Z ·  ┬ 2026-10-24T22:14:10.6114079Z · ╰── '_' is declared here 2026-10-24T22:14:10.6114177Z 556 │ [ 2026-10-24T22:14:10.6114251Z ╰──── 2026-10-24T22:14:10.6114408Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6114411Z 2026-10-24T22:14:10.6114631Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.6114833Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T22:14:10.6114942Z 1154 │ assert.deepStrictEqual( 2026-10-24T22:14:10.6115134Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T22:14:10.6115272Z ·  ┬ 2026-10-24T22:14:10.6115464Z · ╰── '_' is declared here 2026-10-24T22:14:10.6115617Z 1156 │ [ 2026-10-24T22:14:10.6115718Z ╰──── 2026-10-24T22:14:10.6115838Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6115866Z 2026-10-24T22:14:10.6116064Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.6116255Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T22:14:10.6116339Z 87 │
  • (null); 2026-10-24T22:14:10.6119570Z 168 │ useLayoutEffect(() => { 2026-10-24T22:14:10.6119663Z ·  ───────┬─────── 2026-10-24T22:14:10.6119817Z · ╰── This is the containing effect 2026-10-24T22:14:10.6119983Z 169 │ if (faviconRequest === null) return; 2026-10-24T22:14:10.6120079Z 170 │ 2026-10-24T22:14:10.6120244Z 171 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T22:14:10.6120373Z 172 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T22:14:10.6120490Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6120691Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6120763Z 173 │ return endRequest; 2026-10-24T22:14:10.6120869Z ╰──── 2026-10-24T22:14:10.6121493Z  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-24T22:14:10.6121836Z  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-24T22:14:10.6121839Z 2026-10-24T22:14:10.6122023Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T22:14:10.6122237Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T22:14:10.6122405Z 219 │ 2026-10-24T22:14:10.6122567Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T22:14:10.6122698Z ·  ──┬─ 2026-10-24T22:14:10.6122870Z · ╰── 'U+001B' is a control character. 2026-10-24T22:14:10.6122980Z 221 │ 2026-10-24T22:14:10.6123059Z ╰──── 2026-10-24T22:14:10.6123309Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T22:14:10.6123311Z 2026-10-24T22:14:10.6123502Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T22:14:10.6123665Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T22:14:10.6123787Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T22:14:10.6123904Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T22:14:10.6123993Z ·  ──┬── 2026-10-24T22:14:10.6124143Z · ╰── 'Scope' is imported here 2026-10-24T22:14:10.6124286Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T22:14:10.6124365Z ╰──── 2026-10-24T22:14:10.6124489Z  help: Consider removing this import. 2026-10-24T22:14:10.6124491Z 2026-10-24T22:14:10.6124784Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6124946Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T22:14:10.6125033Z 57 │ 2026-10-24T22:14:10.6125123Z 58 │ useEffect(() => { 2026-10-24T22:14:10.6125206Z ·  ────┬──── 2026-10-24T22:14:10.6125351Z · ╰── This is the containing effect 2026-10-24T22:14:10.6125487Z 59 │ const controller = new AbortController(); 2026-10-24T22:14:10.6125585Z 60 │ setLoadState("pending"); 2026-10-24T22:14:10.6125724Z ·  ──────┬───── 2026-10-24T22:14:10.6125948Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6126130Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T22:14:10.6126210Z ╰──── 2026-10-24T22:14:10.6126802Z  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-24T22:14:10.6127146Z  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-24T22:14:10.6127148Z 2026-10-24T22:14:10.6127367Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6127546Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T22:14:10.6127649Z 70 │ return () => controller.abort(); 2026-10-24T22:14:10.6127753Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T22:14:10.6127950Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T22:14:10.6128212Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T22:14:10.6128439Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T22:14:10.6128612Z · ╰── Unnecessary dependency `player_0` 2026-10-24T22:14:10.6128679Z 72 │ 2026-10-24T22:14:10.6128753Z ╰──── 2026-10-24T22:14:10.6129090Z  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-24T22:14:10.6129424Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6129426Z 2026-10-24T22:14:10.6129636Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6129791Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T22:14:10.6129873Z 81 │ }, 2026-10-24T22:14:10.6129967Z 82 │ [draftKey], 2026-10-24T22:14:10.6130053Z ·  ────┬─── 2026-10-24T22:14:10.6130218Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T22:14:10.6130293Z 83 │ ); 2026-10-24T22:14:10.6130386Z ╰──── 2026-10-24T22:14:10.6130680Z  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-24T22:14:10.6131012Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6131015Z 2026-10-24T22:14:10.6131293Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6131484Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:410:7] 2026-10-24T22:14:10.6131574Z 409 │ 2026-10-24T22:14:10.6131759Z 410 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T22:14:10.6131885Z ·  ──┬── 2026-10-24T22:14:10.6132028Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.6132130Z ╰──── 2026-10-24T22:14:10.6132243Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6132245Z 2026-10-24T22:14:10.6132463Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.6132633Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:272:25] 2026-10-24T22:14:10.6132772Z 271 │ {record.elements?.map((element, index) => ( 2026-10-24T22:14:10.6132967Z 272 │ 2026-10-24T22:14:10.6133134Z ·  ─────────────────────────────────────────────────────── 2026-10-24T22:14:10.6133236Z 273 │ 2026-10-24T22:14:10.6134016Z 8 │ Gesture.Hover() 2026-10-24T22:14:10.6134110Z ·  ──┬── 2026-10-24T22:14:10.6134268Z · ╰── `Hover` may be a component 2026-10-24T22:14:10.6134368Z 9 │ .manualActivation(true) 2026-10-24T22:14:10.6134448Z ╰──── 2026-10-24T22:14:10.6134783Z  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-24T22:14:10.6135253Z  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-24T22:14:10.6135255Z 2026-10-24T22:14:10.6135445Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T22:14:10.6135621Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T22:14:10.6135703Z 465 │ 2026-10-24T22:14:10.6135824Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T22:14:10.6135923Z ·  ── 2026-10-24T22:14:10.6136007Z 467 │ } 2026-10-24T22:14:10.6136077Z ╰──── 2026-10-24T22:14:10.6136324Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T22:14:10.6136327Z 2026-10-24T22:14:10.6136628Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6136801Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T22:14:10.6136878Z 60 │ ) { 2026-10-24T22:14:10.6137046Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T22:14:10.6137169Z ·  ──────┬────── 2026-10-24T22:14:10.6137332Z · ╰── 'useDragRegion' is declared here 2026-10-24T22:14:10.6137505Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T22:14:10.6137603Z ╰──── 2026-10-24T22:14:10.6137736Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6137739Z 2026-10-24T22:14:10.6137967Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T22:14:10.6138147Z ╭─[apps/mobile/src/features/terminal/TerminalContextSheet.tsx:72:15] 2026-10-24T22:14:10.6138240Z 71 │ { 2026-10-24T22:14:10.6139534Z ·  ────┬──── 2026-10-24T22:14:10.6139717Z · ╰── This is the containing effect 2026-10-24T22:14:10.6139805Z 261 │ stop(); 2026-10-24T22:14:10.6139884Z ·  ──┬─ 2026-10-24T22:14:10.6140076Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6140174Z 262 │ }, [orderVersion]); 2026-10-24T22:14:10.6140257Z ╰──── 2026-10-24T22:14:10.6140865Z  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-24T22:14:10.6141212Z  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-24T22:14:10.6141215Z 2026-10-24T22:14:10.6141452Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6141653Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T22:14:10.6141741Z 260 │ useEffect(() => { 2026-10-24T22:14:10.6141812Z 261 │ stop(); 2026-10-24T22:14:10.6141911Z ·  ──┬─ 2026-10-24T22:14:10.6142069Z · ╰── Missing dependency `stop` 2026-10-24T22:14:10.6142167Z 262 │ }, [orderVersion]); 2026-10-24T22:14:10.6142255Z ·  ──────┬───── 2026-10-24T22:14:10.6142427Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T22:14:10.6142511Z 263 │ useEffect( 2026-10-24T22:14:10.6142611Z ╰──── 2026-10-24T22:14:10.6143147Z  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-24T22:14:10.6143557Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6143601Z 2026-10-24T22:14:10.6143774Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6143962Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T22:14:10.6144080Z 95 │ const latest = useRef(props); 2026-10-24T22:14:10.6144165Z 96 │ latest.current = props; 2026-10-24T22:14:10.6144294Z ·  ───┬──────┬─── 2026-10-24T22:14:10.6144489Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.6144682Z · ╰── This value is a ref 2026-10-24T22:14:10.6144766Z 97 │ const gesture = useMemo( 2026-10-24T22:14:10.6144845Z ╰──── 2026-10-24T22:14:10.6145340Z  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-24T22:14:10.6145661Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6145664Z 2026-10-24T22:14:10.6145842Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6146011Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T22:14:10.6146103Z 103 │ .runOnJS(true) 2026-10-24T22:14:10.6146223Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T22:14:10.6146383Z ·  ───────────────┬────────────── 2026-10-24T22:14:10.6146597Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6146757Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6146831Z ╰──── 2026-10-24T22:14:10.6147321Z  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-24T22:14:10.6147645Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6147648Z 2026-10-24T22:14:10.6147801Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6148034Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T22:14:10.6148184Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T22:14:10.6148363Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6148534Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T22:14:10.6148754Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6148911Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6148991Z ╰──── 2026-10-24T22:14:10.6149487Z  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-24T22:14:10.6149788Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6149806Z 2026-10-24T22:14:10.6149961Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6150138Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T22:14:10.6150311Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6150460Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6150611Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T22:14:10.6150856Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6151011Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T22:14:10.6151097Z ╰──── 2026-10-24T22:14:10.6151566Z  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-24T22:14:10.6151886Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6151888Z 2026-10-24T22:14:10.6152050Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6152246Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T22:14:10.6152402Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6152540Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T22:14:10.6152707Z ·  ───────────────────────┬────────────────────── 2026-10-24T22:14:10.6152941Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6153043Z 108 │ [props.disabled], 2026-10-24T22:14:10.6153125Z ╰──── 2026-10-24T22:14:10.6153590Z  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-24T22:14:10.6157644Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6157677Z 2026-10-24T22:14:10.6157846Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6158006Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T22:14:10.6158118Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T22:14:10.6158221Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T22:14:10.6158324Z ·  ───┬──────┬─── 2026-10-24T22:14:10.6158502Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.6158614Z · ╰── This value is a ref 2026-10-24T22:14:10.6158665Z 250 │ 2026-10-24T22:14:10.6158719Z ╰──── 2026-10-24T22:14:10.6159173Z  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-24T22:14:10.6159458Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6159461Z 2026-10-24T22:14:10.6159603Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6159758Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T22:14:10.6159873Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T22:14:10.6159988Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T22:14:10.6160112Z ·  ──────────────────┬────────────────── 2026-10-24T22:14:10.6160276Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.6160382Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T22:14:10.6160430Z ╰──── 2026-10-24T22:14:10.6160884Z  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-24T22:14:10.6161168Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6161170Z 2026-10-24T22:14:10.6161343Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6161501Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T22:14:10.6161564Z 323 │ update(0); 2026-10-24T22:14:10.6161643Z 324 │ let last = performance.now(); 2026-10-24T22:14:10.6161737Z ·  ────────┬──────── 2026-10-24T22:14:10.6161872Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6161939Z 325 │ const tick = () => { 2026-10-24T22:14:10.6161989Z ╰──── 2026-10-24T22:14:10.6162282Z  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-24T22:14:10.6162618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6162657Z 2026-10-24T22:14:10.6162840Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T22:14:10.6162996Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T22:14:10.6163055Z  98 │ () => 2026-10-24T22:14:10.6163120Z  99 │ Gesture.Pan() 2026-10-24T22:14:10.6163191Z ·  ─┬─ 2026-10-24T22:14:10.6163319Z · ╰── `Pan` may be a component 2026-10-24T22:14:10.6163397Z 100 │ .enabled(!props.disabled) 2026-10-24T22:14:10.6163445Z ╰──── 2026-10-24T22:14:10.6163716Z  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-24T22:14:10.6164152Z  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-24T22:14:10.6164154Z 2026-10-24T22:14:10.6164337Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T22:14:10.6164496Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T22:14:10.6164595Z 103 │ .runOnJS(true) 2026-10-24T22:14:10.6164693Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T22:14:10.6164779Z ·  ───┬── 2026-10-24T22:14:10.6165206Z · ╰── 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-24T22:14:10.6165337Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6165455Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T22:14:10.6165577Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T22:14:10.6165642Z 108 │ [props.disabled], 2026-10-24T22:14:10.6165722Z ·  ────────┬─────── 2026-10-24T22:14:10.6165903Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6165959Z 109 │ ); 2026-10-24T22:14:10.6166008Z ╰──── 2026-10-24T22:14:10.6166215Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T22:14:10.6166522Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6166524Z 2026-10-24T22:14:10.6166978Z ⚠ 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-24T22:14:10.6167099Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T22:14:10.6167173Z 138 │ Effect.gen(function* () { 2026-10-24T22:14:10.6167360Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T22:14:10.6167479Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T22:14:10.6167836Z 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-24T22:14:10.6168047Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T22:14:10.6168173Z 143 │ ╰─▶ } 2026-10-24T22:14:10.6168255Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T22:14:10.6168305Z ╰──── 2026-10-24T22:14:10.6168308Z 2026-10-24T22:14:10.6168560Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6168716Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T22:14:10.6168883Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T22:14:10.6168948Z 113 │ useEffect(() => { 2026-10-24T22:14:10.6169019Z ·  ────┬──── 2026-10-24T22:14:10.6169146Z · ╰── This is the containing effect 2026-10-24T22:14:10.6169304Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T22:14:10.6169364Z 115 │ return; 2026-10-24T22:14:10.6169417Z 116 │ } 2026-10-24T22:14:10.6169531Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T22:14:10.6169599Z ·  ────┬─── 2026-10-24T22:14:10.6169763Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6169881Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T22:14:10.6169938Z ╰──── 2026-10-24T22:14:10.6170520Z  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-24T22:14:10.6170827Z  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-24T22:14:10.6170829Z 2026-10-24T22:14:10.6171079Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6171226Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:570:5] 2026-10-24T22:14:10.6171327Z 568 │ }, []); 2026-10-24T22:14:10.6171414Z 569 │ useEffect(() => { 2026-10-24T22:14:10.6171482Z ·  ────┬──── 2026-10-24T22:14:10.6171605Z · ╰── This is the containing effect 2026-10-24T22:14:10.6171688Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T22:14:10.6171774Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6171939Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6172038Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T22:14:10.6172088Z ╰──── 2026-10-24T22:14:10.6172666Z  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-24T22:14:10.6172973Z  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-24T22:14:10.6172976Z 2026-10-24T22:14:10.6173222Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6173369Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:966:7] 2026-10-24T22:14:10.6173518Z 963 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T22:14:10.6173578Z 964 │ useEffect(() => { 2026-10-24T22:14:10.6173645Z ·  ────┬──── 2026-10-24T22:14:10.6173774Z · ╰── This is the containing effect 2026-10-24T22:14:10.6173931Z 965 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T22:14:10.6174041Z 966 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T22:14:10.6174137Z ·  ─────────────┬──────────── 2026-10-24T22:14:10.6174306Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6174358Z 967 │ } 2026-10-24T22:14:10.6174405Z ╰──── 2026-10-24T22:14:10.6175022Z  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-24T22:14:10.6175336Z  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-24T22:14:10.6175341Z 2026-10-24T22:14:10.6175589Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6175740Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1222:5] 2026-10-24T22:14:10.6175792Z 1220 │ 2026-10-24T22:14:10.6175855Z 1221 │ useEffect(() => { 2026-10-24T22:14:10.6175925Z ·  ────┬──── 2026-10-24T22:14:10.6176051Z · ╰── This is the containing effect 2026-10-24T22:14:10.6176125Z 1222 │ setAnchorMessageId(null); 2026-10-24T22:14:10.6176207Z ·  ─────────┬──────── 2026-10-24T22:14:10.6176424Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6176532Z 1223 │ setSubmittedMessageId(null); 2026-10-24T22:14:10.6176580Z ╰──── 2026-10-24T22:14:10.6177158Z  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-24T22:14:10.6177468Z  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-24T22:14:10.6177470Z 2026-10-24T22:14:10.6177666Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6177816Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:571:7] 2026-10-24T22:14:10.6177899Z 570 │ setKeyboardStateSuspect(false); 2026-10-24T22:14:10.6177995Z 571 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T22:14:10.6178136Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T22:14:10.6178342Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T22:14:10.6178497Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T22:14:10.6178619Z 572 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T22:14:10.6178669Z ╰──── 2026-10-24T22:14:10.6178961Z  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-24T22:14:10.6179267Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6179270Z 2026-10-24T22:14:10.6179461Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6179612Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1170:7] 2026-10-24T22:14:10.6179695Z 1169 │ userInputInsetProgress.set(1); 2026-10-24T22:14:10.6179853Z 1170 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T22:14:10.6179943Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6180116Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T22:14:10.6180225Z 1171 │ const showContent = props.showContent ?? true; 2026-10-24T22:14:10.6180278Z ╰──── 2026-10-24T22:14:10.6180561Z  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-24T22:14:10.6180864Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6180866Z 2026-10-24T22:14:10.6181058Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6181210Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1228:15] 2026-10-24T22:14:10.6181276Z 1227 │ freeze.set(false); 2026-10-24T22:14:10.6181354Z 1228 │ }, [freeze, selectedThreadKey]); 2026-10-24T22:14:10.6181491Z ·  ────────┬──────── 2026-10-24T22:14:10.6181685Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T22:14:10.6181737Z 1229 │ 2026-10-24T22:14:10.6181784Z ╰──── 2026-10-24T22:14:10.6182065Z  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-24T22:14:10.6182366Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6182368Z 2026-10-24T22:14:10.6182519Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6182665Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1058:5] 2026-10-24T22:14:10.6182777Z 1053 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T22:14:10.6182979Z 1054 │ const floatingControlCoverage = useSharedValue( 2026-10-24T22:14:10.6183072Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6183231Z · ╰── `floatingControlCoverage` originates here 2026-10-24T22:14:10.6183355Z 1055 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T22:14:10.6183409Z 1056 │ ); 2026-10-24T22:14:10.6183473Z 1057 │ useEffect(() => { 2026-10-24T22:14:10.6183575Z 1058 │ floatingControlCoverage.value = withTiming( 2026-10-24T22:14:10.6183662Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6183822Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T22:14:10.6183952Z 1059 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T22:14:10.6184004Z ╰──── 2026-10-24T22:14:10.6184259Z  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-24T22:14:10.6184584Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6184587Z 2026-10-24T22:14:10.6184753Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6184901Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1076:7] 2026-10-24T22:14:10.6185080Z 1066 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T22:14:10.6185206Z 1067 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T22:14:10.6185318Z ·  ────────────────┬──────────────── 2026-10-24T22:14:10.6185501Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T22:14:10.6185626Z 1068 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T22:14:10.6185681Z 1069 │ ); 2026-10-24T22:14:10.6185749Z 1070 │ useAnimatedReaction( 2026-10-24T22:14:10.6185807Z 1071 │ () => 2026-10-24T22:14:10.6185894Z 1072 │ contentInsetEndAdjustment.value + 2026-10-24T22:14:10.6185982Z 1073 │ floatingControlCoverage.value + 2026-10-24T22:14:10.6186176Z 1074 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T22:14:10.6186239Z 1075 │ (value) => { 2026-10-24T22:14:10.6186348Z 1076 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T22:14:10.6186529Z ·  ────────────────┬──────────────── 2026-10-24T22:14:10.6186753Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T22:14:10.6186807Z 1077 │ }, 2026-10-24T22:14:10.6186855Z ╰──── 2026-10-24T22:14:10.6187113Z  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-24T22:14:10.6187408Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6187411Z 2026-10-24T22:14:10.6187659Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6187831Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:643:5] 2026-10-24T22:14:10.6187884Z 638 │ 2026-10-24T22:14:10.6187946Z 639 │ useEffect(() => { 2026-10-24T22:14:10.6188015Z ·  ────┬──── 2026-10-24T22:14:10.6188143Z · ╰── This is the containing effect 2026-10-24T22:14:10.6188248Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T22:14:10.6188308Z 641 │ return; 2026-10-24T22:14:10.6188361Z 642 │ } 2026-10-24T22:14:10.6188433Z 643 │ setPendingLaunchEntry({ 2026-10-24T22:14:10.6188517Z ·  ──────────┬────────── 2026-10-24T22:14:10.6188683Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6188751Z 644 │ key: launchTargetKey, 2026-10-24T22:14:10.6188799Z ╰──── 2026-10-24T22:14:10.6189388Z  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-24T22:14:10.6189704Z  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-24T22:14:10.6189707Z 2026-10-24T22:14:10.6189955Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6190118Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T22:14:10.6190169Z 648 │ 2026-10-24T22:14:10.6190290Z 649 │ useEffect(() => { 2026-10-24T22:14:10.6190384Z ·  ────┬──── 2026-10-24T22:14:10.6190509Z · ╰── This is the containing effect 2026-10-24T22:14:10.6190618Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T22:14:10.6190676Z 651 │ return; 2026-10-24T22:14:10.6190728Z 652 │ } 2026-10-24T22:14:10.6190805Z 653 │ setInitialAttachGridEntry({ 2026-10-24T22:14:10.6190894Z ·  ────────────┬──────────── 2026-10-24T22:14:10.6191063Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6191132Z 654 │ key: launchTargetKey, 2026-10-24T22:14:10.6191182Z ╰──── 2026-10-24T22:14:10.6191766Z  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-24T22:14:10.6192078Z  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-24T22:14:10.6192080Z 2026-10-24T22:14:10.6192328Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6192492Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T22:14:10.6192541Z 743 │ 2026-10-24T22:14:10.6192601Z 744 │ useEffect(() => { 2026-10-24T22:14:10.6192668Z ·  ────┬──── 2026-10-24T22:14:10.6192796Z · ╰── This is the containing effect 2026-10-24T22:14:10.6192895Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T22:14:10.6192958Z 746 │ setLastGridSize({ 2026-10-24T22:14:10.6193036Z ·  ───────┬─────── 2026-10-24T22:14:10.6193205Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6193284Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T22:14:10.6193331Z ╰──── 2026-10-24T22:14:10.6193909Z  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-24T22:14:10.6194226Z  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-24T22:14:10.6194230Z 2026-10-24T22:14:10.6194425Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6194617Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T22:14:10.6194670Z 537 │ }); 2026-10-24T22:14:10.6194791Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T22:14:10.6194898Z ·  ───────────┬────────── 2026-10-24T22:14:10.6195136Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T22:14:10.6195341Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T22:14:10.6195419Z ╰──── 2026-10-24T22:14:10.6195705Z  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-24T22:14:10.6196006Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6196008Z 2026-10-24T22:14:10.6196201Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6196362Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T22:14:10.6196454Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T22:14:10.6196516Z 709 │ }, [terminalKey]); 2026-10-24T22:14:10.6196596Z ·  ─────┬───── 2026-10-24T22:14:10.6196736Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T22:14:10.6196785Z 710 │ 2026-10-24T22:14:10.6196834Z ╰──── 2026-10-24T22:14:10.6197117Z  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-24T22:14:10.6197414Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6197418Z 2026-10-24T22:14:10.6197609Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6197772Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T22:14:10.6197829Z 799 │ }; 2026-10-24T22:14:10.6198005Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T22:14:10.6198178Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T22:14:10.6198403Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T22:14:10.6198607Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T22:14:10.6198659Z 801 │ 2026-10-24T22:14:10.6198706Z ╰──── 2026-10-24T22:14:10.6198997Z  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-24T22:14:10.6199301Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6199303Z 2026-10-24T22:14:10.6199444Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6199606Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T22:14:10.6199656Z 792 │ } 2026-10-24T22:14:10.6199760Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T22:14:10.6199868Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6200024Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.6200073Z 794 │ 2026-10-24T22:14:10.6200122Z ╰──── 2026-10-24T22:14:10.6200632Z  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-24T22:14:10.6200942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6200944Z 2026-10-24T22:14:10.6201148Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T22:14:10.6201282Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T22:14:10.6201403Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T22:14:10.6201509Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T22:14:10.6201619Z ·  ─────── 2026-10-24T22:14:10.6201727Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T22:14:10.6201777Z ╰──── 2026-10-24T22:14:10.6202028Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T22:14:10.6202031Z 2026-10-24T22:14:10.6202280Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6202416Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T22:14:10.6202469Z 3754 │ 2026-10-24T22:14:10.6202664Z 3755 │ const layer: Layer.Layer = 2026-10-24T22:14:10.6202738Z ·  ──┬── 2026-10-24T22:14:10.6202860Z · ╰── 'layer' is declared here 2026-10-24T22:14:10.6202922Z 3756 │ Layer.effect( 2026-10-24T22:14:10.6202972Z ╰──── 2026-10-24T22:14:10.6203071Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6203074Z 2026-10-24T22:14:10.6203214Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6203328Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T22:14:10.6203502Z 53 │ const child = children as ReactElement>; 2026-10-24T22:14:10.6203673Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T22:14:10.6203774Z 55 │ │ onTouchStart: (event) => { 2026-10-24T22:14:10.6203934Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T22:14:10.6204088Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T22:14:10.6204210Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T22:14:10.6204373Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T22:14:10.6204480Z 60 │ │ pendingPress.current = null; 2026-10-24T22:14:10.6204621Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T22:14:10.6204695Z 62 │ │ }, 2026-10-24T22:14:10.6204789Z 63 │ │ onPress: (event) => { 2026-10-24T22:14:10.6205005Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T22:14:10.6205170Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T22:14:10.6205332Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T22:14:10.6205515Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T22:14:10.6205598Z 68 │ │ return; 2026-10-24T22:14:10.6205673Z 69 │ │ } 2026-10-24T22:14:10.6205809Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T22:14:10.6205972Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T22:14:10.6206137Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T22:14:10.6206234Z 73 │ │ event.persist(); 2026-10-24T22:14:10.6206389Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T22:14:10.6206472Z 75 │ │ return; 2026-10-24T22:14:10.6206543Z 76 │ │ } 2026-10-24T22:14:10.6206653Z 77 │ │ child.props.onPress?.(event); 2026-10-24T22:14:10.6206727Z 78 │ │ }, 2026-10-24T22:14:10.6206855Z 79 │ ├─▶ }); 2026-10-24T22:14:10.6207084Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6207185Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T22:14:10.6207241Z ╰──── 2026-10-24T22:14:10.6207697Z  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-24T22:14:10.6207979Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6207982Z 2026-10-24T22:14:10.6208159Z ⚠ react(static-components): Cannot create components during render 2026-10-24T22:14:10.6208318Z ╭─[apps/mobile/src/features/terminal/NativeTerminalSurface.tsx:234:10] 2026-10-24T22:14:10.6208400Z 196 │ const { onInput, onResize } = props; 2026-10-24T22:14:10.6208545Z 197 │ const NativeTerminalSurfaceView = resolveNativeTerminalSurfaceView(); 2026-10-24T22:14:10.6208672Z ·  ────────────────┬─────────────── 2026-10-24T22:14:10.6208854Z · ╰── The component is created during render here 2026-10-24T22:14:10.6208978Z 198 │ const hasNativeSurface = Boolean(NativeTerminalSurfaceView); 2026-10-24T22:14:10.6209028Z 199 │ 2026-10-24T22:14:10.6209089Z 200 │ useEffect(() => { 2026-10-24T22:14:10.6209173Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T22:14:10.6209256Z 202 │ terminalKey: props.terminalKey, 2026-10-24T22:14:10.6209329Z 203 │ native: hasNativeSurface, 2026-10-24T22:14:10.6209457Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T22:14:10.6209538Z 205 │ bufferLen: props.buffer.length, 2026-10-24T22:14:10.6209661Z 206 │ isRunning: props.isRunning, 2026-10-24T22:14:10.6209742Z 207 │ }); 2026-10-24T22:14:10.6209894Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T22:14:10.6209981Z 209 │ const handleNativeInput = useCallback( 2026-10-24T22:14:10.6210091Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T22:14:10.6210184Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T22:14:10.6210243Z 212 │ return; 2026-10-24T22:14:10.6210298Z 213 │ } 2026-10-24T22:14:10.6210383Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T22:14:10.6210530Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T22:14:10.6210585Z 216 │ }); 2026-10-24T22:14:10.6210667Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T22:14:10.6210719Z 218 │ }, 2026-10-24T22:14:10.6210819Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T22:14:10.6210872Z 220 │ ); 2026-10-24T22:14:10.6210958Z 221 │ const handleNativeResize = useCallback( 2026-10-24T22:14:10.6211067Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T22:14:10.6211126Z 223 │ onResize({ 2026-10-24T22:14:10.6211206Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T22:14:10.6211284Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T22:14:10.6211339Z 226 │ }); 2026-10-24T22:14:10.6211389Z 227 │ }, 2026-10-24T22:14:10.6211449Z 228 │ [onResize], 2026-10-24T22:14:10.6211499Z 229 │ ); 2026-10-24T22:14:10.6211548Z 230 │ 2026-10-24T22:14:10.6211626Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T22:14:10.6211684Z 232 │ return ( 2026-10-24T22:14:10.6211759Z 233 │ 2026-10-24T22:14:10.6211841Z 234 │ { 2026-10-24T22:14:10.6213371Z ·  ────┬──── 2026-10-24T22:14:10.6213498Z · ╰── This is the containing effect 2026-10-24T22:14:10.6213567Z 2195 │ setExpandedVideo(null); 2026-10-24T22:14:10.6213647Z ·  ────────┬─────── 2026-10-24T22:14:10.6213814Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6213883Z 2196 │ setExpandedFile(null); 2026-10-24T22:14:10.6213931Z ╰──── 2026-10-24T22:14:10.6214587Z  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-24T22:14:10.6214931Z  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-24T22:14:10.6214934Z 2026-10-24T22:14:10.6215182Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6215313Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2700:9] 2026-10-24T22:14:10.6215445Z 2691 │ const stopFollowingEnd = useEffectEvent(() => setEndFollow(false)); 2026-10-24T22:14:10.6215508Z 2692 │ useEffect(() => { 2026-10-24T22:14:10.6215576Z ·  ────┬──── 2026-10-24T22:14:10.6215705Z · ╰── This is the containing effect 2026-10-24T22:14:10.6215830Z 2693 │ if (!jumpToMessageId || loadedListKey !== listMountKey) return; 2026-10-24T22:14:10.6215923Z 2694 │ const index = presentedFeed.findIndex( 2026-10-24T22:14:10.6216052Z 2695 │ (entry) => entry.type === "message" && entry.id === jumpToMessageId, 2026-10-24T22:14:10.6216105Z 2696 │ ); 2026-10-24T22:14:10.6216169Z 2697 │ if (index === -1) { 2026-10-24T22:14:10.6216293Z 2698 │ const runId = messageFoldRunId(props.feed, jumpToMessageId); 2026-10-24T22:14:10.6216392Z 2699 │ if (runId && !expandedTurnIds.has(runId)) { 2026-10-24T22:14:10.6216481Z 2700 │ setInteractionState((current) => ({ 2026-10-24T22:14:10.6216567Z ·  ─────────┬───────── 2026-10-24T22:14:10.6216745Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6216811Z 2701 │ ...current, 2026-10-24T22:14:10.6216861Z ╰──── 2026-10-24T22:14:10.6217440Z  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-24T22:14:10.6217752Z  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-24T22:14:10.6217754Z 2026-10-24T22:14:10.6217976Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T22:14:10.6218154Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:70:10] 2026-10-24T22:14:10.6218315Z 69 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T22:14:10.6218446Z 70 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T22:14:10.6218540Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6218701Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T22:14:10.6218850Z 71 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T22:14:10.6218897Z ╰──── 2026-10-24T22:14:10.6218990Z  help: Consider removing this import. 2026-10-24T22:14:10.6218993Z 2026-10-24T22:14:10.6219193Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T22:14:10.6219325Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:96:3] 2026-10-24T22:14:10.6219382Z 95 │ import { 2026-10-24T22:14:10.6219443Z 96 │ createContext, 2026-10-24T22:14:10.6219513Z ·  ──────┬────── 2026-10-24T22:14:10.6219645Z · ╰── 'createContext' is imported here 2026-10-24T22:14:10.6219696Z 97 │ memo, 2026-10-24T22:14:10.6219744Z ╰──── 2026-10-24T22:14:10.6219837Z  help: Consider removing this import. 2026-10-24T22:14:10.6219840Z 2026-10-24T22:14:10.6220045Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T22:14:10.6220174Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:112:3] 2026-10-24T22:14:10.6220228Z 111 │ import { 2026-10-24T22:14:10.6220293Z 112 │ ActivityIndicator, 2026-10-24T22:14:10.6220376Z ·  ────────┬──────── 2026-10-24T22:14:10.6220516Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T22:14:10.6220570Z 113 │ Image, 2026-10-24T22:14:10.6220619Z ╰──── 2026-10-24T22:14:10.6220711Z  help: Consider removing this import. 2026-10-24T22:14:10.6220713Z 2026-10-24T22:14:10.6220906Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T22:14:10.6221033Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:119:3] 2026-10-24T22:14:10.6221093Z 118 │ Pressable, 2026-10-24T22:14:10.6221153Z 119 │ ScrollView, 2026-10-24T22:14:10.6221221Z ·  ─────┬──── 2026-10-24T22:14:10.6221348Z · ╰── 'ScrollView' is imported here 2026-10-24T22:14:10.6221412Z 120 │ StyleSheet, 2026-10-24T22:14:10.6221463Z ╰──── 2026-10-24T22:14:10.6221552Z  help: Consider removing this import. 2026-10-24T22:14:10.6221555Z 2026-10-24T22:14:10.6221746Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T22:14:10.6221876Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:121:11] 2026-10-24T22:14:10.6221933Z 120 │ StyleSheet, 2026-10-24T22:14:10.6221996Z 121 │ Text as NativeText, 2026-10-24T22:14:10.6222072Z ·  ─────┬──── 2026-10-24T22:14:10.6222202Z · ╰── 'NativeText' is imported here 2026-10-24T22:14:10.6222266Z 122 │ type ColorValue, 2026-10-24T22:14:10.6222313Z ╰──── 2026-10-24T22:14:10.6222407Z  help: Consider removing this import. 2026-10-24T22:14:10.6222410Z 2026-10-24T22:14:10.6222672Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T22:14:10.6223051Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:144:10] 2026-10-24T22:14:10.6223183Z 143 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T22:14:10.6223305Z 144 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T22:14:10.6223392Z ·  ─────────┬──────── 2026-10-24T22:14:10.6223540Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T22:14:10.6223682Z 145 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T22:14:10.6223729Z ╰──── 2026-10-24T22:14:10.6223821Z  help: Consider removing this import. 2026-10-24T22:14:10.6223824Z 2026-10-24T22:14:10.6224038Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T22:14:10.6224169Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:147:10] 2026-10-24T22:14:10.6224297Z 146 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T22:14:10.6224416Z 147 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T22:14:10.6224503Z ·  ─────────┬───────── 2026-10-24T22:14:10.6224695Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T22:14:10.6224750Z 148 │ import { 2026-10-24T22:14:10.6224799Z ╰──── 2026-10-24T22:14:10.6224891Z  help: Consider removing this import. 2026-10-24T22:14:10.6224894Z 2026-10-24T22:14:10.6225105Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T22:14:10.6225235Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:10] 2026-10-24T22:14:10.6225378Z 160 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T22:14:10.6225507Z 161 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T22:14:10.6225590Z ·  ────────┬─────── 2026-10-24T22:14:10.6225734Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T22:14:10.6225867Z 162 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T22:14:10.6225916Z ╰──── 2026-10-24T22:14:10.6226007Z  help: Consider removing this import. 2026-10-24T22:14:10.6226010Z 2026-10-24T22:14:10.6226228Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T22:14:10.6226358Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:165:3] 2026-10-24T22:14:10.6226437Z 164 │ attachmentVideoPreviewSource, 2026-10-24T22:14:10.6226505Z 165 │ mediaVideoPreviewUri, 2026-10-24T22:14:10.6226585Z ·  ──────────┬───────── 2026-10-24T22:14:10.6226734Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T22:14:10.6226802Z 166 │ mediaVideoThumbnailKey, 2026-10-24T22:14:10.6226851Z ╰──── 2026-10-24T22:14:10.6226940Z  help: Consider removing this import. 2026-10-24T22:14:10.6226945Z 2026-10-24T22:14:10.6227162Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T22:14:10.6227353Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:166:3] 2026-10-24T22:14:10.6227457Z 165 │ mediaVideoPreviewUri, 2026-10-24T22:14:10.6227524Z 166 │ mediaVideoThumbnailKey, 2026-10-24T22:14:10.6227606Z ·  ───────────┬────────── 2026-10-24T22:14:10.6227759Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T22:14:10.6227836Z 167 │ type MediaVideoPreviewSource, 2026-10-24T22:14:10.6227883Z ╰──── 2026-10-24T22:14:10.6227973Z  help: Consider removing this import. 2026-10-24T22:14:10.6227975Z 2026-10-24T22:14:10.6228183Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T22:14:10.6228309Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:167:8] 2026-10-24T22:14:10.6228377Z 166 │ mediaVideoThumbnailKey, 2026-10-24T22:14:10.6228456Z 167 │ type MediaVideoPreviewSource, 2026-10-24T22:14:10.6228552Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6228709Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T22:14:10.6228793Z 168 │ } from "../../lib/videoPreviewSource"; 2026-10-24T22:14:10.6228839Z ╰──── 2026-10-24T22:14:10.6228929Z  help: Consider removing this import. 2026-10-24T22:14:10.6228931Z 2026-10-24T22:14:10.6229124Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T22:14:10.6229253Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:175:15] 2026-10-24T22:14:10.6229420Z 174 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T22:14:10.6229560Z 175 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T22:14:10.6229649Z ·  ───────┬─────── 2026-10-24T22:14:10.6229794Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T22:14:10.6229848Z 176 │ import { 2026-10-24T22:14:10.6229900Z ╰──── 2026-10-24T22:14:10.6229989Z  help: Consider removing this import. 2026-10-24T22:14:10.6229992Z 2026-10-24T22:14:10.6230213Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T22:14:10.6230339Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:190:3] 2026-10-24T22:14:10.6230395Z 189 │ import { 2026-10-24T22:14:10.6230468Z 190 │ resolveMarkdownFontSizes, 2026-10-24T22:14:10.6230556Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6230714Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T22:14:10.6230800Z 191 │ resolveNativeMarkdownTypography, 2026-10-24T22:14:10.6230849Z ╰──── 2026-10-24T22:14:10.6230938Z  help: Consider removing this import. 2026-10-24T22:14:10.6230940Z 2026-10-24T22:14:10.6231189Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T22:14:10.6231317Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:197:3] 2026-10-24T22:14:10.6231390Z 196 │ normalizeNativeMarkdownUrl, 2026-10-24T22:14:10.6231480Z 197 │ resolveMarkdownInlineCodePresentation, 2026-10-24T22:14:10.6231587Z ·  ──────────────────┬────────────────── 2026-10-24T22:14:10.6231776Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T22:14:10.6231908Z 198 │ resolveMarkdownLinkPresentation, 2026-10-24T22:14:10.6231992Z ╰──── 2026-10-24T22:14:10.6232080Z  help: Consider removing this import. 2026-10-24T22:14:10.6232084Z 2026-10-24T22:14:10.6232304Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T22:14:10.6232430Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:242:10] 2026-10-24T22:14:10.6232528Z 241 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T22:14:10.6232668Z 242 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T22:14:10.6232763Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6232925Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T22:14:10.6232985Z 243 │ import { 2026-10-24T22:14:10.6233036Z ╰──── 2026-10-24T22:14:10.6233125Z  help: Consider removing this import. 2026-10-24T22:14:10.6233127Z 2026-10-24T22:14:10.6233331Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T22:14:10.6233457Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:246:3] 2026-10-24T22:14:10.6233518Z 245 │ useAssetUrl, 2026-10-24T22:14:10.6233581Z 246 │ useAssetUrlState, 2026-10-24T22:14:10.6233657Z ·  ────────┬─────── 2026-10-24T22:14:10.6233795Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T22:14:10.6233861Z 247 │ useRefreshAssetUrl, 2026-10-24T22:14:10.6233908Z ╰──── 2026-10-24T22:14:10.6233998Z  help: Consider removing this import. 2026-10-24T22:14:10.6234000Z 2026-10-24T22:14:10.6234201Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6234333Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2197:7] 2026-10-24T22:14:10.6234403Z 2196 │ setExpandedFile(null); 2026-10-24T22:14:10.6234555Z 2197 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T22:14:10.6234809Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T22:14:10.6235098Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T22:14:10.6235340Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T22:14:10.6235533Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T22:14:10.6235671Z 2198 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T22:14:10.6235719Z ╰──── 2026-10-24T22:14:10.6236007Z  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-24T22:14:10.6236309Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6236311Z 2026-10-24T22:14:10.6236505Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6236640Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2669:7] 2026-10-24T22:14:10.6236737Z 2668 │ reportHeaderMaterialVisibility(false); 2026-10-24T22:14:10.6236846Z 2669 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T22:14:10.6236925Z ·  ──────┬────── 2026-10-24T22:14:10.6237071Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T22:14:10.6237121Z 2670 │ 2026-10-24T22:14:10.6237168Z ╰──── 2026-10-24T22:14:10.6237453Z  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-24T22:14:10.6237755Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6237757Z 2026-10-24T22:14:10.6237954Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6238088Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2685:7] 2026-10-24T22:14:10.6238140Z 2684 │ } 2026-10-24T22:14:10.6238267Z 2685 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T22:14:10.6238343Z ·  ──────┬───── 2026-10-24T22:14:10.6238489Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T22:14:10.6238628Z 2686 │ // Opening at a message: its run unfolds, the list stops following the end 2026-10-24T22:14:10.6238678Z ╰──── 2026-10-24T22:14:10.6238959Z  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-24T22:14:10.6239264Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6239268Z 2026-10-24T22:14:10.6239460Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6239595Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2881:7] 2026-10-24T22:14:10.6239650Z 2880 │ } 2026-10-24T22:14:10.6239826Z 2881 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T22:14:10.6240021Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T22:14:10.6240316Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T22:14:10.6240544Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T22:14:10.6240694Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T22:14:10.6240744Z 2882 │ 2026-10-24T22:14:10.6240791Z ╰──── 2026-10-24T22:14:10.6241074Z  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-24T22:14:10.6241377Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6241379Z 2026-10-24T22:14:10.6241560Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T22:14:10.6241694Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:627:9] 2026-10-24T22:14:10.6241748Z 626 │ }; 2026-10-24T22:14:10.6241860Z 627 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T22:14:10.6242045Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T22:14:10.6242280Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T22:14:10.6242469Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T22:14:10.6242627Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T22:14:10.6242687Z 628 │ ); 2026-10-24T22:14:10.6242738Z ╰──── 2026-10-24T22:14:10.6243043Z  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-24T22:14:10.6243344Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6243346Z 2026-10-24T22:14:10.6243599Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6243765Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T22:14:10.6243815Z 76 │ 2026-10-24T22:14:10.6243876Z 77 │ useEffect(() => { 2026-10-24T22:14:10.6243946Z ·  ────┬──── 2026-10-24T22:14:10.6244075Z · ╰── This is the containing effect 2026-10-24T22:14:10.6244199Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T22:14:10.6244264Z 79 │ setHostInput(host); 2026-10-24T22:14:10.6244336Z ·  ──────┬───── 2026-10-24T22:14:10.6244497Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6244571Z 80 │ setCodeInput(code); 2026-10-24T22:14:10.6244619Z ╰──── 2026-10-24T22:14:10.6245232Z  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-24T22:14:10.6245591Z  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-24T22:14:10.6245621Z 2026-10-24T22:14:10.6245871Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6246035Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T22:14:10.6246085Z 82 │ 2026-10-24T22:14:10.6246145Z 83 │ useEffect(() => { 2026-10-24T22:14:10.6246215Z ·  ────┬──── 2026-10-24T22:14:10.6246335Z · ╰── This is the containing effect 2026-10-24T22:14:10.6246421Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T22:14:10.6246479Z 85 │ return; 2026-10-24T22:14:10.6246529Z 86 │ } 2026-10-24T22:14:10.6246581Z 87 │ 2026-10-24T22:14:10.6246698Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T22:14:10.6246760Z 89 │ setHostInput(host); 2026-10-24T22:14:10.6246832Z ·  ──────┬───── 2026-10-24T22:14:10.6246993Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6247056Z 90 │ setCodeInput(code); 2026-10-24T22:14:10.6247105Z ╰──── 2026-10-24T22:14:10.6247684Z  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-24T22:14:10.6248004Z  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-24T22:14:10.6248008Z 2026-10-24T22:14:10.6248254Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6248417Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T22:14:10.6248468Z 92 │ 2026-10-24T22:14:10.6248528Z 93 │ useEffect(() => { 2026-10-24T22:14:10.6248594Z ·  ────┬──── 2026-10-24T22:14:10.6248716Z · ╰── This is the containing effect 2026-10-24T22:14:10.6248796Z 94 │ if (pairingConnectionError) { 2026-10-24T22:14:10.6248866Z 95 │ setIsSubmitting(false); 2026-10-24T22:14:10.6248943Z ·  ───────┬─────── 2026-10-24T22:14:10.6249151Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6249235Z 96 │ } 2026-10-24T22:14:10.6249283Z ╰──── 2026-10-24T22:14:10.6249857Z  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-24T22:14:10.6250168Z  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-24T22:14:10.6250170Z 2026-10-24T22:14:10.6250401Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T22:14:10.6250537Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T22:14:10.6250657Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T22:14:10.6250892Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T22:14:10.6251009Z 986 │ │ (approval) => approval.requestId, 2026-10-24T22:14:10.6251139Z 987 │ ╰─▶ ); 2026-10-24T22:14:10.6251273Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T22:14:10.6251320Z ╰──── 2026-10-24T22:14:10.6251395Z  help: Switch to `Set` 2026-10-24T22:14:10.6251397Z 2026-10-24T22:14:10.6251544Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6251694Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T22:14:10.6251865Z 151 │ 2026-10-24T22:14:10.6251941Z 152 │ {props.children(open)} 2026-10-24T22:14:10.6252028Z ·  ──┬─ 2026-10-24T22:14:10.6252182Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.6252242Z 153 │ 2026-10-24T22:14:10.6252290Z ╰──── 2026-10-24T22:14:10.6252746Z  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-24T22:14:10.6253034Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6253038Z 2026-10-24T22:14:10.6253228Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T22:14:10.6253371Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T22:14:10.6253450Z 139 │ if (action.id !== undefined) { 2026-10-24T22:14:10.6253525Z 140 │ props.onPressAction?.({ 2026-10-24T22:14:10.6253595Z ·  ──┬── 2026-10-24T22:14:10.6253720Z · ╰── Missing dependency `props` 2026-10-24T22:14:10.6253809Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T22:14:10.6253998Z 142 │ } as Parameters>[0]); 2026-10-24T22:14:10.6254081Z 143 │ } 2026-10-24T22:14:10.6254132Z 144 │ }, 2026-10-24T22:14:10.6254210Z 145 │ [close, props.onPressAction], 2026-10-24T22:14:10.6254301Z ·  ─────────┬───────── 2026-10-24T22:14:10.6254509Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T22:14:10.6254571Z 146 │ ); 2026-10-24T22:14:10.6254619Z ╰──── 2026-10-24T22:14:10.6255113Z  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-24T22:14:10.6255424Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6255429Z 2026-10-24T22:14:10.6255705Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T22:14:10.6255857Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T22:14:10.6255911Z 162 │ keys, 2026-10-24T22:14:10.6255981Z 163 │ overridingProjects = [], 2026-10-24T22:14:10.6256062Z ·  ── 2026-10-24T22:14:10.6256125Z 164 │ onClearOverrides, 2026-10-24T22:14:10.6256174Z ╰──── 2026-10-24T22:14:10.6256484Z  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-24T22:14:10.6256486Z 2026-10-24T22:14:10.6256725Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T22:14:10.6256848Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T22:14:10.6257025Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T22:14:10.6257116Z 35 │ instanceId === configured ? true : false, 2026-10-24T22:14:10.6257230Z ·  ──────────────────────────────────────── 2026-10-24T22:14:10.6257281Z 36 │ ); 2026-10-24T22:14:10.6257331Z ╰──── 2026-10-24T22:14:10.6257422Z  help: Remove this ternary operator 2026-10-24T22:14:10.6257425Z 2026-10-24T22:14:10.6257577Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6257735Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T22:14:10.6257832Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T22:14:10.6257924Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T22:14:10.6258003Z ·  ──────┬────── 2026-10-24T22:14:10.6258138Z · ╰── `pulseProgress` originates here 2026-10-24T22:14:10.6258189Z 55 │ 2026-10-24T22:14:10.6258251Z 56 │ useEffect(() => { 2026-10-24T22:14:10.6258311Z 57 │ if (pulse) { 2026-10-24T22:14:10.6258395Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T22:14:10.6258471Z ·  ──────┬────── 2026-10-24T22:14:10.6258608Z · ╰── `pulseProgress` cannot be modified 2026-10-24T22:14:10.6258674Z 59 │ withTiming(1, { 2026-10-24T22:14:10.6258723Z ╰──── 2026-10-24T22:14:10.6259037Z  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-24T22:14:10.6259365Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6259368Z 2026-10-24T22:14:10.6259619Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6259753Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T22:14:10.6259853Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T22:14:10.6259915Z 67 │ useEffect(() => { 2026-10-24T22:14:10.6259982Z ·  ────┬──── 2026-10-24T22:14:10.6260113Z · ╰── This is the containing effect 2026-10-24T22:14:10.6260176Z 68 │ setUri(null); 2026-10-24T22:14:10.6260244Z ·  ───┬── 2026-10-24T22:14:10.6260405Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6260465Z 69 │ setError(null); 2026-10-24T22:14:10.6260513Z ╰──── 2026-10-24T22:14:10.6261102Z  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-24T22:14:10.6261417Z  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-24T22:14:10.6261423Z 2026-10-24T22:14:10.6261621Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6261753Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T22:14:10.6261804Z 90 │ }; 2026-10-24T22:14:10.6261880Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T22:14:10.6261996Z ·  ──────┬───── ───┬─── 2026-10-24T22:14:10.6262172Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T22:14:10.6262316Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T22:14:10.6262447Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T22:14:10.6262496Z ╰──── 2026-10-24T22:14:10.6262791Z  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-24T22:14:10.6263138Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6263140Z 2026-10-24T22:14:10.6263349Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6263485Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T22:14:10.6263548Z 212 │ useEffect(() => { 2026-10-24T22:14:10.6263657Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T22:14:10.6263755Z ·  ──┬── 2026-10-24T22:14:10.6263965Z · ╰── Missing dependency `props` 2026-10-24T22:14:10.6264105Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T22:14:10.6264213Z ·  ──────────┬───────── 2026-10-24T22:14:10.6264434Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T22:14:10.6264504Z 215 │ const { source } = props; 2026-10-24T22:14:10.6264554Z ╰──── 2026-10-24T22:14:10.6264991Z  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-24T22:14:10.6265300Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6265305Z 2026-10-24T22:14:10.6265513Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6265652Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T22:14:10.6265752Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T22:14:10.6265877Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T22:14:10.6265969Z ·  ────────────┬──────────── 2026-10-24T22:14:10.6266136Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T22:14:10.6266188Z 774 │ } 2026-10-24T22:14:10.6266387Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T22:14:10.6266499Z ·  ────────────────┬──────────────── 2026-10-24T22:14:10.6266775Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T22:14:10.6266826Z 776 │ 2026-10-24T22:14:10.6266873Z ╰──── 2026-10-24T22:14:10.6267282Z  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-24T22:14:10.6267586Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6267588Z 2026-10-24T22:14:10.6267742Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6267886Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T22:14:10.6268043Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T22:14:10.6268175Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T22:14:10.6268262Z ·  ──────────┬───────── 2026-10-24T22:14:10.6268412Z · ╰── `animatedBorderRadius` originates here 2026-10-24T22:14:10.6268563Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T22:14:10.6268633Z 390 │ useLayoutEffect(() => { 2026-10-24T22:14:10.6268730Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T22:14:10.6268814Z ·  ──────────┬───────── 2026-10-24T22:14:10.6269019Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T22:14:10.6269135Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T22:14:10.6269184Z ╰──── 2026-10-24T22:14:10.6269443Z  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-24T22:14:10.6269741Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6269743Z 2026-10-24T22:14:10.6269993Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6270140Z ╭─[apps/mobile/src/components/VideoPreviewModal.ios.tsx:63:55] 2026-10-24T22:14:10.6270197Z 61 │ }, []); 2026-10-24T22:14:10.6270263Z 62 │ useEffect(() => { 2026-10-24T22:14:10.6270332Z ·  ────┬──── 2026-10-24T22:14:10.6270460Z · ╰── This is the containing effect 2026-10-24T22:14:10.6270604Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T22:14:10.6270724Z ·  ───────┬────── 2026-10-24T22:14:10.6270922Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6270998Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T22:14:10.6271046Z ╰──── 2026-10-24T22:14:10.6271638Z  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-24T22:14:10.6271952Z  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-24T22:14:10.6271955Z 2026-10-24T22:14:10.6272163Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T22:14:10.6272265Z ╭─[apps/mobile/src/Stack.tsx:1079:21] 2026-10-24T22:14:10.6272327Z 1078 │ } 2026-10-24T22:14:10.6272587Z ·  ───────────────────────────────────────────── 2026-10-24T22:14:10.6272670Z 1080 │ screenOptions={({ route }) => 2026-10-24T22:14:10.6272768Z ╰──── 2026-10-24T22:14:10.6273153Z  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-24T22:14:10.6273156Z 2026-10-24T22:14:10.6273383Z ⚠ eslint(no-unused-vars): Function 'assertUserMessagesExclude' is declared but never used. 2026-10-24T22:14:10.6273541Z ╭─[apps/server/src/orchestration-v2/testkit/fixtures/shared.ts:1398:10] 2026-10-24T22:14:10.6273593Z 1397 │ 2026-10-24T22:14:10.6273676Z 1398 │ function assertUserMessagesExclude( 2026-10-24T22:14:10.6273776Z ·  ────────────┬──────────── 2026-10-24T22:14:10.6273939Z · ╰── 'assertUserMessagesExclude' is declared here 2026-10-24T22:14:10.6274051Z 1399 │ projection: OrchestrationV2ThreadProjection, 2026-10-24T22:14:10.6274104Z ╰──── 2026-10-24T22:14:10.6274205Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6274208Z 2026-10-24T22:14:10.6274457Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6274631Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:406:5] 2026-10-24T22:14:10.6274683Z 404 │ 2026-10-24T22:14:10.6274747Z 405 │ useEffect(() => { 2026-10-24T22:14:10.6274815Z ·  ────┬──── 2026-10-24T22:14:10.6274941Z · ╰── This is the containing effect 2026-10-24T22:14:10.6275029Z 406 │ setInspectorSelection((current) => { 2026-10-24T22:14:10.6275114Z ·  ──────────┬────────── 2026-10-24T22:14:10.6275285Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6275385Z 407 │ if (props.renderInspector === undefined) { 2026-10-24T22:14:10.6275433Z ╰──── 2026-10-24T22:14:10.6276019Z  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-24T22:14:10.6276331Z  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-24T22:14:10.6276335Z 2026-10-24T22:14:10.6276547Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T22:14:10.6276698Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:534:24] 2026-10-24T22:14:10.6276852Z 533 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T22:14:10.6277020Z 534 │ ╭─▶ const GitInspector = () => ( 2026-10-24T22:14:10.6277112Z 535 │ │ 2026-10-24T22:14:10.6277759Z 540 │ ╰─▶ ); 2026-10-24T22:14:10.6277865Z 541 │ const FilesInspector = () => 2026-10-24T22:14:10.6277913Z ╰──── 2026-10-24T22:14:10.6278126Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T22:14:10.6278128Z 2026-10-24T22:14:10.6278335Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T22:14:10.6278485Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:541:26] 2026-10-24T22:14:10.6278540Z 540 │ ); 2026-10-24T22:14:10.6278702Z 541 │ ╭─▶ const FilesInspector = () => 2026-10-24T22:14:10.6278851Z 542 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T22:14:10.6278963Z 543 │ │ 2026-10-24T22:14:10.6279908Z 551 │ ╰─▶ ) : null; 2026-10-24T22:14:10.6280060Z 552 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T22:14:10.6280111Z ╰──── 2026-10-24T22:14:10.6280321Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T22:14:10.6280324Z 2026-10-24T22:14:10.6280535Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6280702Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T22:14:10.6280779Z 248 │ mountedRef.current = false; 2026-10-24T22:14:10.6280852Z 249 │ flow.setBranchQuery(""); 2026-10-24T22:14:10.6280920Z ·  ──┬─ 2026-10-24T22:14:10.6281046Z · ╰── Missing dependency `flow` 2026-10-24T22:14:10.6281099Z 250 │ }; 2026-10-24T22:14:10.6281174Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T22:14:10.6281262Z ·  ─────────┬───────── 2026-10-24T22:14:10.6281461Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T22:14:10.6281511Z 252 │ 2026-10-24T22:14:10.6281558Z ╰──── 2026-10-24T22:14:10.6281970Z  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-24T22:14:10.6282276Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6282279Z 2026-10-24T22:14:10.6282479Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6282670Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T22:14:10.6282721Z 107 │ ); 2026-10-24T22:14:10.6282872Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T22:14:10.6282958Z ·  ─────────┬──────── 2026-10-24T22:14:10.6283105Z · ╰── `separationProgress` originates here 2026-10-24T22:14:10.6283154Z 109 │ 2026-10-24T22:14:10.6283217Z 110 │ useEffect(() => { 2026-10-24T22:14:10.6283387Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T22:14:10.6283469Z ·  ─────────┬──────── 2026-10-24T22:14:10.6283617Z · ╰── `separationProgress` cannot be modified 2026-10-24T22:14:10.6283727Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T22:14:10.6283779Z ╰──── 2026-10-24T22:14:10.6284037Z  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-24T22:14:10.6284334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6284337Z 2026-10-24T22:14:10.6284488Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6284671Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T22:14:10.6284780Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T22:14:10.6284891Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T22:14:10.6284973Z ·  ──────┬───── 2026-10-24T22:14:10.6285107Z · ╰── `capsuleWidth` originates here 2026-10-24T22:14:10.6285214Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T22:14:10.6285324Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.6285426Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T22:14:10.6285519Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T22:14:10.6285580Z 134 │ return; 2026-10-24T22:14:10.6285631Z 135 │ } 2026-10-24T22:14:10.6285733Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T22:14:10.6285818Z 137 │ measuredWidthRef.current = width; 2026-10-24T22:14:10.6285956Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T22:14:10.6286036Z ·  ──────┬───── 2026-10-24T22:14:10.6286176Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T22:14:10.6286229Z 139 │ }; 2026-10-24T22:14:10.6286279Z ╰──── 2026-10-24T22:14:10.6286535Z  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-24T22:14:10.6286832Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6286835Z 2026-10-24T22:14:10.6286986Z ⚠ react(immutability): This value cannot be modified 2026-10-24T22:14:10.6287145Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T22:14:10.6287304Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T22:14:10.6287450Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T22:14:10.6287529Z ·  ──────┬───── 2026-10-24T22:14:10.6287664Z · ╰── `capsuleWidth` originates here 2026-10-24T22:14:10.6287769Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T22:14:10.6287879Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.6287980Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T22:14:10.6288072Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T22:14:10.6288130Z 134 │ return; 2026-10-24T22:14:10.6288181Z 135 │ } 2026-10-24T22:14:10.6288282Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T22:14:10.6288364Z 137 │ measuredWidthRef.current = width; 2026-10-24T22:14:10.6288506Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T22:14:10.6288558Z 139 │ }; 2026-10-24T22:14:10.6288646Z 140 │ const hasStatus = props.status !== null; 2026-10-24T22:14:10.6288774Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T22:14:10.6288836Z 142 │ useEffect(() => { 2026-10-24T22:14:10.6288900Z 143 │ if (!hasStatus) { 2026-10-24T22:14:10.6288984Z 144 │ measuredWidthRef.current = null; 2026-10-24T22:14:10.6289059Z 145 │ capsuleWidth.value = null; 2026-10-24T22:14:10.6289132Z ·  ──────┬───── 2026-10-24T22:14:10.6289272Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T22:14:10.6289324Z 146 │ } 2026-10-24T22:14:10.6289373Z ╰──── 2026-10-24T22:14:10.6289635Z  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-24T22:14:10.6289937Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6289940Z 2026-10-24T22:14:10.6290135Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T22:14:10.6290297Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T22:14:10.6290426Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T22:14:10.6290488Z 142 │ useEffect(() => { 2026-10-24T22:14:10.6290564Z ·  ───┬─── 2026-10-24T22:14:10.6290784Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T22:14:10.6290850Z 143 │ if (!hasStatus) { 2026-10-24T22:14:10.6290934Z 144 │ measuredWidthRef.current = null; 2026-10-24T22:14:10.6291007Z 145 │ capsuleWidth.value = null; 2026-10-24T22:14:10.6291081Z ·  ──────┬───── 2026-10-24T22:14:10.6291214Z · ╰── This modifies `capsuleWidth` 2026-10-24T22:14:10.6291266Z 146 │ } 2026-10-24T22:14:10.6291316Z ╰──── 2026-10-24T22:14:10.6291653Z  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-24T22:14:10.6291950Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6292001Z 2026-10-24T22:14:10.6292222Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T22:14:10.6292381Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T22:14:10.6292489Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T22:14:10.6292602Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T22:14:10.6292721Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.6292956Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T22:14:10.6293060Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T22:14:10.6293159Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T22:14:10.6293220Z 134 │ return; 2026-10-24T22:14:10.6293270Z 135 │ } 2026-10-24T22:14:10.6293371Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T22:14:10.6293455Z 137 │ measuredWidthRef.current = width; 2026-10-24T22:14:10.6293590Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T22:14:10.6293664Z ·  ──────┬───── 2026-10-24T22:14:10.6293793Z · ╰── This modifies `capsuleWidth` 2026-10-24T22:14:10.6293846Z 139 │ }; 2026-10-24T22:14:10.6293894Z ╰──── 2026-10-24T22:14:10.6294228Z  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-24T22:14:10.6294532Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T22:14:10.6294538Z 2026-10-24T22:14:10.6294738Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6294859Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T22:14:10.6294956Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T22:14:10.6295108Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T22:14:10.6295226Z ·  ─────┬──── 2026-10-24T22:14:10.6295391Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6295468Z 822 │ return AsyncResult.failure( 2026-10-24T22:14:10.6295561Z ╰──── 2026-10-24T22:14:10.6295865Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.6296154Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6296157Z 2026-10-24T22:14:10.6296319Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6296435Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T22:14:10.6296506Z 708 │ const wokeAt = resolved 2026-10-24T22:14:10.6296638Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T22:14:10.6296747Z ·  ─────┬──── 2026-10-24T22:14:10.6296907Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6296967Z 710 │ : null; 2026-10-24T22:14:10.6297015Z ╰──── 2026-10-24T22:14:10.6297287Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.6297573Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6297576Z 2026-10-24T22:14:10.6297773Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T22:14:10.6297892Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T22:14:10.6297957Z 37 │ get isConnected() { 2026-10-24T22:14:10.6298048Z 38 │ let current: FakeElement | null = this; 2026-10-24T22:14:10.6298122Z ·  ─────── 2026-10-24T22:14:10.6298191Z 39 │ while (current?.parent) { 2026-10-24T22:14:10.6298240Z ╰──── 2026-10-24T22:14:10.6298506Z  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-24T22:14:10.6298510Z 2026-10-24T22:14:10.6298803Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6298963Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T22:14:10.6299015Z 345 │ 2026-10-24T22:14:10.6299115Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T22:14:10.6299210Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6299374Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T22:14:10.6299447Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T22:14:10.6299495Z ╰──── 2026-10-24T22:14:10.6299596Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6299599Z 2026-10-24T22:14:10.6299789Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T22:14:10.6299928Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T22:14:10.6300062Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T22:14:10.6300172Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T22:14:10.6300242Z ·  ──┬── 2026-10-24T22:14:10.6300414Z · ╰── 'Image' is imported here 2026-10-24T22:14:10.6300495Z 18 │ 2026-10-24T22:14:10.6300542Z ╰──── 2026-10-24T22:14:10.6300637Z  help: Consider removing this import. 2026-10-24T22:14:10.6300640Z 2026-10-24T22:14:10.6300838Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T22:14:10.6300975Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T22:14:10.6301136Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T22:14:10.6301225Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6301315Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6301772Z · ╰── 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-24T22:14:10.6301843Z 227 │ mostRecentEventCount, 2026-10-24T22:14:10.6301896Z 228 │ ); 2026-10-24T22:14:10.6302017Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T22:14:10.6302147Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T22:14:10.6302341Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6302423Z 230 │ const assumedValue = props.value; 2026-10-24T22:14:10.6302471Z ╰──── 2026-10-24T22:14:10.6302637Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T22:14:10.6303156Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6303162Z 2026-10-24T22:14:10.6303373Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6303512Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T22:14:10.6303654Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T22:14:10.6303741Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6303829Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6304278Z · ╰── 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-24T22:14:10.6304353Z 238 │ controlledEventCount, 2026-10-24T22:14:10.6304418Z 239 │ assumedValue, 2026-10-24T22:14:10.6304470Z 240 │ ); 2026-10-24T22:14:10.6304654Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T22:14:10.6304790Z ·  ───────────┬────────── 2026-10-24T22:14:10.6304997Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T22:14:10.6305085Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T22:14:10.6305133Z ╰──── 2026-10-24T22:14:10.6305614Z  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-24T22:14:10.6305958Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6305961Z 2026-10-24T22:14:10.6306102Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6306242Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T22:14:10.6306362Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T22:14:10.6306471Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T22:14:10.6306588Z ·  ─────────────┬──────────── 2026-10-24T22:14:10.6306752Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.6306812Z 163 │ }); 2026-10-24T22:14:10.6306864Z ╰──── 2026-10-24T22:14:10.6307324Z  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-24T22:14:10.6307610Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6307613Z 2026-10-24T22:14:10.6307754Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6307895Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T22:14:10.6308015Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T22:14:10.6308130Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T22:14:10.6308243Z ·  ─────────────┬──────────── 2026-10-24T22:14:10.6308446Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6308502Z 163 │ }); 2026-10-24T22:14:10.6308550Z ╰──── 2026-10-24T22:14:10.6309004Z  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-24T22:14:10.6309290Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6309292Z 2026-10-24T22:14:10.6309439Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6309580Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T22:14:10.6309636Z 163 │ }); 2026-10-24T22:14:10.6309723Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T22:14:10.6309845Z ·  ─────────┬────────────┬─── 2026-10-24T22:14:10.6310030Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.6310145Z · ╰── This value is a ref 2026-10-24T22:14:10.6310212Z 165 │ return JSON.stringify( 2026-10-24T22:14:10.6310260Z ╰──── 2026-10-24T22:14:10.6310763Z  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-24T22:14:10.6311072Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6311074Z 2026-10-24T22:14:10.6311214Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6311351Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T22:14:10.6311421Z 205 │ mostRecentEventCount, 2026-10-24T22:14:10.6311506Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6311609Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.6311797Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6311854Z 207 │ ); 2026-10-24T22:14:10.6311905Z ╰──── 2026-10-24T22:14:10.6312364Z  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-24T22:14:10.6312650Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6312655Z 2026-10-24T22:14:10.6312794Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6312933Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T22:14:10.6313001Z 211 │ mostRecentEventCount, 2026-10-24T22:14:10.6313088Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6313190Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.6313373Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6313424Z 213 │ ); 2026-10-24T22:14:10.6313473Z ╰──── 2026-10-24T22:14:10.6313928Z  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-24T22:14:10.6314212Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6314214Z 2026-10-24T22:14:10.6314442Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T22:14:10.6314619Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T22:14:10.6314760Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T22:14:10.6314871Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T22:14:10.6314977Z ·  ─────────┬──────── 2026-10-24T22:14:10.6315437Z · ╰── 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-24T22:14:10.6315490Z 163 │ }); 2026-10-24T22:14:10.6315576Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T22:14:10.6315646Z 165 │ return JSON.stringify( 2026-10-24T22:14:10.6315811Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T22:14:10.6315879Z 167 │ const record = 2026-10-24T22:14:10.6315954Z 168 │ token.type === "context" 2026-10-24T22:14:10.6316115Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T22:14:10.6316178Z 170 │ : undefined; 2026-10-24T22:14:10.6316283Z 171 │ const presentation = contextChipPresentation( 2026-10-24T22:14:10.6316386Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T22:14:10.6316446Z 173 │ record, 2026-10-24T22:14:10.6316504Z 174 │ ); 2026-10-24T22:14:10.6316585Z 175 │ const icon = contextChipIcon( 2026-10-24T22:14:10.6316647Z 176 │ presentation, 2026-10-24T22:14:10.6316791Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T22:14:10.6316849Z 178 │ ); 2026-10-24T22:14:10.6316908Z 179 │ return { 2026-10-24T22:14:10.6316977Z 180 │ type: token.type, 2026-10-24T22:14:10.6317050Z 181 │ source: token.source, 2026-10-24T22:14:10.6317118Z 182 │ start: token.start, 2026-10-24T22:14:10.6317181Z 183 │ end: token.end, 2026-10-24T22:14:10.6317327Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T22:14:10.6317385Z 185 │ label: 2026-10-24T22:14:10.6317460Z 186 │ token.type === "skill" 2026-10-24T22:14:10.6317562Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T22:14:10.6317642Z 188 │ : token.type === "context" 2026-10-24T22:14:10.6317881Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T22:14:10.6317962Z 190 │ : basename(token.value), 2026-10-24T22:14:10.6318099Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T22:14:10.6318192Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T22:14:10.6318278Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T22:14:10.6318333Z 194 │ }; 2026-10-24T22:14:10.6318387Z 195 │ }), 2026-10-24T22:14:10.6318442Z 196 │ ); 2026-10-24T22:14:10.6318572Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T22:14:10.6318719Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T22:14:10.6318970Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6319149Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T22:14:10.6319198Z ╰──── 2026-10-24T22:14:10.6319400Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T22:14:10.6319706Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6319710Z 2026-10-24T22:14:10.6319893Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T22:14:10.6320031Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T22:14:10.6320156Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T22:14:10.6320259Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T22:14:10.6320349Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6320801Z · ╰── 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-24T22:14:10.6322069Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T22:14:10.6322137Z 254 │ value, 2026-10-24T22:14:10.6322213Z 255 │ selection: nextSelection, 2026-10-24T22:14:10.6322269Z 256 │ }); 2026-10-24T22:14:10.6322349Z 257 │ return acknowledgedEventCount; 2026-10-24T22:14:10.6322400Z 258 │ }, 2026-10-24T22:14:10.6322451Z 259 │ [], 2026-10-24T22:14:10.6322516Z ·  ─┬ 2026-10-24T22:14:10.6322705Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6322762Z 260 │ ); 2026-10-24T22:14:10.6322810Z ╰──── 2026-10-24T22:14:10.6323011Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T22:14:10.6323317Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6323320Z 2026-10-24T22:14:10.6323518Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T22:14:10.6323651Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T22:14:10.6323811Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T22:14:10.6323902Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6323993Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6324439Z · ╰── 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-24T22:14:10.6324510Z 229 │ mostRecentEventCount, 2026-10-24T22:14:10.6324593Z 230 │ ); 2026-10-24T22:14:10.6324712Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T22:14:10.6324842Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T22:14:10.6325036Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6325115Z 232 │ const assumedValue = props.value; 2026-10-24T22:14:10.6325229Z ╰──── 2026-10-24T22:14:10.6325423Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T22:14:10.6325725Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6325727Z 2026-10-24T22:14:10.6325936Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T22:14:10.6326068Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T22:14:10.6326208Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T22:14:10.6326293Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6326380Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6326831Z · ╰── 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-24T22:14:10.6326902Z 240 │ controlledEventCount, 2026-10-24T22:14:10.6326964Z 241 │ assumedValue, 2026-10-24T22:14:10.6327016Z 242 │ ); 2026-10-24T22:14:10.6327171Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T22:14:10.6327305Z ·  ───────────┬────────── 2026-10-24T22:14:10.6327510Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T22:14:10.6327594Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T22:14:10.6327648Z ╰──── 2026-10-24T22:14:10.6328064Z  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-24T22:14:10.6328369Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6328372Z 2026-10-24T22:14:10.6328511Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6328644Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T22:14:10.6328763Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T22:14:10.6328871Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T22:14:10.6328987Z ·  ─────────────┬──────────── 2026-10-24T22:14:10.6329152Z · ╰── Cannot access ref value during render 2026-10-24T22:14:10.6329205Z 165 │ }); 2026-10-24T22:14:10.6329253Z ╰──── 2026-10-24T22:14:10.6329711Z  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-24T22:14:10.6329996Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6329998Z 2026-10-24T22:14:10.6330186Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6330347Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T22:14:10.6330464Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T22:14:10.6330570Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T22:14:10.6330683Z ·  ─────────────┬──────────── 2026-10-24T22:14:10.6330886Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6330939Z 165 │ }); 2026-10-24T22:14:10.6330985Z ╰──── 2026-10-24T22:14:10.6331444Z  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-24T22:14:10.6331729Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6331731Z 2026-10-24T22:14:10.6331871Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6332002Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T22:14:10.6332053Z 165 │ }); 2026-10-24T22:14:10.6332139Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T22:14:10.6332258Z ·  ─────────┬────────────┬─── 2026-10-24T22:14:10.6332444Z · │ ╰── Cannot update ref value during render 2026-10-24T22:14:10.6332559Z · ╰── This value is a ref 2026-10-24T22:14:10.6332630Z 167 │ return JSON.stringify( 2026-10-24T22:14:10.6332679Z ╰──── 2026-10-24T22:14:10.6333132Z  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-24T22:14:10.6333414Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6333416Z 2026-10-24T22:14:10.6333554Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6333684Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T22:14:10.6333752Z 207 │ mostRecentEventCount, 2026-10-24T22:14:10.6333881Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6334011Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.6334194Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6334246Z 209 │ ); 2026-10-24T22:14:10.6334294Z ╰──── 2026-10-24T22:14:10.6334775Z  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-24T22:14:10.6335059Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6335061Z 2026-10-24T22:14:10.6335204Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6335338Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T22:14:10.6335406Z 213 │ mostRecentEventCount, 2026-10-24T22:14:10.6335489Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T22:14:10.6335588Z ·  ───────────────┬─────────────── 2026-10-24T22:14:10.6335769Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6335823Z 215 │ ); 2026-10-24T22:14:10.6335872Z ╰──── 2026-10-24T22:14:10.6336327Z  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-24T22:14:10.6336618Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6336623Z 2026-10-24T22:14:10.6336805Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T22:14:10.6336934Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T22:14:10.6337051Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T22:14:10.6337159Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T22:14:10.6337264Z ·  ─────────┬──────── 2026-10-24T22:14:10.6337721Z · ╰── 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-24T22:14:10.6337775Z 165 │ }); 2026-10-24T22:14:10.6337862Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T22:14:10.6337928Z 167 │ return JSON.stringify( 2026-10-24T22:14:10.6338086Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T22:14:10.6338148Z 169 │ const record = 2026-10-24T22:14:10.6338225Z 170 │ token.type === "context" 2026-10-24T22:14:10.6338385Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T22:14:10.6338448Z 172 │ : undefined; 2026-10-24T22:14:10.6338551Z 173 │ const presentation = contextChipPresentation( 2026-10-24T22:14:10.6338656Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T22:14:10.6338715Z 175 │ record, 2026-10-24T22:14:10.6338822Z 176 │ ); 2026-10-24T22:14:10.6338991Z 177 │ const icon = contextChipIcon( 2026-10-24T22:14:10.6339055Z 178 │ presentation, 2026-10-24T22:14:10.6339192Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T22:14:10.6339247Z 180 │ ); 2026-10-24T22:14:10.6339305Z 181 │ return { 2026-10-24T22:14:10.6339373Z 182 │ type: token.type, 2026-10-24T22:14:10.6339445Z 183 │ source: token.source, 2026-10-24T22:14:10.6339513Z 184 │ start: token.start, 2026-10-24T22:14:10.6339576Z 185 │ end: token.end, 2026-10-24T22:14:10.6339719Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T22:14:10.6339776Z 187 │ label: 2026-10-24T22:14:10.6339850Z 188 │ token.type === "skill" 2026-10-24T22:14:10.6339957Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T22:14:10.6340037Z 190 │ : token.type === "context" 2026-10-24T22:14:10.6340266Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T22:14:10.6340344Z 192 │ : basename(token.value), 2026-10-24T22:14:10.6340482Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T22:14:10.6340572Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T22:14:10.6340656Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T22:14:10.6340710Z 196 │ }; 2026-10-24T22:14:10.6340764Z 197 │ }), 2026-10-24T22:14:10.6340815Z 198 │ ); 2026-10-24T22:14:10.6340945Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T22:14:10.6341096Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T22:14:10.6341299Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6341434Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T22:14:10.6341483Z ╰──── 2026-10-24T22:14:10.6341683Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T22:14:10.6341988Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6341991Z 2026-10-24T22:14:10.6342172Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T22:14:10.6342309Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T22:14:10.6342437Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T22:14:10.6342533Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T22:14:10.6342622Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6343137Z · ╰── 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-24T22:14:10.6343225Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T22:14:10.6343283Z 256 │ value, 2026-10-24T22:14:10.6343358Z 257 │ selection: nextSelection, 2026-10-24T22:14:10.6343413Z 258 │ }); 2026-10-24T22:14:10.6343561Z 259 │ return acknowledgedEventCount; 2026-10-24T22:14:10.6343654Z 260 │ }, 2026-10-24T22:14:10.6343706Z 261 │ [], 2026-10-24T22:14:10.6343770Z ·  ─┬ 2026-10-24T22:14:10.6343946Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6343996Z 262 │ ); 2026-10-24T22:14:10.6344044Z ╰──── 2026-10-24T22:14:10.6344242Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T22:14:10.6344545Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6344548Z 2026-10-24T22:14:10.6344801Z ⚠ eslint(no-unused-vars): Type 'EnvironmentThreadSearchMatch' is imported but never used. 2026-10-24T22:14:10.6344932Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:15:8] 2026-10-24T22:14:10.6345001Z 14 │ threadSearchMatchKey, 2026-10-24T22:14:10.6345083Z 15 │ type EnvironmentThreadSearchMatch, 2026-10-24T22:14:10.6345184Z ·  ──────────────┬───────────── 2026-10-24T22:14:10.6345354Z · ╰── 'EnvironmentThreadSearchMatch' is imported here 2026-10-24T22:14:10.6345460Z 16 │ } from "@t3tools/client-runtime/state/thread-search"; 2026-10-24T22:14:10.6345509Z ╰──── 2026-10-24T22:14:10.6345602Z  help: Consider removing this import. 2026-10-24T22:14:10.6345606Z 2026-10-24T22:14:10.6345801Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T22:14:10.6345927Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:527:25] 2026-10-24T22:14:10.6346059Z 526 │ // range) the boundary string is identical and the chain would die. 2026-10-24T22:14:10.6346147Z 527 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T22:14:10.6346243Z ·  ───────┬────── 2026-10-24T22:14:10.6346403Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T22:14:10.6346536Z 528 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T22:14:10.6346584Z ╰──── 2026-10-24T22:14:10.6346870Z  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-24T22:14:10.6347174Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6347181Z 2026-10-24T22:14:10.6347347Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6347471Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:518:53] 2026-10-24T22:14:10.6347553Z 517 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T22:14:10.6347707Z 518 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T22:14:10.6347823Z ·  ─────┬──── 2026-10-24T22:14:10.6347985Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6348062Z 519 │ const id = setTimeout(() => { 2026-10-24T22:14:10.6348109Z ╰──── 2026-10-24T22:14:10.6348439Z  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-24T22:14:10.6348753Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6348756Z 2026-10-24T22:14:10.6348898Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6349013Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T22:14:10.6349075Z 184 │ "options", 2026-10-24T22:14:10.6349166Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T22:14:10.6349272Z ·  ────────────────┬─────────────── 2026-10-24T22:14:10.6349457Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6349555Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T22:14:10.6349606Z ╰──── 2026-10-24T22:14:10.6350062Z  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-24T22:14:10.6350347Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6350349Z 2026-10-24T22:14:10.6350488Z ⚠ react(refs): Cannot access refs during render 2026-10-24T22:14:10.6350602Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T22:14:10.6350690Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T22:14:10.6350784Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T22:14:10.6350890Z ·  ────────────────┬──────────────── 2026-10-24T22:14:10.6351075Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T22:14:10.6351163Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T22:14:10.6351211Z ╰──── 2026-10-24T22:14:10.6351663Z  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-24T22:14:10.6351943Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T22:14:10.6351946Z 2026-10-24T22:14:10.6352168Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T22:14:10.6352283Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T22:14:10.6352381Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T22:14:10.6352505Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T22:14:10.6352651Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T22:14:10.6352705Z 347 │ }; 2026-10-24T22:14:10.6352753Z ╰──── 2026-10-24T22:14:10.6353011Z  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-24T22:14:10.6353014Z 2026-10-24T22:14:10.6353231Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T22:14:10.6353391Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T22:14:10.6353489Z 447 │ const favorites = 2026-10-24T22:14:10.6353591Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T22:14:10.6353674Z ·  ───┬── 2026-10-24T22:14:10.6353793Z · ╰── For this reduce 2026-10-24T22:14:10.6353871Z 449 │ const exists = current.some( 2026-10-24T22:14:10.6354039Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T22:14:10.6354094Z 451 │ ); 2026-10-24T22:14:10.6354163Z 452 │ return change.favorite 2026-10-24T22:14:10.6354222Z 453 │ ? exists 2026-10-24T22:14:10.6354280Z 454 │ ? current 2026-10-24T22:14:10.6354417Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T22:14:10.6354501Z ·  ─────┬──── 2026-10-24T22:14:10.6354661Z · ╰── From this spread 2026-10-24T22:14:10.6354735Z 456 │ : current.filter( 2026-10-24T22:14:10.6354809Z ╰──── 2026-10-24T22:14:10.6355009Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T22:14:10.6355162Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T22:14:10.6355165Z 2026-10-24T22:14:10.6355345Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T22:14:10.6355457Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T22:14:10.6355513Z 464 │ null; 2026-10-24T22:14:10.6355628Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T22:14:10.6355715Z ·  ──────────┬───────── 2026-10-24T22:14:10.6355837Z · ╰── From this accumulator 2026-10-24T22:14:10.6355932Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T22:14:10.6355995Z ·  ─┬─ 2026-10-24T22:14:10.6356094Z · ╰── For this loop 2026-10-24T22:14:10.6356223Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T22:14:10.6356288Z 468 │ hiddenModels: [], 2026-10-24T22:14:10.6356351Z 469 │ modelOrder: [], 2026-10-24T22:14:10.6356401Z 470 │ }; 2026-10-24T22:14:10.6356573Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T22:14:10.6356726Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T22:14:10.6356827Z 473 │ nextModelPreferences = { 2026-10-24T22:14:10.6356899Z 474 │ ...nextModelPreferences, 2026-10-24T22:14:10.6356990Z ·  ───────────┬─────────── 2026-10-24T22:14:10.6357109Z · ╰── From this spread 2026-10-24T22:14:10.6357214Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T22:14:10.6357261Z ╰──── 2026-10-24T22:14:10.6357409Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T22:14:10.6357557Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T22:14:10.6357560Z 2026-10-24T22:14:10.6357721Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6357873Z ╭─[apps/web/src/components/CommandPaletteThreadItems.tsx:152:58] 2026-10-24T22:14:10.6358049Z 151 │ if (threadSearchQuery.trim().length > 0 && !threadSearchQuery.startsWith(">") && !isOpen) { 2026-10-24T22:14:10.6358175Z 152 │ claimThreadOpen(thread.environmentId, thread.id, Date.now()); 2026-10-24T22:14:10.6358292Z ·  ─────┬──── 2026-10-24T22:14:10.6358456Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6358508Z 153 │ } 2026-10-24T22:14:10.6358555Z ╰──── 2026-10-24T22:14:10.6358832Z  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-24T22:14:10.6359121Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6359126Z 2026-10-24T22:14:10.6359580Z ⚠ 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-24T22:14:10.6359758Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T22:14:10.6359826Z 520 │ })).delivery; 2026-10-24T22:14:10.6360019Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T22:14:10.6360128Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6360274Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T22:14:10.6360373Z 524 │ │ id: task.id, 2026-10-24T22:14:10.6360484Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T22:14:10.6360577Z 526 │ │ })).delivery; 2026-10-24T22:14:10.6360709Z 527 │ ╰─▶ } 2026-10-24T22:14:10.6360819Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T22:14:10.6360867Z ╰──── 2026-10-24T22:14:10.6360869Z 2026-10-24T22:14:10.6361048Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T22:14:10.6361148Z ╭─[packages/shared/src/qrCode.ts:458:44] 2026-10-24T22:14:10.6361209Z 457 │ ): Array { 2026-10-24T22:14:10.6361357Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T22:14:10.6361480Z ·  ┬ 2026-10-24T22:14:10.6361617Z · ╰── '_' is declared here 2026-10-24T22:14:10.6361684Z 459 │ for (const b of data) { 2026-10-24T22:14:10.6361732Z ╰──── 2026-10-24T22:14:10.6361831Z  help: Consider removing this parameter. 2026-10-24T22:14:10.6361834Z 2026-10-24T22:14:10.6362052Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T22:14:10.6362165Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T22:14:10.6362214Z 11 │ 2026-10-24T22:14:10.6362308Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T22:14:10.6362405Z ·  ────────────┬──────────── 2026-10-24T22:14:10.6362574Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T22:14:10.6362639Z 13 │ readonly thread: { 2026-10-24T22:14:10.6362689Z ╰──── 2026-10-24T22:14:10.6362788Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6362791Z 2026-10-24T22:14:10.6363206Z ⚠ 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-24T22:14:10.6363348Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T22:14:10.6363431Z 262 │ ...(update._meta !== undefined 2026-10-24T22:14:10.6363592Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T22:14:10.6363679Z ·  ───────── 2026-10-24T22:14:10.6363739Z 264 │ : {}), 2026-10-24T22:14:10.6363787Z ╰──── 2026-10-24T22:14:10.6363789Z 2026-10-24T22:14:10.6363949Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6364089Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T22:14:10.6364213Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T22:14:10.6364362Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T22:14:10.6364472Z ·  ─────┬──── 2026-10-24T22:14:10.6364662Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6364726Z 373 │ return ( 2026-10-24T22:14:10.6364776Z ╰──── 2026-10-24T22:14:10.6365048Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.6365334Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6365337Z 2026-10-24T22:14:10.6365495Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T22:14:10.6365636Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T22:14:10.6365724Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T22:14:10.6365845Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T22:14:10.6366000Z ·  ─────┬──── 2026-10-24T22:14:10.6366248Z · ╰── Cannot call impure function 2026-10-24T22:14:10.6366300Z 854 │ } 2026-10-24T22:14:10.6366347Z ╰──── 2026-10-24T22:14:10.6366613Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T22:14:10.6366899Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T22:14:10.6366901Z 2026-10-24T22:14:10.6367353Z ⚠ 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-24T22:14:10.6367521Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T22:14:10.6367619Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T22:14:10.6367810Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T22:14:10.6367906Z 567 │ │ const nextEvent = { 2026-10-24T22:14:10.6368058Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T22:14:10.6368186Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T22:14:10.6368271Z 570 │ │ threadId, 2026-10-24T22:14:10.6368371Z 571 │ │ providerInstanceId, 2026-10-24T22:14:10.6368472Z 572 │ │ occurredAt: now, 2026-10-24T22:14:10.6368617Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T22:14:10.6368739Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T22:14:10.6368849Z 575 │ │ const reader = yield* eventSink 2026-10-24T22:14:10.6368964Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T22:14:10.6369089Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T22:14:10.6369190Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T22:14:10.6369348Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T22:14:10.6369471Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T22:14:10.6369586Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T22:14:10.6369781Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T22:14:10.6369857Z 583 │ │ } 2026-10-24T22:14:10.6370013Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T22:14:10.6370156Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T22:14:10.6370279Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T22:14:10.6370404Z 587 │ ╰─▶ } 2026-10-24T22:14:10.6370462Z 588 │ }), 2026-10-24T22:14:10.6370511Z ╰──── 2026-10-24T22:14:10.6370513Z 2026-10-24T22:14:10.6371014Z ⚠ 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-24T22:14:10.6371215Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T22:14:10.6371289Z 2326 │ let settled = false; 2026-10-24T22:14:10.6371446Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T22:14:10.6371598Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T22:14:10.6371725Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T22:14:10.6371804Z 2330 │ │ ); 2026-10-24T22:14:10.6371931Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T22:14:10.6372066Z 2332 │ ╰─▶ } 2026-10-24T22:14:10.6372177Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T22:14:10.6372226Z ╰──── 2026-10-24T22:14:10.6372229Z 2026-10-24T22:14:10.6372482Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T22:14:10.6372647Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:333:7] 2026-10-24T22:14:10.6372698Z 328 │ }; 2026-10-24T22:14:10.6372761Z 329 │ useEffect(() => { 2026-10-24T22:14:10.6372829Z ·  ────┬──── 2026-10-24T22:14:10.6372956Z · ╰── This is the containing effect 2026-10-24T22:14:10.6373057Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T22:14:10.6373150Z 331 │ requestedSection.current = "overview"; 2026-10-24T22:14:10.6373310Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T22:14:10.6373380Z 333 │ setSection("overview"); 2026-10-24T22:14:10.6373451Z ·  ─────┬──── 2026-10-24T22:14:10.6373616Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T22:14:10.6373668Z 334 │ } 2026-10-24T22:14:10.6373716Z ╰──── 2026-10-24T22:14:10.6374302Z  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-24T22:14:10.6374648Z  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-24T22:14:10.6374651Z 2026-10-24T22:14:10.6374851Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T22:14:10.6375016Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:335:6] 2026-10-24T22:14:10.6375111Z 330 │ if (!guidesEnabled && section === "guide") { 2026-10-24T22:14:10.6375200Z 331 │ requestedSection.current = "overview"; 2026-10-24T22:14:10.6375279Z ·  ────────┬─────── 2026-10-24T22:14:10.6375758Z · ╰── 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-24T22:14:10.6375947Z 332 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T22:14:10.6376089Z ·  ─────────┬───────── ──────┬────── 2026-10-24T22:14:10.6376570Z · │ ╰── 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-24T22:14:10.6377002Z · ╰── 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-24T22:14:10.6377078Z 333 │ setSection("overview"); 2026-10-24T22:14:10.6377133Z 334 │ } 2026-10-24T22:14:10.6377219Z 335 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T22:14:10.6377325Z ·  ──────────────────┬───────────────── 2026-10-24T22:14:10.6377508Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6377591Z 336 │ const tabContent = activityContent; 2026-10-24T22:14:10.6377639Z ╰──── 2026-10-24T22:14:10.6377803Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T22:14:10.6378107Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6378110Z 2026-10-24T22:14:10.6378314Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T22:14:10.6378481Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:877:6] 2026-10-24T22:14:10.6378534Z 860 │ if ( 2026-10-24T22:14:10.6378645Z 861 │ lastSelection.current.path === route.params.path && 2026-10-24T22:14:10.6378722Z ·  ──────┬────── 2026-10-24T22:14:10.6379147Z · ╰── 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-24T22:14:10.6379269Z 862 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T22:14:10.6379322Z 863 │ ) 2026-10-24T22:14:10.6379380Z 864 │ return; 2026-10-24T22:14:10.6379597Z 865 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T22:14:10.6379755Z 866 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T22:14:10.6379838Z 867 │ setJumpPath(route.params.path); 2026-10-24T22:14:10.6379908Z 868 │ setSelectedRowId(null); 2026-10-24T22:14:10.6379983Z 869 │ jumpStarted.current = false; 2026-10-24T22:14:10.6380122Z 870 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T22:14:10.6380211Z 871 │ if (!file || !nativeView.current) return; 2026-10-24T22:14:10.6380296Z ·  ─────┬──── 2026-10-24T22:14:10.6380726Z · ╰── 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-24T22:14:10.6380848Z 872 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T22:14:10.6380921Z 873 │ jumpStarted.current = true; 2026-10-24T22:14:10.6381052Z 874 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T22:14:10.6381129Z 875 │ jumpStarted.current = false; 2026-10-24T22:14:10.6381181Z 876 │ }); 2026-10-24T22:14:10.6381368Z 877 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T22:14:10.6381565Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T22:14:10.6381777Z · ╰── This dependency list is missing values used by the callback 2026-10-24T22:14:10.6381891Z 878 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T22:14:10.6381942Z ╰──── 2026-10-24T22:14:10.6382104Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T22:14:10.6382406Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T22:14:10.6382408Z 2026-10-24T22:14:10.6382771Z ⚠ 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-24T22:14:10.6382938Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T22:14:10.6382992Z 145 │ name, 2026-10-24T22:14:10.6383127Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T22:14:10.6383232Z ·  ────────────────────────── 2026-10-24T22:14:10.6383349Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T22:14:10.6383396Z ╰──── 2026-10-24T22:14:10.6383398Z 2026-10-24T22:14:10.6383586Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T22:14:10.6383676Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T22:14:10.6383759Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T22:14:10.6383839Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T22:14:10.6383910Z ·  ──┬── 2026-10-24T22:14:10.6384034Z · ╰── 'Fiber' is imported here 2026-10-24T22:14:10.6384130Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T22:14:10.6384178Z ╰──── 2026-10-24T22:14:10.6384340Z  help: Consider removing this import. 2026-10-24T22:14:10.6384380Z 2026-10-24T22:14:10.6384597Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T22:14:10.6384686Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T22:14:10.6384761Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T22:14:10.6384850Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T22:14:10.6384924Z ·  ────┬─── 2026-10-24T22:14:10.6385053Z · ╰── 'Schedule' is imported here 2026-10-24T22:14:10.6385134Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T22:14:10.6385183Z ╰──── 2026-10-24T22:14:10.6385276Z  help: Consider removing this import. 2026-10-24T22:14:10.6385279Z 2026-10-24T22:14:10.6385572Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T22:14:10.6385668Z ╭─[apps/server/src/ws.ts:1286:13] 2026-10-24T22:14:10.6385816Z 1285 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T22:14:10.6386010Z 1286 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T22:14:10.6386110Z ·  ────────────┬─────────── 2026-10-24T22:14:10.6386273Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T22:14:10.6386437Z 1287 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T22:14:10.6386486Z ╰──── 2026-10-24T22:14:10.6386585Z  help: Consider removing this declaration. 2026-10-24T22:14:10.6386593Z 2026-10-24T22:14:10.6386675Z Found 0 errors and 367 warnings in 5479 files (4.9s, 8 threads) 2026-10-24T22:14:10.6844238Z Post job cleanup. 2026-10-24T22:14:10.7417724Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T22:14:10.7481755Z Post job cleanup. 2026-10-24T22:14:10.7496217Z ##[start-action display=Cache full pnpm store;id=__00612745-7317-4f26-b95e-103a9e56e87a.__actions_cache] 2026-10-24T22:14:10.7792029Z Post job cleanup. 2026-10-24T22:14:10.8785637Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-bab31c3827e90e1352d302da4c761fd1b91963ae565f5f0ea70972d0942af1f6, not saving cache. 2026-10-24T22:14:10.8818654Z ##[end-action id=__00612745-7317-4f26-b95e-103a9e56e87a.__actions_cache;outcome=success;conclusion=success;duration_ms=132] 2026-10-24T22:14:10.8820830Z ##[start-action display=Cache Vite+;id=__00612745-7317-4f26-b95e-103a9e56e87a.vp_cache] 2026-10-24T22:14:10.8855435Z Post job cleanup. 2026-10-24T22:14:10.9463953Z 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-24T22:14:10.9492897Z ##[end-action id=__00612745-7317-4f26-b95e-103a9e56e87a.vp_cache;outcome=success;conclusion=success;duration_ms=67] 2026-10-24T22:14:10.9533288Z Post job cleanup. 2026-10-24T22:14:10.9919098Z [command]/usr/local/bin/git version 2026-10-24T22:14:10.9946516Z git version 2.55.0 2026-10-24T22:14:10.9996574Z Temporarily overriding HOME='/home/runner/_work/_temp/a06aeb34-0992-4226-bec0-0c7253ee3d36' before making global git config changes 2026-10-24T22:14:10.9996917Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T22:14:10.9999399Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T22:14:11.0019127Z Removing SSH command configuration 2026-10-24T22:14:11.0021857Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T22:14:11.0042403Z [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-24T22:14:11.0150604Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T22:14:11.0171864Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T22:14:11.0205367Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T22:14:11.0225251Z ##[group]Run '/job_completed.sh' 2026-10-24T22:14:11.0235117Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T22:14:11.0235279Z env: 2026-10-24T22:14:11.0235387Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 160 2026-10-24T22:14:11.0235530Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 404 2026-10-24T22:14:11.0235668Z BLACKSMITH_CHECK_RUN_ID: 121002392470 2026-10-24T22:14:11.0235803Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T22:14:11.0235947Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T22:14:11.0236077Z ##[endgroup] 2026-10-24T22:14:11.0306954Z Docker container cache not activated, skipping hash computation. 2026-10-24T22:14:11.0562590Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T22:14:11.0603765Z Cleaning up orphan processes