2026-10-24T02:48:16.5591065Z Current runner version: '2.338.1' 2026-10-24T02:48:16.5594760Z Runner name: 'blacksmith-8vcpu-ubuntu-2404-lgvrva7s2fo4tjwd' 2026-10-24T02:48:16.5595466Z Runner group name: 'blacksmith scale sets - blacksmith-8vcpu-ubuntu-2404' 2026-10-24T02:48:16.5596208Z Machine name: 'ip-172-31-73-130' 2026-10-24T02:48:16.5597765Z ##[group]GITHUB_TOKEN Permissions 2026-10-24T02:48:16.5599301Z Contents: read 2026-10-24T02:48:16.5599666Z Metadata: read 2026-10-24T02:48:16.5600107Z ##[endgroup] 2026-10-24T02:48:16.5601622Z Secret source: None 2026-10-24T02:48:16.5602398Z Cache mode: write 2026-10-24T02:48:16.5602953Z Prepare workflow directory 2026-10-24T02:48:16.5783715Z Prepare all required actions 2026-10-24T02:48:16.5809996Z Getting action download info 2026-10-24T02:48:16.6970414Z Download action repository 'actions/checkout@v6' (SHA:d23441a48e516b6c34aea4fa41551a30e30af803) 2026-10-24T02:48:16.7382103Z Download action repository 'actions/cache@v6' (SHA:55cc8345863c7cc4c66a329aec7e433d2d1c52a9) 2026-10-24T02:48:16.8505583Z Setting BLACKSMITH_ACTIONS_RESULTS_URL to https://results-receiver.actions.githubusercontent.com/ 2026-10-24T02:48:16.8543749Z Complete job name: Lint 2026-10-24T02:48:16.8918075Z A job started hook has been configured by the self-hosted runner administrator 2026-10-24T02:48:16.9045267Z ##[group]Run '/setup.sh' 2026-10-24T02:48:16.9061304Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:48:16.9061746Z env: 2026-10-24T02:48:16.9062025Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:16.9062318Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:16.9062598Z BLACKSMITH_CHECK_RUN_ID: 120758038962 2026-10-24T02:48:16.9062875Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T02:48:16.9063146Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T02:48:16.9063403Z ##[endgroup] 2026-10-24T02:48:16.9321734Z Logging daemon started (blacksmithd for logs) 2026-10-24T02:48:16.9424682Z Results daemon started (blacksmithd for results) 2026-10-24T02:48:16.9573561Z Background adoption and SSH setup started (PID: 3173) 2026-10-24T02:48:16.9574181Z 2026-10-24T02:48:16.9574626Z ---------------------------------------- 2026-10-24T02:48:16.9575188Z View this job: https://app.blacksmith.sh/pingdotgg/runs/40055685112/jobs/120758038962 2026-10-24T02:48:16.9575604Z SSH Access (using your GitHub SSH key): 2026-10-24T02:48:16.9576046Z ssh -p 64000 runner@blacksmith-8vcpu-ubuntu-2404-lgvrva7s2fo4tjwd.vm.blacksmith.sh 2026-10-24T02:48:16.9576353Z 2026-10-24T02:48:16.9576465Z No GitHub SSH key? Add one at: 2026-10-24T02:48:16.9576953Z https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account 2026-10-24T02:48:16.9577351Z 2026-10-24T02:48:16.9577462Z ---------------------------------------- 2026-10-24T02:48:16.9577638Z 2026-10-24T02:48:16.9577782Z VM ID: blacksmith-8vcpu-ubuntu-2404-lgvrva7s2fo4tjwd 2026-10-24T02:48:16.9578104Z Host: production-152.236.46.155-x8664 2026-10-24T02:48:16.9578379Z Host Agent PID: 941100 2026-10-24T02:48:16.9578622Z Host Agent Git SHA: 1637818df 2026-10-24T02:48:16.9578889Z Host CPU Manufacturer: AuthenticAMD 2026-10-24T02:48:16.9579170Z Blacksmith Host Generation: gen 2 2026-10-24T02:48:16.9579457Z Petname: production-divine-buzzard-4d65b1f1 2026-10-24T02:48:16.9579750Z Region: us-east 2026-10-24T02:48:16.9579984Z Rootfs Version: ubuntu24-full-x64-081926 2026-10-24T02:48:16.9587503Z OS Version: Ubuntu 24.04.4 LTS 2026-10-24T02:48:16.9588234Z 2026-10-24T02:48:16.9588351Z Enabling Blacksmith transparent cache 2026-10-24T02:48:16.9869983Z ##[group]Run actions/checkout@v6 2026-10-24T02:48:16.9870299Z with: 2026-10-24T02:48:16.9870629Z sparse-checkout: /* !/.repos/ !/apps/mobile/modules/t3-terminal/Vendor/**/*.a 2026-10-24T02:48:16.9871031Z sparse-checkout-cone-mode: false 2026-10-24T02:48:16.9871310Z repository: pingdotgg/t3code 2026-10-24T02:48:16.9873121Z token: *** 2026-10-24T02:48:16.9873338Z ssh-strict: true 2026-10-24T02:48:16.9873567Z ssh-user: git 2026-10-24T02:48:16.9873796Z persist-credentials: true 2026-10-24T02:48:16.9874321Z clean: true 2026-10-24T02:48:16.9874536Z fetch-depth: 1 2026-10-24T02:48:16.9874756Z fetch-tags: false 2026-10-24T02:48:16.9874985Z show-progress: true 2026-10-24T02:48:16.9875216Z lfs: false 2026-10-24T02:48:16.9875431Z submodules: false 2026-10-24T02:48:16.9875660Z set-safe-directory: true 2026-10-24T02:48:16.9875918Z allow-unsafe-pr-checkout: false 2026-10-24T02:48:16.9876173Z env: 2026-10-24T02:48:16.9876422Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:16.9876713Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:16.9876999Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:16.9877265Z ##[endgroup] 2026-10-24T02:48:17.1122024Z Syncing repository: pingdotgg/t3code 2026-10-24T02:48:17.1123206Z ##[group]Getting Git version info 2026-10-24T02:48:17.1123543Z Working directory is '/home/runner/_work/t3code/t3code' 2026-10-24T02:48:17.1124029Z [command]/usr/local/bin/git version 2026-10-24T02:48:17.1196761Z git version 2.55.0 2026-10-24T02:48:17.1207989Z ##[endgroup] 2026-10-24T02:48:17.1214892Z Temporarily overriding HOME='/home/runner/_work/_temp/7957fb06-5b4c-4768-9141-40201c227e4c' before making global git config changes 2026-10-24T02:48:17.1215529Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T02:48:17.1218475Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T02:48:17.1255019Z Deleting the contents of '/home/runner/_work/t3code/t3code' 2026-10-24T02:48:17.1256903Z ##[group]Determining repository object format 2026-10-24T02:48:17.1258034Z ##[endgroup] 2026-10-24T02:48:17.1258405Z ##[group]Initializing the repository 2026-10-24T02:48:17.1260438Z [command]/usr/local/bin/git init /home/runner/_work/t3code/t3code 2026-10-24T02:48:17.1306028Z hint: Using 'master' as the name for the initial branch. This default branch name 2026-10-24T02:48:17.1306580Z hint: will change to "main" in Git 3.0. To configure the initial branch name 2026-10-24T02:48:17.1307059Z hint: to use in all of your new repositories, which will suppress this warning, 2026-10-24T02:48:17.1307420Z hint: call: 2026-10-24T02:48:17.1307641Z hint: 2026-10-24T02:48:17.1307920Z hint: git config --global init.defaultBranch 2026-10-24T02:48:17.1308229Z hint: 2026-10-24T02:48:17.1308516Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and 2026-10-24T02:48:17.1308965Z hint: 'development'. The just-created branch can be renamed via this command: 2026-10-24T02:48:17.1309337Z hint: 2026-10-24T02:48:17.1309552Z hint: git branch -m 2026-10-24T02:48:17.1309794Z hint: 2026-10-24T02:48:17.1310105Z hint: Disable this message with "git config set advice.defaultBranchName false" 2026-10-24T02:48:17.1310567Z Initialized empty Git repository in /home/runner/_work/t3code/t3code/.git/ 2026-10-24T02:48:17.1312704Z [command]/usr/local/bin/git remote add origin https://github.com/pingdotgg/t3code 2026-10-24T02:48:17.1339857Z ##[endgroup] 2026-10-24T02:48:17.1340246Z ##[group]Disabling automatic garbage collection 2026-10-24T02:48:17.1342541Z [command]/usr/local/bin/git config --local gc.auto 0 2026-10-24T02:48:17.1366225Z ##[endgroup] 2026-10-24T02:48:17.1366579Z ##[group]Setting up auth 2026-10-24T02:48:17.1367037Z Removing SSH command configuration 2026-10-24T02:48:17.1371073Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T02:48:17.1396259Z [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-24T02:48:17.1541818Z Removing HTTP extra header 2026-10-24T02:48:17.1545356Z [command]/usr/local/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader 2026-10-24T02:48:17.1567850Z [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-24T02:48:17.1681111Z Removing includeIf entries pointing to credentials config files 2026-10-24T02:48:17.1684646Z [command]/usr/local/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir: 2026-10-24T02:48:17.1708846Z [command]/usr/local/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url 2026-10-24T02:48:17.1818157Z [command]/usr/local/bin/git config --file /home/runner/_work/_temp/git-credentials-2317bfeb-5113-46b9-9cad-b577e8ae48b8.config http.https://github.com/.extraheader AUTHORIZATION: basic *** 2026-10-24T02:48:17.1844309Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git.path /home/runner/_work/_temp/git-credentials-2317bfeb-5113-46b9-9cad-b577e8ae48b8.config 2026-10-24T02:48:17.1863800Z [command]/usr/local/bin/git config --local includeIf.gitdir:/home/runner/_work/t3code/t3code/.git/worktrees/*.path /home/runner/_work/_temp/git-credentials-2317bfeb-5113-46b9-9cad-b577e8ae48b8.config 2026-10-24T02:48:17.1883575Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git.path /github/runner_temp/git-credentials-2317bfeb-5113-46b9-9cad-b577e8ae48b8.config 2026-10-24T02:48:17.1902104Z [command]/usr/local/bin/git config --local includeIf.gitdir:/github/workspace/.git/worktrees/*.path /github/runner_temp/git-credentials-2317bfeb-5113-46b9-9cad-b577e8ae48b8.config 2026-10-24T02:48:17.1918791Z ##[endgroup] 2026-10-24T02:48:17.1919155Z ##[group]Fetching the repository 2026-10-24T02:48:17.1923796Z [command]/usr/local/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --filter=blob:none --depth=1 origin +fd30bd843630c9238ed1ff741455039e2cc65d84:refs/remotes/pull/22029/merge 2026-10-24T02:48:17.4801793Z From https://github.com/pingdotgg/t3code 2026-10-24T02:48:17.4802444Z * [new ref] fd30bd843630c9238ed1ff741455039e2cc65d84 -> pull/22029/merge 2026-10-24T02:48:17.4827115Z ##[endgroup] 2026-10-24T02:48:17.4827597Z ##[group]Determining the checkout info 2026-10-24T02:48:17.4828081Z ##[endgroup] 2026-10-24T02:48:17.4828500Z ##[group]Setting up sparse checkout 2026-10-24T02:48:17.4830257Z [command]/usr/local/bin/git config core.sparseCheckout true 2026-10-24T02:48:17.4855218Z [command]/usr/local/bin/git rev-parse --git-path info/sparse-checkout 2026-10-24T02:48:17.4874353Z .git/info/sparse-checkout 2026-10-24T02:48:17.4880962Z ##[endgroup] 2026-10-24T02:48:17.4881405Z ##[group]Checking out the ref 2026-10-24T02:48:17.4884802Z [command]/usr/local/bin/git checkout --progress --force refs/remotes/pull/22029/merge 2026-10-24T02:48:25.4754708Z Updating files: 0% (1/6319) 2026-10-24T02:48:25.4785725Z Updating files: 1% (64/6319) 2026-10-24T02:48:25.4803569Z Updating files: 2% (127/6319) 2026-10-24T02:48:25.4823367Z Updating files: 3% (190/6319) 2026-10-24T02:48:25.4847378Z Updating files: 4% (253/6319) 2026-10-24T02:48:25.4880044Z Updating files: 5% (316/6319) 2026-10-24T02:48:25.4902268Z Updating files: 6% (380/6319) 2026-10-24T02:48:25.4962536Z Updating files: 7% (443/6319) 2026-10-24T02:48:25.4993420Z Updating files: 8% (506/6319) 2026-10-24T02:48:25.5017784Z Updating files: 9% (569/6319) 2026-10-24T02:48:25.5162907Z Updating files: 10% (632/6319) 2026-10-24T02:48:25.5332975Z Updating files: 10% (668/6319) 2026-10-24T02:48:25.5350671Z Updating files: 11% (696/6319) 2026-10-24T02:48:25.5362176Z Updating files: 12% (759/6319) 2026-10-24T02:48:25.5377060Z Updating files: 13% (822/6319) 2026-10-24T02:48:25.5394200Z Updating files: 14% (885/6319) 2026-10-24T02:48:25.5413775Z Updating files: 15% (948/6319) 2026-10-24T02:48:25.5433758Z Updating files: 16% (1012/6319) 2026-10-24T02:48:25.5449519Z Updating files: 17% (1075/6319) 2026-10-24T02:48:25.5469560Z Updating files: 18% (1138/6319) 2026-10-24T02:48:25.5485262Z Updating files: 19% (1201/6319) 2026-10-24T02:48:25.5509301Z Updating files: 20% (1264/6319) 2026-10-24T02:48:25.5528567Z Updating files: 21% (1327/6319) 2026-10-24T02:48:25.5548119Z Updating files: 22% (1391/6319) 2026-10-24T02:48:25.5563240Z Updating files: 23% (1454/6319) 2026-10-24T02:48:25.5577336Z Updating files: 24% (1517/6319) 2026-10-24T02:48:25.5593544Z Updating files: 25% (1580/6319) 2026-10-24T02:48:25.5608264Z Updating files: 26% (1643/6319) 2026-10-24T02:48:25.5622623Z Updating files: 27% (1707/6319) 2026-10-24T02:48:25.5643335Z Updating files: 28% (1770/6319) 2026-10-24T02:48:25.5678941Z Updating files: 29% (1833/6319) 2026-10-24T02:48:25.5700194Z Updating files: 30% (1896/6319) 2026-10-24T02:48:25.5725426Z Updating files: 31% (1959/6319) 2026-10-24T02:48:25.5757650Z Updating files: 32% (2023/6319) 2026-10-24T02:48:25.5791170Z Updating files: 33% (2086/6319) 2026-10-24T02:48:25.5863132Z Updating files: 34% (2149/6319) 2026-10-24T02:48:25.5929713Z Updating files: 35% (2212/6319) 2026-10-24T02:48:25.5967019Z Updating files: 36% (2275/6319) 2026-10-24T02:48:25.6004307Z Updating files: 37% (2339/6319) 2026-10-24T02:48:25.6052309Z Updating files: 38% (2402/6319) 2026-10-24T02:48:25.6080084Z Updating files: 39% (2465/6319) 2026-10-24T02:48:25.6113421Z Updating files: 40% (2528/6319) 2026-10-24T02:48:25.6146403Z Updating files: 41% (2591/6319) 2026-10-24T02:48:25.6163518Z Updating files: 42% (2654/6319) 2026-10-24T02:48:25.6174017Z Updating files: 43% (2718/6319) 2026-10-24T02:48:25.6196465Z Updating files: 44% (2781/6319) 2026-10-24T02:48:25.6227058Z Updating files: 45% (2844/6319) 2026-10-24T02:48:25.6253718Z Updating files: 46% (2907/6319) 2026-10-24T02:48:25.6284957Z Updating files: 47% (2970/6319) 2026-10-24T02:48:25.6315140Z Updating files: 48% (3034/6319) 2026-10-24T02:48:25.6347473Z Updating files: 49% (3097/6319) 2026-10-24T02:48:25.6387209Z Updating files: 50% (3160/6319) 2026-10-24T02:48:25.6403684Z Updating files: 51% (3223/6319) 2026-10-24T02:48:25.6442204Z Updating files: 52% (3286/6319) 2026-10-24T02:48:25.6468176Z Updating files: 53% (3350/6319) 2026-10-24T02:48:25.6490400Z Updating files: 54% (3413/6319) 2026-10-24T02:48:25.6515405Z Updating files: 55% (3476/6319) 2026-10-24T02:48:25.6534276Z Updating files: 56% (3539/6319) 2026-10-24T02:48:25.6552510Z Updating files: 57% (3602/6319) 2026-10-24T02:48:25.6571997Z Updating files: 58% (3666/6319) 2026-10-24T02:48:25.6951809Z Updating files: 59% (3729/6319) 2026-10-24T02:48:25.6967452Z Updating files: 60% (3792/6319) 2026-10-24T02:48:25.6984527Z Updating files: 61% (3855/6319) 2026-10-24T02:48:25.7003505Z Updating files: 62% (3918/6319) 2026-10-24T02:48:25.7026524Z Updating files: 63% (3981/6319) 2026-10-24T02:48:25.7054700Z Updating files: 64% (4045/6319) 2026-10-24T02:48:25.7076856Z Updating files: 65% (4108/6319) 2026-10-24T02:48:25.7093473Z Updating files: 66% (4171/6319) 2026-10-24T02:48:25.7119763Z Updating files: 67% (4234/6319) 2026-10-24T02:48:25.7133352Z Updating files: 68% (4297/6319) 2026-10-24T02:48:25.7153567Z Updating files: 69% (4361/6319) 2026-10-24T02:48:25.7166769Z Updating files: 70% (4424/6319) 2026-10-24T02:48:25.7183582Z Updating files: 71% (4487/6319) 2026-10-24T02:48:25.7202080Z Updating files: 72% (4550/6319) 2026-10-24T02:48:25.7228429Z Updating files: 73% (4613/6319) 2026-10-24T02:48:25.7502007Z Updating files: 74% (4677/6319) 2026-10-24T02:48:25.7699236Z Updating files: 75% (4740/6319) 2026-10-24T02:48:25.7722369Z Updating files: 76% (4803/6319) 2026-10-24T02:48:25.7743217Z Updating files: 77% (4866/6319) 2026-10-24T02:48:25.7771325Z Updating files: 78% (4929/6319) 2026-10-24T02:48:25.7791242Z Updating files: 79% (4993/6319) 2026-10-24T02:48:25.7809014Z Updating files: 80% (5056/6319) 2026-10-24T02:48:25.7829530Z Updating files: 81% (5119/6319) 2026-10-24T02:48:25.7849139Z Updating files: 82% (5182/6319) 2026-10-24T02:48:25.7867121Z Updating files: 83% (5245/6319) 2026-10-24T02:48:25.7890402Z Updating files: 84% (5308/6319) 2026-10-24T02:48:25.7911204Z Updating files: 85% (5372/6319) 2026-10-24T02:48:25.7934197Z Updating files: 86% (5435/6319) 2026-10-24T02:48:25.8007260Z Updating files: 87% (5498/6319) 2026-10-24T02:48:25.8041583Z Updating files: 88% (5561/6319) 2026-10-24T02:48:25.8059911Z Updating files: 89% (5624/6319) 2026-10-24T02:48:25.8087312Z Updating files: 90% (5688/6319) 2026-10-24T02:48:25.8122370Z Updating files: 91% (5751/6319) 2026-10-24T02:48:25.8138174Z Updating files: 92% (5814/6319) 2026-10-24T02:48:25.8155693Z Updating files: 93% (5877/6319) 2026-10-24T02:48:25.8178579Z Updating files: 94% (5940/6319) 2026-10-24T02:48:25.8203854Z Updating files: 95% (6004/6319) 2026-10-24T02:48:25.8261554Z Updating files: 96% (6067/6319) 2026-10-24T02:48:25.8289670Z Updating files: 97% (6130/6319) 2026-10-24T02:48:25.8339430Z Updating files: 98% (6193/6319) 2026-10-24T02:48:25.8360035Z Updating files: 99% (6256/6319) 2026-10-24T02:48:25.8360326Z Updating files: 100% (6319/6319) 2026-10-24T02:48:25.8521751Z Updating files: 100% (6319/6319), done. 2026-10-24T02:48:25.8522051Z Note: switching to 'refs/remotes/pull/22029/merge'. 2026-10-24T02:48:25.8522264Z 2026-10-24T02:48:25.8522415Z You are in 'detached HEAD' state. You can look around, make experimental 2026-10-24T02:48:25.8522860Z changes and commit them, and you can discard any commits you make in this 2026-10-24T02:48:25.8523240Z state without impacting any branches by switching back to a branch. 2026-10-24T02:48:25.8523470Z 2026-10-24T02:48:25.8523624Z If you want to create a new branch to retain commits you create, you may 2026-10-24T02:48:25.8523996Z do so (now or later) by using -c with the switch command. Example: 2026-10-24T02:48:25.8524203Z 2026-10-24T02:48:25.8524296Z git switch -c 2026-10-24T02:48:25.8524437Z 2026-10-24T02:48:25.8524526Z Or undo this operation with: 2026-10-24T02:48:25.8524659Z 2026-10-24T02:48:25.8524750Z git switch - 2026-10-24T02:48:25.8524861Z 2026-10-24T02:48:25.8525037Z Turn off this advice by setting config variable advice.detachedHead to false 2026-10-24T02:48:25.8525284Z 2026-10-24T02:48:25.8525555Z HEAD is now at fd30bd8 Merge 9006ec60a914d835f20949579628842a7630b966 into 26c3625f484eadd4d5b6ca5a3dd1f8f8bd5533b4 2026-10-24T02:48:25.8536243Z ##[endgroup] 2026-10-24T02:48:25.8571806Z [command]/usr/local/bin/git log -1 --format=%H 2026-10-24T02:48:25.8590567Z fd30bd843630c9238ed1ff741455039e2cc65d84 2026-10-24T02:48:25.8676094Z ##[group]Run files="$(git ls-files .github/pr-assets)" 2026-10-24T02:48:25.8676327Z files="$(git ls-files .github/pr-assets)" 2026-10-24T02:48:25.8676508Z if test -n "$files"; then 2026-10-24T02:48:25.8676735Z  printf 'PR evidence must be uploaded to GitHub, not committed:\n%s\n' "$files" >&2 2026-10-24T02:48:25.8676945Z  exit 1 2026-10-24T02:48:25.8677054Z fi 2026-10-24T02:48:25.8696873Z shell: /usr/bin/bash -e {0} 2026-10-24T02:48:25.8697014Z env: 2026-10-24T02:48:25.8697129Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:25.8697279Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:25.8697429Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:25.8697566Z ##[endgroup] 2026-10-24T02:48:25.8852492Z Prepare all required actions 2026-10-24T02:48:25.8852849Z Getting action download info 2026-10-24T02:48:25.9801023Z Download action repository 'voidzero-dev/setup-vp@v1' (SHA:250f29ce396baf5e8f24498e17c0dfdebabc26eb) 2026-10-24T02:48:26.0764452Z ##[group]Run ./.github/actions/setup-ci-deps 2026-10-24T02:48:26.0764619Z env: 2026-10-24T02:48:26.0764742Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:26.0764892Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:26.0765040Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:26.0765180Z ##[endgroup] 2026-10-24T02:48:26.0859342Z ##[start-action display=Resolve Vite+ version;id=__self.vp] 2026-10-24T02:48:26.0875891Z ##[group]Run echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T02:48:26.0876373Z echo "version=$(sed -nE 's/^ vite-plus: ([0-9][^ ]*)$/\1/p' pnpm-workspace.yaml)" >> "$GITHUB_OUTPUT" 2026-10-24T02:48:26.0876682Z echo "node=$(jq -r '.engines.node' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T02:48:26.0876926Z echo "pnpm=$(jq -r '.packageManager' package.json)" >> "$GITHUB_OUTPUT" 2026-10-24T02:48:26.0895369Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:48:26.0895551Z env: 2026-10-24T02:48:26.0895677Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:26.0895828Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:26.0895974Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:26.0896111Z ##[endgroup] 2026-10-24T02:48:26.0975181Z ##[end-action id=__self.vp;outcome=success;conclusion=success;duration_ms=11] 2026-10-24T02:48:26.0976487Z ##[start-action display=Cache Vite+;id=__self.vp_cache] 2026-10-24T02:48:26.1029683Z ##[group]Run actions/cache@v6 2026-10-24T02:48:26.1029885Z with: 2026-10-24T02:48:26.1030042Z path: ~/.vite-plus 2026-10-24T02:48:26.1030294Z key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T02:48:26.1030604Z enableCrossOsArchive: false 2026-10-24T02:48:26.1030811Z fail-on-cache-miss: false 2026-10-24T02:48:26.1031004Z lookup-only: false 2026-10-24T02:48:26.1031175Z save-always: false 2026-10-24T02:48:26.1031343Z env: 2026-10-24T02:48:26.1031508Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:26.1031740Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:26.1031962Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:26.1032170Z ##[endgroup] 2026-10-24T02:48:26.3078768Z Cache hit for: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T02:48:26.7037792Z Received 170349591 of 170349591 (100.0%), 434.4 MBs/sec 2026-10-24T02:48:26.7038318Z Cache Size: ~162 MB (170349591 B) 2026-10-24T02:48:26.7074273Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/0d50b697-f161-4a4a-a13c-7bbbd236f28e/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T02:48:27.4411416Z Cache restored successfully 2026-10-24T02:48:27.4556183Z Cache restored from key: vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0 2026-10-24T02:48:27.4641419Z ##[end-action id=__self.vp_cache;outcome=success;conclusion=success;duration_ms=1366] 2026-10-24T02:48:27.4643951Z ##[start-action display=Use cached Vite+;id=__self.__run] 2026-10-24T02:48:27.4664678Z ##[group]Run echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T02:48:27.4664904Z echo "$HOME/.vite-plus/bin" >> "$GITHUB_PATH" 2026-10-24T02:48:27.4665087Z "$HOME/.vite-plus/bin/vp" env use "26.12.1" 2026-10-24T02:48:27.4684986Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:48:27.4685155Z env: 2026-10-24T02:48:27.4685281Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:27.4685432Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:27.4685597Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:27.4685735Z ##[endgroup] 2026-10-24T02:48:27.4729188Z Using Node.js v26.12.1 (resolved from 26.12.1) 2026-10-24T02:48:27.4740492Z ##[end-action id=__self.__run;outcome=success;conclusion=success;duration_ms=9] 2026-10-24T02:48:27.4742728Z ##[start-action display=Setup Vite+;id=__self.__voidzero-dev_setup-vp] 2026-10-24T02:48:27.4748271Z ##[end-action id=__self.__voidzero-dev_setup-vp;outcome=skipped;conclusion=skipped;duration_ms=0] 2026-10-24T02:48:27.4750227Z ##[start-action display=Resolve pnpm store path;id=__self.pnpm_store] 2026-10-24T02:48:27.4780730Z ##[group]Run store_path="$(vp pm cache dir)" 2026-10-24T02:48:27.4780933Z store_path="$(vp pm cache dir)" 2026-10-24T02:48:27.4781101Z echo "path=$store_path" >> "$GITHUB_OUTPUT" 2026-10-24T02:48:27.4804982Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:48:27.4805162Z env: 2026-10-24T02:48:27.4805282Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:27.4805621Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:27.4805785Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:27.4805971Z ##[endgroup] 2026-10-24T02:48:27.4950208Z ##[end-action id=__self.pnpm_store;outcome=success;conclusion=success;duration_ms=19] 2026-10-24T02:48:27.4951715Z ##[start-action display=Cache full pnpm store;id=__self.__actions_cache] 2026-10-24T02:48:27.5348201Z ##[group]Run actions/cache@v6 2026-10-24T02:48:27.5348348Z with: 2026-10-24T02:48:27.5348485Z path: /home/runner/.local/share/pnpm/store/v11 2026-10-24T02:48:27.5348754Z key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T02:48:27.5349018Z restore-keys: pnpm-full-v1-Linux-X64- 2026-10-24T02:48:27.5349171Z enableCrossOsArchive: false 2026-10-24T02:48:27.5349307Z fail-on-cache-miss: false 2026-10-24T02:48:27.5349432Z lookup-only: false 2026-10-24T02:48:27.5349560Z save-always: false 2026-10-24T02:48:27.5349686Z env: 2026-10-24T02:48:27.5349816Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:27.5349963Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:27.5350107Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:27.5350248Z ##[endgroup] 2026-10-24T02:48:27.7262205Z Cache hit for: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T02:48:28.7500448Z Received 738197504 of 995020926 (74.2%), 703.3 MBs/sec 2026-10-24T02:48:29.1230814Z Received 995020926 of 995020926 (100.0%), 690.6 MBs/sec 2026-10-24T02:48:29.1231621Z Cache Size: ~949 MB (995020926 B) 2026-10-24T02:48:29.1263495Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/f9431097-6225-43a1-8716-f7ae8af2ffb2/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T02:48:34.9620704Z Cache restored successfully 2026-10-24T02:48:35.0093869Z Cache restored from key: pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef 2026-10-24T02:48:35.0161668Z ##[end-action id=__self.__actions_cache;outcome=success;conclusion=success;duration_ms=7520] 2026-10-24T02:48:35.0164428Z ##[start-action display=Install dependencies;id=__self.__run_2] 2026-10-24T02:48:35.0175417Z ##[group]Run vp install 2026-10-24T02:48:35.0175566Z vp install 2026-10-24T02:48:35.0194246Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:48:35.0194417Z env: 2026-10-24T02:48:35.0194538Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:35.0194694Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:35.0194845Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:35.0194987Z ##[endgroup] 2026-10-24T02:48:35.0595330Z Scope: all 33 workspace projects 2026-10-24T02:48:35.1581426Z ? Verifying lockfile against supply-chain policies (2088 entries)... 2026-10-24T02:48:35.4808546Z Packages are hard linked from the content-addressable store to the virtual store. 2026-10-24T02:48:35.4808886Z Content-addressable store is at: /home/runner/.local/share/pnpm/store/v11 2026-10-24T02:48:35.4809109Z Virtual store is at: node_modules/.pnpm 2026-10-24T02:48:37.6901770Z ✓ Lockfile passes supply-chain policies (2088 entries in 2.5s) 2026-10-24T02:48:37.6902058Z Lockfile is up to date, resolution step is skipped 2026-10-24T02:48:37.7086720Z Packages: +1721 2026-10-24T02:48:37.7086883Z ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2026-10-24T02:48:37.7439692Z Progress: resolved 1721, reused 1718, downloaded 0, added 1721, done 2026-10-24T02:48:38.8284901Z . prepare$ vp config --no-agent 2026-10-24T02:48:38.9447970Z . prepare: Done 2026-10-24T02:48:38.9465040Z 2026-10-24T02:48:38.9465470Z devDependencies: 2026-10-24T02:48:38.9465621Z + @coderabbitai/config 1.1.0 2026-10-24T02:48:38.9465781Z + @shadcn/lint 0.1.5 2026-10-24T02:48:38.9466951Z + @types/node 24.12.4 2026-10-24T02:48:38.9467084Z + knip 6.34.0 2026-10-24T02:48:38.9467224Z + typescript <- @tsc-rs/typescript 0.8.0 2026-10-24T02:48:38.9467371Z + vite-plus 1.3.0 2026-10-24T02:48:38.9467441Z 2026-10-24T02:48:38.9496410Z Done in 3.9s using pnpm v12.14.0 2026-10-24T02:48:38.9667896Z ##[end-action id=__self.__run_2;outcome=success;conclusion=success;duration_ms=3950] 2026-10-24T02:48:39.0200935Z ##[group]Run actions/cache@v6 2026-10-24T02:48:39.0201105Z with: 2026-10-24T02:48:39.0201226Z path: ~/.cache/electron 2026-10-24T02:48:39.0201470Z key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T02:48:39.0201763Z enableCrossOsArchive: false 2026-10-24T02:48:39.0201898Z fail-on-cache-miss: false 2026-10-24T02:48:39.0202025Z lookup-only: false 2026-10-24T02:48:39.0202142Z save-always: false 2026-10-24T02:48:39.0202247Z env: 2026-10-24T02:48:39.0202358Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:39.0202512Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:39.0202675Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:39.0202812Z ##[endgroup] 2026-10-24T02:48:39.2306751Z Cache hit for: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T02:48:39.3823432Z Received 122906203 of 122906203 (100.0%), 861.9 MBs/sec 2026-10-24T02:48:39.3823744Z Cache Size: ~117 MB (122906203 B) 2026-10-24T02:48:39.3867555Z [command]/usr/bin/tar -xf /home/runner/_work/_temp/1315bf67-3121-423b-86fc-2c0d505dc39e/cache.tzst -P -C /home/runner/_work/t3code/t3code --use-compress-program unzstd 2026-10-24T02:48:39.4468314Z Cache restored successfully 2026-10-24T02:48:39.4589644Z Cache restored from key: electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309 2026-10-24T02:48:39.4707461Z ##[group]Run vp run --filter @t3tools/desktop ensure:electron 2026-10-24T02:48:39.4707745Z vp run --filter @t3tools/desktop ensure:electron 2026-10-24T02:48:39.4728706Z shell: /usr/bin/bash -e {0} 2026-10-24T02:48:39.4728850Z env: 2026-10-24T02:48:39.4729176Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:39.4729333Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:39.4729481Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:39.4729628Z ##[endgroup] 2026-10-24T02:48:39.6364783Z ~/apps/desktop$ node scripts/ensure-electron-runtime.mjs ⊘ cache disabled 2026-10-24T02:48:40.2356109Z /home/runner/_work/t3code/t3code/node_modules/.pnpm/electron@44.9.3_supports-color@8.1.1/node_modules/electron/dist/electron 2026-10-24T02:48:40.2378224Z 2026-10-24T02:48:40.2487003Z ##[group]Run vp run knip:check 2026-10-24T02:48:40.2487177Z vp run knip:check 2026-10-24T02:48:40.2506175Z shell: /usr/bin/bash -e {0} 2026-10-24T02:48:40.2506304Z env: 2026-10-24T02:48:40.2506418Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:40.2506572Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:40.2506715Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:40.2506858Z ##[endgroup] 2026-10-24T02:48:40.4023452Z $ knip --include files,dependencies --no-config-hints ⊘ cache disabled 2026-10-24T02:48:44.4182100Z 2026-10-24T02:48:44.4184920Z $ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled 2026-10-24T02:48:53.3834548Z 2026-10-24T02:48:53.3835239Z --- 2026-10-24T02:48:53.3835545Z vp run: 2/2 successful. (Run `vp run --last-details` for full details) 2026-10-24T02:48:53.3917415Z ##[group]Run vp run --filter @t3tools/source-control-github generate --check 2026-10-24T02:48:53.3917715Z vp run --filter @t3tools/source-control-github generate --check 2026-10-24T02:48:53.3936198Z shell: /usr/bin/bash -e {0} 2026-10-24T02:48:53.3936330Z env: 2026-10-24T02:48:53.3936445Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:53.3936599Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:53.3936745Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:53.3936886Z ##[endgroup] 2026-10-24T02:48:53.5463375Z ~/packages/source-control-github$ graphqlgen --check ⊘ cache disabled 2026-10-24T02:48:53.7483310Z 2026-10-24T02:48:53.7563645Z ##[group]Run vp run --filter t3 generate --check 2026-10-24T02:48:53.7563863Z vp run --filter t3 generate --check 2026-10-24T02:48:53.7582659Z shell: /usr/bin/bash -e {0} 2026-10-24T02:48:53.7582789Z env: 2026-10-24T02:48:53.7582923Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:53.7583076Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:53.7583218Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:53.7583357Z ##[endgroup] 2026-10-24T02:48:53.9092839Z ~/apps/server$ graphqlgen --check ⊘ cache disabled 2026-10-24T02:48:54.0728121Z 2026-10-24T02:48:54.0814954Z ##[group]Run vp check 2026-10-24T02:48:54.0815122Z vp check 2026-10-24T02:48:54.0833937Z shell: /usr/bin/bash -e {0} 2026-10-24T02:48:54.0834074Z env: 2026-10-24T02:48:54.0834188Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:48:54.0834344Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:48:54.0834488Z GITHUB_REPO_NAME: pingdotgg/t3code 2026-10-24T02:48:54.0834629Z ##[endgroup] 2026-10-24T02:48:54.6974896Z pass: All 5676 files are correctly formatted (467ms, 8 threads) 2026-10-24T02:49:00.2611273Z warn: Lint warnings found 2026-10-24T02:49:00.2612747Z ⚠ 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-24T02:49:00.2613803Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:50:18] 2026-10-24T02:49:00.2614319Z 49 │ for (const tool of ["sendMessage", "followupTask", "interruptAgent", "listAgents"]) { 2026-10-24T02:49:00.2614853Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T02:49:00.2615284Z ·  ───────── 2026-10-24T02:49:00.2615718Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T02:49:00.2616133Z ╰──── 2026-10-24T02:49:00.2616221Z 2026-10-24T02:49:00.2616784Z ⚠ 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-24T02:49:00.2617541Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:51:18] 2026-10-24T02:49:00.2618054Z 50 │ assert.equal(Schema.is(CodexSchema.ServerNotification__CollabAgentTool)(tool), true); 2026-10-24T02:49:00.2618622Z 51 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentTool)(tool), true); 2026-10-24T02:49:00.2619049Z ·  ───────── 2026-10-24T02:49:00.2619291Z 52 │ } 2026-10-24T02:49:00.2619464Z ╰──── 2026-10-24T02:49:00.2619548Z 2026-10-24T02:49:00.2620146Z ⚠ 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-24T02:49:00.2620873Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:55:5] 2026-10-24T02:49:00.2621227Z 54 │ assert.equal( 2026-10-24T02:49:00.2621625Z 55 │ Schema.is(CodexSchema.ServerNotification__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T02:49:00.2622029Z ·  ───────── 2026-10-24T02:49:00.2622285Z 56 │ true, 2026-10-24T02:49:00.2622471Z ╰──── 2026-10-24T02:49:00.2622556Z 2026-10-24T02:49:00.2622957Z ⚠ 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-24T02:49:00.2623494Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:59:5] 2026-10-24T02:49:00.2623830Z 58 │ assert.equal( 2026-10-24T02:49:00.2624243Z 59 │ Schema.is(CodexSchema.V2ThreadResumeResponse__CollabAgentToolCallStatus)("interrupted"), 2026-10-24T02:49:00.2624674Z ·  ───────── 2026-10-24T02:49:00.2624904Z 60 │ true, 2026-10-24T02:49:00.2625091Z ╰──── 2026-10-24T02:49:00.2625174Z 2026-10-24T02:49:00.2625731Z ⚠ 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-24T02:49:00.2626543Z ╭─[packages/effect-codex-app-server/src/schema.test.ts:103:16] 2026-10-24T02:49:00.2626884Z 102 │ 2026-10-24T02:49:00.2627276Z 103 │ assert.equal(Schema.is(CodexSchema.V2ThreadResumeResponse)(resumeResponse), true); 2026-10-24T02:49:00.2627701Z ·  ───────── 2026-10-24T02:49:00.2627940Z 104 │ }); 2026-10-24T02:49:00.2628116Z ╰──── 2026-10-24T02:49:00.2628199Z 2026-10-24T02:49:00.2628481Z ⚠ unicorn(no-new-array): Do not use `new Array(singleArgument)`. 2026-10-24T02:49:00.2629211Z ╭─[apps/web/src/terminal/ghostty/core.ts:194:19] 2026-10-24T02:49:00.2629695Z 193 │ const count = Math.min(CHUNK_SIZE, graphemeLength - start); 2026-10-24T02:49:00.2630048Z 194 │ const codes = new Array(count); 2026-10-24T02:49:00.2630424Z ·  ──────────────────────── 2026-10-24T02:49:00.2630768Z 195 │ for (let index = 0; index < count; index += 1) { 2026-10-24T02:49:00.2631026Z ╰──── 2026-10-24T02:49:00.2631823Z  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-24T02:49:00.2632471Z 2026-10-24T02:49:00.2632790Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2633289Z ╭─[apps/mobile/src/state/thread-order.ts:29:7] 2026-10-24T02:49:00.2633602Z 28 │ getPendingThreadOrder(); 2026-10-24T02:49:00.2633873Z 29 │ }, [nowMinute, snoozeWakeTick]); 2026-10-24T02:49:00.2634218Z ·  ────┬──── ───────┬────── 2026-10-24T02:49:00.2634732Z · │ ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T02:49:00.2635160Z · ╰── Unnecessary dependency `nowMinute` 2026-10-24T02:49:00.2635385Z 30 │ return pending; 2026-10-24T02:49:00.2635588Z ╰──── 2026-10-24T02:49:00.2636171Z  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-24T02:49:00.2637184Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2637496Z 2026-10-24T02:49:00.2637727Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:49:00.2638083Z ╭─[apps/mobile/src/state/use-composer-drafts.ts:1022:15] 2026-10-24T02:49:00.2638303Z 1021 │ instanceId, 2026-10-24T02:49:00.2638538Z 1022 │ { ...(persisted.modelOptionMemory[instanceId] ?? {}), ...models }, 2026-10-24T02:49:00.2638837Z ·  ────────────────────────────────────────────────── 2026-10-24T02:49:00.2639037Z 1023 │ ]), 2026-10-24T02:49:00.2639172Z ╰──── 2026-10-24T02:49:00.2639509Z  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-24T02:49:00.2639774Z 2026-10-24T02:49:00.2639965Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.2640325Z ╭─[apps/server/src/provider/Drivers/CodexDriver.test.ts:466:14] 2026-10-24T02:49:00.2640535Z 465 │ 2026-10-24T02:49:00.2640707Z 466 │ for (const {} of ["direct", "wrapper"] as const) { 2026-10-24T02:49:00.2640901Z ·  ── 2026-10-24T02:49:00.2641050Z 467 │ } 2026-10-24T02:49:00.2641166Z ╰──── 2026-10-24T02:49:00.2641464Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.2641694Z 2026-10-24T02:49:00.2641917Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:49:00.2642388Z ╭─[apps/mobile/src/state/use-model-option-memory.ts:21:7] 2026-10-24T02:49:00.2642645Z 20 │ [instanceId]: { 2026-10-24T02:49:00.2642815Z 21 │ ...(state[instanceId] ?? {}), 2026-10-24T02:49:00.2643020Z ·  ──────────────────────────── 2026-10-24T02:49:00.2643207Z 22 │ [model]: options, 2026-10-24T02:49:00.2643348Z ╰──── 2026-10-24T02:49:00.2643672Z  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-24T02:49:00.2643932Z 2026-10-24T02:49:00.2644196Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2644604Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:512:5] 2026-10-24T02:49:00.2644837Z 510 │ }, []); 2026-10-24T02:49:00.2644981Z 511 │ useEffect(() => { 2026-10-24T02:49:00.2645142Z ·  ────┬──── 2026-10-24T02:49:00.2645363Z · ╰── This is the containing effect 2026-10-24T02:49:00.2645603Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T02:49:00.2645803Z ·  ───────────┬─────────── 2026-10-24T02:49:00.2646085Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2646359Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T02:49:00.2646532Z ╰──── 2026-10-24T02:49:00.2647210Z  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-24T02:49:00.2648127Z  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-24T02:49:00.2648438Z 2026-10-24T02:49:00.2648736Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2649359Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:872:7] 2026-10-24T02:49:00.2649844Z 869 │ const [lastKnownKeyboardHeight, setLastKnownKeyboardHeight] = useState(0); 2026-10-24T02:49:00.2650198Z 870 │ useEffect(() => { 2026-10-24T02:49:00.2650356Z ·  ────┬──── 2026-10-24T02:49:00.2650579Z · ╰── This is the containing effect 2026-10-24T02:49:00.2650883Z 871 │ if (liveKeyboardHeight > 0 && liveKeyboardHeight !== lastKnownKeyboardHeight) { 2026-10-24T02:49:00.2651177Z 872 │ setLastKnownKeyboardHeight(liveKeyboardHeight); 2026-10-24T02:49:00.2651408Z ·  ─────────────┬──────────── 2026-10-24T02:49:00.2651697Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2651930Z 873 │ } 2026-10-24T02:49:00.2652056Z ╰──── 2026-10-24T02:49:00.2652718Z  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-24T02:49:00.2653686Z  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-24T02:49:00.2654049Z 2026-10-24T02:49:00.2654311Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2654717Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1119:5] 2026-10-24T02:49:00.2654937Z 1117 │ 2026-10-24T02:49:00.2655068Z 1118 │ useEffect(() => { 2026-10-24T02:49:00.2655230Z ·  ────┬──── 2026-10-24T02:49:00.2655454Z · ╰── This is the containing effect 2026-10-24T02:49:00.2655671Z 1119 │ setAnchorMessageId(null); 2026-10-24T02:49:00.2655855Z ·  ─────────┬──────── 2026-10-24T02:49:00.2656140Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2656398Z 1120 │ setSubmittedMessageId(null); 2026-10-24T02:49:00.2656557Z ╰──── 2026-10-24T02:49:00.2657216Z  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-24T02:49:00.2658083Z  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-24T02:49:00.2658395Z 2026-10-24T02:49:00.2658602Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2658962Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:513:7] 2026-10-24T02:49:00.2659215Z 512 │ setKeyboardStateSuspect(false); 2026-10-24T02:49:00.2659421Z 513 │ }, [isKeyboardVisible, liveKeyboardHeight]); 2026-10-24T02:49:00.2659681Z ·  ────────┬──────── ─────────┬──────── 2026-10-24T02:49:00.2660040Z · │ ╰── Unnecessary dependency `liveKeyboardHeight` 2026-10-24T02:49:00.2660439Z · ╰── Unnecessary dependency `isKeyboardVisible` 2026-10-24T02:49:00.2660730Z 514 │ const handleOwnedInputFocusChange = (focused: boolean) => { 2026-10-24T02:49:00.2660925Z ╰──── 2026-10-24T02:49:00.2661291Z  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-24T02:49:00.2662082Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2662410Z 2026-10-24T02:49:00.2662616Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2662974Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1067:7] 2026-10-24T02:49:00.2663226Z 1066 │ userInputInsetProgress.set(1); 2026-10-24T02:49:00.2663505Z 1067 │ }, [activeUserInputRequestId, userInputCardProgress, userInputInsetProgress]); 2026-10-24T02:49:00.2663776Z ·  ────────────┬─────────── 2026-10-24T02:49:00.2664064Z · ╰── Unnecessary dependency `activeUserInputRequestId` 2026-10-24T02:49:00.2664437Z 1068 │ const showContent = props.showContent ?? true; 2026-10-24T02:49:00.2664651Z ╰──── 2026-10-24T02:49:00.2665005Z  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-24T02:49:00.2665604Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2666040Z 2026-10-24T02:49:00.2666244Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2666611Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:1125:15] 2026-10-24T02:49:00.2666847Z 1124 │ freeze.set(false); 2026-10-24T02:49:00.2667026Z 1125 │ }, [freeze, selectedThreadKey]); 2026-10-24T02:49:00.2667243Z ·  ────────┬──────── 2026-10-24T02:49:00.2667524Z · ╰── Unnecessary dependency `selectedThreadKey` 2026-10-24T02:49:00.2667741Z 1126 │ 2026-10-24T02:49:00.2667862Z ╰──── 2026-10-24T02:49:00.2668213Z  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-24T02:49:00.2668812Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2669107Z 2026-10-24T02:49:00.2669269Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.2669585Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:955:5] 2026-10-24T02:49:00.2669863Z 950 │ const composerPopoverHeight = useSharedValue(0); 2026-10-24T02:49:00.2670137Z 951 │ const floatingControlCoverage = useSharedValue( 2026-10-24T02:49:00.2670357Z ·  ───────────┬─────────── 2026-10-24T02:49:00.2670628Z · ╰── `floatingControlCoverage` originates here 2026-10-24T02:49:00.2670947Z 952 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T02:49:00.2671146Z 953 │ ); 2026-10-24T02:49:00.2671283Z 954 │ useEffect(() => { 2026-10-24T02:49:00.2671475Z 955 │ floatingControlCoverage.value = withTiming( 2026-10-24T02:49:00.2671690Z ·  ───────────┬─────────── 2026-10-24T02:49:00.2671956Z · ╰── `floatingControlCoverage` cannot be modified 2026-10-24T02:49:00.2672382Z 956 │ showFloatingStatus ? FLOATING_WORKING_CONTROL_COVERAGE : 0, 2026-10-24T02:49:00.2672712Z ╰──── 2026-10-24T02:49:00.2673047Z  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-24T02:49:00.2673701Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.2674000Z 2026-10-24T02:49:00.2674164Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.2674479Z ╭─[apps/mobile/src/features/threads/ThreadDetailScreen.tsx:973:7] 2026-10-24T02:49:00.2674833Z 963 │ const userInputCoverageApplies = Platform.OS === "ios" && activeUserInputRequestId !== null; 2026-10-24T02:49:00.2675150Z 964 │ const combinedContentInsetEndAdjustment = useSharedValue( 2026-10-24T02:49:00.2675412Z ·  ────────────────┬──────────────── 2026-10-24T02:49:00.2675727Z · ╰── `combinedContentInsetEndAdjustment` originates here 2026-10-24T02:49:00.2676045Z 965 │ Math.max(0, estimatedOverlayHeight - nativeInsetOvercount), 2026-10-24T02:49:00.2676242Z 966 │ ); 2026-10-24T02:49:00.2676383Z 967 │ useAnimatedReaction( 2026-10-24T02:49:00.2676534Z 968 │ () => 2026-10-24T02:49:00.2676697Z 969 │ contentInsetEndAdjustment.value + 2026-10-24T02:49:00.2676903Z 970 │ floatingControlCoverage.value + 2026-10-24T02:49:00.2677211Z 971 │ (userInputCoverageApplies ? userInputInsetProgress.value * userInputCardCoverage.value : 0), 2026-10-24T02:49:00.2677482Z 972 │ (value) => { 2026-10-24T02:49:00.2677679Z 973 │ combinedContentInsetEndAdjustment.value = value; 2026-10-24T02:49:00.2678122Z ·  ────────────────┬──────────────── 2026-10-24T02:49:00.2678489Z · ╰── `combinedContentInsetEndAdjustment` cannot be modified 2026-10-24T02:49:00.2699470Z 974 │ }, 2026-10-24T02:49:00.2699633Z ╰──── 2026-10-24T02:49:00.2699988Z  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-24T02:49:00.2700627Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.2700933Z 2026-10-24T02:49:00.2701343Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2701858Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:215:7] 2026-10-24T02:49:00.2702102Z 211 │ }; 2026-10-24T02:49:00.2702297Z 212 │ useEffect(() => { 2026-10-24T02:49:00.2702532Z ·  ────┬──── 2026-10-24T02:49:00.2702866Z · ╰── This is the containing effect 2026-10-24T02:49:00.2703347Z 213 │ const inserted = ownerKey ? readComposerDraftSelection(ownerKey, draftMessage) : null; 2026-10-24T02:49:00.2703737Z 214 │ if (inserted) { 2026-10-24T02:49:00.2703982Z 215 │ setSelection((current) => 2026-10-24T02:49:00.2704260Z ·  ──────┬───── 2026-10-24T02:49:00.2704674Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2705306Z 216 │ current.start === inserted.start && current.end === inserted.end ? current : inserted, 2026-10-24T02:49:00.2705919Z ╰──── 2026-10-24T02:49:00.2707183Z  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-24T02:49:00.2708591Z  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-24T02:49:00.2709095Z 2026-10-24T02:49:00.2709510Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2710224Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:296:7] 2026-10-24T02:49:00.2710637Z 284 │ }, [hasWorkspaceSnapshot]); 2026-10-24T02:49:00.2710893Z 285 │ useEffect(() => { 2026-10-24T02:49:00.2711132Z ·  ────┬──── 2026-10-24T02:49:00.2711461Z · ╰── This is the containing effect 2026-10-24T02:49:00.2711901Z 286 │ if (!environmentId || !projectCwd || !selectedProviderInstanceId) return; 2026-10-24T02:49:00.2712378Z 287 │ const key = `${environmentId}:${selectedProviderInstanceId}:${projectCwd}`; 2026-10-24T02:49:00.2712757Z 288 │ const now = Date.now(); 2026-10-24T02:49:00.2713084Z 289 │ const lastRequest = workspaceRefreshKeyRef.current; 2026-10-24T02:49:00.2713375Z 290 │ if ( 2026-10-24T02:49:00.2713608Z 291 │ lastRequest?.key === key && 2026-10-24T02:49:00.2713980Z 292 │ now - lastRequest.requestedAt < PROVIDER_WORKSPACE_SNAPSHOT_TTL_MS 2026-10-24T02:49:00.2714307Z 293 │ ) 2026-10-24T02:49:00.2714508Z 294 │ return; 2026-10-24T02:49:00.2714913Z 295 │ if (hasCurrentProviderWorkspaceSnapshot(selectedProviderStatus, projectCwd, now)) { 2026-10-24T02:49:00.2715332Z 296 │ setWorkspaceRefreshRetry(null); 2026-10-24T02:49:00.2715651Z ·  ────────────┬─────────── 2026-10-24T02:49:00.2716085Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2716453Z 297 │ return; 2026-10-24T02:49:00.2716648Z ╰──── 2026-10-24T02:49:00.2717804Z  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-24T02:49:00.2719229Z  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-24T02:49:00.2719680Z 2026-10-24T02:49:00.2719892Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2720300Z ╭─[apps/mobile/src/features/threads/use-composer-command-menu.ts:326:5] 2026-10-24T02:49:00.2720526Z 325 │ }, [ 2026-10-24T02:49:00.2720655Z 326 │ draftMessage, 2026-10-24T02:49:00.2720813Z ·  ──────┬───── 2026-10-24T02:49:00.2721048Z · ╰── Unnecessary dependency `draftMessage` 2026-10-24T02:49:00.2721257Z 327 │ environmentId, 2026-10-24T02:49:00.2721392Z ╰──── 2026-10-24T02:49:00.2721872Z  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-24T02:49:00.2722511Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2722811Z 2026-10-24T02:49:00.2723019Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T02:49:00.2723381Z ╭─[apps/web/src/components/settings/ProviderSettingsPanel.logic.ts:4:8] 2026-10-24T02:49:00.2723623Z 3 │ AuthProvidersManageScope, 2026-10-24T02:49:00.2723785Z 4 │ type AuthSessionState, 2026-10-24T02:49:00.2723957Z ·  ────────┬─────── 2026-10-24T02:49:00.2724201Z · ╰── 'AuthSessionState' is imported here 2026-10-24T02:49:00.2724420Z 5 │ type EnvironmentId, 2026-10-24T02:49:00.2724562Z ╰──── 2026-10-24T02:49:00.2724717Z  help: Consider removing this import. 2026-10-24T02:49:00.2724835Z 2026-10-24T02:49:00.2725054Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.2725435Z ╭─[apps/mobile/src/features/threads/NewTaskContextPickerScreens.tsx:249:7] 2026-10-24T02:49:00.2725695Z 248 │ mountedRef.current = false; 2026-10-24T02:49:00.2725874Z 249 │ flow.setBranchQuery(""); 2026-10-24T02:49:00.2726042Z ·  ──┬─ 2026-10-24T02:49:00.2726261Z · ╰── Missing dependency `flow` 2026-10-24T02:49:00.2726452Z 250 │ }; 2026-10-24T02:49:00.2726595Z 251 │ }, [flow.setBranchQuery]); 2026-10-24T02:49:00.2726779Z ·  ─────────┬───────── 2026-10-24T02:49:00.2727098Z · ╰── Overly precise dependency `flow.setBranchQuery`, use `flow` instead 2026-10-24T02:49:00.2727353Z 252 │ 2026-10-24T02:49:00.2727470Z ╰──── 2026-10-24T02:49:00.2727961Z  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-24T02:49:00.2728670Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2728967Z 2026-10-24T02:49:00.2729402Z ⚠ 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-24T02:49:00.2729943Z ╭─[apps/server/src/provider/acp/AntigravityProtocol.ts:263:20] 2026-10-24T02:49:00.2730221Z 262 │ ...(update._meta !== undefined 2026-10-24T02:49:00.2730500Z 263 │ ? { _meta: Schema.is(Schema.Record(Schema.String, Schema.Json))(meta) ? meta : null } 2026-10-24T02:49:00.2730761Z ·  ───────── 2026-10-24T02:49:00.2730930Z 264 │ : {}), 2026-10-24T02:49:00.2731065Z ╰──── 2026-10-24T02:49:00.2731125Z 2026-10-24T02:49:00.2731394Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2731805Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:285:5] 2026-10-24T02:49:00.2732104Z 283 │ const [snoozeWakeTick, bumpSnoozeWakeTick] = useState(0); 2026-10-24T02:49:00.2732390Z 284 │ useEffect(() => { 2026-10-24T02:49:00.2732584Z ·  ────┬──── 2026-10-24T02:49:00.2732808Z · ╰── This is the containing effect 2026-10-24T02:49:00.2733032Z 285 │ setNow(new Date().toISOString()); 2026-10-24T02:49:00.2733212Z ·  ───┬── 2026-10-24T02:49:00.2733468Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2733779Z 286 │ const id = setInterval(() => setNow(new Date().toISOString()), 60_000); 2026-10-24T02:49:00.2733981Z ╰──── 2026-10-24T02:49:00.2734655Z  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-24T02:49:00.2735521Z  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-24T02:49:00.2735829Z 2026-10-24T02:49:00.2736037Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2736403Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:365:25] 2026-10-24T02:49:00.2736716Z 364 │ // range) the boundary string is identical and the chain would die. 2026-10-24T02:49:00.2736957Z 365 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T02:49:00.2737175Z ·  ───────┬────── 2026-10-24T02:49:00.2737465Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T02:49:00.2737753Z 366 │ const listItems = ((): readonly SidebarListItem[] => { 2026-10-24T02:49:00.2737935Z ╰──── 2026-10-24T02:49:00.2738293Z  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-24T02:49:00.2738888Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2739188Z 2026-10-24T02:49:00.2739362Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.2739698Z ╭─[apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx:356:53] 2026-10-24T02:49:00.2739961Z 355 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T02:49:00.2740347Z 356 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T02:49:00.2740681Z ·  ─────┬──── 2026-10-24T02:49:00.2740986Z · ╰── Cannot call impure function 2026-10-24T02:49:00.2741237Z 357 │ const id = setTimeout(() => { 2026-10-24T02:49:00.2741392Z ╰──── 2026-10-24T02:49:00.2741745Z  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-24T02:49:00.2742318Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.2742602Z 2026-10-24T02:49:00.2742830Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.2743193Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:773:7] 2026-10-24T02:49:00.2743458Z 772 │ if (settingsSheetPresentation.isActive) { 2026-10-24T02:49:00.2743715Z 773 │ settingsRoutePresentation.present(settingsRouteSession); 2026-10-24T02:49:00.2743966Z ·  ────────────┬──────────── 2026-10-24T02:49:00.2744252Z · ╰── Missing dependency `settingsRoutePresentation` 2026-10-24T02:49:00.2744485Z 774 │ } 2026-10-24T02:49:00.2744761Z 775 │ }, [settingsRoutePresentation.present, settingsRouteSession, settingsSheetPresentation.isActive]); 2026-10-24T02:49:00.2745088Z ·  ────────────────┬──────────────── 2026-10-24T02:49:00.2745500Z · ╰── Overly precise dependency `settingsRoutePresentation.present`, use `settingsRoutePresentation` instead 2026-10-24T02:49:00.2745834Z 776 │ 2026-10-24T02:49:00.2746059Z ╰──── 2026-10-24T02:49:00.2746543Z  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-24T02:49:00.2747251Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2747551Z 2026-10-24T02:49:00.2747714Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.2748023Z ╭─[apps/mobile/src/features/threads/ThreadComposer.tsx:391:5] 2026-10-24T02:49:00.2748349Z 387 │ typeof props.style.borderRadius === "number" ? props.style.borderRadius : 0; 2026-10-24T02:49:00.2748662Z 388 │ const animatedBorderRadius = useSharedValue(targetBorderRadius); 2026-10-24T02:49:00.2748911Z ·  ──────────┬───────── 2026-10-24T02:49:00.2749177Z · ╰── `animatedBorderRadius` originates here 2026-10-24T02:49:00.2749497Z 389 │ const shouldAnimate = props.animateLayout !== false && Platform.OS !== "android"; 2026-10-24T02:49:00.2749742Z 390 │ useLayoutEffect(() => { 2026-10-24T02:49:00.2749941Z 391 │ animatedBorderRadius.value = shouldAnimate 2026-10-24T02:49:00.2750177Z ·  ──────────┬───────── 2026-10-24T02:49:00.2750438Z · ╰── `animatedBorderRadius` cannot be modified 2026-10-24T02:49:00.2750693Z 392 │ ? withTiming(targetBorderRadius, { 2026-10-24T02:49:00.2750958Z ╰──── 2026-10-24T02:49:00.2751331Z  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-24T02:49:00.2751898Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.2752196Z 2026-10-24T02:49:00.2752490Z ⚠ eslint(no-unused-vars): Parameter 'stopSessions' is declared but never used. Unused parameters should start with a '_'. 2026-10-24T02:49:00.2752889Z ╭─[apps/server/src/provider/AntigravityAuth.ts:285:20] 2026-10-24T02:49:00.2753095Z 284 │ }, 2026-10-24T02:49:00.2753247Z 285 │ (effect, flow, stopSessions) => 2026-10-24T02:49:00.2753448Z ·  ──────┬───── 2026-10-24T02:49:00.2753716Z · ╰── 'stopSessions' is declared here 2026-10-24T02:49:00.2753940Z 286 │ effect.pipe( 2026-10-24T02:49:00.2754078Z ╰──── 2026-10-24T02:49:00.2754242Z  help: Consider removing this parameter. 2026-10-24T02:49:00.2754363Z 2026-10-24T02:49:00.2754626Z ⚠ eslint(no-unused-vars): Function 'promptResponseHasMissingXAiStopReason' is declared but never used. 2026-10-24T02:49:00.2755033Z ╭─[packages/provider-grok/src/server/xaiAcpExtension.ts:1620:10] 2026-10-24T02:49:00.2755250Z 1619 │ 2026-10-24T02:49:00.2755527Z 1620 │ function promptResponseHasMissingXAiStopReason(response: EffectAcpSchema.PromptResponse): boolean { 2026-10-24T02:49:00.2755872Z ·  ──────────────────┬────────────────── 2026-10-24T02:49:00.2756211Z · ╰── 'promptResponseHasMissingXAiStopReason' is declared here 2026-10-24T02:49:00.2756497Z 1621 │ const meta = response._meta; 2026-10-24T02:49:00.2756651Z ╰──── 2026-10-24T02:49:00.2756820Z  help: Consider removing this declaration. 2026-10-24T02:49:00.2756941Z 2026-10-24T02:49:00.2757202Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2757611Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:57:5] 2026-10-24T02:49:00.2757832Z 55 │ 2026-10-24T02:49:00.2757964Z 56 │ useEffect(() => { 2026-10-24T02:49:00.2758121Z ·  ────┬──── 2026-10-24T02:49:00.2758346Z · ╰── This is the containing effect 2026-10-24T02:49:00.2758555Z 57 │ setDecodedSize(null); 2026-10-24T02:49:00.2758730Z ·  ───────┬────── 2026-10-24T02:49:00.2759005Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2759247Z 58 │ }, [props.sourceKey]); 2026-10-24T02:49:00.2759396Z ╰──── 2026-10-24T02:49:00.2760102Z  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-24T02:49:00.2760972Z  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-24T02:49:00.2761281Z 2026-10-24T02:49:00.2761642Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2762084Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:61:5] 2026-10-24T02:49:00.2762307Z 59 │ 2026-10-24T02:49:00.2762434Z 60 │ useEffect(() => { 2026-10-24T02:49:00.2762590Z ·  ────┬──── 2026-10-24T02:49:00.2762813Z · ╰── This is the containing effect 2026-10-24T02:49:00.2763022Z 61 │ setFailedUri(null); 2026-10-24T02:49:00.2763191Z ·  ──────┬───── 2026-10-24T02:49:00.2763455Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2763697Z 62 │ }, [props.uri]); 2026-10-24T02:49:00.2763837Z ╰──── 2026-10-24T02:49:00.2764514Z  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-24T02:49:00.2765384Z  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-24T02:49:00.2765693Z 2026-10-24T02:49:00.2765915Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T02:49:00.2766281Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:7:10] 2026-10-24T02:49:00.2766576Z 6 │ import { parse, SvgAst, type JsxAST } from "react-native-svg"; 2026-10-24T02:49:00.2766900Z 7 │ import { ActivityIndicator, Pressable, StyleSheet, View, type ViewStyle } from "react-native"; 2026-10-24T02:49:00.2767184Z ·  ────────┬──────── 2026-10-24T02:49:00.2767442Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T02:49:00.2767653Z 8 │ 2026-10-24T02:49:00.2767767Z ╰──── 2026-10-24T02:49:00.2767928Z  help: Consider removing this import. 2026-10-24T02:49:00.2768042Z 2026-10-24T02:49:00.2768250Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2768607Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:58:7] 2026-10-24T02:49:00.2768838Z 57 │ setDecodedSize(null); 2026-10-24T02:49:00.2769002Z 58 │ }, [props.sourceKey]); 2026-10-24T02:49:00.2769175Z ·  ───────┬─────── 2026-10-24T02:49:00.2769506Z · ╰── Unnecessary dependency `props.sourceKey` 2026-10-24T02:49:00.2769724Z 59 │ 2026-10-24T02:49:00.2769838Z ╰──── 2026-10-24T02:49:00.2770228Z  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-24T02:49:00.2770829Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2771131Z 2026-10-24T02:49:00.2771339Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2771693Z ╭─[apps/mobile/src/features/threads/ThreadMarkdownImage.tsx:62:7] 2026-10-24T02:49:00.2771929Z 61 │ setFailedUri(null); 2026-10-24T02:49:00.2772086Z 62 │ }, [props.uri]); 2026-10-24T02:49:00.2772333Z ·  ────┬──── 2026-10-24T02:49:00.2772608Z · ╰── Unnecessary dependency `props.uri` 2026-10-24T02:49:00.2772816Z 63 │ 2026-10-24T02:49:00.2772929Z ╰──── 2026-10-24T02:49:00.2773285Z  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-24T02:49:00.2773878Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2774176Z 2026-10-24T02:49:00.2774440Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2774846Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:400:5] 2026-10-24T02:49:00.2775070Z 398 │ 2026-10-24T02:49:00.2775200Z 399 │ useEffect(() => { 2026-10-24T02:49:00.2775364Z ·  ────┬──── 2026-10-24T02:49:00.2775586Z · ╰── This is the containing effect 2026-10-24T02:49:00.2775819Z 400 │ setInspectorSelection((current) => { 2026-10-24T02:49:00.2776020Z ·  ──────────┬────────── 2026-10-24T02:49:00.2776299Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2776581Z 401 │ if (props.renderInspector === undefined) { 2026-10-24T02:49:00.2776753Z ╰──── 2026-10-24T02:49:00.2777419Z  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-24T02:49:00.2778292Z  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-24T02:49:00.2778596Z 2026-10-24T02:49:00.2778815Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T02:49:00.2779183Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:528:24] 2026-10-24T02:49:00.2779505Z 527 │ const inspectorHeaderInset = Platform.OS === "ios" ? 0 : safeAreaInsets.top; 2026-10-24T02:49:00.2779852Z 528 │ ╭─▶ const GitInspector = () => ( 2026-10-24T02:49:00.2780152Z 529 │ │ 2026-10-24T02:49:00.2781422Z 534 │ ╰─▶ ); 2026-10-24T02:49:00.2781644Z 535 │ const FilesInspector = () => 2026-10-24T02:49:00.2781797Z ╰──── 2026-10-24T02:49:00.2782078Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T02:49:00.2782296Z 2026-10-24T02:49:00.2782596Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T02:49:00.2783002Z ╭─[apps/mobile/src/features/threads/ThreadRouteScreen.tsx:535:26] 2026-10-24T02:49:00.2783219Z 534 │ ); 2026-10-24T02:49:00.2783461Z 535 │ ╭─▶ const FilesInspector = () => 2026-10-24T02:49:00.2783780Z 536 │ │ selectedThread !== null && selectedThreadCwd !== null ? ( 2026-10-24T02:49:00.2784046Z 537 │ │ 2026-10-24T02:49:00.2786160Z 545 │ ╰─▶ ) : null; 2026-10-24T02:49:00.2786460Z 546 │ const RouteInspector = () => props.renderInspector?.(inspectorHeaderInset); 2026-10-24T02:49:00.2786675Z ╰──── 2026-10-24T02:49:00.2786953Z  help: Move this component definition out of the parent component `ThreadRouteContent` and pass data as props. 2026-10-24T02:49:00.2787172Z 2026-10-24T02:49:00.2787438Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.2787831Z ╭─[packages/provider-grok/src/server/adapter.ts:408:7] 2026-10-24T02:49:00.2788027Z 407 │ 2026-10-24T02:49:00.2788160Z 408 │ const layer: Layer.Layer< 2026-10-24T02:49:00.2788320Z ·  ──┬── 2026-10-24T02:49:00.2788536Z · ╰── 'layer' is declared here 2026-10-24T02:49:00.2788764Z 409 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T02:49:00.2788931Z ╰──── 2026-10-24T02:49:00.2789093Z  help: Consider removing this declaration. 2026-10-24T02:49:00.2789213Z 2026-10-24T02:49:00.2789592Z ⚠ 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-24T02:49:00.2790085Z ╭─[packages/shared/src/otelEnvironment.ts:146:14] 2026-10-24T02:49:00.2790384Z 145 │ name, 2026-10-24T02:49:00.2790654Z 146 │ (raw) => Schema.decodeUnknownOption(OtlpProtocol)(raw.toLowerCase()), 2026-10-24T02:49:00.2790920Z ·  ────────────────────────── 2026-10-24T02:49:00.2791161Z 147 │ `${name} is not http/protobuf or http/json, ${NOT_EXPORTED}`, 2026-10-24T02:49:00.2791346Z ╰──── 2026-10-24T02:49:00.2791405Z 2026-10-24T02:49:00.2791670Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2792095Z ╭─[apps/mobile/src/features/threads/thread-inspector-content-stack.tsx:60:5] 2026-10-24T02:49:00.2792334Z 58 │ 2026-10-24T02:49:00.2792460Z 59 │ useEffect(() => { 2026-10-24T02:49:00.2792619Z ·  ────┬──── 2026-10-24T02:49:00.2792845Z · ╰── This is the containing effect 2026-10-24T02:49:00.2793071Z 60 │ setMountedModes((current) => { 2026-10-24T02:49:00.2793253Z ·  ───────┬─────── 2026-10-24T02:49:00.2793524Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2793775Z 61 │ if (current.has(props.mode)) { 2026-10-24T02:49:00.2793935Z ╰──── 2026-10-24T02:49:00.2794599Z  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-24T02:49:00.2795469Z  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-24T02:49:00.2795782Z 2026-10-24T02:49:00.2795955Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.2796288Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:697:76] 2026-10-24T02:49:00.2796646Z 696 │ const [snoozeGateClock, setSnoozeGateClock] = useState(() => ({ thread, now: Date.now() })); 2026-10-24T02:49:00.2797007Z 697 │ if (snoozeGateClock.thread !== thread) setSnoozeGateClock({ thread, now: Date.now() }); 2026-10-24T02:49:00.2797322Z ·  ─────┬──── 2026-10-24T02:49:00.2797653Z · ╰── Cannot call impure function 2026-10-24T02:49:00.2797972Z 698 │ const snoozeGateNow = new Date(snoozeGateClock.now).toISOString(); 2026-10-24T02:49:00.2798180Z ╰──── 2026-10-24T02:49:00.2798523Z  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-24T02:49:00.2799097Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.2799383Z 2026-10-24T02:49:00.2799550Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.2799879Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:718:71] 2026-10-24T02:49:00.2800160Z 717 │ const snoozePresets = useMemo( 2026-10-24T02:49:00.2800443Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T02:49:00.2800839Z ·  ─────┬──── 2026-10-24T02:49:00.2801200Z · ╰── Cannot call impure function 2026-10-24T02:49:00.2801493Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T02:49:00.2801685Z ╰──── 2026-10-24T02:49:00.2802027Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.2802593Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.2802876Z 2026-10-24T02:49:00.2803060Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:49:00.2803408Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:719:6] 2026-10-24T02:49:00.2803753Z 718 │ () => (swipeActions.secondary === "snooze" ? resolveSnoozePresets(new Date()) : ([] as const)), 2026-10-24T02:49:00.2804052Z 719 │ [props.snoozePresetMinute, swipeActions.secondary], 2026-10-24T02:49:00.2804278Z ·  ────────────┬─────────── 2026-10-24T02:49:00.2804570Z · ╰── Unnecessary dependency `props.snoozePresetMinute` 2026-10-24T02:49:00.2804803Z 720 │ ); 2026-10-24T02:49:00.2804923Z ╰──── 2026-10-24T02:49:00.2805296Z  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-24T02:49:00.2805913Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2806216Z 2026-10-24T02:49:00.2806403Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:49:00.2806744Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:765:7] 2026-10-24T02:49:00.2806978Z 764 │ thread.pinnedAt, 2026-10-24T02:49:00.2807134Z 765 │ variant, 2026-10-24T02:49:00.2807286Z ·  ───┬─── 2026-10-24T02:49:00.2807519Z · ╰── Unnecessary dependency `variant` 2026-10-24T02:49:00.2807722Z 766 │ ], 2026-10-24T02:49:00.2807841Z ╰──── 2026-10-24T02:49:00.2808222Z  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-24T02:49:00.2808836Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2809136Z 2026-10-24T02:49:00.2809335Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.2809694Z ╭─[apps/mobile/src/features/threads/thread-list-v2-items.tsx:1215:21] 2026-10-24T02:49:00.2810002Z 1214 │ {providerDrivers.slice(0, -1).map((driver, index) => ( 2026-10-24T02:49:00.2810310Z 1215 │ 2026-10-24T02:49:00.2810583Z ·  ────────────────────────── 2026-10-24T02:49:00.2810820Z 1216 │ 2026-10-24T02:49:00.2811095Z ╰──── 2026-10-24T02:49:00.2811343Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T02:49:00.2811503Z 2026-10-24T02:49:00.2811773Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2812179Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:361:7] 2026-10-24T02:49:00.2812482Z 355 │ }, [cancelledIncomingShareId, navigation, props.incomingShareId]); 2026-10-24T02:49:00.2812704Z 356 │ useEffect(() => { 2026-10-24T02:49:00.2812866Z ·  ────┬──── 2026-10-24T02:49:00.2813087Z · ╰── This is the containing effect 2026-10-24T02:49:00.2813322Z 357 │ if (!isReturningToProjectPicker) { 2026-10-24T02:49:00.2813495Z 358 │ return; 2026-10-24T02:49:00.2813637Z 359 │ } 2026-10-24T02:49:00.2813808Z 360 │ if (requestedInitialProjectAvailable) { 2026-10-24T02:49:00.2814021Z 361 │ setIsReturningToProjectPicker(false); 2026-10-24T02:49:00.2814246Z ·  ──────────────┬────────────── 2026-10-24T02:49:00.2814542Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2814783Z 362 │ return; 2026-10-24T02:49:00.2814913Z ╰──── 2026-10-24T02:49:00.2815577Z  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-24T02:49:00.2816447Z  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-24T02:49:00.2816761Z 2026-10-24T02:49:00.2817026Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2817429Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:504:9] 2026-10-24T02:49:00.2817648Z 447 │ 2026-10-24T02:49:00.2817776Z 448 │ useEffect(() => { 2026-10-24T02:49:00.2817936Z ·  ────┬──── 2026-10-24T02:49:00.2818154Z · ╰── This is the containing effect 2026-10-24T02:49:00.2818399Z 449 │ if (props.pendingTaskId || props.draftId) { 2026-10-24T02:49:00.2818582Z 450 │ return; 2026-10-24T02:49:00.2818715Z 451 │ } 2026-10-24T02:49:00.2818933Z 452 │ if (lastInitialProjectRefRef.current !== props.initialProjectRef) { 2026-10-24T02:49:00.2819233Z 453 │ lastInitialProjectRefRef.current = props.initialProjectRef; 2026-10-24T02:49:00.2819491Z 454 │ appliedInitialProjectKeyRef.current = null; 2026-10-24T02:49:00.2819670Z 455 │ } 2026-10-24T02:49:00.2819884Z 456 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T02:49:00.2820206Z 457 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T02:49:00.2820459Z 458 │ if (initialEnvironmentId && initialProjectId) { 2026-10-24T02:49:00.2820655Z 459 │ const directProject = 2026-10-24T02:49:00.2820820Z 460 │ projects.find( 2026-10-24T02:49:00.2820975Z 461 │ (project) => 2026-10-24T02:49:00.2821240Z 462 │ project.environmentId === initialEnvironmentId && project.id === initialProjectId, 2026-10-24T02:49:00.2821578Z 463 │ ) ?? null; 2026-10-24T02:49:00.2821756Z 464 │ 2026-10-24T02:49:00.2821888Z 465 │ if (directProject) { 2026-10-24T02:49:00.2822118Z 466 │ // Apply the route's project once. Re-applying on every change would 2026-10-24T02:49:00.2822414Z 467 │ // instantly revert environment/project switches made in the picker. 2026-10-24T02:49:00.2822730Z 468 │ const directProjectKey = `${directProject.environmentId}:${directProject.id}`; 2026-10-24T02:49:00.2823047Z 469 │ if (appliedInitialProjectKeyRef.current === directProjectKey) { 2026-10-24T02:49:00.2823264Z 470 │ return; 2026-10-24T02:49:00.2823406Z 471 │ } 2026-10-24T02:49:00.2823575Z 472 │ if (props.initialProjectRef?.branch) { 2026-10-24T02:49:00.2823757Z 473 │ if ( 2026-10-24T02:49:00.2823981Z 474 │ selectedProject?.environmentId !== directProject.environmentId || 2026-10-24T02:49:00.2824251Z 475 │ selectedProject.id !== directProject.id 2026-10-24T02:49:00.2824436Z 476 │ ) { 2026-10-24T02:49:00.2824596Z 477 │ setProject(directProject); 2026-10-24T02:49:00.2824768Z 478 │ return; 2026-10-24T02:49:00.2824909Z 479 │ } 2026-10-24T02:49:00.2825067Z 480 │ if (!flow.draftKey) return; 2026-10-24T02:49:00.2825310Z 481 │ // The route completes checkout before mounting this composer. Local 2026-10-24T02:49:00.2825609Z 482 │ // mode reuses an existing worktree; worktree mode would create another. 2026-10-24T02:49:00.2825964Z 483 │ updateComposerDraftSettings(flow.draftKey, { 2026-10-24T02:49:00.2826176Z 484 │ workspaceSelection: { 2026-10-24T02:49:00.2826346Z 485 │ mode: "local", 2026-10-24T02:49:00.2826548Z 486 │ branch: props.initialProjectRef.branch, 2026-10-24T02:49:00.2826817Z 487 │ worktreePath: props.initialProjectRef.worktreePath ?? null, 2026-10-24T02:49:00.2827061Z 488 │ startFromOrigin: false, 2026-10-24T02:49:00.2827223Z 489 │ }, 2026-10-24T02:49:00.2827360Z 490 │ }); 2026-10-24T02:49:00.2827496Z 491 │ } 2026-10-24T02:49:00.2827698Z 492 │ appliedInitialProjectKeyRef.current = directProjectKey; 2026-10-24T02:49:00.2827905Z 493 │ if ( 2026-10-24T02:49:00.2828124Z 494 │ selectedProject?.environmentId === directProject.environmentId && 2026-10-24T02:49:00.2828380Z 495 │ selectedProject.id === directProject.id 2026-10-24T02:49:00.2828556Z 496 │ ) { 2026-10-24T02:49:00.2828693Z 497 │ return; 2026-10-24T02:49:00.2828829Z 498 │ } 2026-10-24T02:49:00.2828978Z 499 │ setProject(directProject); 2026-10-24T02:49:00.2829152Z 500 │ return; 2026-10-24T02:49:00.2829289Z 501 │ } 2026-10-24T02:49:00.2829412Z 502 │ 2026-10-24T02:49:00.2829551Z 503 │ if (projects.length > 0) { 2026-10-24T02:49:00.2829754Z 504 │ setIsReturningToProjectPicker(true); 2026-10-24T02:49:00.2829982Z ·  ──────────────┬────────────── 2026-10-24T02:49:00.2830305Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2830539Z 505 │ } 2026-10-24T02:49:00.2830660Z ╰──── 2026-10-24T02:49:00.2831326Z  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-24T02:49:00.2832321Z  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-24T02:49:00.2832703Z 2026-10-24T02:49:00.2832969Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2833378Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:604:5] 2026-10-24T02:49:00.2833594Z 545 │ 2026-10-24T02:49:00.2833724Z 546 │ useEffect(() => { 2026-10-24T02:49:00.2833881Z ·  ────┬──── 2026-10-24T02:49:00.2834101Z · ╰── This is the containing effect 2026-10-24T02:49:00.2834338Z 547 │ const shareId = props.incomingShareId; 2026-10-24T02:49:00.2834534Z 548 │ const draftKey = flow.draftKey; 2026-10-24T02:49:00.2834748Z 549 │ const destinationProject = selectedProject; 2026-10-24T02:49:00.2835015Z 550 │ const initialEnvironmentId = props.initialProjectRef?.environmentId; 2026-10-24T02:49:00.2835304Z 551 │ const initialProjectId = props.initialProjectRef?.projectId; 2026-10-24T02:49:00.2835537Z 552 │ const selectedProjectMatchesRoute = 2026-10-24T02:49:00.2835730Z 553 │ !initialEnvironmentId || 2026-10-24T02:49:00.2835901Z 554 │ !initialProjectId || 2026-10-24T02:49:00.2836130Z 555 │ (destinationProject?.environmentId === initialEnvironmentId && 2026-10-24T02:49:00.2836382Z 556 │ destinationProject.id === initialProjectId); 2026-10-24T02:49:00.2836569Z 557 │ if ( 2026-10-24T02:49:00.2836706Z 558 │ !shareId || 2026-10-24T02:49:00.2836851Z 559 │ !draftKey || 2026-10-24T02:49:00.2837015Z 560 │ !destinationProject || 2026-10-24T02:49:00.2837205Z 561 │ !selectedProjectMatchesRoute || 2026-10-24T02:49:00.2837413Z 562 │ cancelledIncomingShareId === shareId 2026-10-24T02:49:00.2837580Z 563 │ ) { 2026-10-24T02:49:00.2837712Z 564 │ return; 2026-10-24T02:49:00.2837843Z 565 │ } 2026-10-24T02:49:00.2838008Z 566 │ const importKey = `${shareId}:${draftKey}`; 2026-10-24T02:49:00.2838185Z 567 │ if ( 2026-10-24T02:49:00.2838368Z 568 │ startedShareImportKeyRef.current === importKey || 2026-10-24T02:49:00.2838616Z 569 │ cancellingShareImportKeyRef.current === importKey 2026-10-24T02:49:00.2838801Z 570 │ ) { 2026-10-24T02:49:00.2838931Z 571 │ return; 2026-10-24T02:49:00.2839061Z 572 │ } 2026-10-24T02:49:00.2839185Z 573 │ 2026-10-24T02:49:00.2839316Z 574 │ if (!incomingShare) { 2026-10-24T02:49:00.2839613Z 575 │ if (isIncomingShareUnavailable && alertedUnavailableIncomingShareIdRef.current !== shareId) { 2026-10-24T02:49:00.2839958Z 576 │ alertedUnavailableIncomingShareIdRef.current = shareId; 2026-10-24T02:49:00.2840204Z 577 │ Dialog.alert( 2026-10-24T02:49:00.2840380Z 578 │ "Shared content unavailable", 2026-10-24T02:49:00.2840660Z 579 │ "The shared content is no longer in the inbox. You can continue editing this task draft.", 2026-10-24T02:49:00.2840902Z 580 │ ); 2026-10-24T02:49:00.2841030Z 581 │ } 2026-10-24T02:49:00.2841162Z 582 │ return; 2026-10-24T02:49:00.2841292Z 583 │ } 2026-10-24T02:49:00.2841412Z 584 │ 2026-10-24T02:49:00.2841534Z 585 │ if ( 2026-10-24T02:49:00.2841766Z 586 │ incomingShare.attachments.some((attachment) => attachment.type === "file") && 2026-10-24T02:49:00.2842045Z 587 │ selectedEnvironmentServerConfig === null 2026-10-24T02:49:00.2842405Z 588 │ ) { 2026-10-24T02:49:00.2842610Z 589 │ return; 2026-10-24T02:49:00.2842741Z 590 │ } 2026-10-24T02:49:00.2842864Z 591 │ 2026-10-24T02:49:00.2843064Z 592 │ if (alertedUnavailableIncomingShareIdRef.current === shareId) { 2026-10-24T02:49:00.2843340Z 593 │ alertedUnavailableIncomingShareIdRef.current = null; 2026-10-24T02:49:00.2843538Z 594 │ } 2026-10-24T02:49:00.2843712Z 595 │ startedShareImportKeyRef.current = importKey; 2026-10-24T02:49:00.2843910Z 596 │ const draftBackup = 2026-10-24T02:49:00.2844190Z 597 │ shareImportDraftBackupRef.current.get(importKey) ?? getComposerDraftSnapshot(draftKey); 2026-10-24T02:49:00.2844524Z 598 │ shareImportDraftBackupRef.current.set(importKey, draftBackup); 2026-10-24T02:49:00.2844767Z 599 │ const importToken = Symbol(importKey); 2026-10-24T02:49:00.2844957Z 600 │ let didReserveShare = false; 2026-10-24T02:49:00.2845144Z 601 │ let didConsumeShare = false; 2026-10-24T02:49:00.2845332Z 602 │ let needsDraftRestore = false; 2026-10-24T02:49:00.2845548Z 603 │ activeShareImportTokenRef.current = importToken; 2026-10-24T02:49:00.2845762Z 604 │ setImportingShareKey(importKey); 2026-10-24T02:49:00.2845962Z ·  ──────────┬───────── 2026-10-24T02:49:00.2846238Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2846485Z 605 │ void (async () => { 2026-10-24T02:49:00.2846629Z ╰──── 2026-10-24T02:49:00.2847311Z  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-24T02:49:00.2848181Z  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-24T02:49:00.2848491Z 2026-10-24T02:49:00.2848701Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2849061Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:524:5] 2026-10-24T02:49:00.2849299Z 523 │ props.initialProjectRef, 2026-10-24T02:49:00.2849474Z 524 │ props.incomingShareId, 2026-10-24T02:49:00.2849661Z ·  ──────────┬────────── 2026-10-24T02:49:00.2849932Z · ╰── Unnecessary dependency `props.incomingShareId` 2026-10-24T02:49:00.2850220Z 525 │ props.pendingTaskId, 2026-10-24T02:49:00.2850459Z ╰──── 2026-10-24T02:49:00.2850855Z  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-24T02:49:00.2851453Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2851755Z 2026-10-24T02:49:00.2851978Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.2852349Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:543:5] 2026-10-24T02:49:00.2852631Z 542 │ loadedBranchesProjectKeyRef.current = projectKey; 2026-10-24T02:49:00.2852834Z 543 │ flow.loadBranches(); 2026-10-24T02:49:00.2852999Z ·  ──┬─ 2026-10-24T02:49:00.2853219Z · ╰── Missing dependency `flow` 2026-10-24T02:49:00.2853459Z 544 │ }, [flow.loadBranches, selectedProject]); 2026-10-24T02:49:00.2853661Z ·  ────────┬──────── 2026-10-24T02:49:00.2853968Z · ╰── Overly precise dependency `flow.loadBranches`, use `flow` instead 2026-10-24T02:49:00.2854217Z 545 │ 2026-10-24T02:49:00.2854332Z ╰──── 2026-10-24T02:49:00.2854819Z  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-24T02:49:00.2855528Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2855829Z 2026-10-24T02:49:00.2856041Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2856398Z ╭─[apps/mobile/src/features/threads/NewTaskDraftScreen.tsx:766:5] 2026-10-24T02:49:00.2856625Z 765 │ flow.draftKey, 2026-10-24T02:49:00.2856791Z 766 │ hasImportedIncomingShare, 2026-10-24T02:49:00.2856991Z ·  ────────────┬─────────── 2026-10-24T02:49:00.2857275Z · ╰── Unnecessary dependency `hasImportedIncomingShare` 2026-10-24T02:49:00.2857519Z 767 │ incomingShare, 2026-10-24T02:49:00.2857687Z 768 │ isIncomingShareInboxLoading, 2026-10-24T02:49:00.2857892Z ·  ─────────────┬───────────── 2026-10-24T02:49:00.2858192Z · ╰── Unnecessary dependency `isIncomingShareInboxLoading` 2026-10-24T02:49:00.2858464Z 769 │ isIncomingShareUnavailable, 2026-10-24T02:49:00.2858640Z 770 │ props.incomingShareId, 2026-10-24T02:49:00.2858833Z 771 │ props.initialProjectRef?.environmentId, 2026-10-24T02:49:00.2859038Z 772 │ props.initialProjectRef?.projectId, 2026-10-24T02:49:00.2859225Z 773 │ releaseShareReservation, 2026-10-24T02:49:00.2859387Z 774 │ reserveShare, 2026-10-24T02:49:00.2859556Z 775 │ selectedEnvironmentServerConfig, 2026-10-24T02:49:00.2859736Z 776 │ selectedProject, 2026-10-24T02:49:00.2859894Z 777 │ shareImportAttempt, 2026-10-24T02:49:00.2860109Z ·  ─────────┬──────── 2026-10-24T02:49:00.2860378Z · ╰── Unnecessary dependency `shareImportAttempt` 2026-10-24T02:49:00.2860605Z 778 │ ]); 2026-10-24T02:49:00.2860727Z ╰──── 2026-10-24T02:49:00.2861177Z  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-24T02:49:00.2861815Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2862116Z 2026-10-24T02:49:00.2862383Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2862797Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T02:49:00.2863036Z 259 │ .join("|"); 2026-10-24T02:49:00.2863184Z 260 │ useEffect(() => { 2026-10-24T02:49:00.2863347Z ·  ────┬──── 2026-10-24T02:49:00.2863574Z · ╰── This is the containing effect 2026-10-24T02:49:00.2863782Z 261 │ stop(); 2026-10-24T02:49:00.2863931Z ·  ──┬─ 2026-10-24T02:49:00.2864186Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2864426Z 262 │ }, [orderVersion]); 2026-10-24T02:49:00.2864566Z ╰──── 2026-10-24T02:49:00.2865237Z  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-24T02:49:00.2866329Z  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-24T02:49:00.2866820Z 2026-10-24T02:49:00.2867161Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.2867731Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:261:5] 2026-10-24T02:49:00.2868103Z 260 │ useEffect(() => { 2026-10-24T02:49:00.2868335Z 261 │ stop(); 2026-10-24T02:49:00.2868564Z ·  ──┬─ 2026-10-24T02:49:00.2868884Z · ╰── Missing dependency `stop` 2026-10-24T02:49:00.2869195Z 262 │ }, [orderVersion]); 2026-10-24T02:49:00.2869441Z ·  ──────┬───── 2026-10-24T02:49:00.2869819Z · ╰── Unnecessary dependency `orderVersion` 2026-10-24T02:49:00.2870182Z 263 │ useEffect( 2026-10-24T02:49:00.2870380Z ╰──── 2026-10-24T02:49:00.2871156Z  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-24T02:49:00.2872288Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2872663Z 2026-10-24T02:49:00.2872818Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2873140Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:96:9] 2026-10-24T02:49:00.2873386Z 95 │ const latest = useRef(props); 2026-10-24T02:49:00.2873561Z 96 │ latest.current = props; 2026-10-24T02:49:00.2873758Z ·  ───┬──────┬─── 2026-10-24T02:49:00.2874182Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.2874529Z · ╰── This value is a ref 2026-10-24T02:49:00.2874723Z 97 │ const gesture = useMemo( 2026-10-24T02:49:00.2874871Z ╰──── 2026-10-24T02:49:00.2875406Z  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-24T02:49:00.2876132Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2876417Z 2026-10-24T02:49:00.2876569Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2876893Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:104:18] 2026-10-24T02:49:00.2877135Z 103 │ .runOnJS(true) 2026-10-24T02:49:00.2877329Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T02:49:00.2877567Z ·  ───────────────┬────────────── 2026-10-24T02:49:00.2877902Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.2878234Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2878442Z ╰──── 2026-10-24T02:49:00.2887248Z  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-24T02:49:00.2887987Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2888271Z 2026-10-24T02:49:00.2888424Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2888740Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:105:19] 2026-10-24T02:49:00.2889011Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T02:49:00.2889266Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2889563Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T02:49:00.2889930Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.2890288Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2890479Z ╰──── 2026-10-24T02:49:00.2891007Z  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-24T02:49:00.2891728Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2892009Z 2026-10-24T02:49:00.2892155Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2892468Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:106:16] 2026-10-24T02:49:00.2892880Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2893192Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2893476Z ·  ──────────────────────────┬───────────────────────── 2026-10-24T02:49:00.2893831Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.2894155Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T02:49:00.2894349Z ╰──── 2026-10-24T02:49:00.2894874Z  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-24T02:49:00.2895605Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2895894Z 2026-10-24T02:49:00.2896039Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2896354Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:107:21] 2026-10-24T02:49:00.2896648Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2896913Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T02:49:00.2897192Z ·  ───────────────────────┬────────────────────── 2026-10-24T02:49:00.2897544Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.2897811Z 108 │ [props.disabled], 2026-10-24T02:49:00.2897962Z ╰──── 2026-10-24T02:49:00.2898491Z  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-24T02:49:00.2899211Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2899494Z 2026-10-24T02:49:00.2899641Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2899957Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:249:9] 2026-10-24T02:49:00.2900268Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T02:49:00.2900586Z 249 │ latest.current = { rows, planners, moveThread }; 2026-10-24T02:49:00.2900853Z ·  ───┬──────┬─── 2026-10-24T02:49:00.2901156Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.2901451Z · ╰── This value is a ref 2026-10-24T02:49:00.2901634Z 250 │ 2026-10-24T02:49:00.2901753Z ╰──── 2026-10-24T02:49:00.2902282Z  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-24T02:49:00.2903002Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2903287Z 2026-10-24T02:49:00.2903440Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.2903760Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:247:22] 2026-10-24T02:49:00.2904056Z 246 │ const [preview, setPreview] = useState(null); 2026-10-24T02:49:00.2904309Z 247 │ const translateY = useRef(new Animated.Value(0)).current; 2026-10-24T02:49:00.2904575Z ·  ──────────────────┬────────────────── 2026-10-24T02:49:00.2904875Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.2905155Z 248 │ const latest = useRef({ rows, planners, moveThread }); 2026-10-24T02:49:00.2905336Z ╰──── 2026-10-24T02:49:00.2906513Z  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-24T02:49:00.2907250Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.2907533Z 2026-10-24T02:49:00.2907709Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.2908041Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:324:16] 2026-10-24T02:49:00.2908281Z 323 │ update(0); 2026-10-24T02:49:00.2908444Z 324 │ let last = performance.now(); 2026-10-24T02:49:00.2908649Z ·  ────────┬──────── 2026-10-24T02:49:00.2908907Z · ╰── Cannot call impure function 2026-10-24T02:49:00.2909123Z 325 │ const tick = () => { 2026-10-24T02:49:00.2909264Z ╰──── 2026-10-24T02:49:00.2909626Z  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-24T02:49:00.2910234Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.2910523Z 2026-10-24T02:49:00.2910716Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T02:49:00.2911066Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:99:15] 2026-10-24T02:49:00.2911298Z  98 │ () => 2026-10-24T02:49:00.2911438Z  99 │ Gesture.Pan() 2026-10-24T02:49:00.2911709Z ·  ─┬─ 2026-10-24T02:49:00.2912106Z · ╰── `Pan` may be a component 2026-10-24T02:49:00.2912325Z 100 │ .enabled(!props.disabled) 2026-10-24T02:49:00.2912481Z ╰──── 2026-10-24T02:49:00.2912824Z  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-24T02:49:00.2913541Z  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-24T02:49:00.2913949Z 2026-10-24T02:49:00.2914139Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:49:00.2914498Z ╭─[apps/mobile/src/features/threads/ThreadArrangementSheet.tsx:108:5] 2026-10-24T02:49:00.2914741Z 103 │ .runOnJS(true) 2026-10-24T02:49:00.2914933Z 104 │ .onStart(() => latest.current.onStart()) 2026-10-24T02:49:00.2915142Z ·  ───┬── 2026-10-24T02:49:00.2915688Z · ╰── 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-24T02:49:00.2916215Z 105 │ .onUpdate((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2916491Z 106 │ .onEnd((event) => latest.current.onMove(event.translationY)) 2026-10-24T02:49:00.2916755Z 107 │ .onFinalize((_, success) => latest.current.onEnd(!success)), 2026-10-24T02:49:00.2916967Z 108 │ [props.disabled], 2026-10-24T02:49:00.2917146Z ·  ────────┬─────── 2026-10-24T02:49:00.2917438Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.2917678Z 109 │ ); 2026-10-24T02:49:00.2917798Z ╰──── 2026-10-24T02:49:00.2918061Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:49:00.2918585Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2918881Z 2026-10-24T02:49:00.2919053Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.2919420Z ╭─[packages/provider-opencode/src/server/OpenCodeRuntime.environment.test.ts:53:14] 2026-10-24T02:49:00.2919676Z 52 │ 2026-10-24T02:49:00.2919809Z 53 │ for (const {} of [ 2026-10-24T02:49:00.2919968Z ·  ── 2026-10-24T02:49:00.2920159Z 54 │ { healthy: true }, 2026-10-24T02:49:00.2920301Z ╰──── 2026-10-24T02:49:00.2920592Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.2920821Z 2026-10-24T02:49:00.2921033Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T02:49:00.2921340Z ╭─[packages/contracts/src/rpc.ts:297:8] 2026-10-24T02:49:00.2921531Z 296 │ } from "./device.ts"; 2026-10-24T02:49:00.2921707Z 297 │ import {} from "./previewAutomation.ts"; 2026-10-24T02:49:00.2921890Z ·  ── 2026-10-24T02:49:00.2922034Z 298 │ import { 2026-10-24T02:49:00.2922161Z ╰──── 2026-10-24T02:49:00.2922398Z  help: Remove empty braces 2026-10-24T02:49:00.2922542Z 2026-10-24T02:49:00.2922758Z ⚠ eslint(no-unused-vars): Function 'summarizePayload' is declared but never used. 2026-10-24T02:49:00.2923106Z ╭─[packages/provider-acp/src/server/nativeLogging.ts:22:10] 2026-10-24T02:49:00.2923310Z 21 │ 2026-10-24T02:49:00.2923533Z 22 │ function summarizePayload(payload: unknown): Readonly> { 2026-10-24T02:49:00.2923789Z ·  ────────┬─────── 2026-10-24T02:49:00.2924046Z · ╰── 'summarizePayload' is declared here 2026-10-24T02:49:00.2924304Z 23 │ if (payload === null) return { valueType: "null" }; 2026-10-24T02:49:00.2924482Z ╰──── 2026-10-24T02:49:00.2924644Z  help: Consider removing this declaration. 2026-10-24T02:49:00.2924771Z 2026-10-24T02:49:00.2924971Z ⚠ eslint(require-yield): This generator function does not have `yield` 2026-10-24T02:49:00.2925309Z ╭─[packages/provider-acp/src/server/mcpOverAcpBridge.ts:81:78] 2026-10-24T02:49:00.2925525Z  80 │ 2026-10-24T02:49:00.2925873Z  81 │ ╭─▶ export const makeAcpMcpOverAcpBridge = Effect.fn("AcpMcpOverAcpBridge.make")(function* ( 2026-10-24T02:49:00.2926257Z  82 │ │ options: AcpMcpOverAcpBridgeOptions, 2026-10-24T02:49:00.2926516Z  83 │ │ ): Effect.fn.Return { 2026-10-24T02:49:00.2926824Z  84 │ │ const fetchImplementation = options.fetchImplementation ?? fetch; 2026-10-24T02:49:00.2927134Z  85 │ │ const connections = new Map(); 2026-10-24T02:49:00.2927359Z  86 │ │ 2026-10-24T02:49:00.2927665Z  87 │ │ const connectionFor = (connectionId: string): Effect.Effect => 2026-10-24T02:49:00.2927985Z  88 │ │ Effect.suspend(() => { 2026-10-24T02:49:00.2928238Z  89 │ │ const connection = connections.get(connectionId); 2026-10-24T02:49:00.2928496Z  90 │ │ return connection === undefined 2026-10-24T02:49:00.2928840Z  91 │ │ ? Effect.fail(new AcpMcpOverAcpError(`Unknown MCP-over-ACP connection "${connectionId}".`)) 2026-10-24T02:49:00.2929159Z  92 │ │ : Effect.succeed(connection); 2026-10-24T02:49:00.2929446Z  93 │ │ }); 2026-10-24T02:49:00.2929610Z  94 │ │ 2026-10-24T02:49:00.2929795Z  95 │ │ const send = ( 2026-10-24T02:49:00.2930002Z  96 │ │ connection: Connection, 2026-10-24T02:49:00.2930257Z  97 │ │ message: unknown, 2026-10-24T02:49:00.2930529Z  98 │ │ ): Effect.Effect, AcpMcpOverAcpError> => 2026-10-24T02:49:00.2930814Z  99 │ │ connection.mutex.withPermits(1)( 2026-10-24T02:49:00.2931051Z 100 │ │ Effect.gen(function* () { 2026-10-24T02:49:00.2931302Z 101 │ │ const body = JSON.stringify(message); 2026-10-24T02:49:00.2931580Z 102 │ │ if (Buffer.byteLength(body) > MAX_MESSAGE_BYTES) { 2026-10-24T02:49:00.2931952Z 103 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("MCP-over-ACP message exceeds 8 MiB.")); 2026-10-24T02:49:00.2932335Z 104 │ │ } 2026-10-24T02:49:00.2932618Z 105 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T02:49:00.2932862Z 106 │ │ try: (signal) => 2026-10-24T02:49:00.2933111Z 107 │ │ fetchImplementation(options.endpoint, { 2026-10-24T02:49:00.2933364Z 108 │ │ method: "POST", 2026-10-24T02:49:00.2933573Z 109 │ │ signal, 2026-10-24T02:49:00.2933778Z 110 │ │ headers: { 2026-10-24T02:49:00.2934022Z 111 │ │ "content-type": "application/json", 2026-10-24T02:49:00.2934308Z 112 │ │ accept: "application/json, text/event-stream", 2026-10-24T02:49:00.2934601Z 113 │ │ authorization: options.authorization, 2026-10-24T02:49:00.2934876Z 114 │ │ ...(connection.sessionId === null 2026-10-24T02:49:00.2935114Z 115 │ │ ? {} 2026-10-24T02:49:00.2935370Z 116 │ │ : { "mcp-session-id": connection.sessionId }), 2026-10-24T02:49:00.2935657Z 117 │ │ ...(connection.protocolVersion === null 2026-10-24T02:49:00.2935892Z 118 │ │ ? {} 2026-10-24T02:49:00.2936172Z 119 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T02:49:00.2936429Z 120 │ │ }, 2026-10-24T02:49:00.2936627Z 121 │ │ body, 2026-10-24T02:49:00.2936818Z 122 │ │ }), 2026-10-24T02:49:00.2937033Z 123 │ │ catch: bridgeError, 2026-10-24T02:49:00.2937236Z 124 │ │ }); 2026-10-24T02:49:00.2937555Z 125 │ │ connection.sessionId = response.headers.get("mcp-session-id") ?? connection.sessionId; 2026-10-24T02:49:00.2937866Z 126 │ │ if (!response.ok) { 2026-10-24T02:49:00.2938091Z 127 │ │ yield* Effect.promise( 2026-10-24T02:49:00.2938399Z 128 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T02:49:00.2938662Z 129 │ │ ); 2026-10-24T02:49:00.2938878Z 130 │ │ return yield* Effect.fail( 2026-10-24T02:49:00.2939221Z 131 │ │ new AcpMcpOverAcpError(`T3 Code MCP endpoint responded with HTTP ${response.status}.`), 2026-10-24T02:49:00.2939514Z 132 │ │ ); 2026-10-24T02:49:00.2939691Z 133 │ │ } 2026-10-24T02:49:00.2940005Z 134 │ │ const payloads = [...(yield* Stream.runCollect(responsePayloads(response, bridgeError)))]; 2026-10-24T02:49:00.2940372Z 135 │ │ for (const payload of payloads) { 2026-10-24T02:49:00.2940726Z 136 │ │ connection.protocolVersion = protocolVersionOf(payload) ?? connection.protocolVersion; 2026-10-24T02:49:00.2941019Z 137 │ │ } 2026-10-24T02:49:00.2941221Z 138 │ │ return payloads; 2026-10-24T02:49:00.2941462Z 139 │ │ }).pipe(Effect.mapError(bridgeError)), 2026-10-24T02:49:00.2941678Z 140 │ │ ); 2026-10-24T02:49:00.2941933Z 141 │ │ 2026-10-24T02:49:00.2942251Z 142 │ │ const disconnect = Effect.fn("mcpOverAcpBridge.disconnect")(function* ( 2026-10-24T02:49:00.2942563Z 143 │ │ request: AcpSchema.DisconnectMcpRequest, 2026-10-24T02:49:00.2942898Z 144 │ │ ): Effect.fn.Return { 2026-10-24T02:49:00.2943248Z 145 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T02:49:00.2943545Z 146 │ │ connections.delete(request.connectionId); 2026-10-24T02:49:00.2943807Z 147 │ │ const sessionId = connection.sessionId; 2026-10-24T02:49:00.2944046Z 148 │ │ if (sessionId !== null) { 2026-10-24T02:49:00.2944309Z 149 │ │ const response = yield* Effect.tryPromise({ 2026-10-24T02:49:00.2944557Z 150 │ │ try: (signal) => 2026-10-24T02:49:00.2944806Z 151 │ │ fetchImplementation(options.endpoint, { 2026-10-24T02:49:00.2945049Z 152 │ │ method: "DELETE", 2026-10-24T02:49:00.2945259Z 153 │ │ signal, 2026-10-24T02:49:00.2945460Z 154 │ │ headers: { 2026-10-24T02:49:00.2945702Z 155 │ │ authorization: options.authorization, 2026-10-24T02:49:00.2946058Z 156 │ │ "mcp-session-id": sessionId, 2026-10-24T02:49:00.2946326Z 157 │ │ ...(connection.protocolVersion === null 2026-10-24T02:49:00.2946562Z 158 │ │ ? {} 2026-10-24T02:49:00.2946844Z 159 │ │ : { "mcp-protocol-version": connection.protocolVersion }), 2026-10-24T02:49:00.2947101Z 160 │ │ }, 2026-10-24T02:49:00.2947287Z 161 │ │ }), 2026-10-24T02:49:00.2947485Z 162 │ │ catch: bridgeError, 2026-10-24T02:49:00.2947677Z 163 │ │ }); 2026-10-24T02:49:00.2947910Z 164 │ │ if (!response.ok && response.status !== 404) { 2026-10-24T02:49:00.2948164Z 165 │ │ return yield* Effect.fail( 2026-10-24T02:49:00.2948404Z 166 │ │ new AcpMcpOverAcpError( 2026-10-24T02:49:00.2948714Z 167 │ │ `T3 Code MCP endpoint rejected disconnect with HTTP ${response.status}.`, 2026-10-24T02:49:00.2948980Z 168 │ │ ), 2026-10-24T02:49:00.2949165Z 169 │ │ ); 2026-10-24T02:49:00.2949345Z 170 │ │ } 2026-10-24T02:49:00.2949547Z 171 │ │ yield* Effect.promise( 2026-10-24T02:49:00.2949850Z 172 │ │ () => response.body?.cancel().catch(() => undefined) ?? Promise.resolve(), 2026-10-24T02:49:00.2950143Z 173 │ │ ); 2026-10-24T02:49:00.2950318Z 174 │ │ } 2026-10-24T02:49:00.2950498Z 175 │ │ return {}; 2026-10-24T02:49:00.2950674Z 176 │ │ }); 2026-10-24T02:49:00.2950839Z 177 │ │ 2026-10-24T02:49:00.2951007Z 178 │ │ return { 2026-10-24T02:49:00.2951283Z 179 │ │ connect: Effect.fn("mcpOverAcpBridge.connect")(function* (request) { 2026-10-24T02:49:00.2951686Z 180 │ │ if (request.serverId !== "t3-code") { 2026-10-24T02:49:00.2951993Z 181 │ │ return yield* Effect.fail( 2026-10-24T02:49:00.2952307Z 182 │ │ new AcpMcpOverAcpError(`Unknown ACP MCP server "${request.serverId}".`), 2026-10-24T02:49:00.2952577Z 183 │ │ ); 2026-10-24T02:49:00.2952750Z 184 │ │ } 2026-10-24T02:49:00.2952978Z 185 │ │ if (connections.size >= MAX_CONNECTIONS) { 2026-10-24T02:49:00.2953329Z 186 │ │ return yield* Effect.fail(new AcpMcpOverAcpError("Too many MCP-over-ACP connections.")); 2026-10-24T02:49:00.2953614Z 187 │ │ } 2026-10-24T02:49:00.2953864Z 188 │ │ const connectionId = yield* options.allocateConnectionId; 2026-10-24T02:49:00.2954150Z 189 │ │ connections.set(connectionId, { 2026-10-24T02:49:00.2954405Z 190 │ │ mutex: yield* Semaphore.make(1), 2026-10-24T02:49:00.2954636Z 191 │ │ sessionId: null, 2026-10-24T02:49:00.2954855Z 192 │ │ protocolVersion: null, 2026-10-24T02:49:00.2955076Z 193 │ │ nextRequestId: 0, 2026-10-24T02:49:00.2955272Z 194 │ │ }); 2026-10-24T02:49:00.2955475Z 195 │ │ return { connectionId }; 2026-10-24T02:49:00.2955672Z 196 │ │ }), 2026-10-24T02:49:00.2955939Z 197 │ │ message: Effect.fn("mcpOverAcpBridge.message")(function* (request) { 2026-10-24T02:49:00.2956292Z 198 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T02:49:00.2956589Z 199 │ │ const id = ++connection.nextRequestId; 2026-10-24T02:49:00.2956858Z 200 │ │ const payloads = yield* send(connection, { 2026-10-24T02:49:00.2957096Z 201 │ │ jsonrpc: "2.0", 2026-10-24T02:49:00.2957293Z 202 │ │ id, 2026-10-24T02:49:00.2957498Z 203 │ │ method: request.method, 2026-10-24T02:49:00.2957786Z 204 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T02:49:00.2958027Z 205 │ │ }); 2026-10-24T02:49:00.2958319Z 206 │ │ const response = payloads.find((payload) => asEnvelope(payload)?.id === id); 2026-10-24T02:49:00.2958634Z 207 │ │ const envelope = asEnvelope(response); 2026-10-24T02:49:00.2958969Z 208 │ │ if (envelope === null) { 2026-10-24T02:49:00.2959235Z 209 │ │ return yield* Effect.fail( 2026-10-24T02:49:00.2959547Z 210 │ │ new AcpMcpOverAcpError("MCP server did not return a matching response."), 2026-10-24T02:49:00.2959818Z 211 │ │ ); 2026-10-24T02:49:00.2959992Z 212 │ │ } 2026-10-24T02:49:00.2960252Z 213 │ │ if (envelope.error !== undefined) { 2026-10-24T02:49:00.2960584Z 214 │ │ return yield* Effect.fail(new AcpMcpOverAcpError(errorMessage(envelope.error))); 2026-10-24T02:49:00.2960857Z 215 │ │ } 2026-10-24T02:49:00.2961124Z 216 │ │ return (envelope.result ?? null) as AcpSchema.MessageMcpResponse; 2026-10-24T02:49:00.2961385Z 217 │ │ }), 2026-10-24T02:49:00.2961681Z 218 │ │ notification: Effect.fn("mcpOverAcpBridge.notification")(function* (request) { 2026-10-24T02:49:00.2962041Z 219 │ │ const connection = yield* connectionFor(request.connectionId); 2026-10-24T02:49:00.2962314Z 220 │ │ yield* send(connection, { 2026-10-24T02:49:00.2962415Z 221 │ │ jsonrpc: "2.0", 2026-10-24T02:49:00.2962523Z 222 │ │ method: request.method, 2026-10-24T02:49:00.2962683Z 223 │ │ ...(request.params == null ? {} : { params: request.params }), 2026-10-24T02:49:00.2962766Z 224 │ │ }); 2026-10-24T02:49:00.2962844Z 225 │ │ }), 2026-10-24T02:49:00.2962940Z 226 │ │ disconnect, 2026-10-24T02:49:00.2963052Z 227 │ │ dispose: Effect.suspend(() => 2026-10-24T02:49:00.2963152Z 228 │ │ Effect.forEach( 2026-10-24T02:49:00.2963261Z 229 │ │ [...connections.keys()], 2026-10-24T02:49:00.2963437Z 230 │ │ (connectionId) => disconnect({ connectionId }).pipe(Effect.ignore), 2026-10-24T02:49:00.2963538Z 231 │ │ { discard: true }, 2026-10-24T02:49:00.2963620Z 232 │ │ ), 2026-10-24T02:49:00.2963698Z 233 │ │ ), 2026-10-24T02:49:00.2963775Z 234 │ │ }; 2026-10-24T02:49:00.2963905Z 235 │ ╰─▶ }); 2026-10-24T02:49:00.2963964Z ╰──── 2026-10-24T02:49:00.2964230Z  help: Add a `yield` expression inside the generator body, or convert it to a regular function if iteration behavior is not needed. 2026-10-24T02:49:00.2964237Z 2026-10-24T02:49:00.2964619Z ⚠ 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-24T02:49:00.2964738Z ╭─[packages/contracts/src/auth.test.ts:17:12] 2026-10-24T02:49:00.2964899Z 16 │ it("decodes legacy review credentials without offering them in new grants", () => { 2026-10-24T02:49:00.2965071Z 17 │ expect(Schema.decodeUnknownSync(AuthEnvironmentScopes)(["review:write"])).toEqual([ 2026-10-24T02:49:00.2965180Z ·  ──────────────────────── 2026-10-24T02:49:00.2965251Z 18 │ "review:write", 2026-10-24T02:49:00.2965305Z ╰──── 2026-10-24T02:49:00.2965307Z 2026-10-24T02:49:00.2965761Z ⚠ 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-24T02:49:00.2965917Z ╭─[packages/contracts/src/auth.test.ts:20:18] 2026-10-24T02:49:00.2965979Z 19 │ ]); 2026-10-24T02:49:00.2966141Z 20 │ expect(() => Schema.decodeUnknownSync(AuthGrantScopes)(["review:write"])).toThrow(); 2026-10-24T02:49:00.2966253Z ·  ──────────────────────── 2026-10-24T02:49:00.2966388Z 21 │ expect(AuthStandardClientScopes).not.toContain("review:write"); 2026-10-24T02:49:00.2966443Z ╰──── 2026-10-24T02:49:00.2966445Z 2026-10-24T02:49:00.2966815Z ⚠ 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-24T02:49:00.2966932Z ╭─[packages/contracts/src/auth.test.ts:58:21] 2026-10-24T02:49:00.2967109Z 57 │ it("ignores unknown response permissions without falling back to broader scopes", () => { 2026-10-24T02:49:00.2967237Z 58 │ const session = Schema.decodeUnknownSync(AuthSessionState)({ 2026-10-24T02:49:00.2967348Z ·  ──────────────────────── 2026-10-24T02:49:00.2967417Z 59 │ authenticated: true, 2026-10-24T02:49:00.2967473Z ╰──── 2026-10-24T02:49:00.2967475Z 2026-10-24T02:49:00.2967740Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2967896Z ╭─[apps/mobile/src/features/threads/use-worktree-setup.ts:30:40] 2026-10-24T02:49:00.2968059Z 28 │ const snapshot = resolveWorktreeSetupSnapshot(input.threadId, query.data, live); 2026-10-24T02:49:00.2968135Z 29 │ useEffect(() => { 2026-10-24T02:49:00.2968213Z ·  ────┬──── 2026-10-24T02:49:00.2968349Z · ╰── This is the containing effect 2026-10-24T02:49:00.2968473Z 30 │ if (snapshot && snapshot !== live) setHeld({ key, snapshot }); 2026-10-24T02:49:00.2968579Z ·  ───┬─── 2026-10-24T02:49:00.2968780Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2968855Z 31 │ }, [key, live, snapshot]); 2026-10-24T02:49:00.2968907Z ╰──── 2026-10-24T02:49:00.2969527Z  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-24T02:49:00.2969864Z  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-24T02:49:00.2969867Z 2026-10-24T02:49:00.2970167Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.2970313Z ╭─[packages/provider-opencode/src/server/adapter.ts:3755:7] 2026-10-24T02:49:00.2970369Z 3754 │ 2026-10-24T02:49:00.2970577Z 3755 │ const layer: Layer.Layer = 2026-10-24T02:49:00.2970653Z ·  ──┬── 2026-10-24T02:49:00.2970863Z · ╰── 'layer' is declared here 2026-10-24T02:49:00.2970964Z 3756 │ Layer.effect( 2026-10-24T02:49:00.2971023Z ╰──── 2026-10-24T02:49:00.2971133Z  help: Consider removing this declaration. 2026-10-24T02:49:00.2971136Z 2026-10-24T02:49:00.2971427Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T02:49:00.2971585Z ╭─[apps/web/src/components/settings/SettingInheritance.tsx:163:24] 2026-10-24T02:49:00.2971647Z 162 │ keys, 2026-10-24T02:49:00.2971723Z 163 │ overridingProjects = [], 2026-10-24T02:49:00.2971810Z ·  ── 2026-10-24T02:49:00.2971878Z 164 │ onClearOverrides, 2026-10-24T02:49:00.2971936Z ╰──── 2026-10-24T02:49:00.2972267Z  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-24T02:49:00.2972273Z 2026-10-24T02:49:00.2972537Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.2972678Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2139:5] 2026-10-24T02:49:00.2972735Z 2137 │ ); 2026-10-24T02:49:00.2972804Z 2138 │ useEffect(() => { 2026-10-24T02:49:00.2972879Z ·  ────┬──── 2026-10-24T02:49:00.2973015Z · ╰── This is the containing effect 2026-10-24T02:49:00.2973089Z 2139 │ setExpandedVideo(null); 2026-10-24T02:49:00.2973174Z ·  ────────┬─────── 2026-10-24T02:49:00.2973359Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.2973438Z 2140 │ setExpandedFile(null); 2026-10-24T02:49:00.2973490Z ╰──── 2026-10-24T02:49:00.2974094Z  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-24T02:49:00.2974424Z  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-24T02:49:00.2974427Z 2026-10-24T02:49:00.2974660Z ⚠ eslint(no-unused-vars): Identifier 'isMarkdownFileLinkLabel' is imported but never used. 2026-10-24T02:49:00.2974800Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:66:10] 2026-10-24T02:49:00.2974942Z 65 │ import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; 2026-10-24T02:49:00.2975085Z 66 │ import { isMarkdownFileLinkLabel } from "@t3tools/shared/markdownLinks"; 2026-10-24T02:49:00.2975185Z ·  ───────────┬─────────── 2026-10-24T02:49:00.2975355Z · ╰── 'isMarkdownFileLinkLabel' is imported here 2026-10-24T02:49:00.2975514Z 67 │ import { formatAttachmentSize } from "@t3tools/client-runtime/state/attachments"; 2026-10-24T02:49:00.2975569Z ╰──── 2026-10-24T02:49:00.2975672Z  help: Consider removing this import. 2026-10-24T02:49:00.2975674Z 2026-10-24T02:49:00.2975885Z ⚠ eslint(no-unused-vars): Identifier 'createContext' is imported but never used. 2026-10-24T02:49:00.2976101Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:92:3] 2026-10-24T02:49:00.2976211Z 91 │ import { 2026-10-24T02:49:00.2976279Z 92 │ createContext, 2026-10-24T02:49:00.2976358Z ·  ──────┬────── 2026-10-24T02:49:00.2976496Z · ╰── 'createContext' is imported here 2026-10-24T02:49:00.2976555Z 93 │ memo, 2026-10-24T02:49:00.2976609Z ╰──── 2026-10-24T02:49:00.2976709Z  help: Consider removing this import. 2026-10-24T02:49:00.2976712Z 2026-10-24T02:49:00.2976925Z ⚠ eslint(no-unused-vars): Identifier 'ActivityIndicator' is imported but never used. 2026-10-24T02:49:00.2977063Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:108:3] 2026-10-24T02:49:00.2977124Z 107 │ import { 2026-10-24T02:49:00.2977194Z 108 │ ActivityIndicator, 2026-10-24T02:49:00.2977281Z ·  ────────┬──────── 2026-10-24T02:49:00.2977439Z · ╰── 'ActivityIndicator' is imported here 2026-10-24T02:49:00.2977499Z 109 │ Image, 2026-10-24T02:49:00.2977554Z ╰──── 2026-10-24T02:49:00.2977649Z  help: Consider removing this import. 2026-10-24T02:49:00.2977652Z 2026-10-24T02:49:00.2977855Z ⚠ eslint(no-unused-vars): Identifier 'ScrollView' is imported but never used. 2026-10-24T02:49:00.2977991Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:115:3] 2026-10-24T02:49:00.2978055Z 114 │ Pressable, 2026-10-24T02:49:00.2978118Z 115 │ ScrollView, 2026-10-24T02:49:00.2978192Z ·  ─────┬──── 2026-10-24T02:49:00.2978328Z · ╰── 'ScrollView' is imported here 2026-10-24T02:49:00.2978393Z 116 │ StyleSheet, 2026-10-24T02:49:00.2978452Z ╰──── 2026-10-24T02:49:00.2978552Z  help: Consider removing this import. 2026-10-24T02:49:00.2978555Z 2026-10-24T02:49:00.2978760Z ⚠ eslint(no-unused-vars): Identifier 'NativeText' is imported but never used. 2026-10-24T02:49:00.2978897Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:117:11] 2026-10-24T02:49:00.2978957Z 116 │ StyleSheet, 2026-10-24T02:49:00.2979027Z 117 │ Text as NativeText, 2026-10-24T02:49:00.2979109Z ·  ─────┬──── 2026-10-24T02:49:00.2979249Z · ╰── 'NativeText' is imported here 2026-10-24T02:49:00.2979315Z 118 │ type ColorValue, 2026-10-24T02:49:00.2979370Z ╰──── 2026-10-24T02:49:00.2979468Z  help: Consider removing this import. 2026-10-24T02:49:00.2979470Z 2026-10-24T02:49:00.2979693Z ⚠ eslint(no-unused-vars): Identifier 'tryOpenExternalUrl' is imported but never used. 2026-10-24T02:49:00.2979829Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:140:10] 2026-10-24T02:49:00.2979968Z 139 │ import { copyTextWithHaptic } from "../../lib/copyTextWithHaptic"; 2026-10-24T02:49:00.2980131Z 140 │ import { tryOpenExternalUrl } from "../../lib/openExternalUrl"; 2026-10-24T02:49:00.2980225Z ·  ─────────┬──────── 2026-10-24T02:49:00.2980380Z · ╰── 'tryOpenExternalUrl' is imported here 2026-10-24T02:49:00.2980531Z 141 │ import { downloadAndShareAttachment } from "../../lib/attachmentDownload"; 2026-10-24T02:49:00.2980586Z ╰──── 2026-10-24T02:49:00.2980684Z  help: Consider removing this import. 2026-10-24T02:49:00.2980687Z 2026-10-24T02:49:00.2980982Z ⚠ eslint(no-unused-vars): Identifier 'faviconUrlForOrigin' is imported but never used. 2026-10-24T02:49:00.2981154Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:143:10] 2026-10-24T02:49:00.2981292Z 142 │ import { hasWideMarkdownBlock } from "../../lib/wideMarkdownBlocks"; 2026-10-24T02:49:00.2981419Z 143 │ import { faviconUrlForOrigin } from "@t3tools/shared/favicon"; 2026-10-24T02:49:00.2981510Z ·  ─────────┬───────── 2026-10-24T02:49:00.2981670Z · ╰── 'faviconUrlForOrigin' is imported here 2026-10-24T02:49:00.2981732Z 144 │ import { 2026-10-24T02:49:00.2981788Z ╰──── 2026-10-24T02:49:00.2981882Z  help: Consider removing this import. 2026-10-24T02:49:00.2981885Z 2026-10-24T02:49:00.2982106Z ⚠ eslint(no-unused-vars): Identifier 'MediaVideoPlayer' is imported but never used. 2026-10-24T02:49:00.2982245Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:157:10] 2026-10-24T02:49:00.2982395Z 156 │ import { VideoAttachmentTile } from "../../components/VideoAttachmentTile"; 2026-10-24T02:49:00.2982532Z 157 │ import { MediaVideoPlayer } from "../../components/MediaVideoPlayer"; 2026-10-24T02:49:00.2982620Z ·  ────────┬─────── 2026-10-24T02:49:00.2982774Z · ╰── 'MediaVideoPlayer' is imported here 2026-10-24T02:49:00.2982916Z 158 │ import { resolveMarkdownMediaPreview } from "../../lib/markdownMedia"; 2026-10-24T02:49:00.2982971Z ╰──── 2026-10-24T02:49:00.2983066Z  help: Consider removing this import. 2026-10-24T02:49:00.2983068Z 2026-10-24T02:49:00.2983293Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoPreviewUri' is imported but never used. 2026-10-24T02:49:00.2983434Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:161:3] 2026-10-24T02:49:00.2983524Z 160 │ attachmentVideoPreviewSource, 2026-10-24T02:49:00.2983596Z 161 │ mediaVideoPreviewUri, 2026-10-24T02:49:00.2983682Z ·  ──────────┬───────── 2026-10-24T02:49:00.2983838Z · ╰── 'mediaVideoPreviewUri' is imported here 2026-10-24T02:49:00.2983914Z 162 │ mediaVideoThumbnailKey, 2026-10-24T02:49:00.2983966Z ╰──── 2026-10-24T02:49:00.2984063Z  help: Consider removing this import. 2026-10-24T02:49:00.2984066Z 2026-10-24T02:49:00.2984291Z ⚠ eslint(no-unused-vars): Identifier 'mediaVideoThumbnailKey' is imported but never used. 2026-10-24T02:49:00.2984426Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:162:3] 2026-10-24T02:49:00.2984604Z 161 │ mediaVideoPreviewUri, 2026-10-24T02:49:00.2984714Z 162 │ mediaVideoThumbnailKey, 2026-10-24T02:49:00.2984805Z ·  ───────────┬────────── 2026-10-24T02:49:00.2984967Z · ╰── 'mediaVideoThumbnailKey' is imported here 2026-10-24T02:49:00.2985048Z 163 │ type MediaVideoPreviewSource, 2026-10-24T02:49:00.2985102Z ╰──── 2026-10-24T02:49:00.2985199Z  help: Consider removing this import. 2026-10-24T02:49:00.2985201Z 2026-10-24T02:49:00.2985417Z ⚠ eslint(no-unused-vars): Type 'MediaVideoPreviewSource' is imported but never used. 2026-10-24T02:49:00.2985548Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:163:8] 2026-10-24T02:49:00.2985621Z 162 │ mediaVideoThumbnailKey, 2026-10-24T02:49:00.2985703Z 163 │ type MediaVideoPreviewSource, 2026-10-24T02:49:00.2985807Z ·  ───────────┬─────────── 2026-10-24T02:49:00.2986146Z · ╰── 'MediaVideoPreviewSource' is imported here 2026-10-24T02:49:00.2986280Z 164 │ } from "../../lib/videoPreviewSource"; 2026-10-24T02:49:00.2986364Z ╰──── 2026-10-24T02:49:00.2986510Z  help: Consider removing this import. 2026-10-24T02:49:00.2986513Z 2026-10-24T02:49:00.2986821Z ⚠ eslint(no-unused-vars): Type 'ReviewDiffTheme' is imported but never used. 2026-10-24T02:49:00.2987009Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:171:15] 2026-10-24T02:49:00.2987190Z 170 │ import { parseReviewCommentMessageSegments } from "../review/reviewCommentSelection"; 2026-10-24T02:49:00.2987333Z 171 │ import type { ReviewDiffTheme } from "../review/shikiReviewHighlighter"; 2026-10-24T02:49:00.2987429Z ·  ───────┬─────── 2026-10-24T02:49:00.2987589Z · ╰── 'ReviewDiffTheme' is imported here 2026-10-24T02:49:00.2987650Z 172 │ import { 2026-10-24T02:49:00.2987705Z ╰──── 2026-10-24T02:49:00.2987801Z  help: Consider removing this import. 2026-10-24T02:49:00.2987804Z 2026-10-24T02:49:00.2988035Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownFontSizes' is imported but never used. 2026-10-24T02:49:00.2988169Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:186:3] 2026-10-24T02:49:00.2988230Z 185 │ import { 2026-10-24T02:49:00.2988305Z 186 │ resolveMarkdownFontSizes, 2026-10-24T02:49:00.2988398Z ·  ────────────┬─────────── 2026-10-24T02:49:00.2988570Z · ╰── 'resolveMarkdownFontSizes' is imported here 2026-10-24T02:49:00.2988663Z 187 │ resolveNativeMarkdownTypography, 2026-10-24T02:49:00.2988716Z ╰──── 2026-10-24T02:49:00.2988813Z  help: Consider removing this import. 2026-10-24T02:49:00.2988815Z 2026-10-24T02:49:00.2989040Z ⚠ eslint(no-unused-vars): Identifier 'markdownLinkIconSource' is imported but never used. 2026-10-24T02:49:00.2989175Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:191:10] 2026-10-24T02:49:00.2989310Z 190 │ import { PierreEntryIcon } from "../../components/PierreEntryIcon"; 2026-10-24T02:49:00.2989445Z 191 │ import { markdownLinkIconSource } from "../../lib/markdownLinkIcons"; 2026-10-24T02:49:00.2989544Z ·  ───────────┬────────── 2026-10-24T02:49:00.2989710Z · ╰── 'markdownLinkIconSource' is imported here 2026-10-24T02:49:00.2989877Z 192 │ import { 2026-10-24T02:49:00.2989976Z ╰──── 2026-10-24T02:49:00.2990108Z  help: Consider removing this import. 2026-10-24T02:49:00.2990110Z 2026-10-24T02:49:00.2990375Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownInlineCodePresentation' is imported but never used. 2026-10-24T02:49:00.2990509Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:194:3] 2026-10-24T02:49:00.2990586Z 193 │ normalizeNativeMarkdownUrl, 2026-10-24T02:49:00.2990686Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T02:49:00.2990800Z ·  ──────────────────┬────────────────── 2026-10-24T02:49:00.2991000Z · ╰── 'resolveMarkdownInlineCodePresentation' is imported here 2026-10-24T02:49:00.2991073Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T02:49:00.2991131Z ╰──── 2026-10-24T02:49:00.2991233Z  help: Consider removing this import. 2026-10-24T02:49:00.2991239Z 2026-10-24T02:49:00.2991468Z ⚠ eslint(no-unused-vars): Identifier 'resolveMarkdownLinkIcon' is imported but never used. 2026-10-24T02:49:00.2991599Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:195:3] 2026-10-24T02:49:00.2991697Z 194 │ resolveMarkdownInlineCodePresentation, 2026-10-24T02:49:00.2991772Z 195 │ resolveMarkdownLinkIcon, 2026-10-24T02:49:00.2991864Z ·  ───────────┬─────────── 2026-10-24T02:49:00.2992021Z · ╰── 'resolveMarkdownLinkIcon' is imported here 2026-10-24T02:49:00.2992111Z 196 │ resolveMarkdownLinkPresentation, 2026-10-24T02:49:00.2992166Z ╰──── 2026-10-24T02:49:00.2992262Z  help: Consider removing this import. 2026-10-24T02:49:00.2992265Z 2026-10-24T02:49:00.2992500Z ⚠ eslint(no-unused-vars): Identifier 'useMarkdownCodeHighlight' is imported but never used. 2026-10-24T02:49:00.2992638Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:234:10] 2026-10-24T02:49:00.2992743Z 233 │ import { ThreadMcpApp } from "./McpAppWebView"; 2026-10-24T02:49:00.2992893Z 234 │ import { useMarkdownCodeHighlight } from "./markdownCodeHighlightState"; 2026-10-24T02:49:00.2992995Z ·  ────────────┬─────────── 2026-10-24T02:49:00.2993166Z · ╰── 'useMarkdownCodeHighlight' is imported here 2026-10-24T02:49:00.2993227Z 235 │ import { 2026-10-24T02:49:00.2993282Z ╰──── 2026-10-24T02:49:00.2993376Z  help: Consider removing this import. 2026-10-24T02:49:00.2993378Z 2026-10-24T02:49:00.2993598Z ⚠ eslint(no-unused-vars): Identifier 'useAssetUrlState' is imported but never used. 2026-10-24T02:49:00.2993738Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:238:3] 2026-10-24T02:49:00.2993805Z 237 │ useAssetUrl, 2026-10-24T02:49:00.2993873Z 238 │ useAssetUrlState, 2026-10-24T02:49:00.2993957Z ·  ────────┬─────── 2026-10-24T02:49:00.2994103Z · ╰── 'useAssetUrlState' is imported here 2026-10-24T02:49:00.2994174Z 239 │ useRefreshAssetUrl, 2026-10-24T02:49:00.2994226Z ╰──── 2026-10-24T02:49:00.2994325Z  help: Consider removing this import. 2026-10-24T02:49:00.2994330Z 2026-10-24T02:49:00.2994535Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2994761Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2141:7] 2026-10-24T02:49:00.2994870Z 2140 │ setExpandedFile(null); 2026-10-24T02:49:00.2995029Z 2141 │ }, [props.environmentId, props.threadId, props.contentPresentation.kind]); 2026-10-24T02:49:00.2995267Z ·  ─────────┬───────── ───────┬────── ───────────────┬────────────── 2026-10-24T02:49:00.2995566Z · │ │ ╰── Unnecessary dependency `props.contentPresentation.kind` 2026-10-24T02:49:00.2995770Z · │ ╰── Unnecessary dependency `props.threadId` 2026-10-24T02:49:00.2995937Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T02:49:00.2996090Z 2142 │ const horizontalPadding = props.layoutVariant === "split" ? 20 : 16; 2026-10-24T02:49:00.2996153Z ╰──── 2026-10-24T02:49:00.2996457Z  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-24T02:49:00.2996783Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2996786Z 2026-10-24T02:49:00.2996988Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2997128Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2609:7] 2026-10-24T02:49:00.2997233Z 2608 │ reportHeaderMaterialVisibility(false); 2026-10-24T02:49:00.2997351Z 2609 │ }, [feedThreadKey, reportHeaderMaterialVisibility]); 2026-10-24T02:49:00.2997437Z ·  ──────┬────── 2026-10-24T02:49:00.2997595Z · ╰── Unnecessary dependency `feedThreadKey` 2026-10-24T02:49:00.2997653Z 2610 │ 2026-10-24T02:49:00.2997709Z ╰──── 2026-10-24T02:49:00.2998002Z  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-24T02:49:00.2998316Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2998319Z 2026-10-24T02:49:00.2998521Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.2998660Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2625:7] 2026-10-24T02:49:00.2998796Z 2624 │ } 2026-10-24T02:49:00.2998962Z 2625 │ }, [listMountKey, props.contentInsetEndAdjustment, listRef]); 2026-10-24T02:49:00.2999044Z ·  ──────┬───── 2026-10-24T02:49:00.2999196Z · ╰── Unnecessary dependency `listMountKey` 2026-10-24T02:49:00.2999251Z 2626 │ 2026-10-24T02:49:00.2999308Z ╰──── 2026-10-24T02:49:00.2999603Z  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-24T02:49:00.2999918Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.2999921Z 2026-10-24T02:49:00.3000161Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3000298Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:2782:7] 2026-10-24T02:49:00.3000357Z 2781 │ } 2026-10-24T02:49:00.3000545Z 2782 │ }, [expandedTurnIds, expandedWorkGroups, expandedWorkRows, settleDisclosureAfterLayout]); 2026-10-24T02:49:00.3000756Z ·  ───────┬─────── ─────────┬──────── ────────┬─────── 2026-10-24T02:49:00.3001014Z · │ │ ╰── Unnecessary dependency `expandedWorkRows` 2026-10-24T02:49:00.3001225Z · │ ╰── Unnecessary dependency `expandedWorkGroups` 2026-10-24T02:49:00.3001392Z · ╰── Unnecessary dependency `expandedTurnIds` 2026-10-24T02:49:00.3001453Z 2783 │ 2026-10-24T02:49:00.3001505Z ╰──── 2026-10-24T02:49:00.3001803Z  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-24T02:49:00.3002118Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3002122Z 2026-10-24T02:49:00.3002306Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:49:00.3002445Z ╭─[apps/mobile/src/features/threads/ThreadFeed.tsx:613:9] 2026-10-24T02:49:00.3002503Z 612 │ }; 2026-10-24T02:49:00.3002623Z 613 │ }, [props.environmentId, attachment.id, httpBaseUrl]), 2026-10-24T02:49:00.3002825Z ·  ─────────┬───────── ──────┬────── ─────┬───── 2026-10-24T02:49:00.3003073Z · │ │ ╰── Unnecessary dependency `httpBaseUrl` 2026-10-24T02:49:00.3003275Z · │ ╰── Unnecessary dependency `attachment.id` 2026-10-24T02:49:00.3003439Z · ╰── Unnecessary dependency `props.environmentId` 2026-10-24T02:49:00.3003496Z 614 │ ); 2026-10-24T02:49:00.3003551Z ╰──── 2026-10-24T02:49:00.3003869Z  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-24T02:49:00.3004252Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3004293Z 2026-10-24T02:49:00.3004563Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3004700Z ╭─[apps/server/src/telemetry/AnalyticsService.ts:340:7] 2026-10-24T02:49:00.3004760Z 339 │ 2026-10-24T02:49:00.3004863Z 340 │ const layerTest = AnalyticsService.layerTest; 2026-10-24T02:49:00.3004942Z ·  ────┬──── 2026-10-24T02:49:00.3005078Z · ╰── 'layerTest' is declared here 2026-10-24T02:49:00.3005133Z ╰──── 2026-10-24T02:49:00.3005238Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3005241Z 2026-10-24T02:49:00.3005406Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3005558Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:174:5] 2026-10-24T02:49:00.3005707Z 170 │ const expandedAngle = props.collapsedDirection === "right" ? 90 : 180; 2026-10-24T02:49:00.3005845Z 171 │ const rotation = useSharedValue(props.expanded ? expandedAngle : 0); 2026-10-24T02:49:00.3005925Z ·  ────┬─── 2026-10-24T02:49:00.3006059Z · ╰── `rotation` originates here 2026-10-24T02:49:00.3006115Z 172 │ 2026-10-24T02:49:00.3006185Z 173 │ useLayoutEffect(() => { 2026-10-24T02:49:00.3006320Z 174 │ rotation.value = withTiming(props.expanded ? expandedAngle : 0, { 2026-10-24T02:49:00.3006397Z ·  ────┬─── 2026-10-24T02:49:00.3006539Z · ╰── `rotation` cannot be modified 2026-10-24T02:49:00.3006643Z 175 │ duration: THREAD_DISCLOSURE_TRANSITION_MS, 2026-10-24T02:49:00.3006699Z ╰──── 2026-10-24T02:49:00.3006970Z  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-24T02:49:00.3007280Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3007283Z 2026-10-24T02:49:00.3007480Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3007631Z ╭─[apps/mobile/src/features/threads/thread-work-log.tsx:1246:23] 2026-10-24T02:49:00.3007702Z 1245 │ 2026-10-24T02:49:00.3011083Z ·  ──────┬───── 2026-10-24T02:49:00.3011234Z · ╰── 'stopSessions' is declared here 2026-10-24T02:49:00.3011300Z 250 │ effect.pipe( 2026-10-24T02:49:00.3011357Z ╰──── 2026-10-24T02:49:00.3011464Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3011467Z 2026-10-24T02:49:00.3011932Z ⚠ 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-24T02:49:00.3012071Z ╭─[packages/contracts/src/composerContext.test.ts:181:18] 2026-10-24T02:49:00.3012213Z 180 │ it("sends a message without the records the wire cannot carry", () => { 2026-10-24T02:49:00.3012399Z 181 │ const wire = Schema.encodeUnknownSync(Schema.toCodecJson(OrchestrationMessageContext))({ 2026-10-24T02:49:00.3012510Z ·  ──────────────────────── 2026-10-24T02:49:00.3012575Z 182 │ version: 1, 2026-10-24T02:49:00.3012631Z ╰──── 2026-10-24T02:49:00.3012633Z 2026-10-24T02:49:00.3012792Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3012957Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T02:49:00.3013013Z  86 │ 2026-10-24T02:49:00.3013111Z  87 │ const cardCoverage = props.cardCoverage; 2026-10-24T02:49:00.3013195Z ·  ──────┬───── 2026-10-24T02:49:00.3013335Z · ╰── `cardCoverage` originates here 2026-10-24T02:49:00.3013415Z  88 │ const barHeightRef = useRef(0); 2026-10-24T02:49:00.3013498Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T02:49:00.3013587Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T02:49:00.3013682Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T02:49:00.3013750Z  92 │ if (!cardCoverage) { 2026-10-24T02:49:00.3013815Z  93 │ return; 2026-10-24T02:49:00.3013875Z  94 │ } 2026-10-24T02:49:00.3014115Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T02:49:00.3014240Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T02:49:00.3014304Z  97 │ return; 2026-10-24T02:49:00.3014361Z  98 │ } 2026-10-24T02:49:00.3014444Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:49:00.3014527Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:49:00.3014609Z ·  ──────┬───── 2026-10-24T02:49:00.3014754Z · ╰── `cardCoverage` cannot be modified 2026-10-24T02:49:00.3014817Z 101 │ return; 2026-10-24T02:49:00.3014870Z ╰──── 2026-10-24T02:49:00.3015174Z  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-24T02:49:00.3015495Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3015501Z 2026-10-24T02:49:00.3015660Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3015815Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T02:49:00.3015903Z  89 │ const cardHeightRef = useRef(0); 2026-10-24T02:49:00.3015992Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T02:49:00.3016072Z ·  ─────┬──── 2026-10-24T02:49:00.3016206Z · ╰── `cardHeight` originates here 2026-10-24T02:49:00.3016303Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T02:49:00.3016372Z  92 │ if (!cardCoverage) { 2026-10-24T02:49:00.3016435Z  93 │ return; 2026-10-24T02:49:00.3016495Z  94 │ } 2026-10-24T02:49:00.3016651Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T02:49:00.3016741Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T02:49:00.3016802Z  97 │ return; 2026-10-24T02:49:00.3016858Z  98 │ } 2026-10-24T02:49:00.3016941Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:49:00.3017025Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:49:00.3017087Z 101 │ return; 2026-10-24T02:49:00.3017142Z 102 │ } 2026-10-24T02:49:00.3017247Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T02:49:00.3017348Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T02:49:00.3017433Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T02:49:00.3017492Z 106 │ }); 2026-10-24T02:49:00.3017562Z 107 │ }, [cardCoverage]); 2026-10-24T02:49:00.3017725Z 108 │ const handleBarLayout = useCallback( 2026-10-24T02:49:00.3017841Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3017973Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:49:00.3018044Z 111 │ notifyCoverage(); 2026-10-24T02:49:00.3018103Z 112 │ }, 2026-10-24T02:49:00.3018169Z 113 │ [notifyCoverage], 2026-10-24T02:49:00.3018227Z 114 │ ); 2026-10-24T02:49:00.3018314Z 115 │ const handleCardLayout = useCallback( 2026-10-24T02:49:00.3018397Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3018523Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:49:00.3018640Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T02:49:00.3018724Z ·  ─────┬──── 2026-10-24T02:49:00.3018873Z · ╰── `cardHeight` cannot be modified 2026-10-24T02:49:00.3018945Z 119 │ notifyCoverage(); 2026-10-24T02:49:00.3019001Z ╰──── 2026-10-24T02:49:00.3019272Z  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-24T02:49:00.3019585Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3019588Z 2026-10-24T02:49:00.3019788Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:49:00.3019948Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T02:49:00.3020036Z  90 │ const cardHeight = useSharedValue(0); 2026-10-24T02:49:00.3020167Z  91 │ const notifyCoverage = useCallback(() => { 2026-10-24T02:49:00.3020276Z ·  ───┬─── 2026-10-24T02:49:00.3020528Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T02:49:00.3020600Z  92 │ if (!cardCoverage) { 2026-10-24T02:49:00.3020663Z  93 │ return; 2026-10-24T02:49:00.3020719Z  94 │ } 2026-10-24T02:49:00.3020873Z  95 │ const coverage = Math.max(0, cardHeightRef.current - barHeightRef.current); 2026-10-24T02:49:00.3020964Z  96 │ if (coverage === cardCoverage.value) { 2026-10-24T02:49:00.3021026Z  97 │ return; 2026-10-24T02:49:00.3021080Z  98 │ } 2026-10-24T02:49:00.3021163Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:49:00.3021249Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:49:00.3021335Z ·  ──────┬───── 2026-10-24T02:49:00.3021474Z · ╰── This modifies `cardCoverage` 2026-10-24T02:49:00.3021536Z 101 │ return; 2026-10-24T02:49:00.3021591Z ╰──── 2026-10-24T02:49:00.3021938Z  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-24T02:49:00.3022247Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3022252Z 2026-10-24T02:49:00.3022452Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:49:00.3022610Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:100:7] 2026-10-24T02:49:00.3022775Z  99 │ if (cardCoverage.value === 0) { 2026-10-24T02:49:00.3022892Z 100 │ cardCoverage.value = coverage; 2026-10-24T02:49:00.3022969Z ·  ──────┬───── 2026-10-24T02:49:00.3023106Z · ╰── This modifies `cardCoverage` 2026-10-24T02:49:00.3023168Z 101 │ return; 2026-10-24T02:49:00.3023227Z 102 │ } 2026-10-24T02:49:00.3023328Z 103 │ cardCoverage.value = withTiming(coverage, { 2026-10-24T02:49:00.3023428Z 104 │ duration: USER_INPUT_TOGGLE_DURATION_MS, 2026-10-24T02:49:00.3023516Z 105 │ easing: Easing.out(Easing.cubic), 2026-10-24T02:49:00.3023571Z 106 │ }); 2026-10-24T02:49:00.3023641Z 107 │ }, [cardCoverage]); 2026-10-24T02:49:00.3023729Z 108 │ const handleBarLayout = useCallback( 2026-10-24T02:49:00.3023813Z 109 │ (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3023926Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3024158Z · ╰── This function may (indirectly) reassign or modify `cardCoverage` after render 2026-10-24T02:49:00.3024285Z 110 │ barHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:49:00.3024343Z ╰──── 2026-10-24T02:49:00.3024691Z  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-24T02:49:00.3024999Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3025001Z 2026-10-24T02:49:00.3025204Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:49:00.3025365Z ╭─[apps/mobile/src/features/threads/PendingUserInputCard.tsx:118:7] 2026-10-24T02:49:00.3025455Z 115 │ const handleCardLayout = useCallback( 2026-10-24T02:49:00.3025536Z 116 │ (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3025645Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3025953Z · ╰── This function may (indirectly) reassign or modify `cardHeight` after render 2026-10-24T02:49:00.3026090Z 117 │ cardHeightRef.current = event.nativeEvent.layout.height; 2026-10-24T02:49:00.3026205Z 118 │ cardHeight.value = event.nativeEvent.layout.height; 2026-10-24T02:49:00.3026285Z ·  ─────┬──── 2026-10-24T02:49:00.3026419Z · ╰── This modifies `cardHeight` 2026-10-24T02:49:00.3026498Z 119 │ notifyCoverage(); 2026-10-24T02:49:00.3026554Z ╰──── 2026-10-24T02:49:00.3026896Z  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-24T02:49:00.3027208Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3027210Z 2026-10-24T02:49:00.3027416Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3027551Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:533:25] 2026-10-24T02:49:00.3027683Z 532 │ // range) the boundary string is identical and the chain would die. 2026-10-24T02:49:00.3027777Z 533 │ }, [nextSnoozeWakeAt, snoozeWakeTick]); 2026-10-24T02:49:00.3027975Z ·  ───────┬────── 2026-10-24T02:49:00.3028193Z · ╰── Unnecessary dependency `snoozeWakeTick` 2026-10-24T02:49:00.3028332Z 534 │ const v2SearchQuery = props.searchQuery.trim().toLocaleLowerCase(); 2026-10-24T02:49:00.3028388Z ╰──── 2026-10-24T02:49:00.3028686Z  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-24T02:49:00.3029002Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3029004Z 2026-10-24T02:49:00.3029177Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3029312Z ╭─[apps/mobile/src/features/home/HomeScreen.tsx:524:53] 2026-10-24T02:49:00.3029401Z 523 │ if (Number.isNaN(wakeAtMs)) return; 2026-10-24T02:49:00.3029565Z 524 │ const delayMs = Math.min(Math.max(0, wakeAtMs - Date.now()) + 50, 2_147_483_647); 2026-10-24T02:49:00.3029690Z ·  ─────┬──── 2026-10-24T02:49:00.3029858Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3029941Z 525 │ const id = setTimeout(() => { 2026-10-24T02:49:00.3029997Z ╰──── 2026-10-24T02:49:00.3030320Z  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-24T02:49:00.3030622Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3030627Z 2026-10-24T02:49:00.3030891Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3031056Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:40:5] 2026-10-24T02:49:00.3031172Z 37 │ const [initialized, setInitialized] = useState(false); 2026-10-24T02:49:00.3031244Z 38 │ useLayoutEffect(() => { 2026-10-24T02:49:00.3031321Z ·  ───────┬─────── 2026-10-24T02:49:00.3031458Z · ╰── This is the containing effect 2026-10-24T02:49:00.3031522Z 39 │ reset(); 2026-10-24T02:49:00.3031590Z 40 │ setInitialized(true); 2026-10-24T02:49:00.3031671Z ·  ───────┬────── 2026-10-24T02:49:00.3031850Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3031919Z 41 │ }, [reset]); 2026-10-24T02:49:00.3031971Z ╰──── 2026-10-24T02:49:00.3032577Z  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-24T02:49:00.3032911Z  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-24T02:49:00.3032913Z 2026-10-24T02:49:00.3033247Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3033447Z ╭─[apps/mobile/src/features/threads/NewTaskDraftRouteScreen.tsx:93:5] 2026-10-24T02:49:00.3033501Z 88 │ 2026-10-24T02:49:00.3033570Z 89 │ useEffect(() => { 2026-10-24T02:49:00.3033642Z ·  ────┬──── 2026-10-24T02:49:00.3033773Z · ╰── This is the containing effect 2026-10-24T02:49:00.3033933Z 90 │ if (!needsPreparation || !initialProjectRef.branch || waitingForProject) return; 2026-10-24T02:49:00.3034037Z 91 │ const branchName = initialProjectRef.branch; 2026-10-24T02:49:00.3034106Z 92 │ let active = true; 2026-10-24T02:49:00.3034204Z 93 │ setPendingCheckouts((count) => count + 1); 2026-10-24T02:49:00.3034289Z ·  ─────────┬───────── 2026-10-24T02:49:00.3034468Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3034630Z 94 │ // Serialize replacements: ignoring a stale result cannot undo its Git mutation. 2026-10-24T02:49:00.3034683Z ╰──── 2026-10-24T02:49:00.3035285Z  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-24T02:49:00.3035606Z  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-24T02:49:00.3035609Z 2026-10-24T02:49:00.3035952Z ⚠ 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-24T02:49:00.3036075Z ╭─[packages/effect-acp/src/schema.test.ts:18:12] 2026-10-24T02:49:00.3036237Z 17 │ const command = { name: "plan", description: "Make a plan", input: { hint: "Task" } }; 2026-10-24T02:49:00.3036360Z 18 │ expect(Schema.is(V1.AvailableCommand)(command)).toBe(true); 2026-10-24T02:49:00.3036438Z ·  ───────── 2026-10-24T02:49:00.3036499Z 19 │ expect( 2026-10-24T02:49:00.3036553Z ╰──── 2026-10-24T02:49:00.3036555Z 2026-10-24T02:49:00.3036888Z ⚠ 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-24T02:49:00.3037005Z ╭─[packages/effect-acp/src/schema.test.ts:20:7] 2026-10-24T02:49:00.3037068Z 19 │ expect( 2026-10-24T02:49:00.3037246Z 20 │ Schema.is(V2.AvailableCommand)({ ...command, input: { type: "text", hint: "Task" } }), 2026-10-24T02:49:00.3037324Z ·  ───────── 2026-10-24T02:49:00.3037386Z 21 │ ).toBe(true); 2026-10-24T02:49:00.3037439Z ╰──── 2026-10-24T02:49:00.3037441Z 2026-10-24T02:49:00.3037916Z ⚠ 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-24T02:49:00.3038054Z ╭─[packages/client-runtime/src/rpc/session.test.ts:226:3] 2026-10-24T02:49:00.3038111Z 225 │ ) { 2026-10-24T02:49:00.3038323Z 226 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3038516Z 227 │ │ const socket = sockets[index]; 2026-10-24T02:49:00.3038642Z 228 │ │ if (socket) { 2026-10-24T02:49:00.3038735Z 229 │ │ return socket; 2026-10-24T02:49:00.3038812Z 230 │ │ } 2026-10-24T02:49:00.3038917Z 231 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3039046Z 232 │ ╰─▶ } 2026-10-24T02:49:00.3039221Z 233 │ return yield* Effect.die(new Error("Expected the RPC protocol to create a websocket.")); 2026-10-24T02:49:00.3039276Z ╰──── 2026-10-24T02:49:00.3039278Z 2026-10-24T02:49:00.3039746Z ⚠ 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-24T02:49:00.3039888Z ╭─[packages/client-runtime/src/rpc/session.test.ts:240:3] 2026-10-24T02:49:00.3039949Z 239 │ ) { 2026-10-24T02:49:00.3040188Z 240 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3040407Z 241 │ │ const request = socket.sent.map((message) => decodeJson(message)).filter(isRpcRequest)[index]; 2026-10-24T02:49:00.3040500Z 242 │ │ if (request) { 2026-10-24T02:49:00.3040596Z 243 │ │ return request; 2026-10-24T02:49:00.3040670Z 244 │ │ } 2026-10-24T02:49:00.3040772Z 245 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3040900Z 246 │ ╰─▶ } 2026-10-24T02:49:00.3041074Z 247 │ return yield* Effect.die(new Error("Expected the RPC protocol to send a request.")); 2026-10-24T02:49:00.3041130Z ╰──── 2026-10-24T02:49:00.3041132Z 2026-10-24T02:49:00.3041598Z ⚠ 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-24T02:49:00.3041735Z ╭─[packages/client-runtime/src/rpc/client.test.ts:131:9] 2026-10-24T02:49:00.3041798Z 130 │ ) { 2026-10-24T02:49:00.3042009Z 131 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3042133Z 132 │ │ if (subscriptions.length >= count) { 2026-10-24T02:49:00.3042226Z 133 │ │ return; 2026-10-24T02:49:00.3042313Z 134 │ │ } 2026-10-24T02:49:00.3042427Z 135 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3042560Z 136 │ ╰─▶ } 2026-10-24T02:49:00.3042729Z 137 │ return yield* Effect.die(new Error(`Expected ${count} durable subscriptions.`)); 2026-10-24T02:49:00.3042783Z ╰──── 2026-10-24T02:49:00.3042786Z 2026-10-24T02:49:00.3043249Z ⚠ 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-24T02:49:00.3043382Z ╭─[packages/client-runtime/src/rpc/client.test.ts:252:7] 2026-10-24T02:49:00.3043621Z 251 │ yield* SubscriptionRef.set(activeSession, Option.some(session(firstClient))); 2026-10-24T02:49:00.3043918Z 252 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 1; attempt += 1) { 2026-10-24T02:49:00.3044025Z 253 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3044159Z 254 │ ╰─▶ } 2026-10-24T02:49:00.3044285Z 255 │ yield* SubscriptionRef.set(activeSession, Option.none()); 2026-10-24T02:49:00.3044339Z ╰──── 2026-10-24T02:49:00.3044341Z 2026-10-24T02:49:00.3044804Z ⚠ 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-24T02:49:00.3044943Z ╭─[packages/client-runtime/src/rpc/client.test.ts:258:7] 2026-10-24T02:49:00.3045002Z 257 │ 2026-10-24T02:49:00.3045256Z 258 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T02:49:00.3045363Z 259 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3045495Z 260 │ ╰─▶ } 2026-10-24T02:49:00.3045598Z 261 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T02:49:00.3045653Z ╰──── 2026-10-24T02:49:00.3045656Z 2026-10-24T02:49:00.3046121Z ⚠ 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-24T02:49:00.3046259Z ╭─[packages/client-runtime/src/rpc/client.test.ts:322:7] 2026-10-24T02:49:00.3046324Z 321 │ ); 2026-10-24T02:49:00.3046578Z 322 │ ╭─▶ for (let attempt = 0; attempt < 100 && observedFailures.length < 1; attempt += 1) { 2026-10-24T02:49:00.3046684Z 323 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3046815Z 324 │ ╰─▶ } 2026-10-24T02:49:00.3046872Z 325 │ 2026-10-24T02:49:00.3046924Z ╰──── 2026-10-24T02:49:00.3046926Z 2026-10-24T02:49:00.3047389Z ⚠ 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-24T02:49:00.3047596Z ╭─[packages/client-runtime/src/rpc/client.test.ts:330:7] 2026-10-24T02:49:00.3047800Z 329 │ yield* SubscriptionRef.set(activeSession, Option.some(session(secondClient))); 2026-10-24T02:49:00.3048055Z 330 │ ╭─▶ for (let attempt = 0; attempt < 100 && subscriptions.length < 2; attempt += 1) { 2026-10-24T02:49:00.3048167Z 331 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3048299Z 332 │ ╰─▶ } 2026-10-24T02:49:00.3048403Z 333 │ yield* Fiber.interrupt(subscriptionFiber); 2026-10-24T02:49:00.3048459Z ╰──── 2026-10-24T02:49:00.3048461Z 2026-10-24T02:49:00.3048843Z ⚠ 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-24T02:49:00.3048964Z ╭─[packages/effect-acp/src/client.ts:1269:11] 2026-10-24T02:49:00.3049116Z 1268 │ extNotificationHandlers.set(CLIENT_METHODS.mcp_message, (params) => 2026-10-24T02:49:00.3049291Z 1269 │ Schema.decodeUnknownEffect(AcpSchemaV2.MessageMcpNotification)(params).pipe( 2026-10-24T02:49:00.3049398Z ·  ────────────────────────── 2026-10-24T02:49:00.3049544Z 1270 │ Effect.mapError(() => AcpError.AcpRequestError.invalidParams()), 2026-10-24T02:49:00.3049600Z ╰──── 2026-10-24T02:49:00.3049602Z 2026-10-24T02:49:00.3050102Z ⚠ 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-24T02:49:00.3050238Z ╭─[packages/effect-acp/src/protocol.test.ts:500:31] 2026-10-24T02:49:00.3050295Z 499 │ 2026-10-24T02:49:00.3050410Z 500 │ const response = yield* Schema.decodeUnknownEffect( 2026-10-24T02:49:00.3050532Z ·  ────────────────────────── 2026-10-24T02:49:00.3050640Z 501 │ Schema.fromJsonString(JsonRpcErrorResponse), 2026-10-24T02:49:00.3050694Z ╰──── 2026-10-24T02:49:00.3050697Z 2026-10-24T02:49:00.3050923Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:49:00.3051055Z ╭─[scripts/lib/cli-external-packages.test.ts:114:11] 2026-10-24T02:49:00.3051128Z 113 │ const declared = { 2026-10-24T02:49:00.3051219Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T02:49:00.3051339Z ·  ──────────────────────────────── 2026-10-24T02:49:00.3051449Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T02:49:00.3051505Z ╰──── 2026-10-24T02:49:00.3051774Z  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-24T02:49:00.3051777Z 2026-10-24T02:49:00.3051999Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:49:00.3052129Z ╭─[scripts/lib/cli-external-packages.test.ts:115:11] 2026-10-24T02:49:00.3052223Z 114 │ ...(manifest.dependencies ?? {}), 2026-10-24T02:49:00.3052323Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T02:49:00.3052447Z ·  ──────────────────────────────────────── 2026-10-24T02:49:00.3052623Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T02:49:00.3052711Z ╰──── 2026-10-24T02:49:00.3052977Z  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-24T02:49:00.3052980Z 2026-10-24T02:49:00.3053200Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:49:00.3053329Z ╭─[scripts/lib/cli-external-packages.test.ts:116:11] 2026-10-24T02:49:00.3053433Z 115 │ ...(manifest.optionalDependencies ?? {}), 2026-10-24T02:49:00.3053532Z 116 │ ...(manifest.peerDependencies ?? {}), 2026-10-24T02:49:00.3053649Z ·  ──────────────────────────────────── 2026-10-24T02:49:00.3053712Z 117 │ }; 2026-10-24T02:49:00.3053766Z ╰──── 2026-10-24T02:49:00.3096914Z  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-24T02:49:00.3096936Z 2026-10-24T02:49:00.3097546Z ⚠ 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-24T02:49:00.3097683Z ╭─[packages/effect-acp/src/errors.test.ts:129:28] 2026-10-24T02:49:00.3097784Z 128 │ const secret = "acp-summary-secret"; 2026-10-24T02:49:00.3097898Z 129 │ const cause = yield* Schema.decodeUnknownEffect( 2026-10-24T02:49:00.3098026Z ·  ────────────────────────── 2026-10-24T02:49:00.3098096Z 130 │ Schema.Struct({ 2026-10-24T02:49:00.3098152Z ╰──── 2026-10-24T02:49:00.3098162Z 2026-10-24T02:49:00.3098325Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3098487Z ╭─[apps/mobile/src/features/home/thread-swipe-actions.tsx:494:27] 2026-10-24T02:49:00.3098550Z 493 │ > 2026-10-24T02:49:00.3098630Z 494 │ {props.children(close)} 2026-10-24T02:49:00.3098723Z ·  ──┬── 2026-10-24T02:49:00.3098890Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3098970Z 495 │ 2026-10-24T02:49:00.3099021Z ╰──── 2026-10-24T02:49:00.3099525Z  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-24T02:49:00.3099841Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3099844Z 2026-10-24T02:49:00.3100007Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3100211Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:111:5] 2026-10-24T02:49:00.3100267Z 107 │ ); 2026-10-24T02:49:00.3100424Z 108 │ const separationProgress = useSharedValue(props.showScrollToEnd ? 1 : 0); 2026-10-24T02:49:00.3100517Z ·  ─────────┬──────── 2026-10-24T02:49:00.3100674Z · ╰── `separationProgress` originates here 2026-10-24T02:49:00.3100727Z 109 │ 2026-10-24T02:49:00.3100940Z 110 │ useEffect(() => { 2026-10-24T02:49:00.3101167Z 111 │ separationProgress.value = withTiming(props.showScrollToEnd ? 1 : 0, CONTROL_TIMING); 2026-10-24T02:49:00.3101253Z ·  ─────────┬──────── 2026-10-24T02:49:00.3101410Z · ╰── `separationProgress` cannot be modified 2026-10-24T02:49:00.3101521Z 112 │ }, [props.showScrollToEnd, separationProgress]); 2026-10-24T02:49:00.3101576Z ╰──── 2026-10-24T02:49:00.3101858Z  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-24T02:49:00.3102180Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3102183Z 2026-10-24T02:49:00.3102351Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3102522Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T02:49:00.3102636Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T02:49:00.3102752Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T02:49:00.3102834Z ·  ──────┬───── 2026-10-24T02:49:00.3102972Z · ╰── `capsuleWidth` originates here 2026-10-24T02:49:00.3103085Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T02:49:00.3103201Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3103309Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T02:49:00.3103407Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T02:49:00.3103477Z 134 │ return; 2026-10-24T02:49:00.3103536Z 135 │ } 2026-10-24T02:49:00.3103644Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T02:49:00.3103732Z 137 │ measuredWidthRef.current = width; 2026-10-24T02:49:00.3103878Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T02:49:00.3103953Z ·  ──────┬───── 2026-10-24T02:49:00.3104096Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T02:49:00.3104153Z 139 │ }; 2026-10-24T02:49:00.3104205Z ╰──── 2026-10-24T02:49:00.3104481Z  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-24T02:49:00.3104810Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3104817Z 2026-10-24T02:49:00.3104977Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3105145Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T02:49:00.3105256Z 128 │ // and repeatedly retargets the animation as it grows. 2026-10-24T02:49:00.3105368Z 129 │ const capsuleWidth = useSharedValue(null); 2026-10-24T02:49:00.3105448Z ·  ──────┬───── 2026-10-24T02:49:00.3105585Z · ╰── `capsuleWidth` originates here 2026-10-24T02:49:00.3105697Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T02:49:00.3105811Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3106143Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T02:49:00.3106286Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T02:49:00.3106348Z 134 │ return; 2026-10-24T02:49:00.3106401Z 135 │ } 2026-10-24T02:49:00.3106508Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T02:49:00.3106595Z 137 │ measuredWidthRef.current = width; 2026-10-24T02:49:00.3106738Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T02:49:00.3106790Z 139 │ }; 2026-10-24T02:49:00.3106883Z 140 │ const hasStatus = props.status !== null; 2026-10-24T02:49:00.3107021Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T02:49:00.3107087Z 142 │ useEffect(() => { 2026-10-24T02:49:00.3107152Z 143 │ if (!hasStatus) { 2026-10-24T02:49:00.3107240Z 144 │ measuredWidthRef.current = null; 2026-10-24T02:49:00.3107326Z 145 │ capsuleWidth.value = null; 2026-10-24T02:49:00.3107408Z ·  ──────┬───── 2026-10-24T02:49:00.3107551Z · ╰── `capsuleWidth` cannot be modified 2026-10-24T02:49:00.3107607Z 146 │ } 2026-10-24T02:49:00.3107659Z ╰──── 2026-10-24T02:49:00.3107933Z  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-24T02:49:00.3108256Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3108259Z 2026-10-24T02:49:00.3108469Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:49:00.3108639Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:145:7] 2026-10-24T02:49:00.3108781Z 141 │ const hasCapsule = hasStatus || hasQueue || hasAgents || hasPreview; 2026-10-24T02:49:00.3108844Z 142 │ useEffect(() => { 2026-10-24T02:49:00.3108923Z ·  ───┬─── 2026-10-24T02:49:00.3109150Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T02:49:00.3109217Z 143 │ if (!hasStatus) { 2026-10-24T02:49:00.3109302Z 144 │ measuredWidthRef.current = null; 2026-10-24T02:49:00.3109382Z 145 │ capsuleWidth.value = null; 2026-10-24T02:49:00.3109458Z ·  ──────┬───── 2026-10-24T02:49:00.3109598Z · ╰── This modifies `capsuleWidth` 2026-10-24T02:49:00.3109652Z 146 │ } 2026-10-24T02:49:00.3109704Z ╰──── 2026-10-24T02:49:00.3110169Z  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-24T02:49:00.3110519Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3110521Z 2026-10-24T02:49:00.3110723Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:49:00.3110891Z ╭─[apps/mobile/src/features/threads/floating-working-control.tsx:138:5] 2026-10-24T02:49:00.3111005Z 130 │ const measuredWidthRef = useRef(null); 2026-10-24T02:49:00.3111122Z 131 │ const handleLabelLayout = (event: LayoutChangeEvent) => { 2026-10-24T02:49:00.3111256Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3111505Z · ╰── This function may (indirectly) reassign or modify `capsuleWidth` after render 2026-10-24T02:49:00.3111613Z 132 │ const width = event.nativeEvent.layout.width; 2026-10-24T02:49:00.3111711Z 133 │ if (width === measuredWidthRef.current) { 2026-10-24T02:49:00.3111772Z 134 │ return; 2026-10-24T02:49:00.3111826Z 135 │ } 2026-10-24T02:49:00.3111935Z 136 │ const first = measuredWidthRef.current === null; 2026-10-24T02:49:00.3112020Z 137 │ measuredWidthRef.current = width; 2026-10-24T02:49:00.3112163Z 138 │ capsuleWidth.value = first ? width : withTiming(width, CONTROL_TIMING); 2026-10-24T02:49:00.3112238Z ·  ──────┬───── 2026-10-24T02:49:00.3112377Z · ╰── This modifies `capsuleWidth` 2026-10-24T02:49:00.3112439Z 139 │ }; 2026-10-24T02:49:00.3112492Z ╰──── 2026-10-24T02:49:00.3112845Z  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-24T02:49:00.3113162Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3113164Z 2026-10-24T02:49:00.3113433Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3113598Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:444:5] 2026-10-24T02:49:00.3113658Z 434 │ : null; 2026-10-24T02:49:00.3113724Z 435 │ useEffect(() => { 2026-10-24T02:49:00.3113802Z ·  ────┬──── 2026-10-24T02:49:00.3113936Z · ╰── This is the containing effect 2026-10-24T02:49:00.3113993Z 436 │ if ( 2026-10-24T02:49:00.3114070Z 437 │ props.active === false || 2026-10-24T02:49:00.3114149Z 438 │ activeDraftKey !== null || 2026-10-24T02:49:00.3114231Z 439 │ editingPendingTask !== null || 2026-10-24T02:49:00.3114305Z 440 │ selectedProject === null 2026-10-24T02:49:00.3114363Z 441 │ ) { 2026-10-24T02:49:00.3114423Z 442 │ return; 2026-10-24T02:49:00.3114477Z 443 │ } 2026-10-24T02:49:00.3114545Z 444 │ setActiveDraftKey( 2026-10-24T02:49:00.3114628Z ·  ────────┬──────── 2026-10-24T02:49:00.3114804Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3114956Z 445 │ createNewTaskDraft({ 2026-10-24T02:49:00.3115046Z ╰──── 2026-10-24T02:49:00.3115680Z  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-24T02:49:00.3116018Z  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-24T02:49:00.3116021Z 2026-10-24T02:49:00.3116271Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:49:00.3116442Z ╭─[apps/mobile/src/features/threads/new-task-flow-provider.tsx:1244:36] 2026-10-24T02:49:00.3116552Z 1243 │ 2026-10-24T02:49:00.3116757Z 1244 │ {props.children} 2026-10-24T02:49:00.3116872Z ·  ───────────── 2026-10-24T02:49:00.3116948Z 1245 │ 2026-10-24T02:49:00.3116999Z ╰──── 2026-10-24T02:49:00.3117234Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:49:00.3117379Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:49:00.3117382Z 2026-10-24T02:49:00.3117577Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T02:49:00.3117741Z ╭─[apps/mobile/src/features/threads/ThreadQueueControl.tsx:602:27] 2026-10-24T02:49:00.3117916Z 601 │ const onEnd = useEffectEvent((y: number, success: boolean) => props.onEnd(y, success)); 2026-10-24T02:49:00.3117995Z 602 │ const gesture = Gesture.Pan() 2026-10-24T02:49:00.3118085Z ·  ─┬─ 2026-10-24T02:49:00.3118227Z · ╰── `Pan` may be a component 2026-10-24T02:49:00.3118305Z 603 │ .enabled(!props.disabled) 2026-10-24T02:49:00.3118359Z ╰──── 2026-10-24T02:49:00.3118649Z  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-24T02:49:00.3119121Z  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-24T02:49:00.3119129Z 2026-10-24T02:49:00.3119396Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3119536Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:60:5] 2026-10-24T02:49:00.3119591Z 57 │ 2026-10-24T02:49:00.3119658Z 58 │ useEffect(() => { 2026-10-24T02:49:00.3119730Z ·  ────┬──── 2026-10-24T02:49:00.3119861Z · ╰── This is the containing effect 2026-10-24T02:49:00.3119958Z 59 │ const controller = new AbortController(); 2026-10-24T02:49:00.3120032Z 60 │ setLoadState("pending"); 2026-10-24T02:49:00.3120157Z ·  ──────┬───── 2026-10-24T02:49:00.3120403Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3120597Z 61 │ // A renewed signature is used on Retry, not as a reason to reset the native player. 2026-10-24T02:49:00.3120650Z ╰──── 2026-10-24T02:49:00.3121278Z  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-24T02:49:00.3121615Z  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-24T02:49:00.3121618Z 2026-10-24T02:49:00.3121825Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3121966Z ╭─[apps/mobile/src/components/MediaVideoPlayer.tsx:71:7] 2026-10-24T02:49:00.3122051Z 70 │ return () => controller.abort(); 2026-10-24T02:49:00.3122146Z 71 │ }, [player, props.playRequested, attempt]); 2026-10-24T02:49:00.3122322Z ·  ───┬── ─────────┬───────── ───┬─── 2026-10-24T02:49:00.3122561Z · │ │ ╰── Unnecessary dependency `attempt` 2026-10-24T02:49:00.3122766Z · │ ╰── Unnecessary dependency `props.playRequested` 2026-10-24T02:49:00.3122905Z · ╰── Unnecessary dependency `player_0` 2026-10-24T02:49:00.3122958Z 72 │ 2026-10-24T02:49:00.3123009Z ╰──── 2026-10-24T02:49:00.3123322Z  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-24T02:49:00.3123652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3123656Z 2026-10-24T02:49:00.3123887Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T02:49:00.3124035Z ╭─[packages/client-runtime/src/operations/projects.ts:228:51] 2026-10-24T02:49:00.3124097Z 227 │ ): string { 2026-10-24T02:49:00.3124261Z 228 │ const folderName = workspaceRoot.split(/[\\/]/).filter(Boolean).at(-1) ?? ""; 2026-10-24T02:49:00.3124375Z ·  ────── 2026-10-24T02:49:00.3124514Z 229 │ return target.owner ? `${target.owner}/${folderName}` : folderName; 2026-10-24T02:49:00.3124570Z ╰──── 2026-10-24T02:49:00.3124746Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T02:49:00.3124748Z 2026-10-24T02:49:00.3125012Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3125151Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:68:5] 2026-10-24T02:49:00.3125256Z 66 │ const { id: attachmentId, fileUri } = attachment; 2026-10-24T02:49:00.3125322Z 67 │ useEffect(() => { 2026-10-24T02:49:00.3125392Z ·  ────┬──── 2026-10-24T02:49:00.3125524Z · ╰── This is the containing effect 2026-10-24T02:49:00.3125588Z 68 │ setUri(null); 2026-10-24T02:49:00.3125732Z ·  ───┬── 2026-10-24T02:49:00.3125931Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3125995Z 69 │ setError(null); 2026-10-24T02:49:00.3126047Z ╰──── 2026-10-24T02:49:00.3126677Z  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-24T02:49:00.3127011Z  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-24T02:49:00.3127014Z 2026-10-24T02:49:00.3127223Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3127363Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:91:7] 2026-10-24T02:49:00.3127419Z 90 │ }; 2026-10-24T02:49:00.3127495Z 91 │ }, [attachmentId, fileUri]); 2026-10-24T02:49:00.3127611Z ·  ──────┬───── ───┬─── 2026-10-24T02:49:00.3127797Z · │ ╰── Unnecessary dependency `fileUri` 2026-10-24T02:49:00.3127946Z · ╰── Unnecessary dependency `attachmentId` 2026-10-24T02:49:00.3128083Z 92 │ const mimeType = videoMimeType(attachment) ?? attachment.mimeType; 2026-10-24T02:49:00.3128134Z ╰──── 2026-10-24T02:49:00.3128448Z  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-24T02:49:00.3128776Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3128779Z 2026-10-24T02:49:00.3128999Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.3129141Z ╭─[apps/mobile/src/components/VideoPreviewModal.tsx:213:34] 2026-10-24T02:49:00.3129206Z 212 │ useEffect(() => { 2026-10-24T02:49:00.3129320Z 213 │ if (!isFocused && hasSource) props.onRequestClose(); 2026-10-24T02:49:00.3129420Z ·  ──┬── 2026-10-24T02:49:00.3129572Z · ╰── Missing dependency `props` 2026-10-24T02:49:00.3129923Z 214 │ }, [isFocused, hasSource, props.onRequestClose]); 2026-10-24T02:49:00.3130042Z ·  ──────────┬───────── 2026-10-24T02:49:00.3130324Z · ╰── Overly precise dependency `props.onRequestClose`, use `props` instead 2026-10-24T02:49:00.3130398Z 215 │ const { source } = props; 2026-10-24T02:49:00.3130449Z ╰──── 2026-10-24T02:49:00.3130889Z  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-24T02:49:00.3131213Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3131216Z 2026-10-24T02:49:00.3131489Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3131690Z ╭─[apps/mobile/src/components/ComposerContextSheet.tsx:267:25] 2026-10-24T02:49:00.3131797Z 266 │ {record.elements?.map((element, index) => ( 2026-10-24T02:49:00.3131970Z 267 │ 2026-10-24T02:49:00.3132129Z ·  ─────────────────────────────────────────────────────── 2026-10-24T02:49:00.3132206Z 268 │ { 2026-10-24T02:49:00.3133036Z ·  ────┬──── 2026-10-24T02:49:00.3133165Z · ╰── This is the containing effect 2026-10-24T02:49:00.3133317Z 63 │ if (playbackUrl === null && resolvedUrl !== null) setPlaybackUrl(resolvedUrl); 2026-10-24T02:49:00.3133443Z ·  ───────┬────── 2026-10-24T02:49:00.3133651Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3133732Z 64 │ }, [playbackUrl, resolvedUrl]); 2026-10-24T02:49:00.3133790Z ╰──── 2026-10-24T02:49:00.3134422Z  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-24T02:49:00.3134761Z  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-24T02:49:00.3134763Z 2026-10-24T02:49:00.3135027Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3135163Z ╭─[apps/mobile/src/components/ProjectFavicon.tsx:159:5] 2026-10-24T02:49:00.3135435Z 154 │ const [activeFaviconRequest, setActiveFaviconRequest] = useState(null); 2026-10-24T02:49:00.3135543Z 155 │ useLayoutEffect(() => { 2026-10-24T02:49:00.3135623Z ·  ───────┬─────── 2026-10-24T02:49:00.3135758Z · ╰── This is the containing effect 2026-10-24T02:49:00.3135848Z 156 │ if (faviconRequest === null) return; 2026-10-24T02:49:00.3135900Z 157 │ 2026-10-24T02:49:00.3136035Z 158 │ const endRequest = beginProjectFaviconRequest(faviconRequest); 2026-10-24T02:49:00.3136134Z 159 │ setActiveFaviconRequest(faviconRequest); 2026-10-24T02:49:00.3136226Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3136400Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3136470Z 160 │ return endRequest; 2026-10-24T02:49:00.3136523Z ╰──── 2026-10-24T02:49:00.3137159Z  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-24T02:49:00.3137496Z  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-24T02:49:00.3137498Z 2026-10-24T02:49:00.3137719Z ⚠ react(no-unstable-nested-components): Do not define components during render. 2026-10-24T02:49:00.3137824Z ╭─[apps/mobile/src/Stack.tsx:1074:21] 2026-10-24T02:49:00.3137889Z 1073 │ } 2026-10-24T02:49:00.3138169Z ·  ───────────────────────────────────────────── 2026-10-24T02:49:00.3138239Z 1075 │ screenListeners={{ 2026-10-24T02:49:00.3138292Z ╰──── 2026-10-24T02:49:00.3138670Z  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-24T02:49:00.3138673Z 2026-10-24T02:49:00.3138841Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.3138964Z ╭─[apps/server/src/processRunner.test.ts:266:14] 2026-10-24T02:49:00.3139018Z 265 │ 2026-10-24T02:49:00.3139126Z 266 │ for (const {} of ["timeout", "success"] as const) { 2026-10-24T02:49:00.3139197Z ·  ── 2026-10-24T02:49:00.3139259Z 267 │ } 2026-10-24T02:49:00.3139316Z ╰──── 2026-10-24T02:49:00.3139556Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.3139558Z 2026-10-24T02:49:00.3139820Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3139994Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:123:7] 2026-10-24T02:49:00.3140049Z 118 │ 2026-10-24T02:49:00.3140149Z 119 │ useEffect(() => { 2026-10-24T02:49:00.3140223Z ·  ────┬──── 2026-10-24T02:49:00.3140356Z · ╰── This is the containing effect 2026-10-24T02:49:00.3140441Z 120 │ if (orientationSettled) return; 2026-10-24T02:49:00.3140627Z 121 │ const orientation = getNativeShowcaseOrientation(); 2026-10-24T02:49:00.3140735Z 122 │ if (orientation === null) { 2026-10-24T02:49:00.3140819Z 123 │ setOrientationSettled(true); 2026-10-24T02:49:00.3140911Z ·  ──────────┬────────── 2026-10-24T02:49:00.3141089Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3141150Z 124 │ return; 2026-10-24T02:49:00.3141203Z ╰──── 2026-10-24T02:49:00.3141829Z  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-24T02:49:00.3142170Z  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-24T02:49:00.3142176Z 2026-10-24T02:49:00.3142439Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3142612Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:304:7] 2026-10-24T02:49:00.3142667Z 292 │ 2026-10-24T02:49:00.3142733Z 293 │ useEffect(() => { 2026-10-24T02:49:00.3142804Z ·  ────┬──── 2026-10-24T02:49:00.3142933Z · ╰── This is the containing effect 2026-10-24T02:49:00.3142991Z 294 │ if ( 2026-10-24T02:49:00.3143059Z 295 │ scene === null || 2026-10-24T02:49:00.3143136Z 296 │ requestedScene === null || 2026-10-24T02:49:00.3143216Z 297 │ scene !== requestedScene || 2026-10-24T02:49:00.3143287Z 298 │ !hasFixture || 2026-10-24T02:49:00.3143361Z 299 │ !orientationSettled || 2026-10-24T02:49:00.3143428Z 300 │ !themeApplied || 2026-10-24T02:49:00.3143547Z 301 │ (scene === "agent-activity" && !agentActivityStaged) || 2026-10-24T02:49:00.3143684Z 302 │ !isShowcaseNativeContentReady({ scene, themeId, renderSignal }) 2026-10-24T02:49:00.3143741Z 303 │ ) { 2026-10-24T02:49:00.3143810Z 304 │ setReadyScene(null); 2026-10-24T02:49:00.3143891Z ·  ──────┬────── 2026-10-24T02:49:00.3144065Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3144128Z 305 │ return; 2026-10-24T02:49:00.3144179Z ╰──── 2026-10-24T02:49:00.3144814Z  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-24T02:49:00.3145149Z  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-24T02:49:00.3145152Z 2026-10-24T02:49:00.3145432Z ⚠ eslint(no-unused-vars): Variable 'lastOutcome' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3145606Z ╭─[apps/mobile/src/features/showcase/ShowcaseCaptureCoordinator.tsx:128:9] 2026-10-24T02:49:00.3145675Z 127 │ let cancelled = false; 2026-10-24T02:49:00.3145767Z 128 │ let lastOutcome: string | null = null; 2026-10-24T02:49:00.3146032Z ·  ─────┬───── 2026-10-24T02:49:00.3146219Z · ╰── 'lastOutcome' is declared here 2026-10-24T02:49:00.3146403Z 129 │ void retryShowcaseOperation(async () => applyNativeShowcaseOrientation(orientation), { 2026-10-24T02:49:00.3146456Z ╰──── 2026-10-24T02:49:00.3146565Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3146568Z 2026-10-24T02:49:00.3146750Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3146929Z ╭─[apps/mobile/src/components/ui/Menu.tsx:54:36] 2026-10-24T02:49:00.3147161Z 53 │ const child = children as ReactElement>; 2026-10-24T02:49:00.3147340Z 54 │ ╭─▶ children = cloneElement(child, { 2026-10-24T02:49:00.3147457Z 55 │ │ onTouchStart: (event) => { 2026-10-24T02:49:00.3147625Z 56 │ │ // Reset for a new touch, not onPressIn, which also fires when a 2026-10-24T02:49:00.3147784Z 57 │ │ // finger moves out of the row and back during the same gesture. 2026-10-24T02:49:00.3147915Z 58 │ │ menuPress.current.isPreparing = false; 2026-10-24T02:49:00.3148086Z 59 │ │ menuPress.current.suppressPress = menuPress.current.isOpen; 2026-10-24T02:49:00.3148200Z 60 │ │ pendingPress.current = null; 2026-10-24T02:49:00.3148320Z 61 │ │ child.props.onTouchStart?.(event); 2026-10-24T02:49:00.3148397Z 62 │ │ }, 2026-10-24T02:49:00.3148499Z 63 │ │ onPress: (event) => { 2026-10-24T02:49:00.3148680Z 64 │ │ // Accessibility clicks have no touch identifier and must not inherit 2026-10-24T02:49:00.3148823Z 65 │ │ // cancellation from a previous physical gesture. 2026-10-24T02:49:00.3148995Z 66 │ │ const isTouch = typeof event.nativeEvent.identifier === "number"; 2026-10-24T02:49:00.3149191Z 67 │ │ if (isTouch ? menuPress.current.suppressPress : menuPress.current.isOpen) { 2026-10-24T02:49:00.3149279Z 68 │ │ return; 2026-10-24T02:49:00.3149356Z 69 │ │ } 2026-10-24T02:49:00.3149498Z 70 │ │ if (isTouch && menuPress.current.isPreparing) { 2026-10-24T02:49:00.3149672Z 71 │ │ // A release can arrive between native menu preparation and display. 2026-10-24T02:49:00.3149846Z 72 │ │ // Let UIKit's display/cancel callback decide this press's outcome. 2026-10-24T02:49:00.3149951Z 73 │ │ event.persist(); 2026-10-24T02:49:00.3150147Z 74 │ │ pendingPress.current = () => child.props.onPress?.(event); 2026-10-24T02:49:00.3150235Z 75 │ │ return; 2026-10-24T02:49:00.3150313Z 76 │ │ } 2026-10-24T02:49:00.3150429Z 77 │ │ child.props.onPress?.(event); 2026-10-24T02:49:00.3150504Z 78 │ │ }, 2026-10-24T02:49:00.3150639Z 79 │ ├─▶ }); 2026-10-24T02:49:00.3150962Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3151099Z 80 │ menuProps.onMenuInteractionStart = () => { 2026-10-24T02:49:00.3151151Z ╰──── 2026-10-24T02:49:00.3151646Z  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-24T02:49:00.3151952Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3151955Z 2026-10-24T02:49:00.3152190Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T02:49:00.3152318Z ╭─[apps/server/src/terminal/Manager.test.ts:731:31] 2026-10-24T02:49:00.3152375Z 730 │ ); 2026-10-24T02:49:00.3152556Z 731 │ const snapshot = events.filter((event) => event.type === "snapshot").at(-1)?.snapshot; 2026-10-24T02:49:00.3152659Z ·  ────── 2026-10-24T02:49:00.3152775Z 732 │ expect(snapshot?.history).toBe("aa😀\rEND"); 2026-10-24T02:49:00.3152826Z ╰──── 2026-10-24T02:49:00.3153008Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T02:49:00.3153011Z 2026-10-24T02:49:00.3153162Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3153323Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:152:27] 2026-10-24T02:49:00.3153509Z 151 │ 2026-10-24T02:49:00.3153590Z 152 │ {props.children(open)} 2026-10-24T02:49:00.3153687Z ·  ──┬─ 2026-10-24T02:49:00.3153855Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3153917Z 153 │ 2026-10-24T02:49:00.3153971Z ╰──── 2026-10-24T02:49:00.3154464Z  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-24T02:49:00.3154770Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3154773Z 2026-10-24T02:49:00.3154976Z ⚠ react(memo-dependencies): Found missing/extra memoization dependencies 2026-10-24T02:49:00.3155131Z ╭─[apps/mobile/src/components/ui/AndroidAnchoredMenu.tsx:140:9] 2026-10-24T02:49:00.3155217Z 139 │ if (action.id !== undefined) { 2026-10-24T02:49:00.3155296Z 140 │ props.onPressAction?.({ 2026-10-24T02:49:00.3155370Z ·  ──┬── 2026-10-24T02:49:00.3155502Z · ╰── Missing dependency `props` 2026-10-24T02:49:00.3155596Z 141 │ nativeEvent: { event: action.id }, 2026-10-24T02:49:00.3155744Z 142 │ } as Parameters>[0]); 2026-10-24T02:49:00.3155802Z 143 │ } 2026-10-24T02:49:00.3155856Z 144 │ }, 2026-10-24T02:49:00.3155939Z 145 │ [close, props.onPressAction], 2026-10-24T02:49:00.3156034Z ·  ─────────┬───────── 2026-10-24T02:49:00.3156332Z · ╰── Overly precise dependency `props.onPressAction`, use `props` instead 2026-10-24T02:49:00.3156419Z 146 │ ); 2026-10-24T02:49:00.3156472Z ╰──── 2026-10-24T02:49:00.3156977Z  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-24T02:49:00.3157306Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3157309Z 2026-10-24T02:49:00.3157494Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:49:00.3157692Z ╭─[apps/mobile/src/features/keyboard/HardwareKeyboardCommandProvider.tsx:116:34] 2026-10-24T02:49:00.3157765Z 115 │ return [...commands]; 2026-10-24T02:49:00.3157902Z 116 │ }, [activeThreadRef, pathname, registrationVersion, navigation]); 2026-10-24T02:49:00.3158019Z ·  ─────────┬───────── 2026-10-24T02:49:00.3158207Z · ╰── Unnecessary dependency `registrationVersion` 2026-10-24T02:49:00.3158262Z 117 │ 2026-10-24T02:49:00.3158315Z ╰──── 2026-10-24T02:49:00.3158640Z  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-24T02:49:00.3158964Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3158972Z 2026-10-24T02:49:00.3159449Z ⚠ 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-24T02:49:00.3159577Z ╭─[apps/server/src/serverSettings.test.ts:1741:32] 2026-10-24T02:49:00.3159752Z 1740 │ const model = createModelSelection(ProviderInstanceId.make("codex"), "gpt-5.5"); 2026-10-24T02:49:00.3159939Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T02:49:00.3160094Z ·  ─────────────────── 2026-10-24T02:49:00.3160207Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T02:49:00.3160261Z ╰──── 2026-10-24T02:49:00.3160263Z 2026-10-24T02:49:00.3160799Z ⚠ 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-24T02:49:00.3160952Z ╭─[apps/server/src/serverSettings.test.ts:1742:34] 2026-10-24T02:49:00.3161140Z 1741 │ const modelJson = yield* Schema.encodeEffect(Schema.fromJsonString(ModelSelection))(model); 2026-10-24T02:49:00.3161248Z 1742 │ const scriptsJson = yield* Schema.encodeEffect( 2026-10-24T02:49:00.3161365Z ·  ─────────────────── 2026-10-24T02:49:00.3161483Z 1743 │ Schema.fromJsonString(Schema.Array(ProjectScript)), 2026-10-24T02:49:00.3161537Z ╰──── 2026-10-24T02:49:00.3161539Z 2026-10-24T02:49:00.3161688Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3161865Z ╭─[apps/mobile/src/features/voice-input/useVoiceInputController.ts:27:14] 2026-10-24T02:49:00.3161951Z 26 │ const latestInput = useRef(input); 2026-10-24T02:49:00.3162029Z 27 │ latestInput.current = input; 2026-10-24T02:49:00.3162143Z ·  ─────┬─────────┬─── 2026-10-24T02:49:00.3162333Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.3162446Z · ╰── This value is a ref 2026-10-24T02:49:00.3162525Z 28 │ const mounted = useRef(true); 2026-10-24T02:49:00.3162578Z ╰──── 2026-10-24T02:49:00.3163079Z  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-24T02:49:00.3163388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3163390Z 2026-10-24T02:49:00.3163549Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3163725Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:93:5] 2026-10-24T02:49:00.3163781Z 90 │ }) { 2026-10-24T02:49:00.3163897Z 91 │ const rotation = useSharedValue(props.hidden ? 1 : 0); 2026-10-24T02:49:00.3163970Z ·  ────┬─── 2026-10-24T02:49:00.3164105Z · ╰── `rotation` originates here 2026-10-24T02:49:00.3164178Z 92 │ useLayoutEffect(() => { 2026-10-24T02:49:00.3164330Z 93 │ rotation.value = withTiming(props.hidden ? 1 : 0, TOOLBAR_FLIP_TIMING); 2026-10-24T02:49:00.3164403Z ·  ────┬─── 2026-10-24T02:49:00.3164537Z · ╰── `rotation` cannot be modified 2026-10-24T02:49:00.3164614Z 94 │ }, [props.hidden, rotation]); 2026-10-24T02:49:00.3164667Z ╰──── 2026-10-24T02:49:00.3164942Z  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-24T02:49:00.3165265Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3165268Z 2026-10-24T02:49:00.3165430Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3165677Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:269:5] 2026-10-24T02:49:00.3165807Z 266 │ const variant = props.variant ?? "plain"; 2026-10-24T02:49:00.3165939Z 267 │ const loadingVisibility = useSharedValue(props.loading ? 1 : 0); 2026-10-24T02:49:00.3166027Z ·  ────────┬──────── 2026-10-24T02:49:00.3166177Z · ╰── `loadingVisibility` originates here 2026-10-24T02:49:00.3166249Z 268 │ useLayoutEffect(() => { 2026-10-24T02:49:00.3166410Z 269 │ loadingVisibility.value = withTiming(props.loading ? 1 : 0, DICTATION_TIMING); 2026-10-24T02:49:00.3166494Z ·  ────────┬──────── 2026-10-24T02:49:00.3166648Z · ╰── `loadingVisibility` cannot be modified 2026-10-24T02:49:00.3166742Z 270 │ }, [loadingVisibility, props.loading]); 2026-10-24T02:49:00.3166793Z ╰──── 2026-10-24T02:49:00.3167077Z  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-24T02:49:00.3167401Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3167404Z 2026-10-24T02:49:00.3167562Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3167734Z ╭─[apps/mobile/src/features/voice-input/ComposerDictationControl.tsx:328:5] 2026-10-24T02:49:00.3167790Z 325 │ }) { 2026-10-24T02:49:00.3167953Z 326 │ const recordingVisibility = useSharedValue(props.phase === "recording" ? 1 : 0); 2026-10-24T02:49:00.3168044Z ·  ─────────┬───────── 2026-10-24T02:49:00.3168202Z · ╰── `recordingVisibility` originates here 2026-10-24T02:49:00.3168277Z 327 │ useLayoutEffect(() => { 2026-10-24T02:49:00.3168469Z 328 │ recordingVisibility.value = withTiming(props.phase === "recording" ? 1 : 0, DICTATION_TIMING); 2026-10-24T02:49:00.3168557Z ·  ─────────┬───────── 2026-10-24T02:49:00.3168711Z · ╰── `recordingVisibility` cannot be modified 2026-10-24T02:49:00.3168803Z 329 │ }, [props.phase, recordingVisibility]); 2026-10-24T02:49:00.3168856Z ╰──── 2026-10-24T02:49:00.3169132Z  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-24T02:49:00.3169456Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3169461Z 2026-10-24T02:49:00.3169608Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3169774Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:122:38] 2026-10-24T02:49:00.3169937Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T02:49:00.3170130Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T02:49:00.3170252Z ·  ───────────┬────────── 2026-10-24T02:49:00.3170430Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3170551Z 123 │ const sessionRef = useRef(null); 2026-10-24T02:49:00.3170604Z ╰──── 2026-10-24T02:49:00.3171200Z  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-24T02:49:00.3171542Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3171545Z 2026-10-24T02:49:00.3171692Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3171854Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:8] 2026-10-24T02:49:00.3171910Z 125 │ 2026-10-24T02:49:00.3172019Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:49:00.3172108Z ·  ─────────┬──────── 2026-10-24T02:49:00.3172265Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3172370Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:49:00.3172421Z ╰──── 2026-10-24T02:49:00.3172914Z  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-24T02:49:00.3173215Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3173217Z 2026-10-24T02:49:00.3173365Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3173528Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:7] 2026-10-24T02:49:00.3173584Z 125 │ 2026-10-24T02:49:00.3173694Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:49:00.3173783Z ·  ─────────┬───────── 2026-10-24T02:49:00.3173932Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3174032Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:49:00.3174085Z ╰──── 2026-10-24T02:49:00.3174570Z  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-24T02:49:00.3174870Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3174877Z 2026-10-24T02:49:00.3175025Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3175188Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:31] 2026-10-24T02:49:00.3175242Z 125 │ 2026-10-24T02:49:00.3175350Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:49:00.3175465Z ·  ─────────┬───────── 2026-10-24T02:49:00.3175635Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3175735Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:49:00.3175786Z ╰──── 2026-10-24T02:49:00.3176351Z  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-24T02:49:00.3176682Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3176684Z 2026-10-24T02:49:00.3176830Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3176992Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:126:30] 2026-10-24T02:49:00.3177045Z 125 │ 2026-10-24T02:49:00.3177151Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:49:00.3177269Z ·  ──────────┬───────── 2026-10-24T02:49:00.3177438Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3177544Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:49:00.3177598Z ╰──── 2026-10-24T02:49:00.3178085Z  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-24T02:49:00.3178388Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3178390Z 2026-10-24T02:49:00.3178536Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3178698Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:127:46] 2026-10-24T02:49:00.3178809Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:49:00.3179014Z 127 │ ╭─▶ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:49:00.3179197Z 128 │ │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T02:49:00.3179325Z 129 │ │ onStatus: (status: RecordingStatus) => { 2026-10-24T02:49:00.3179482Z 130 │ │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T02:49:00.3179602Z 131 │ │ isFinished: status.isFinished, 2026-10-24T02:49:00.3179782Z 132 │ │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T02:49:00.3179887Z 133 │ │ error: status.error, 2026-10-24T02:49:00.3179987Z 134 │ │ url: status.url, 2026-10-24T02:49:00.3180103Z 135 │ │ }); 2026-10-24T02:49:00.3180186Z 136 │ │ }, 2026-10-24T02:49:00.3180390Z 137 │ │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T02:49:00.3180500Z 138 │ │ selectInput: (inputs) => { 2026-10-24T02:49:00.3180655Z 139 │ │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T02:49:00.3180803Z 140 │ │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T02:49:00.3180973Z 141 │ │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T02:49:00.3181115Z 142 │ │ const order = rememberMicrophones(known, inputs); 2026-10-24T02:49:00.3181285Z 143 │ │ if (order !== known) { 2026-10-24T02:49:00.3181456Z 144 │ │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T02:49:00.3181574Z 145 │ │ transform: (current) => ({ 2026-10-24T02:49:00.3181787Z 146 │ │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T02:49:00.3181872Z 147 │ │ }), 2026-10-24T02:49:00.3181956Z 148 │ │ }); 2026-10-24T02:49:00.3182035Z 149 │ │ } 2026-10-24T02:49:00.3182178Z 150 │ │ return preferredMicrophoneInput(inputs, order); 2026-10-24T02:49:00.3182254Z 151 │ │ }, 2026-10-24T02:49:00.3182390Z 152 │ ├─▶ }); 2026-10-24T02:49:00.3182640Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3182730Z 153 │ recorderRef.current = recorder; 2026-10-24T02:49:00.3182782Z ╰──── 2026-10-24T02:49:00.3183271Z  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-24T02:49:00.3183573Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3183576Z 2026-10-24T02:49:00.3183722Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3183890Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:153:16] 2026-10-24T02:49:00.3183949Z 152 │ }); 2026-10-24T02:49:00.3184033Z 153 │ recorderRef.current = recorder; 2026-10-24T02:49:00.3184150Z ·  ─────┬─────────┬─── 2026-10-24T02:49:00.3184338Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.3184457Z · ╰── This value is a ref 2026-10-24T02:49:00.3184565Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:49:00.3184619Z ╰──── 2026-10-24T02:49:00.3185196Z  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-24T02:49:00.3185536Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3185538Z 2026-10-24T02:49:00.3185683Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3185946Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:48] 2026-10-24T02:49:00.3186063Z 153 │ recorderRef.current = recorder; 2026-10-24T02:49:00.3186263Z 154 │ ╭─▶ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:49:00.3186351Z 155 │ │ recorder, 2026-10-24T02:49:00.3186485Z 156 │ │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T02:49:00.3186612Z 157 │ │ requestPermission: async () => { 2026-10-24T02:49:00.3186784Z 158 │ │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T02:49:00.3186978Z 159 │ │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T02:49:00.3187057Z 160 │ │ }, 2026-10-24T02:49:00.3187203Z 161 │ │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T02:49:00.3187342Z 162 │ │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T02:49:00.3187477Z 163 │ │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T02:49:00.3187593Z 164 │ │ onStateChange: (nextState) => 2026-10-24T02:49:00.3187687Z 165 │ │ setState({ 2026-10-24T02:49:00.3187797Z 166 │ │ state: nextState, 2026-10-24T02:49:00.3187941Z 167 │ │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T02:49:00.3188075Z 168 │ │ label: sessionRef.current?.label ?? null, 2026-10-24T02:49:00.3188157Z 169 │ │ }), 2026-10-24T02:49:00.3188290Z 170 │ ├─▶ }); 2026-10-24T02:49:00.3188493Z · ╰──── Cannot access ref value during render 2026-10-24T02:49:00.3188549Z 171 │ } 2026-10-24T02:49:00.3188605Z ╰──── 2026-10-24T02:49:00.3189098Z  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-24T02:49:00.3189403Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3189406Z 2026-10-24T02:49:00.3189553Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3189718Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:154:15] 2026-10-24T02:49:00.3189803Z 153 │ recorderRef.current = recorder; 2026-10-24T02:49:00.3189908Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:49:00.3190018Z ·  ─────┬────────┬─── 2026-10-24T02:49:00.3190233Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.3190440Z · ╰── This value is a ref 2026-10-24T02:49:00.3190549Z 155 │ recorder, 2026-10-24T02:49:00.3190600Z ╰──── 2026-10-24T02:49:00.3191091Z  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-24T02:49:00.3191394Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3191397Z 2026-10-24T02:49:00.3191547Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3191711Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:7] 2026-10-24T02:49:00.3191801Z 184 │ return () => subscription.remove(); 2026-10-24T02:49:00.3191871Z 185 │ }, [controller]); 2026-10-24T02:49:00.3191950Z ·  ─────┬──── 2026-10-24T02:49:00.3192098Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3192150Z 186 │ 2026-10-24T02:49:00.3192203Z ╰──── 2026-10-24T02:49:00.3192692Z  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-24T02:49:00.3192993Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3192995Z 2026-10-24T02:49:00.3193147Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3193311Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:185:6] 2026-10-24T02:49:00.3193400Z 184 │ return () => subscription.remove(); 2026-10-24T02:49:00.3193467Z 185 │ }, [controller]); 2026-10-24T02:49:00.3193545Z ·  ──────┬───── 2026-10-24T02:49:00.3193690Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3193746Z 186 │ 2026-10-24T02:49:00.3193800Z ╰──── 2026-10-24T02:49:00.3194292Z  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-24T02:49:00.3194596Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3194602Z 2026-10-24T02:49:00.3194750Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3194913Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:6] 2026-10-24T02:49:00.3194971Z 191 │ }, 2026-10-24T02:49:00.3195042Z 192 │ [controller, recorder], 2026-10-24T02:49:00.3195119Z ·  ─────┬──── 2026-10-24T02:49:00.3195264Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3195320Z 193 │ ); 2026-10-24T02:49:00.3195371Z ╰──── 2026-10-24T02:49:00.3195931Z  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-24T02:49:00.3196262Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3196265Z 2026-10-24T02:49:00.3196413Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3196576Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:175:20] 2026-10-24T02:49:00.3196666Z 174 │ const controller = session.controller; 2026-10-24T02:49:00.3196756Z 175 │ const recorder = recorderRef.current; 2026-10-24T02:49:00.3196864Z ·  ─────────┬───────── 2026-10-24T02:49:00.3197027Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3197085Z 176 │ 2026-10-24T02:49:00.3197140Z ╰──── 2026-10-24T02:49:00.3197629Z  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-24T02:49:00.3197931Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3197934Z 2026-10-24T02:49:00.3198082Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3198242Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:192:5] 2026-10-24T02:49:00.3198299Z 191 │ }, 2026-10-24T02:49:00.3198372Z 192 │ [controller, recorder], 2026-10-24T02:49:00.3198466Z ·  ───────────┬────────── 2026-10-24T02:49:00.3198616Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3198673Z 193 │ ); 2026-10-24T02:49:00.3198726Z ╰──── 2026-10-24T02:49:00.3199215Z  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-24T02:49:00.3199515Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3199517Z 2026-10-24T02:49:00.3199664Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3199831Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:20] 2026-10-24T02:49:00.3199928Z 245 │ return () => clearInterval(intervalId); 2026-10-24T02:49:00.3200039Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T02:49:00.3200170Z ·  ─────┬──── 2026-10-24T02:49:00.3200330Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3200384Z 247 │ 2026-10-24T02:49:00.3200435Z ╰──── 2026-10-24T02:49:00.3200923Z  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-24T02:49:00.3201298Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3201327Z 2026-10-24T02:49:00.3201474Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3201637Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:246:6] 2026-10-24T02:49:00.3201726Z 245 │ return () => clearInterval(intervalId); 2026-10-24T02:49:00.3201838Z 246 │ }, [audioLevels, controller, recorder, state.phase]); 2026-10-24T02:49:00.3201971Z ·  ────────────────────────┬─────────────────────── 2026-10-24T02:49:00.3202133Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3202185Z 247 │ 2026-10-24T02:49:00.3202238Z ╰──── 2026-10-24T02:49:00.3202731Z  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-24T02:49:00.3203037Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3203039Z 2026-10-24T02:49:00.3203186Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3203346Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:261:5] 2026-10-24T02:49:00.3203415Z 260 │ setOwnerFocused, 2026-10-24T02:49:00.3203479Z 261 │ session, 2026-10-24T02:49:00.3203552Z ·  ───┬─── 2026-10-24T02:49:00.3203692Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3203757Z 262 │ stop, 2026-10-24T02:49:00.3203814Z ╰──── 2026-10-24T02:49:00.3204301Z  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-24T02:49:00.3204603Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3204608Z 2026-10-24T02:49:00.3204751Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3204914Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:251:10] 2026-10-24T02:49:00.3204971Z 250 │ 2026-10-24T02:49:00.3205119Z 251 │ ╭─▶ return { 2026-10-24T02:49:00.3205336Z 252 │ │ isAvailable: getLocalVoiceTranscriber() !== null || getNativeShowcaseScene() !== null, 2026-10-24T02:49:00.3205419Z 253 │ │ state, 2026-10-24T02:49:00.3205509Z 254 │ │ audioLevels, 2026-10-24T02:49:00.3205605Z 255 │ │ elapsedSeconds, 2026-10-24T02:49:00.3205736Z 256 │ │ isBusy: voiceInputBlocksSubmission(state), 2026-10-24T02:49:00.3205820Z 257 │ │ ownerKey, 2026-10-24T02:49:00.3205900Z 258 │ │ label, 2026-10-24T02:49:00.3205992Z 259 │ │ focusedOwners, 2026-10-24T02:49:00.3206086Z 260 │ │ setOwnerFocused, 2026-10-24T02:49:00.3206171Z 261 │ │ session, 2026-10-24T02:49:00.3206329Z 262 │ │ stop, 2026-10-24T02:49:00.3206441Z 263 │ │ cancel, 2026-10-24T02:49:00.3206570Z 264 │ ├─▶ }; 2026-10-24T02:49:00.3206774Z · ╰──── Cannot access ref value during render 2026-10-24T02:49:00.3206832Z 265 │ } 2026-10-24T02:49:00.3206886Z ╰──── 2026-10-24T02:49:00.3207370Z  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-24T02:49:00.3207678Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3207683Z 2026-10-24T02:49:00.3207846Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3208009Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T02:49:00.3208171Z 121 │ const audioLevelsRef = useRef(Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0)); 2026-10-24T02:49:00.3208298Z 122 │ const audioLevels = useSharedValue(audioLevelsRef.current); 2026-10-24T02:49:00.3208379Z ·  ─────┬───── 2026-10-24T02:49:00.3208518Z · ╰── `audioLevels` originates here 2026-10-24T02:49:00.3208638Z 123 │ const sessionRef = useRef(null); 2026-10-24T02:49:00.3208788Z 124 │ const recorderRef = useRef | null>(null); 2026-10-24T02:49:00.3208843Z 125 │ 2026-10-24T02:49:00.3208958Z 126 │ if (!sessionRef.current || !recorderRef.current) { 2026-10-24T02:49:00.3209062Z 127 │ const recorder = createLazyVoiceRecorder({ 2026-10-24T02:49:00.3209205Z 128 │ create: () => new AudioModule.AudioRecorder(VOICE_RECORDING_OPTIONS), 2026-10-24T02:49:00.3209300Z 129 │ onStatus: (status: RecordingStatus) => { 2026-10-24T02:49:00.3209424Z 130 │ sessionRef.current?.controller.handleRecorderStatus({ 2026-10-24T02:49:00.3209510Z 131 │ isFinished: status.isFinished, 2026-10-24T02:49:00.3209657Z 132 │ hasError: status.hasError || status.mediaServicesDidReset === true, 2026-10-24T02:49:00.3209732Z 133 │ error: status.error, 2026-10-24T02:49:00.3209804Z 134 │ url: status.url, 2026-10-24T02:49:00.3209863Z 135 │ }); 2026-10-24T02:49:00.3209923Z 136 │ }, 2026-10-24T02:49:00.3210130Z 137 │ // Read when recording starts so preference changes do not re-render every composer. 2026-10-24T02:49:00.3210213Z 138 │ selectInput: (inputs) => { 2026-10-24T02:49:00.3210336Z 139 │ const preferences = registry.get(mobilePreferencesAtom); 2026-10-24T02:49:00.3210452Z 140 │ if (!AsyncResult.isSuccess(preferences)) return null; 2026-10-24T02:49:00.3210587Z 141 │ const known = microphoneOrder(preferences.value.microphones); 2026-10-24T02:49:00.3210698Z 142 │ const order = rememberMicrophones(known, inputs); 2026-10-24T02:49:00.3210771Z 143 │ if (order !== known) { 2026-10-24T02:49:00.3210881Z 144 │ registry.set(updateMobilePreferencesAtom, { 2026-10-24T02:49:00.3210966Z 145 │ transform: (current) => ({ 2026-10-24T02:49:00.3211143Z 146 │ microphones: rememberMicrophones(microphoneOrder(current.microphones), inputs), 2026-10-24T02:49:00.3211285Z 147 │ }), 2026-10-24T02:49:00.3211383Z 148 │ }); 2026-10-24T02:49:00.3211444Z 149 │ } 2026-10-24T02:49:00.3211555Z 150 │ return preferredMicrophoneInput(inputs, order); 2026-10-24T02:49:00.3211612Z 151 │ }, 2026-10-24T02:49:00.3211670Z 152 │ }); 2026-10-24T02:49:00.3211755Z 153 │ recorderRef.current = recorder; 2026-10-24T02:49:00.3211859Z 154 │ sessionRef.current = new VoiceInputSession({ 2026-10-24T02:49:00.3211920Z 155 │ recorder, 2026-10-24T02:49:00.3212023Z 156 │ getTranscriber: getLocalVoiceTranscriber, 2026-10-24T02:49:00.3212111Z 157 │ requestPermission: async () => { 2026-10-24T02:49:00.3212244Z 158 │ const permission = await requestRecordingPermissionsAsync(); 2026-10-24T02:49:00.3212401Z 159 │ return { granted: permission.granted, canAskAgain: permission.canAskAgain }; 2026-10-24T02:49:00.3212467Z 160 │ }, 2026-10-24T02:49:00.3212582Z 161 │ configureRecording: configureVoiceRecordingAudio, 2026-10-24T02:49:00.3212690Z 162 │ releaseRecording: releaseVoiceRecordingAudio, 2026-10-24T02:49:00.3212794Z 163 │ deleteRecording: (uri) => new File(uri).delete(), 2026-10-24T02:49:00.3212876Z 164 │ onStateChange: (nextState) => 2026-10-24T02:49:00.3212943Z 165 │ setState({ 2026-10-24T02:49:00.3213014Z 166 │ state: nextState, 2026-10-24T02:49:00.3213119Z 167 │ ownerKey: sessionRef.current?.ownerKey ?? null, 2026-10-24T02:49:00.3213220Z 168 │ label: sessionRef.current?.label ?? null, 2026-10-24T02:49:00.3213281Z 169 │ }), 2026-10-24T02:49:00.3213337Z 170 │ }); 2026-10-24T02:49:00.3213393Z 171 │ } 2026-10-24T02:49:00.3213448Z 172 │ 2026-10-24T02:49:00.3213535Z 173 │ const session = sessionRef.current; 2026-10-24T02:49:00.3213629Z 174 │ const controller = session.controller; 2026-10-24T02:49:00.3213720Z 175 │ const recorder = recorderRef.current; 2026-10-24T02:49:00.3213776Z 176 │ 2026-10-24T02:49:00.3213845Z 177 │ useEffect(() => { 2026-10-24T02:49:00.3213995Z 178 │ const subscription = AppState.addEventListener("change", (nextState) => { 2026-10-24T02:49:00.3214139Z 179 │ // iOS reports `inactive` while its permission dialog is open. Only the 2026-10-24T02:49:00.3214282Z 180 │ // real background state cancels preparation; recorder status handles 2026-10-24T02:49:00.3214388Z 181 │ // calls and route interruptions during capture. 2026-10-24T02:49:00.3214524Z 182 │ if (nextState === "background") controller.appMovedToBackground(); 2026-10-24T02:49:00.3214582Z 183 │ }); 2026-10-24T02:49:00.3214670Z 184 │ return () => subscription.remove(); 2026-10-24T02:49:00.3214742Z 185 │ }, [controller]); 2026-10-24T02:49:00.3214797Z 186 │ 2026-10-24T02:49:00.3214861Z 187 │ useEffect( 2026-10-24T02:49:00.3214926Z 188 │ () => () => { 2026-10-24T02:49:00.3215001Z 189 │ controller.dispose(); 2026-10-24T02:49:00.3215068Z 190 │ recorder.release(); 2026-10-24T02:49:00.3215126Z 191 │ }, 2026-10-24T02:49:00.3215197Z 192 │ [controller, recorder], 2026-10-24T02:49:00.3215250Z 193 │ ); 2026-10-24T02:49:00.3215304Z 194 │ 2026-10-24T02:49:00.3215371Z 195 │ useEffect(() => { 2026-10-24T02:49:00.3215465Z 196 │ if (state.phase !== "recording") return; 2026-10-24T02:49:00.3215516Z 197 │ 2026-10-24T02:49:00.3215670Z 198 │ const tag = `voice-input:${keepAwakeId}:${++keepAwakeSessionRef.current}`; 2026-10-24T02:49:00.3215779Z 199 │ const activation = activateKeepAwakeAsync(tag); 2026-10-24T02:49:00.3215946Z 200 │ void activation.catch(() => {}); 2026-10-24T02:49:00.3216135Z 201 │ return () => { 2026-10-24T02:49:00.3216290Z 202 │ // Release after activation settles, even if the recording ends immediately. 2026-10-24T02:49:00.3216433Z 203 │ void activation.then(() => deactivateKeepAwake(tag)).catch(() => {}); 2026-10-24T02:49:00.3216491Z 204 │ }; 2026-10-24T02:49:00.3216569Z 205 │ }, [keepAwakeId, state.phase]); 2026-10-24T02:49:00.3216623Z 206 │ 2026-10-24T02:49:00.3216689Z 207 │ useEffect(() => { 2026-10-24T02:49:00.3216826Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T02:49:00.3216879Z 209 │ 2026-10-24T02:49:00.3217002Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T02:49:00.3217162Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T02:49:00.3217272Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T02:49:00.3217352Z ·  ─────┬───── 2026-10-24T02:49:00.3217497Z · ╰── `audioLevels` cannot be modified 2026-10-24T02:49:00.3217555Z 213 │ } 2026-10-24T02:49:00.3217609Z ╰──── 2026-10-24T02:49:00.3217888Z  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-24T02:49:00.3218213Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3218216Z 2026-10-24T02:49:00.3218424Z ⚠ react(immutability): Cannot modify local variables after render completes 2026-10-24T02:49:00.3218595Z ╭─[apps/mobile/src/features/voice-input/VoiceInputProvider.tsx:212:7] 2026-10-24T02:49:00.3218651Z 206 │ 2026-10-24T02:49:00.3218717Z 207 │ useEffect(() => { 2026-10-24T02:49:00.3218797Z ·  ───┬─── 2026-10-24T02:49:00.3219021Z · ╰── This function may (indirectly) reassign or modify `audioLevels` after render 2026-10-24T02:49:00.3219159Z 208 │ if (state.phase !== "preparing" && state.phase !== "recording") return; 2026-10-24T02:49:00.3219214Z 209 │ 2026-10-24T02:49:00.3219336Z 210 │ if (audioLevelsRef.current.some((level) => level !== 0)) { 2026-10-24T02:49:00.3219494Z 211 │ audioLevelsRef.current = Array(VOICE_WAVEFORM_SAMPLE_COUNT).fill(0); 2026-10-24T02:49:00.3219596Z 212 │ audioLevels.value = audioLevelsRef.current; 2026-10-24T02:49:00.3219675Z ·  ─────┬───── 2026-10-24T02:49:00.3219886Z · ╰── This modifies `audioLevels` 2026-10-24T02:49:00.3219974Z 213 │ } 2026-10-24T02:49:00.3220026Z ╰──── 2026-10-24T02:49:00.3220420Z  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-24T02:49:00.3220740Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3220743Z 2026-10-24T02:49:00.3220904Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3221078Z ╭─[apps/mobile/src/features/voice-input/GlobalVoiceInputControl.tsx:68:5] 2026-10-24T02:49:00.3221181Z 65 │ const [expanded, setExpanded] = useState(false); 2026-10-24T02:49:00.3221273Z 66 │ const progress = useSharedValue(0); 2026-10-24T02:49:00.3221353Z ·  ────┬─── 2026-10-24T02:49:00.3221487Z · ╰── `progress` originates here 2026-10-24T02:49:00.3221552Z 67 │ useEffect(() => { 2026-10-24T02:49:00.3221680Z 68 │ progress.value = withTiming(expanded ? 1 : 0, MORPH_TIMING); 2026-10-24T02:49:00.3221752Z ·  ────┬─── 2026-10-24T02:49:00.3221889Z · ╰── `progress` cannot be modified 2026-10-24T02:49:00.3221959Z 69 │ }, [expanded, progress]); 2026-10-24T02:49:00.3222013Z ╰──── 2026-10-24T02:49:00.3222291Z  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-24T02:49:00.3222614Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3222621Z 2026-10-24T02:49:00.3222888Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3223036Z ╭─[apps/mobile/src/features/files/FileTreeBrowser.tsx:155:5] 2026-10-24T02:49:00.3223091Z 150 │ 2026-10-24T02:49:00.3223157Z 151 │ useEffect(() => { 2026-10-24T02:49:00.3223228Z ·  ────┬──── 2026-10-24T02:49:00.3223359Z · ╰── This is the containing effect 2026-10-24T02:49:00.3223444Z 152 │ if (!controlledSelectedPath) { 2026-10-24T02:49:00.3223508Z 153 │ return; 2026-10-24T02:49:00.3223562Z 154 │ } 2026-10-24T02:49:00.3223647Z 155 │ setExpandedPaths((current) => { 2026-10-24T02:49:00.3223738Z ·  ────────┬─────── 2026-10-24T02:49:00.3223916Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3224038Z 156 │ const ancestors = ancestorPaths(controlledSelectedPath); 2026-10-24T02:49:00.3224092Z ╰──── 2026-10-24T02:49:00.3224729Z  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-24T02:49:00.3225071Z  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-24T02:49:00.3225074Z 2026-10-24T02:49:00.3225644Z ⚠ 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-24T02:49:00.3225891Z ╭─[apps/server/src/project/ProjectEnrichmentService.test.ts:28:3] 2026-10-24T02:49:00.3225949Z 27 │ ) { 2026-10-24T02:49:00.3226162Z 28 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3226310Z 29 │ │ const available = yield* service.peek(workspaceRoot); 2026-10-24T02:49:00.3226442Z 30 │ │ if (predicate(available)) return available; 2026-10-24T02:49:00.3226544Z 31 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3226683Z 32 │ ╰─▶ } 2026-10-24T02:49:00.3226875Z 33 │ return yield* Effect.die(`Project metadata for ${workspaceRoot} was not resolved in time.`); 2026-10-24T02:49:00.3226929Z ╰──── 2026-10-24T02:49:00.3226932Z 2026-10-24T02:49:00.3227416Z ⚠ 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-24T02:49:00.3227557Z ╭─[apps/server/src/project/ProjectService.test.ts:94:3] 2026-10-24T02:49:00.3227616Z 93 │ ) { 2026-10-24T02:49:00.3227824Z 94 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3228004Z 95 │ │ const project = Option.getOrThrow(yield* service.getById(projectId)); 2026-10-24T02:49:00.3228133Z 96 │ │ if (predicate(project)) return project; 2026-10-24T02:49:00.3228236Z 97 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3228365Z 98 │ ╰─▶ } 2026-10-24T02:49:00.3228516Z 99 │ return yield* Effect.die(`Project ${projectId} was not enriched in time.`); 2026-10-24T02:49:00.3228572Z ╰──── 2026-10-24T02:49:00.3228574Z 2026-10-24T02:49:00.3228832Z ⚠ eslint(no-unused-vars): Function 'normalizeTerminalContextSelection' is declared but never used. 2026-10-24T02:49:00.3228951Z ╭─[apps/web/src/lib/terminalContext.ts:56:10] 2026-10-24T02:49:00.3229007Z 55 │ 2026-10-24T02:49:00.3229106Z 56 │ function normalizeTerminalContextSelection( 2026-10-24T02:49:00.3229229Z ·  ────────────────┬──────────────── 2026-10-24T02:49:00.3229430Z · ╰── 'normalizeTerminalContextSelection' is declared here 2026-10-24T02:49:00.3229521Z 57 │ selection: TerminalContextSelection, 2026-10-24T02:49:00.3229573Z ╰──── 2026-10-24T02:49:00.3229681Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3229684Z 2026-10-24T02:49:00.3229903Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:49:00.3230040Z ╭─[apps/web/src/lib/composerContextReferences.ts:90:40] 2026-10-24T02:49:00.3230148Z 89 │ let cursor = prompt.length; 2026-10-24T02:49:00.3230257Z 90 │ for (const occurrence of occurrences.reverse()) { 2026-10-24T02:49:00.3230367Z ·  ─────── 2026-10-24T02:49:00.3230547Z 91 │ let { start, end } = occurrence; 2026-10-24T02:49:00.3230644Z ╰──── 2026-10-24T02:49:00.3230921Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:49:00.3230924Z 2026-10-24T02:49:00.3231133Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3231286Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:257:7] 2026-10-24T02:49:00.3231385Z 256 │ return () => cancelAnimationFrame(frame); 2026-10-24T02:49:00.3231469Z 257 │ }, [props.path, targetIndex]); 2026-10-24T02:49:00.3231550Z ·  ─────┬──── 2026-10-24T02:49:00.3231703Z · ╰── Unnecessary dependency `props.path` 2026-10-24T02:49:00.3231757Z 258 │ 2026-10-24T02:49:00.3231819Z ╰──── 2026-10-24T02:49:00.3232131Z  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-24T02:49:00.3232458Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3232461Z 2026-10-24T02:49:00.3232664Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3232816Z ╭─[apps/mobile/src/features/files/SourceFileSurface.tsx:293:23] 2026-10-24T02:49:00.3232896Z 292 │ 2026-10-24T02:49:00.3234031Z ·  ─────────── 2026-10-24T02:49:00.3234122Z 310 │ {body} 2026-10-24T02:49:00.3234213Z ╰──── 2026-10-24T02:49:00.3234453Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T02:49:00.3234462Z 2026-10-24T02:49:00.3234659Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3234833Z ╭─[apps/web/src/components/CustomSnoozeDialog.tsx:140:58] 2026-10-24T02:49:00.3235005Z 139 │ {...(weekStartsOn === undefined ? {} : { weekStartsOn })} 2026-10-24T02:49:00.3235193Z 140 │ disabled={{ before: new Date(new Date().setHours(0, 0, 0, 0)) }} 2026-10-24T02:49:00.3235366Z ·  ─────┬──── 2026-10-24T02:49:00.3235558Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3235694Z 141 │ onSelect={(selected) => { 2026-10-24T02:49:00.3235773Z ╰──── 2026-10-24T02:49:00.3236199Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.3236559Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3236581Z 2026-10-24T02:49:00.3236889Z ⚠ eslint(no-unused-vars): Type 'Scope' is imported but never used. 2026-10-24T02:49:00.3237062Z ╭─[apps/server/src/provider/ProviderAuthService.ts:15:18] 2026-10-24T02:49:00.3237192Z 14 │ import * as Layer from "effect/Layer"; 2026-10-24T02:49:00.3237330Z 15 │ import type * as Scope from "effect/Scope"; 2026-10-24T02:49:00.3237424Z ·  ──┬── 2026-10-24T02:49:00.3237602Z · ╰── 'Scope' is imported here 2026-10-24T02:49:00.3237724Z 16 │ import * as Stream from "effect/Stream"; 2026-10-24T02:49:00.3237829Z ╰──── 2026-10-24T02:49:00.3237947Z  help: Consider removing this import. 2026-10-24T02:49:00.3237950Z 2026-10-24T02:49:00.3238267Z ⚠ eslint(no-unused-vars): Variable 'useDragRegion' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3238452Z ╭─[apps/web/src/components/preview/PreviewPanelShell.tsx:61:9] 2026-10-24T02:49:00.3238543Z 60 │ ) { 2026-10-24T02:49:00.3238739Z 61 │ const useDragRegion = isElectron && props.mode !== "sheet" && props.mode !== "embedded"; 2026-10-24T02:49:00.3238857Z ·  ──────┬────── 2026-10-24T02:49:00.3239038Z · ╰── 'useDragRegion' is declared here 2026-10-24T02:49:00.3239161Z 62 │ const isInline = props.mode === "inline"; 2026-10-24T02:49:00.3239242Z ╰──── 2026-10-24T02:49:00.3239393Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3239396Z 2026-10-24T02:49:00.3239708Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:49:00.3239908Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:100:85] 2026-10-24T02:49:00.3240044Z  99 │ const startEditor = startScheduledTaskEditor; 2026-10-24T02:49:00.3240291Z 100 │ const resetEditor = useCallback(() => startEditor(defaultEditor), [defaultEditor, startEditor]); 2026-10-24T02:49:00.3240478Z ·  ─────┬───── 2026-10-24T02:49:00.3240733Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T02:49:00.3240844Z 101 │ const readEditor = useCallback( 2026-10-24T02:49:00.3240923Z ╰──── 2026-10-24T02:49:00.3241293Z  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-24T02:49:00.3241661Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3241664Z 2026-10-24T02:49:00.3241885Z ⚠ react(memo-dependencies): Found extra memoization dependencies 2026-10-24T02:49:00.3242084Z ╭─[apps/mobile/src/features/settings/scheduled-task-editor.tsx:121:7] 2026-10-24T02:49:00.3242170Z 120 │ setEditor, 2026-10-24T02:49:00.3242271Z 121 │ startEditor, 2026-10-24T02:49:00.3242458Z ·  ─────┬───── 2026-10-24T02:49:00.3242663Z · ╰── Unnecessary dependency `startEditor` 2026-10-24T02:49:00.3242758Z 122 │ hasChanges, 2026-10-24T02:49:00.3242954Z ╰──── 2026-10-24T02:49:00.3243315Z  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-24T02:49:00.3243675Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3243678Z 2026-10-24T02:49:00.3243921Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3244087Z ╭─[apps/mobile/src/components/ComposerEditor.tsx:82:6] 2026-10-24T02:49:00.3244180Z 81 │ }, 2026-10-24T02:49:00.3244279Z 82 │ [draftKey], 2026-10-24T02:49:00.3244378Z ·  ────┬─── 2026-10-24T02:49:00.3244548Z · ╰── Unnecessary dependency `draftKey` 2026-10-24T02:49:00.3244645Z 83 │ ); 2026-10-24T02:49:00.3244733Z ╰──── 2026-10-24T02:49:00.3245073Z  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-24T02:49:00.3245403Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3245406Z 2026-10-24T02:49:00.3245737Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3245964Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:119:10] 2026-10-24T02:49:00.3246053Z 117 │ 2026-10-24T02:49:00.3246134Z 118 │ useEffect(() => { 2026-10-24T02:49:00.3246252Z ·  ────┬──── 2026-10-24T02:49:00.3246516Z · ╰── This is the containing effect 2026-10-24T02:49:00.3246632Z 119 │ void refreshNotifications(); 2026-10-24T02:49:00.3246741Z ·  ──────────┬───────── 2026-10-24T02:49:00.3246952Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3247151Z 120 │ const subscription = AppState.addEventListener("change", (state) => { 2026-10-24T02:49:00.3247237Z ╰──── 2026-10-24T02:49:00.3247983Z  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-24T02:49:00.3248364Z  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-24T02:49:00.3248378Z 2026-10-24T02:49:00.3248671Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3248906Z ╭─[apps/mobile/src/features/settings/SettingsNotificationsRouteScreen.tsx:128:7] 2026-10-24T02:49:00.3248999Z 125 │ 2026-10-24T02:49:00.3249098Z 126 │ useEffect(() => { 2026-10-24T02:49:00.3249182Z ·  ────┬──── 2026-10-24T02:49:00.3249370Z · ╰── This is the containing effect 2026-10-24T02:49:00.3249474Z 127 │ if (!isLoaded) { 2026-10-24T02:49:00.3249601Z 128 │ setLiveActivityStatus("checking"); 2026-10-24T02:49:00.3249802Z ·  ──────────┬────────── 2026-10-24T02:49:00.3250023Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3250169Z 129 │ return; 2026-10-24T02:49:00.3250255Z ╰──── 2026-10-24T02:49:00.3250904Z  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-24T02:49:00.3251268Z  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-24T02:49:00.3251271Z 2026-10-24T02:49:00.3251527Z ⚠ eslint(no-unused-vars): Identifier 'Fiber' is imported but never used. 2026-10-24T02:49:00.3251661Z ╭─[apps/server/src/ws.ts:10:13] 2026-10-24T02:49:00.3251781Z  9 │ import * as Effect from "effect/Effect"; 2026-10-24T02:49:00.3251882Z 10 │ import * as Fiber from "effect/Fiber"; 2026-10-24T02:49:00.3252007Z ·  ──┬── 2026-10-24T02:49:00.3252187Z · ╰── 'Fiber' is imported here 2026-10-24T02:49:00.3252323Z 11 │ import * as FileSystem from "effect/FileSystem"; 2026-10-24T02:49:00.3252391Z ╰──── 2026-10-24T02:49:00.3252523Z  help: Consider removing this import. 2026-10-24T02:49:00.3252529Z 2026-10-24T02:49:00.3252789Z ⚠ eslint(no-unused-vars): Identifier 'Schedule' is imported but never used. 2026-10-24T02:49:00.3252914Z ╭─[apps/server/src/ws.ts:17:13] 2026-10-24T02:49:00.3253010Z 16 │ import * as Ref from "effect/Ref"; 2026-10-24T02:49:00.3253232Z 17 │ import * as Schedule from "effect/Schedule"; 2026-10-24T02:49:00.3253350Z ·  ────┬─── 2026-10-24T02:49:00.3253535Z · ╰── 'Schedule' is imported here 2026-10-24T02:49:00.3253639Z 18 │ import * as Schema from "effect/Schema"; 2026-10-24T02:49:00.3253729Z ╰──── 2026-10-24T02:49:00.3253854Z  help: Consider removing this import. 2026-10-24T02:49:00.3253857Z 2026-10-24T02:49:00.3254303Z ⚠ eslint(no-unused-vars): Variable 'projectSetupScriptRunner' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3254474Z ╭─[apps/server/src/ws.ts:1285:13] 2026-10-24T02:49:00.3254650Z 1284 │ const usageLimitSources = yield* UsageLimitSources.UsageLimitSources; 2026-10-24T02:49:00.3254898Z 1285 │ const projectSetupScriptRunner = yield* ProjectSetupScriptRunner.ProjectSetupScriptRunner; 2026-10-24T02:49:00.3255045Z ·  ────────────┬─────────── 2026-10-24T02:49:00.3255264Z · ╰── 'projectSetupScriptRunner' is declared here 2026-10-24T02:49:00.3255452Z 1286 │ const worktreeSetupTracker = yield* WorktreeSetupTracker.WorktreeSetupTracker; 2026-10-24T02:49:00.3255549Z ╰──── 2026-10-24T02:49:00.3255682Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3255691Z 2026-10-24T02:49:00.3255928Z ⚠ eslint(no-control-regex): Unexpected control character 2026-10-24T02:49:00.3256143Z ╭─[apps/mobile/src/features/settings/SettingsProviderAccountsRouteScreen.tsx:220:46] 2026-10-24T02:49:00.3256422Z 219 │ 2026-10-24T02:49:00.3256604Z 220 │ {interaction.output.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "")} 2026-10-24T02:49:00.3256752Z ·  ──┬─ 2026-10-24T02:49:00.3256965Z · ╰── 'U+001B' is a control character. 2026-10-24T02:49:00.3257050Z 221 │ 2026-10-24T02:49:00.3257145Z ╰──── 2026-10-24T02:49:00.3257419Z  help: Avoid matching control characters in regular expressions. If intentional, disable this rule for the expression. 2026-10-24T02:49:00.3257424Z 2026-10-24T02:49:00.3257650Z ⚠ eslint(no-empty-pattern): Empty array binding pattern 2026-10-24T02:49:00.3257828Z ╭─[apps/server/src/pullRequest/PullRequestService.test.ts:1572:12] 2026-10-24T02:49:00.3257925Z 1571 │ 2026-10-24T02:49:00.3258030Z 1572 │ for (const [] of [ 2026-10-24T02:49:00.3258141Z ·  ── 2026-10-24T02:49:00.3258240Z 1573 │ ["github", "github.com"], 2026-10-24T02:49:00.3258334Z ╰──── 2026-10-24T02:49:00.3258663Z  help: Passing non-iterable values (null, undefined, numbers, booleans, etc.) will result in a runtime error because these values are not iterable. 2026-10-24T02:49:00.3258666Z 2026-10-24T02:49:00.3258963Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3259183Z ╭─[apps/mobile/src/features/terminal/terminalLaunchContext.ts:117:5] 2026-10-24T02:49:00.3259472Z 112 │ const [entry, setEntry] = useState(() => ({ key: input.targetKey, location: candidate })); 2026-10-24T02:49:00.3259572Z 113 │ useEffect(() => { 2026-10-24T02:49:00.3259678Z ·  ────┬──── 2026-10-24T02:49:00.3259848Z · ╰── This is the containing effect 2026-10-24T02:49:00.3260043Z 114 │ if (entry.key === input.targetKey && (entry.location !== null || candidate === null)) { 2026-10-24T02:49:00.3260184Z 115 │ return; 2026-10-24T02:49:00.3260275Z 116 │ } 2026-10-24T02:49:00.3260422Z 117 │ setEntry({ key: input.targetKey, location: candidate }); 2026-10-24T02:49:00.3260520Z ·  ────┬─── 2026-10-24T02:49:00.3260816Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3261005Z 118 │ }, [candidate, entry.key, entry.location, input.targetKey]); 2026-10-24T02:49:00.3261092Z ╰──── 2026-10-24T02:49:00.3261734Z  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-24T02:49:00.3262119Z  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-24T02:49:00.3262122Z 2026-10-24T02:49:00.3262368Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3262542Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:454:7] 2026-10-24T02:49:00.3262657Z 453 │ showAuxiliaryPane("inspector"); 2026-10-24T02:49:00.3262886Z 454 │ }, [environmentId, showAuxiliaryPane, threadId]); 2026-10-24T02:49:00.3263075Z ·  ──────┬────── ────┬─── 2026-10-24T02:49:00.3263315Z · │ ╰── Unnecessary dependency `threadId` 2026-10-24T02:49:00.3263505Z · ╰── Unnecessary dependency `environmentId` 2026-10-24T02:49:00.3263601Z 455 │ const { 2026-10-24T02:49:00.3263681Z ╰──── 2026-10-24T02:49:00.3264026Z  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-24T02:49:00.3264395Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3264398Z 2026-10-24T02:49:00.3264614Z ⚠ react(static-components): Cannot create components during render 2026-10-24T02:49:00.3264780Z ╭─[apps/mobile/src/features/review/ReviewSheet.tsx:725:20] 2026-10-24T02:49:00.3264890Z 492 │ // same check. 2026-10-24T02:49:00.3265054Z 493 │ const NativeReviewDiffView = resolveNativeReviewDiffView(); 2026-10-24T02:49:00.3265217Z ·  ─────────────┬───────────── 2026-10-24T02:49:00.3265411Z · ╰── The component is created during render here 2026-10-24T02:49:00.3265624Z 494 │ const nativeReviewDiffViewRef = useRef(null); 2026-10-24T02:49:00.3265785Z 495 │ const showcasedReviewDrawRef = useRef(null); 2026-10-24T02:49:00.3266161Z 496 │ const [isPullRefreshing, setIsPullRefreshing] = useState(false); 2026-10-24T02:49:00.3266282Z 497 │ const handlePullToRefresh = async () => { 2026-10-24T02:49:00.3266489Z 498 │ setIsPullRefreshing(true); 2026-10-24T02:49:00.3266616Z 499 │ await refreshSelectedSection(); 2026-10-24T02:49:00.3266732Z 500 │ setIsPullRefreshing(false); 2026-10-24T02:49:00.3266820Z 501 │ }; 2026-10-24T02:49:00.3266974Z 502 │ const reviewFileNavigatorRef = useRef(null); 2026-10-24T02:49:00.3267171Z 503 │ const reviewFiles = parsedDiff.kind === "files" ? parsedDiff.files : []; 2026-10-24T02:49:00.3267409Z 504 │ const fileVisibility = useReviewFileVisibility({ 2026-10-24T02:49:00.3267573Z 505 │ threadKey: reviewCache.threadKey, 2026-10-24T02:49:00.3267680Z 506 │ sectionId: selectedSection?.id ?? null, 2026-10-24T02:49:00.3267785Z 507 │ files: reviewFiles, 2026-10-24T02:49:00.3267933Z 508 │ cachedExpandedFileIds: selectedSection?.id 2026-10-24T02:49:00.3268099Z 509 │ ? reviewCache.expandedFileIdsBySection[selectedSection.id] 2026-10-24T02:49:00.3268180Z 510 │ : undefined, 2026-10-24T02:49:00.3268303Z 511 │ cachedViewedFileIds: selectedSection?.id 2026-10-24T02:49:00.3268482Z 512 │ ? reviewCache.viewedFileIdsBySection[selectedSection.id] 2026-10-24T02:49:00.3268579Z 513 │ : undefined, 2026-10-24T02:49:00.3268651Z 514 │ }); 2026-10-24T02:49:00.3268974Z 515 │ const { collapsedFileIds, toggleExpandedFile, toggleViewedFile, viewedFileIds } = fileVisibility; 2026-10-24T02:49:00.3269155Z 516 │ const commentSelection = useReviewCommentSelectionController({ 2026-10-24T02:49:00.3269266Z 517 │ environmentId, 2026-10-24T02:49:00.3269345Z 518 │ threadId, 2026-10-24T02:49:00.3269445Z 519 │ selectedSection, 2026-10-24T02:49:00.3269541Z 520 │ nativeReviewDiffData, 2026-10-24T02:49:00.3269656Z 521 │ }); 2026-10-24T02:49:00.3269779Z 522 │ const nativeBridge = useNativeReviewDiffBridge({ 2026-10-24T02:49:00.3269898Z 523 │ threadKey: reviewCache.threadKey, 2026-10-24T02:49:00.3270024Z 524 │ sectionId: selectedSection?.id ?? null, 2026-10-24T02:49:00.3270175Z 525 │ diff: selectedSection?.diff, 2026-10-24T02:49:00.3270278Z 526 │ data: nativeReviewDiffData, 2026-10-24T02:49:00.3270383Z 527 │ collapsedFileIds, 2026-10-24T02:49:00.3270480Z 528 │ viewedFileIds, 2026-10-24T02:49:00.3270612Z 529 │ selectedRowIds: commentSelection.selectedRowIds, 2026-10-24T02:49:00.3270749Z 530 │ canHighlight: parsedDiff.kind === "files", 2026-10-24T02:49:00.3270850Z 531 │ }); 2026-10-24T02:49:00.3271050Z 532 │ const showcaseReviewKey = 2026-10-24T02:49:00.3271200Z 533 │ SHOWCASE_ENABLED && parsedDiff.kind === "files" && selectedSection 2026-10-24T02:49:00.3271442Z 534 │ ? `${reviewCache.threadKey}:${selectedSection.id}:${nativeBridge.tokensResetKey}:${nativeBridge.themeId}` 2026-10-24T02:49:00.3271552Z 535 │ : null; 2026-10-24T02:49:00.3271754Z 536 │ const handleNativeDebug = (event: NativeSyntheticEvent>) => { 2026-10-24T02:49:00.3271871Z 537 │ nativeBridge.onDebug(event); 2026-10-24T02:49:00.3271944Z 538 │ if ( 2026-10-24T02:49:00.3272063Z 539 │ showcaseReviewKey === null || 2026-10-24T02:49:00.3272227Z 540 │ showcasedReviewDrawRef.current === showcaseReviewKey || 2026-10-24T02:49:00.3272379Z 541 │ !isNativeReviewDiffDrawEvent(event.nativeEvent) 2026-10-24T02:49:00.3272459Z 542 │ ) { 2026-10-24T02:49:00.3272544Z 543 │ return; 2026-10-24T02:49:00.3272652Z 544 │ } 2026-10-24T02:49:00.3272800Z 545 │ showcasedReviewDrawRef.current = showcaseReviewKey; 2026-10-24T02:49:00.3272985Z 546 │ reportShowcaseSceneRendered({ scene: "review", themeId: nativeBridge.themeId }); 2026-10-24T02:49:00.3273074Z 547 │ }; 2026-10-24T02:49:00.3273163Z 548 │ 2026-10-24T02:49:00.3273327Z 549 │ const handleSelectFile = async (fileId: string | null) => { 2026-10-24T02:49:00.3273422Z 550 │ loadVisibleFile(fileId, true); 2026-10-24T02:49:00.3273644Z 551 │ commentSelection.clearSelection(); 2026-10-24T02:49:00.3273790Z 552 │ if (fileId !== null && collapsedFileIds.includes(fileId)) { 2026-10-24T02:49:00.3273924Z 553 │ toggleExpandedFile(fileId); 2026-10-24T02:49:00.3273995Z 554 │ } 2026-10-24T02:49:00.3274226Z 555 │ const nativeView = nativeReviewDiffViewRef.current; 2026-10-24T02:49:00.3274366Z 556 │ if (!nativeView) return; 2026-10-24T02:49:00.3274495Z 557 │ const result = await settlePromise(() => 2026-10-24T02:49:00.3274701Z 558 │ fileId === null ? nativeView.scrollToTop(true) : nativeView.scrollToFile(fileId, true), 2026-10-24T02:49:00.3274792Z 559 │ ); 2026-10-24T02:49:00.3274914Z 560 │ if (AsyncResult.isFailure(result)) { 2026-10-24T02:49:00.3275128Z 561 │ console.error("[review] Failed to navigate to diff file", squashAtomCommandFailure(result)); 2026-10-24T02:49:00.3275205Z 562 │ } 2026-10-24T02:49:00.3275306Z 563 │ }; 2026-10-24T02:49:00.3275423Z 564 │ const handleVisibleFileChange = ( 2026-10-24T02:49:00.3275574Z 565 │ event: NativeSyntheticEvent<{ readonly fileId?: string | null }>, 2026-10-24T02:49:00.3280334Z 566 │ ) => { 2026-10-24T02:49:00.3280485Z 567 │ loadVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T02:49:00.3280661Z 568 │ reviewFileNavigatorRef.current?.setVisibleFile(event.nativeEvent.fileId ?? null); 2026-10-24T02:49:00.3280716Z 569 │ }; 2026-10-24T02:49:00.3280796Z 570 │ const renderInspector = () => ( 2026-10-24T02:49:00.3280865Z 571 │ void handleSelectFile(fileId)} 2026-10-24T02:49:00.3281385Z 577 │ /> 2026-10-24T02:49:00.3281439Z 578 │ ); 2026-10-24T02:49:00.3281490Z 579 │ 2026-10-24T02:49:00.3281686Z 580 │ const handleNativeToggleFile = (event: NativeSyntheticEvent<{ readonly fileId?: string }>) => { 2026-10-24T02:49:00.3281778Z 581 │ const { fileId } = event.nativeEvent; 2026-10-24T02:49:00.3281842Z 582 │ if (fileId) { 2026-10-24T02:49:00.3281922Z 583 │ loadVisibleFile(fileId, true); 2026-10-24T02:49:00.3282001Z 584 │ toggleExpandedFile(fileId); 2026-10-24T02:49:00.3282055Z 585 │ } 2026-10-24T02:49:00.3282111Z 586 │ }; 2026-10-24T02:49:00.3282162Z 587 │ 2026-10-24T02:49:00.3282251Z 588 │ const handleNativeToggleViewedFile = ( 2026-10-24T02:49:00.3282370Z 589 │ event: NativeSyntheticEvent<{ readonly fileId?: string }>, 2026-10-24T02:49:00.3282426Z 590 │ ) => { 2026-10-24T02:49:00.3282512Z 591 │ const { fileId } = event.nativeEvent; 2026-10-24T02:49:00.3282575Z 592 │ if (fileId) { 2026-10-24T02:49:00.3282657Z 593 │ toggleViewedFile(fileId); 2026-10-24T02:49:00.3282711Z 594 │ } 2026-10-24T02:49:00.3282765Z 595 │ }; 2026-10-24T02:49:00.3282818Z 596 │ 2026-10-24T02:49:00.3282890Z 597 │ const parsedDiffNotice = 2026-10-24T02:49:00.3283054Z 598 │ parsedDiff.kind === "files" || parsedDiff.kind === "raw" ? parsedDiff.notice : null; 2026-10-24T02:49:00.3283176Z 599 │ const hasCachedSelectedDiff = selectedSection?.diff != null; 2026-10-24T02:49:00.3283334Z 600 │ const hasAnyCachedDiff = reviewSections.some((section) => section.diff != null); 2026-10-24T02:49:00.3283455Z 601 │ const sectionMenu = buildReviewSectionMenu(reviewSections); 2026-10-24T02:49:00.3283613Z 602 │ const { showConnectionNotice, showSectionToolbar } = resolveReviewAvailability({ 2026-10-24T02:49:00.3283724Z 603 │ hasEnvironmentPresentation: environment.isReady, 2026-10-24T02:49:00.3283918Z 604 │ isEnvironmentConnected: isEnvironmentReady, 2026-10-24T02:49:00.3284038Z 605 │ hasCachedSelectedDiff, 2026-10-24T02:49:00.3284104Z 606 │ hasAnyCachedDiff, 2026-10-24T02:49:00.3284158Z 607 │ }); 2026-10-24T02:49:00.3284245Z 608 │ const handleRetryEnvironment = () => { 2026-10-24T02:49:00.3284335Z 609 │ void retryEnvironment(environmentId); 2026-10-24T02:49:00.3284388Z 610 │ }; 2026-10-24T02:49:00.3284474Z 611 │ const handleReturnToThread = () => { 2026-10-24T02:49:00.3284553Z 612 │ if (navigation.canGoBack()) { 2026-10-24T02:49:00.3284622Z 613 │ navigation.goBack(); 2026-10-24T02:49:00.3284682Z 614 │ return; 2026-10-24T02:49:00.3284736Z 615 │ } 2026-10-24T02:49:00.3284818Z 616 │ navigation.navigate("Thread", { 2026-10-24T02:49:00.3284907Z 617 │ environmentId: String(environmentId), 2026-10-24T02:49:00.3284984Z 618 │ threadId: String(threadId), 2026-10-24T02:49:00.3285045Z 619 │ }); 2026-10-24T02:49:00.3285101Z 620 │ }; 2026-10-24T02:49:00.3285178Z 621 │ const androidHeaderSubtitle = [ 2026-10-24T02:49:00.3285249Z 622 │ selectedSection?.title, 2026-10-24T02:49:00.3285332Z 623 │ headerDiffSummary.additions, 2026-10-24T02:49:00.3285410Z 624 │ headerDiffSummary.deletions, 2026-10-24T02:49:00.3285462Z 625 │ ] 2026-10-24T02:49:00.3285568Z 626 │ .filter((part): part is string => Boolean(part)) 2026-10-24T02:49:00.3285636Z 627 │ .join(" · "); 2026-10-24T02:49:00.3285688Z 628 │ 2026-10-24T02:49:00.3285763Z 629 │ const showChangedFilesPane = 2026-10-24T02:49:00.3285837Z 630 │ !showConnectionNotice && 2026-10-24T02:49:00.3285911Z 631 │ selectedSection !== null && 2026-10-24T02:49:00.3285989Z 632 │ parsedDiff.kind === "files" && 2026-10-24T02:49:00.3286067Z 633 │ NativeReviewDiffView !== null; 2026-10-24T02:49:00.3286245Z 634 │ useRegisterWorkspaceInspector(showChangedFilesPane ? renderInspector : undefined); 2026-10-24T02:49:00.3286419Z 635 │ const showChangedFilesToggle = panes.supportsAuxiliaryPane && showChangedFilesPane; 2026-10-24T02:49:00.3286471Z 636 │ 2026-10-24T02:49:00.3286541Z 637 │ const listHeader = (() => { 2026-10-24T02:49:00.3286626Z 638 │ const children: ReactElement[] = []; 2026-10-24T02:49:00.3286679Z 639 │ 2026-10-24T02:49:00.3286739Z 640 │ if (error) { 2026-10-24T02:49:00.3286806Z 641 │ children.push( 2026-10-24T02:49:00.3286868Z 642 │ 2026-10-24T02:49:00.3287533Z 649 │ Review unavailable 2026-10-24T02:49:00.3287693Z 650 │ {error} 2026-10-24T02:49:00.3287753Z 651 │ , 2026-10-24T02:49:00.3287807Z 652 │ ); 2026-10-24T02:49:00.3287862Z 653 │ } 2026-10-24T02:49:00.3287915Z 654 │ 2026-10-24T02:49:00.3287987Z 655 │ if (parsedDiffNotice) { 2026-10-24T02:49:00.3288148Z 656 │ children.push(); 2026-10-24T02:49:00.3288201Z 657 │ } 2026-10-24T02:49:00.3288253Z 658 │ 2026-10-24T02:49:00.3288328Z 659 │ if (children.length === 0) { 2026-10-24T02:49:00.3288557Z 660 │ return null; 2026-10-24T02:49:00.3288666Z 661 │ } 2026-10-24T02:49:00.3288718Z 662 │ 2026-10-24T02:49:00.3288786Z 663 │ return <>{children}; 2026-10-24T02:49:00.3288841Z 664 │ })(); 2026-10-24T02:49:00.3288911Z 665 │ const headerSubtitle = [ 2026-10-24T02:49:00.3288990Z 666 │ headerDiffSummary.additions, 2026-10-24T02:49:00.3289067Z 667 │ headerDiffSummary.deletions, 2026-10-24T02:49:00.3289147Z 668 │ pendingReviewCommentCount > 0 2026-10-24T02:49:00.3289322Z 669 │ ? `${pendingReviewCommentCount} comment${pendingReviewCommentCount === 1 ? "" : "s"}` 2026-10-24T02:49:00.3289381Z 670 │ : null, 2026-10-24T02:49:00.3289434Z 671 │ ] 2026-10-24T02:49:00.3289499Z 672 │ .filter(Boolean) 2026-10-24T02:49:00.3289562Z 673 │ .join(" · "); 2026-10-24T02:49:00.3289698Z 674 │ const headerTitleText = selectedSection?.title ?? "Review changes"; 2026-10-24T02:49:00.3289754Z 675 │ 2026-10-24T02:49:00.3289816Z 676 │ return ( 2026-10-24T02:49:00.3289871Z 677 │ <> 2026-10-24T02:49:00.3289934Z 678 │ 2026-10-24T02:49:00.3291298Z 694 │ 2026-10-24T02:49:00.3291365Z 695 │ 2026-10-24T02:49:00.3291488Z 696 │ 2026-10-24T02:49:00.3291568Z 697 │ {showConnectionNotice ? ( 2026-10-24T02:49:00.3291709Z 698 │ 2026-10-24T02:49:00.3291799Z 699 │ 2026-10-24T02:49:00.3292911Z 711 │ 2026-10-24T02:49:00.3293070Z 712 │ ) : selectedSection && parsedDiff.kind === "files" && NativeReviewDiffView ? ( 2026-10-24T02:49:00.3293136Z 713 │ 2026-10-24T02:49:00.3293574Z 719 │ 2026-10-24T02:49:00.3293929Z 723 │ {listHeader} 2026-10-24T02:49:00.3294049Z 724 │ 2026-10-24T02:49:00.3294137Z 725 │ { 2026-10-24T02:49:00.3297412Z 201 │ terminalDebugLog("native:surface", { 2026-10-24T02:49:00.3297496Z 202 │ terminalKey: props.terminalKey, 2026-10-24T02:49:00.3297573Z 203 │ native: hasNativeSurface, 2026-10-24T02:49:00.3297710Z 204 │ hardwareKeyRevision: getNativeTerminalHardwareKeyRevision(), 2026-10-24T02:49:00.3297793Z 205 │ bufferLen: props.buffer.length, 2026-10-24T02:49:00.3297876Z 206 │ isRunning: props.isRunning, 2026-10-24T02:49:00.3297936Z 207 │ }); 2026-10-24T02:49:00.3298095Z 208 │ }, [hasNativeSurface, props.buffer.length, props.isRunning, props.terminalKey]); 2026-10-24T02:49:00.3298182Z 209 │ const handleNativeInput = useCallback( 2026-10-24T02:49:00.3298298Z 210 │ (event: NativeSyntheticEvent) => { 2026-10-24T02:49:00.3298395Z 211 │ if (!props.isRunning || props.readOnly) { 2026-10-24T02:49:00.3298456Z 212 │ return; 2026-10-24T02:49:00.3298510Z 213 │ } 2026-10-24T02:49:00.3298599Z 214 │ terminalDebugLog("native:onInput", { 2026-10-24T02:49:00.3298753Z 215 │ codes: Array.from(event.nativeEvent.data, (char) => char.codePointAt(0)), 2026-10-24T02:49:00.3298811Z 216 │ }); 2026-10-24T02:49:00.3298896Z 217 │ onInput(event.nativeEvent.data); 2026-10-24T02:49:00.3298951Z 218 │ }, 2026-10-24T02:49:00.3299054Z 219 │ [onInput, props.isRunning, props.readOnly], 2026-10-24T02:49:00.3299110Z 220 │ ); 2026-10-24T02:49:00.3299196Z 221 │ const handleNativeResize = useCallback( 2026-10-24T02:49:00.3299311Z 222 │ (event: NativeSyntheticEvent) => { 2026-10-24T02:49:00.3299373Z 223 │ onResize({ 2026-10-24T02:49:00.3299456Z 224 │ cols: event.nativeEvent.cols, 2026-10-24T02:49:00.3299535Z 225 │ rows: event.nativeEvent.rows, 2026-10-24T02:49:00.3299592Z 226 │ }); 2026-10-24T02:49:00.3299646Z 227 │ }, 2026-10-24T02:49:00.3299707Z 228 │ [onResize], 2026-10-24T02:49:00.3299759Z 229 │ ); 2026-10-24T02:49:00.3299810Z 230 │ 2026-10-24T02:49:00.3299891Z 231 │ if (NativeTerminalSurfaceView) { 2026-10-24T02:49:00.3299948Z 232 │ return ( 2026-10-24T02:49:00.3300026Z 233 │ 2026-10-24T02:49:00.3300151Z 234 │ { 2026-10-24T02:49:00.3303506Z ·  ────┬──── 2026-10-24T02:49:00.3303639Z · ╰── This is the containing effect 2026-10-24T02:49:00.3303749Z 640 │ if (pendingLaunchEntry.key === launchTargetKey) { 2026-10-24T02:49:00.3303808Z 641 │ return; 2026-10-24T02:49:00.3303862Z 642 │ } 2026-10-24T02:49:00.3303936Z 643 │ setPendingLaunchEntry({ 2026-10-24T02:49:00.3304029Z ·  ──────────┬────────── 2026-10-24T02:49:00.3304207Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3304277Z 644 │ key: launchTargetKey, 2026-10-24T02:49:00.3304327Z ╰──── 2026-10-24T02:49:00.3304954Z  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-24T02:49:00.3305288Z  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-24T02:49:00.3305291Z 2026-10-24T02:49:00.3305561Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3305735Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:653:5] 2026-10-24T02:49:00.3305786Z 648 │ 2026-10-24T02:49:00.3305930Z 649 │ useEffect(() => { 2026-10-24T02:49:00.3306000Z ·  ────┬──── 2026-10-24T02:49:00.3306131Z · ╰── This is the containing effect 2026-10-24T02:49:00.3306246Z 650 │ if (initialAttachGridEntry.key === launchTargetKey) { 2026-10-24T02:49:00.3306305Z 651 │ return; 2026-10-24T02:49:00.3306358Z 652 │ } 2026-10-24T02:49:00.3306439Z 653 │ setInitialAttachGridEntry({ 2026-10-24T02:49:00.3306532Z ·  ────────────┬──────────── 2026-10-24T02:49:00.3306794Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3306906Z 654 │ key: launchTargetKey, 2026-10-24T02:49:00.3306958Z ╰──── 2026-10-24T02:49:00.3307581Z  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-24T02:49:00.3307914Z  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-24T02:49:00.3307917Z 2026-10-24T02:49:00.3308178Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3308354Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:746:7] 2026-10-24T02:49:00.3308409Z 743 │ 2026-10-24T02:49:00.3308473Z 744 │ useEffect(() => { 2026-10-24T02:49:00.3308542Z ·  ────┬──── 2026-10-24T02:49:00.3308671Z · ╰── This is the containing effect 2026-10-24T02:49:00.3308773Z 745 │ if (!routeEnvironmentId || !routeThreadId) { 2026-10-24T02:49:00.3308841Z 746 │ setLastGridSize({ 2026-10-24T02:49:00.3308921Z ·  ───────┬─────── 2026-10-24T02:49:00.3309094Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3309176Z 747 │ cols: DEFAULT_TERMINAL_COLS, 2026-10-24T02:49:00.3309228Z ╰──── 2026-10-24T02:49:00.3309858Z  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-24T02:49:00.3310217Z  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-24T02:49:00.3310220Z 2026-10-24T02:49:00.3310426Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3310600Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:538:24] 2026-10-24T02:49:00.3310655Z 537 │ }); 2026-10-24T02:49:00.3310778Z 538 │ }, [terminal.buffer, terminal.buffer.length, terminalKey]); 2026-10-24T02:49:00.3310893Z ·  ───────────┬────────── 2026-10-24T02:49:00.3311145Z · ╰── Overly precise dependency `terminal.buffer.length`, use `terminal.buffer` instead 2026-10-24T02:49:00.3311310Z 539 │ const cwd = terminal.summary?.cwd ?? selectedThreadProject?.workspaceRoot ?? null; 2026-10-24T02:49:00.3311360Z ╰──── 2026-10-24T02:49:00.3311666Z  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-24T02:49:00.3311990Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3311993Z 2026-10-24T02:49:00.3312270Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3312473Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:709:7] 2026-10-24T02:49:00.3312568Z 708 │ sentInitialInputKeyRef.current = null; 2026-10-24T02:49:00.3312636Z 709 │ }, [terminalKey]); 2026-10-24T02:49:00.3312712Z ·  ─────┬───── 2026-10-24T02:49:00.3312858Z · ╰── Unnecessary dependency `terminalKey` 2026-10-24T02:49:00.3312909Z 710 │ 2026-10-24T02:49:00.3312961Z ╰──── 2026-10-24T02:49:00.3313265Z  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-24T02:49:00.3313588Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3313595Z 2026-10-24T02:49:00.3313800Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3313971Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:800:52] 2026-10-24T02:49:00.3314030Z 799 │ }; 2026-10-24T02:49:00.3314212Z 800 │ }, [canOperateTerminal, isRunning, pasteSession, terminal.lifecycleVersion, terminalKey]); 2026-10-24T02:49:00.3314393Z ·  ────────────┬──────────── ─────┬───── 2026-10-24T02:49:00.3314628Z · │ ╰── Unnecessary dependency `terminalKey` 2026-10-24T02:49:00.3314850Z · ╰── Unnecessary dependency `terminal.lifecycleVersion` 2026-10-24T02:49:00.3314907Z 801 │ 2026-10-24T02:49:00.3314958Z ╰──── 2026-10-24T02:49:00.3315258Z  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-24T02:49:00.3315583Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3315586Z 2026-10-24T02:49:00.3315735Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3315907Z ╭─[apps/mobile/src/features/terminal/ThreadTerminalRouteScreen.tsx:793:24] 2026-10-24T02:49:00.3315961Z 792 │ } 2026-10-24T02:49:00.3316066Z 793 │ const pasteSession = pasteSessionRef.current; 2026-10-24T02:49:00.3316184Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3316352Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3316404Z 794 │ 2026-10-24T02:49:00.3316454Z ╰──── 2026-10-24T02:49:00.3316946Z  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-24T02:49:00.3317249Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3317252Z 2026-10-24T02:49:00.3317398Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3317632Z ╭─[apps/mobile/src/features/diffs/nativeReviewDiffSurface.ts:277:39] 2026-10-24T02:49:00.3317722Z 276 │ 2026-10-24T02:49:00.3317909Z 277 │ ╭─▶ return createElement(RawNativeView, { 2026-10-24T02:49:00.3318005Z 278 │ │ ...nativeProps, 2026-10-24T02:49:00.3318152Z 279 │ │ refreshEnabled: props.onPullToRefresh !== undefined, 2026-10-24T02:49:00.3318244Z 280 │ │ ref: nativeRef, 2026-10-24T02:49:00.3318376Z 281 │ ├─▶ }); 2026-10-24T02:49:00.3318618Z · ╰──── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3318673Z 282 │ } 2026-10-24T02:49:00.3318730Z ╰──── 2026-10-24T02:49:00.3319222Z  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-24T02:49:00.3319524Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3319527Z 2026-10-24T02:49:00.3319769Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T02:49:00.3319908Z ╭─[apps/web/src/components/chat/useComposerSend.ts:985:13] 2026-10-24T02:49:00.3320033Z 984 │ const changedBeforeDecline = draftChangedSinceSend(); 2026-10-24T02:49:00.3320318Z 985 │ ╭─▶ const pendingIdsBeforeDecline = pendingApprovalsRef.current.map( 2026-10-24T02:49:00.3320443Z 986 │ │ (approval) => approval.requestId, 2026-10-24T02:49:00.3320578Z 987 │ ╰─▶ ); 2026-10-24T02:49:00.3320717Z 988 │ const approvalResponding = approvalsToDecline.some((approval) => 2026-10-24T02:49:00.3320770Z ╰──── 2026-10-24T02:49:00.3320847Z  help: Switch to `Set` 2026-10-24T02:49:00.3320850Z 2026-10-24T02:49:00.3321059Z ⚠ unicorn(require-module-specifiers): Empty import specifier is not allowed 2026-10-24T02:49:00.3321229Z ╭─[apps/server/src/sourceControl/SourceControlProviderRegistry.ts:15:13] 2026-10-24T02:49:00.3321302Z 14 │ } from "@t3tools/contracts"; 2026-10-24T02:49:00.3321473Z 15 │ import type {} from "@t3tools/contracts"; 2026-10-24T02:49:00.3321573Z ·  ── 2026-10-24T02:49:00.3321751Z 16 │ import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl"; 2026-10-24T02:49:00.3321803Z ╰──── 2026-10-24T02:49:00.3321885Z  help: Remove empty braces 2026-10-24T02:49:00.3321887Z 2026-10-24T02:49:00.3322378Z ⚠ 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-24T02:49:00.3322528Z ╭─[apps/server/src/background/HostPowerMonitor.test.ts:133:11] 2026-10-24T02:49:00.3322662Z 132 │ const monitor = yield* HostPowerMonitor.HostPowerMonitor; 2026-10-24T02:49:00.3322812Z 133 │ ╭─▶ for ( 2026-10-24T02:49:00.3322920Z 134 │ │ let attempt = 0; 2026-10-24T02:49:00.3323090Z 135 │ │ attempt < 100 && (yield* monitor.snapshot).onBattery !== "true"; 2026-10-24T02:49:00.3323189Z 136 │ │ attempt += 1 2026-10-24T02:49:00.3323271Z 137 │ │ ) { 2026-10-24T02:49:00.3323383Z 138 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3323518Z 139 │ ╰─▶ } 2026-10-24T02:49:00.3323644Z 140 │ expect((yield* monitor.snapshot).onBattery).toBe("true"); 2026-10-24T02:49:00.3323695Z ╰──── 2026-10-24T02:49:00.3323697Z 2026-10-24T02:49:00.3324006Z ⚠ eslint(no-unused-vars): Variable 'revokeActiveMcpThread' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3324138Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:218:7] 2026-10-24T02:49:00.3324190Z 217 │ 2026-10-24T02:49:00.3324338Z 218 │ const revokeActiveMcpThread = (threadId: ThreadId): Effect.Effect => 2026-10-24T02:49:00.3324431Z ·  ──────────┬────────── 2026-10-24T02:49:00.3324591Z · ╰── 'revokeActiveMcpThread' is declared here 2026-10-24T02:49:00.3324780Z 219 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeThread(threadId) : Effect.void; 2026-10-24T02:49:00.3324832Z ╰──── 2026-10-24T02:49:00.3324939Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3324941Z 2026-10-24T02:49:00.3325265Z ⚠ eslint(no-unused-vars): Variable 'revokeAllActiveMcpCredentials' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3325395Z ╭─[apps/server/src/mcp/McpSessionRegistry.ts:221:7] 2026-10-24T02:49:00.3325448Z 220 │ 2026-10-24T02:49:00.3325582Z 221 │ const revokeAllActiveMcpCredentials = (): Effect.Effect => 2026-10-24T02:49:00.3325688Z ·  ──────────────┬────────────── 2026-10-24T02:49:00.3325867Z · ╰── 'revokeAllActiveMcpCredentials' is declared here 2026-10-24T02:49:00.3326030Z 222 │ activeMcpSessionRegistry ? activeMcpSessionRegistry.revokeAll : Effect.void; 2026-10-24T02:49:00.3326081Z ╰──── 2026-10-24T02:49:00.3326186Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3326189Z 2026-10-24T02:49:00.3326496Z ⚠ eslint(no-unused-vars): Function 'resolveThreadWorkspaceCwd' is declared but never used. 2026-10-24T02:49:00.3326647Z ╭─[apps/server/src/checkpointing/Utils.ts:12:10] 2026-10-24T02:49:00.3326699Z 11 │ 2026-10-24T02:49:00.3326797Z 12 │ function resolveThreadWorkspaceCwd(input: { 2026-10-24T02:49:00.3326897Z ·  ────────────┬──────────── 2026-10-24T02:49:00.3327069Z · ╰── 'resolveThreadWorkspaceCwd' is declared here 2026-10-24T02:49:00.3327135Z 13 │ readonly thread: { 2026-10-24T02:49:00.3327187Z ╰──── 2026-10-24T02:49:00.3327288Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3327292Z 2026-10-24T02:49:00.3327449Z ⚠ eslint(no-new): Do not use 'new' for side effects. 2026-10-24T02:49:00.3327575Z ╭─[apps/server/src/mcp/McpToolAccess.test.ts:168:3] 2026-10-24T02:49:00.3327694Z 167 │ // @ts-expect-error a declaration constructed directly 2026-10-24T02:49:00.3327792Z 168 │ new McpToolAccess.Declaration(unchecked); 2026-10-24T02:49:00.3327888Z ·  ───────────────────────────── 2026-10-24T02:49:00.3328018Z 169 │ // @ts-expect-error a handlers layer built outside McpToolAccess 2026-10-24T02:49:00.3328069Z ╰──── 2026-10-24T02:49:00.3328231Z  help: Assign the result of 'new' to a variable or compare it to a reference. 2026-10-24T02:49:00.3328236Z 2026-10-24T02:49:00.3328448Z ⚠ eslint(no-unused-vars): Function 'describeSchedule' is declared but never used. 2026-10-24T02:49:00.3328574Z ╭─[apps/server/src/scheduledTasks/Schedule.ts:79:10] 2026-10-24T02:49:00.3328627Z 78 │ 2026-10-24T02:49:00.3328765Z 79 │ function describeSchedule(schedule: ScheduledTaskSchedule): string { 2026-10-24T02:49:00.3328856Z ·  ────────┬─────── 2026-10-24T02:49:00.3329010Z · ╰── 'describeSchedule' is declared here 2026-10-24T02:49:00.3329119Z 80 │ if (schedule.type === "webhook") return "On webhook"; 2026-10-24T02:49:00.3329170Z ╰──── 2026-10-24T02:49:00.3329271Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3329274Z 2026-10-24T02:49:00.3329462Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3329601Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:121:27] 2026-10-24T02:49:00.3329766Z 120 │ const scope = makeScope(options.capabilities ?? new Set(["preview", "worktree"])); 2026-10-24T02:49:00.3329853Z 121 │ const dispatch = vi.fn((_: unknown) => 2026-10-24T02:49:00.3329937Z ·  ┬ 2026-10-24T02:49:00.3330113Z · ╰── '_' is declared here 2026-10-24T02:49:00.3330217Z 122 │ (options.dispatchGate ?? Effect.void).pipe( 2026-10-24T02:49:00.3330267Z ╰──── 2026-10-24T02:49:00.3330370Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3330373Z 2026-10-24T02:49:00.3330557Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3330694Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:134:39] 2026-10-24T02:49:00.3330748Z 133 │ ); 2026-10-24T02:49:00.3330855Z 134 │ const listLocalBranchNames = vi.fn((_: string) => 2026-10-24T02:49:00.3330955Z ·  ┬ 2026-10-24T02:49:00.3331096Z · ╰── '_' is declared here 2026-10-24T02:49:00.3331239Z 135 │ Effect.succeed( 2026-10-24T02:49:00.3331324Z ╰──── 2026-10-24T02:49:00.3331426Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3331429Z 2026-10-24T02:49:00.3331613Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3331748Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:178:31] 2026-10-24T02:49:00.3331804Z 177 │ }); 2026-10-24T02:49:00.3331901Z 178 │ const sendToThread = vi.fn((_: unknown) => { 2026-10-24T02:49:00.3331989Z ·  ┬ 2026-10-24T02:49:00.3332123Z · ╰── '_' is declared here 2026-10-24T02:49:00.3332223Z 179 │ switch (options.continuation ?? "queued") { 2026-10-24T02:49:00.3332274Z ╰──── 2026-10-24T02:49:00.3332379Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3332385Z 2026-10-24T02:49:00.3332568Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3332703Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:203:33] 2026-10-24T02:49:00.3332758Z 202 │ ); 2026-10-24T02:49:00.3332855Z 203 │ const removeWorktree = vi.fn((_: unknown) => 2026-10-24T02:49:00.3332944Z ·  ┬ 2026-10-24T02:49:00.3333080Z · ╰── '_' is declared here 2026-10-24T02:49:00.3333161Z 204 │ options.removeWorktreeFails 2026-10-24T02:49:00.3333211Z ╰──── 2026-10-24T02:49:00.3333310Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3333312Z 2026-10-24T02:49:00.3333502Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3333641Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:208:36] 2026-10-24T02:49:00.3333695Z 207 │ ); 2026-10-24T02:49:00.3333796Z 208 │ const deleteLocalBranch = vi.fn((_: unknown) => 2026-10-24T02:49:00.3333891Z ·  ┬ 2026-10-24T02:49:00.3334031Z · ╰── '_' is declared here 2026-10-24T02:49:00.3334117Z 209 │ options.deleteLocalBranchFails 2026-10-24T02:49:00.3334167Z ╰──── 2026-10-24T02:49:00.3334268Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3334271Z 2026-10-24T02:49:00.3334457Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3334597Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:213:42] 2026-10-24T02:49:00.3334655Z 212 │ ); 2026-10-24T02:49:00.3334766Z 213 │ const fetchWorktreeBaseCommit = vi.fn((_: unknown) => 2026-10-24T02:49:00.3334867Z ·  ┬ 2026-10-24T02:49:00.3335009Z · ╰── '_' is declared here 2026-10-24T02:49:00.3335095Z 214 │ options.fetchWorktreeBaseFails 2026-10-24T02:49:00.3335144Z ╰──── 2026-10-24T02:49:00.3335244Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3335246Z 2026-10-24T02:49:00.3335429Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3335564Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:254:30] 2026-10-24T02:49:00.3335617Z 253 │ ); 2026-10-24T02:49:00.3335787Z 254 │ const localStatus = vi.fn((_: unknown) => 2026-10-24T02:49:00.3335920Z ·  ┬ 2026-10-24T02:49:00.3336054Z · ╰── '_' is declared here 2026-10-24T02:49:00.3336121Z 255 │ Effect.succeed({ 2026-10-24T02:49:00.3336174Z ╰──── 2026-10-24T02:49:00.3336274Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3336276Z 2026-10-24T02:49:00.3336459Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3336592Z ╭─[apps/server/src/mcp/WorktreeMcpService.test.ts:264:32] 2026-10-24T02:49:00.3336646Z 263 │ ); 2026-10-24T02:49:00.3336799Z 264 │ const refreshStatus = vi.fn((_: string) => Effect.die("refreshStatus stub")); 2026-10-24T02:49:00.3336894Z ·  ┬ 2026-10-24T02:49:00.3337030Z · ╰── '_' is declared here 2026-10-24T02:49:00.3337179Z 265 │ const runForThread = vi.fn((input: { readonly worktreePath: string }) => { 2026-10-24T02:49:00.3337232Z ╰──── 2026-10-24T02:49:00.3337331Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3337334Z 2026-10-24T02:49:00.3337602Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3337777Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:79:5] 2026-10-24T02:49:00.3337830Z 76 │ 2026-10-24T02:49:00.3337896Z 77 │ useEffect(() => { 2026-10-24T02:49:00.3337966Z ·  ────┬──── 2026-10-24T02:49:00.3338103Z · ╰── This is the containing effect 2026-10-24T02:49:00.3338235Z 78 │ const { host, code } = parsePairingUrl(connectionPairingUrl); 2026-10-24T02:49:00.3338304Z 79 │ setHostInput(host); 2026-10-24T02:49:00.3338378Z ·  ──────┬───── 2026-10-24T02:49:00.3338550Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3338619Z 80 │ setCodeInput(code); 2026-10-24T02:49:00.3338670Z ╰──── 2026-10-24T02:49:00.3339303Z  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-24T02:49:00.3339645Z  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-24T02:49:00.3339652Z 2026-10-24T02:49:00.3339919Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3340135Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:89:5] 2026-10-24T02:49:00.3340188Z 82 │ 2026-10-24T02:49:00.3340251Z 83 │ useEffect(() => { 2026-10-24T02:49:00.3340322Z ·  ────┬──── 2026-10-24T02:49:00.3340450Z · ╰── This is the containing effect 2026-10-24T02:49:00.3340540Z 84 │ if (routePairingUrl.length === 0) { 2026-10-24T02:49:00.3340599Z 85 │ return; 2026-10-24T02:49:00.3340653Z 86 │ } 2026-10-24T02:49:00.3340705Z 87 │ 2026-10-24T02:49:00.3340897Z 88 │ const { host, code } = parsePairingUrl(routePairingUrl); 2026-10-24T02:49:00.3340996Z 89 │ setHostInput(host); 2026-10-24T02:49:00.3341071Z ·  ──────┬───── 2026-10-24T02:49:00.3341240Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3341306Z 90 │ setCodeInput(code); 2026-10-24T02:49:00.3341356Z ╰──── 2026-10-24T02:49:00.3341985Z  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-24T02:49:00.3342324Z  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-24T02:49:00.3342330Z 2026-10-24T02:49:00.3342595Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3342767Z ╭─[apps/mobile/src/features/connection/ConnectionsNewRouteScreen.tsx:95:7] 2026-10-24T02:49:00.3342818Z 92 │ 2026-10-24T02:49:00.3342881Z 93 │ useEffect(() => { 2026-10-24T02:49:00.3342950Z ·  ────┬──── 2026-10-24T02:49:00.3343077Z · ╰── This is the containing effect 2026-10-24T02:49:00.3343160Z 94 │ if (pairingConnectionError) { 2026-10-24T02:49:00.3343233Z 95 │ setIsSubmitting(false); 2026-10-24T02:49:00.3343315Z ·  ───────┬─────── 2026-10-24T02:49:00.3343492Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3343550Z 96 │ } 2026-10-24T02:49:00.3343600Z ╰──── 2026-10-24T02:49:00.3344226Z  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-24T02:49:00.3344557Z  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-24T02:49:00.3344559Z 2026-10-24T02:49:00.3345116Z ⚠ 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-24T02:49:00.3345338Z ╭─[apps/server/src/scheduledTasks/ScheduledTaskService.webhook.test.ts:521:13] 2026-10-24T02:49:00.3345408Z 520 │ })).delivery; 2026-10-24T02:49:00.3345613Z 521 │ ╭─▶ while (delivery.outcome === "accepted") { 2026-10-24T02:49:00.3345732Z 522 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3345945Z 523 │ │ delivery = (yield* service.getWebhookDelivery({ 2026-10-24T02:49:00.3346049Z 524 │ │ id: task.id, 2026-10-24T02:49:00.3346167Z 525 │ │ deliveryId: deliveryId!, 2026-10-24T02:49:00.3346268Z 526 │ │ })).delivery; 2026-10-24T02:49:00.3346416Z 527 │ ╰─▶ } 2026-10-24T02:49:00.3346538Z 528 │ assert.equal(delivery.outcome, "dispatch_failed"); 2026-10-24T02:49:00.3346591Z ╰──── 2026-10-24T02:49:00.3346593Z 2026-10-24T02:49:00.3346753Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3346915Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:42:5] 2026-10-24T02:49:00.3346967Z 35 │ 2026-10-24T02:49:00.3347106Z 36 │ const inspectorProgress = useSharedValue(inspectorVisible ? 1 : 0); 2026-10-24T02:49:00.3347193Z ·  ────────┬──────── 2026-10-24T02:49:00.3347342Z · ╰── `inspectorProgress` originates here 2026-10-24T02:49:00.3347439Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T02:49:00.3347581Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T02:49:00.3347637Z 39 │ 2026-10-24T02:49:00.3347716Z 40 │ const onClosed = props.onClosed; 2026-10-24T02:49:00.3347780Z 41 │ useEffect(() => { 2026-10-24T02:49:00.3347868Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T02:49:00.3347949Z ·  ────────┬──────── 2026-10-24T02:49:00.3348097Z · ╰── `inspectorProgress` cannot be modified 2026-10-24T02:49:00.3348174Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T02:49:00.3348227Z ╰──── 2026-10-24T02:49:00.3348507Z  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-24T02:49:00.3348831Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3348836Z 2026-10-24T02:49:00.3348994Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3349156Z ╭─[apps/mobile/src/features/layout/workspace-inspector-pane.tsx:67:7] 2026-10-24T02:49:00.3349249Z 37 │ const { renderedInspectorWidth } = props; 2026-10-24T02:49:00.3349380Z 38 │ const renderedContentWidth = useSharedValue(inspectorWidth ?? 0); 2026-10-24T02:49:00.3349471Z ·  ──────────┬───────── 2026-10-24T02:49:00.3349627Z · ╰── `renderedContentWidth` originates here 2026-10-24T02:49:00.3349678Z 39 │ 2026-10-24T02:49:00.3349757Z 40 │ const onClosed = props.onClosed; 2026-10-24T02:49:00.3349820Z 41 │ useEffect(() => { 2026-10-24T02:49:00.3350000Z 42 │ inspectorProgress.value = withTiming( 2026-10-24T02:49:00.3350151Z 43 │ inspectorVisible ? 1 : 0, 2026-10-24T02:49:00.3350221Z 44 │ WORKSPACE_PANE_TIMING, 2026-10-24T02:49:00.3350288Z 45 │ (finished) => { 2026-10-24T02:49:00.3350429Z 46 │ if (finished === true && !inspectorVisible && onClosed !== undefined) { 2026-10-24T02:49:00.3350500Z 47 │ runOnJS(onClosed)(); 2026-10-24T02:49:00.3350556Z 48 │ } 2026-10-24T02:49:00.3350611Z 49 │ }, 2026-10-24T02:49:00.3350666Z 50 │ ); 2026-10-24T02:49:00.3350798Z 51 │ const targetWidth = inspectorVisible ? (inspectorWidth ?? 0) : 0; 2026-10-24T02:49:00.3350875Z 52 │ renderedInspectorWidth.set( 2026-10-24T02:49:00.3351022Z 53 │ resizing ? targetWidth : withTiming(targetWidth, WORKSPACE_PANE_TIMING), 2026-10-24T02:49:00.3351076Z 54 │ ); 2026-10-24T02:49:00.3351130Z 55 │ }, [ 2026-10-24T02:49:00.3351203Z 56 │ inspectorProgress, 2026-10-24T02:49:00.3351273Z 57 │ inspectorVisible, 2026-10-24T02:49:00.3351336Z 58 │ inspectorWidth, 2026-10-24T02:49:00.3351394Z 59 │ onClosed, 2026-10-24T02:49:00.3351466Z 60 │ renderedInspectorWidth, 2026-10-24T02:49:00.3351526Z 61 │ resizing, 2026-10-24T02:49:00.3351581Z 62 │ ]); 2026-10-24T02:49:00.3351631Z 63 │ 2026-10-24T02:49:00.3351693Z 64 │ useEffect(() => { 2026-10-24T02:49:00.3351786Z 65 │ const targetWidth = inspectorWidth ?? 0; 2026-10-24T02:49:00.3351874Z 66 │ if (!inspectorVisible || resizing) { 2026-10-24T02:49:00.3351970Z 67 │ renderedContentWidth.value = targetWidth; 2026-10-24T02:49:00.3352059Z ·  ──────────┬───────── 2026-10-24T02:49:00.3352221Z · ╰── `renderedContentWidth` cannot be modified 2026-10-24T02:49:00.3352287Z 68 │ return; 2026-10-24T02:49:00.3352339Z ╰──── 2026-10-24T02:49:00.3352614Z  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-24T02:49:00.3352932Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3352935Z 2026-10-24T02:49:00.3353093Z ⚠ react(immutability): This value cannot be modified 2026-10-24T02:49:00.3353253Z ╭─[apps/mobile/src/features/connection/ConnectionStatusDot.tsx:58:7] 2026-10-24T02:49:00.3353347Z 53 │ function usePulseAnimation(pulse: boolean) { 2026-10-24T02:49:00.3353440Z 54 │ const pulseProgress = useSharedValue(0); 2026-10-24T02:49:00.3353521Z ·  ──────┬────── 2026-10-24T02:49:00.3353664Z · ╰── `pulseProgress` originates here 2026-10-24T02:49:00.3353718Z 55 │ 2026-10-24T02:49:00.3353782Z 56 │ useEffect(() => { 2026-10-24T02:49:00.3353846Z 57 │ if (pulse) { 2026-10-24T02:49:00.3353932Z 58 │ pulseProgress.value = withRepeat( 2026-10-24T02:49:00.3354012Z ·  ──────┬────── 2026-10-24T02:49:00.3354156Z · ╰── `pulseProgress` cannot be modified 2026-10-24T02:49:00.3354224Z 59 │ withTiming(1, { 2026-10-24T02:49:00.3354274Z ╰──── 2026-10-24T02:49:00.3354547Z  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-24T02:49:00.3354942Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/immutability 2026-10-24T02:49:00.3354984Z 2026-10-24T02:49:00.3355250Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3355428Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:327:7] 2026-10-24T02:49:00.3355481Z 322 │ }; 2026-10-24T02:49:00.3355548Z 323 │ useEffect(() => { 2026-10-24T02:49:00.3355621Z ·  ────┬──── 2026-10-24T02:49:00.3355755Z · ╰── This is the containing effect 2026-10-24T02:49:00.3355855Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T02:49:00.3355952Z 325 │ requestedSection.current = "overview"; 2026-10-24T02:49:00.3356128Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T02:49:00.3356204Z 327 │ setSection("overview"); 2026-10-24T02:49:00.3356279Z ·  ─────┬──── 2026-10-24T02:49:00.3356453Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3356509Z 328 │ } 2026-10-24T02:49:00.3356562Z ╰──── 2026-10-24T02:49:00.3357188Z  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-24T02:49:00.3357528Z  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-24T02:49:00.3357536Z 2026-10-24T02:49:00.3357749Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:49:00.3357924Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:329:6] 2026-10-24T02:49:00.3358022Z 324 │ if (!guidesEnabled && section === "guide") { 2026-10-24T02:49:00.3358115Z 325 │ requestedSection.current = "overview"; 2026-10-24T02:49:00.3358198Z ·  ────────┬─────── 2026-10-24T02:49:00.3358661Z · ╰── 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-24T02:49:00.3358828Z 326 │ currentScrollOffset.current = scrollOffsets.current.overview ?? -insets.top; 2026-10-24T02:49:00.3358984Z ·  ─────────┬───────── ──────┬────── 2026-10-24T02:49:00.3359505Z · │ ╰── 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-24T02:49:00.3359966Z · ╰── 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-24T02:49:00.3360039Z 327 │ setSection("overview"); 2026-10-24T02:49:00.3360125Z 328 │ } 2026-10-24T02:49:00.3360216Z 329 │ }, [guidesEnabled, section, insets.top]); 2026-10-24T02:49:00.3360396Z ·  ──────────────────┬───────────────── 2026-10-24T02:49:00.3360623Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3360710Z 330 │ const tabContent = activityContent; 2026-10-24T02:49:00.3360761Z ╰──── 2026-10-24T02:49:00.3360934Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:49:00.3361260Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3361263Z 2026-10-24T02:49:00.3361472Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:49:00.3361646Z ╭─[apps/mobile/src/features/pull-requests/PullRequestRouteScreen.tsx:864:6] 2026-10-24T02:49:00.3361708Z 847 │ if ( 2026-10-24T02:49:00.3361828Z 848 │ lastSelection.current.path === route.params.path && 2026-10-24T02:49:00.3361908Z ·  ──────┬────── 2026-10-24T02:49:00.3362364Z · ╰── 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-24T02:49:00.3362491Z 849 │ lastSelection.current.id === route.params.fileSelectionId 2026-10-24T02:49:00.3362548Z 850 │ ) 2026-10-24T02:49:00.3362610Z 851 │ return; 2026-10-24T02:49:00.3362791Z 852 │ lastSelection.current = { path: route.params.path, id: route.params.fileSelectionId }; 2026-10-24T02:49:00.3362927Z 853 │ if (route.params.focus) navigation.setParams({ focus: undefined }); 2026-10-24T02:49:00.3363018Z 854 │ setJumpPath(route.params.path); 2026-10-24T02:49:00.3363095Z 855 │ setSelectedRowId(null); 2026-10-24T02:49:00.3363174Z 856 │ jumpStarted.current = false; 2026-10-24T02:49:00.3363322Z 857 │ const file = data.files.find((entry) => entry.path === route.params.path); 2026-10-24T02:49:00.3363416Z 858 │ if (!file || !nativeView.current) return; 2026-10-24T02:49:00.3363506Z ·  ─────┬──── 2026-10-24T02:49:00.3363961Z · ╰── 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-24T02:49:00.3364086Z 859 │ setCollapsedIds((ids) => ids.filter((id) => id !== file.id)); 2026-10-24T02:49:00.3364164Z 860 │ jumpStarted.current = true; 2026-10-24T02:49:00.3364309Z 861 │ void nativeView.current.scrollToFile(file.id, false).catch(() => { 2026-10-24T02:49:00.3364392Z 862 │ jumpStarted.current = false; 2026-10-24T02:49:00.3364446Z 863 │ }); 2026-10-24T02:49:00.3364647Z 864 │ }, [route.params.path, route.params.fileSelectionId, route.params.focus, data.files, navigation]); 2026-10-24T02:49:00.3364854Z ·  ──────────────────────────────────────────────┬────────────────────────────────────────────── 2026-10-24T02:49:00.3365081Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3365192Z 865 │ const appliedFilter = useRef(filter.hideTestFiles); 2026-10-24T02:49:00.3365245Z ╰──── 2026-10-24T02:49:00.3365417Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:49:00.3365911Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3365949Z 2026-10-24T02:49:00.3366244Z ⚠ eslint(no-unused-vars): Variable 'layerUnavailable' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3366393Z ╭─[apps/server/src/orchestration-v2/Orchestrator.ts:12366:7] 2026-10-24T02:49:00.3366448Z 12365 │ 2026-10-24T02:49:00.3366591Z 12366 │ const layerUnavailable: Layer.Layer = Layer.succeed( 2026-10-24T02:49:00.3366677Z ·  ────────┬─────── 2026-10-24T02:49:00.3366827Z · ╰── 'layerUnavailable' is declared here 2026-10-24T02:49:00.3366895Z 12367 │ OrchestratorV2, 2026-10-24T02:49:00.3366954Z ╰──── 2026-10-24T02:49:00.3367063Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3367066Z 2026-10-24T02:49:00.3367269Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3367435Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:215:7] 2026-10-24T02:49:00.3367490Z 214 │ } 2026-10-24T02:49:00.3367559Z 215 │ }, [wrappedRender]); 2026-10-24T02:49:00.3367637Z ·  ──────┬────── 2026-10-24T02:49:00.3367788Z · ╰── Unnecessary dependency `wrappedRender` 2026-10-24T02:49:00.3367844Z 216 │ 2026-10-24T02:49:00.3367897Z ╰──── 2026-10-24T02:49:00.3368206Z  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-24T02:49:00.3368533Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3368536Z 2026-10-24T02:49:00.3368785Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:49:00.3368950Z ╭─[apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx:817:35] 2026-10-24T02:49:00.3369007Z 816 │ > 2026-10-24T02:49:00.3369119Z 817 │ 2026-10-24T02:49:00.3369238Z ·  ──────────────────── 2026-10-24T02:49:00.3369333Z 818 │ 2026-10-24T02:49:00.3370486Z 832 │ 2026-10-24T02:49:00.3370609Z ·  ──────────────────── 2026-10-24T02:49:00.3370709Z 833 │ 2026-10-24T02:49:00.3370760Z ╰──── 2026-10-24T02:49:00.3370993Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:49:00.3371136Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:49:00.3371138Z 2026-10-24T02:49:00.3371418Z ⚠ eslint(no-unused-vars): Variable 'layerDaemon' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3371555Z ╭─[apps/server/src/orchestration-v2/EffectWorker.ts:914:7] 2026-10-24T02:49:00.3371607Z 913 │ 2026-10-24T02:49:00.3371800Z 914 │ const layerDaemon: Layer.Layer = Layer.effectDiscard( 2026-10-24T02:49:00.3371877Z ·  ─────┬───── 2026-10-24T02:49:00.3372016Z · ╰── 'layerDaemon' is declared here 2026-10-24T02:49:00.3372105Z 915 │ runDaemon.pipe(Effect.forkScoped), 2026-10-24T02:49:00.3372160Z ╰──── 2026-10-24T02:49:00.3372265Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3372268Z 2026-10-24T02:49:00.3372542Z ⚠ eslint(no-unused-vars): Variable 'layerTest' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3372658Z ╭─[apps/server/src/usage/UsageService.ts:169:7] 2026-10-24T02:49:00.3372711Z 168 │ 2026-10-24T02:49:00.3372790Z 169 │ const layerTest = Layer.succeed( 2026-10-24T02:49:00.3372864Z ·  ────┬──── 2026-10-24T02:49:00.3372998Z · ╰── 'layerTest' is declared here 2026-10-24T02:49:00.3373062Z 170 │ UsageService, 2026-10-24T02:49:00.3373114Z ╰──── 2026-10-24T02:49:00.3373222Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3373229Z 2026-10-24T02:49:00.3373713Z ⚠ 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-24T02:49:00.3373894Z ╭─[apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts:223:5] 2026-10-24T02:49:00.3373967Z 222 │ let idlePasses = 0; 2026-10-24T02:49:00.3374113Z 223 │ ╭─▶ for (;;) { 2026-10-24T02:49:00.3374252Z 224 │ │ yield* Effect.promise(() => Promise.resolve()); 2026-10-24T02:49:00.3374400Z 225 │ │ const pending = backgroundRuntime.pending.shift(); 2026-10-24T02:49:00.3374578Z 226 │ │ if (!pending) { 2026-10-24T02:49:00.3374705Z 227 │ │ idlePasses++; 2026-10-24T02:49:00.3374809Z 228 │ │ if (idlePasses >= 3) { 2026-10-24T02:49:00.3374896Z 229 │ │ return; 2026-10-24T02:49:00.3374977Z 230 │ │ } 2026-10-24T02:49:00.3375065Z 231 │ │ continue; 2026-10-24T02:49:00.3375139Z 232 │ │ } 2026-10-24T02:49:00.3375233Z 233 │ │ idlePasses = 0; 2026-10-24T02:49:00.3375351Z 234 │ │ const exit = yield* Effect.exit( 2026-10-24T02:49:00.3375569Z 235 │ │ pending.operation as Effect.Effect, 2026-10-24T02:49:00.3375646Z 236 │ │ ); 2026-10-24T02:49:00.3375761Z 237 │ │ yield* Effect.sync(() => { 2026-10-24T02:49:00.3375870Z 238 │ │ pending.resolve(exit); 2026-10-24T02:49:00.3375947Z 239 │ │ }); 2026-10-24T02:49:00.3376077Z 240 │ ╰─▶ } 2026-10-24T02:49:00.3376134Z 241 │ }, 2026-10-24T02:49:00.3376187Z ╰──── 2026-10-24T02:49:00.3376189Z 2026-10-24T02:49:00.3376457Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3376624Z ╭─[apps/server/src/orchestration-v2/ThreadPullRequestService.ts:413:7] 2026-10-24T02:49:00.3376677Z 412 │ 2026-10-24T02:49:00.3376803Z 413 │ const layer = Layer.effect(ThreadPullRequestServiceV2, make); 2026-10-24T02:49:00.3376881Z ·  ──┬── 2026-10-24T02:49:00.3377009Z · ╰── 'layer' is declared here 2026-10-24T02:49:00.3377060Z ╰──── 2026-10-24T02:49:00.3377164Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3377166Z 2026-10-24T02:49:00.3377652Z ⚠ 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-24T02:49:00.3377784Z ╭─[apps/server/src/usage/UsageService.test.ts:2383:7] 2026-10-24T02:49:00.3377880Z 2382 │ let orphanedAt: number | undefined; 2026-10-24T02:49:00.3378118Z 2383 │ ╭─▶ for (let interruptAt = 1; interruptAt <= 31; interruptAt += 1) { 2026-10-24T02:49:00.3378248Z 2384 │ │ const tasks: Array<() => void> = []; 2026-10-24T02:49:00.3378404Z 2385 │ │ const dispatcher: Scheduler.SchedulerDispatcher = { 2026-10-24T02:49:00.3378538Z 2386 │ │ scheduleTask: (task) => tasks.push(task), 2026-10-24T02:49:00.3378637Z 2387 │ │ flush: () => { 2026-10-24T02:49:00.3378763Z 2388 │ │ let task: (() => void) | undefined; 2026-10-24T02:49:00.3378912Z 2389 │ │ while ((task = tasks.shift()) !== undefined) task(); 2026-10-24T02:49:00.3378994Z 2390 │ │ }, 2026-10-24T02:49:00.3379076Z 2391 │ │ }; 2026-10-24T02:49:00.3379147Z 2392 │ │ 2026-10-24T02:49:00.3379381Z 2393 │ │ let requestFiber: Fiber.Fiber | undefined; 2026-10-24T02:49:00.3379520Z 2394 │ │ let requestChecks = 0; 2026-10-24T02:49:00.3379655Z 2395 │ │ const scheduler: Scheduler.Scheduler = { 2026-10-24T02:49:00.3379766Z 2396 │ │ executionMode: "async", 2026-10-24T02:49:00.3379890Z 2397 │ │ makeDispatcher: () => dispatcher, 2026-10-24T02:49:00.3380003Z 2398 │ │ shouldYield: (fiber) => { 2026-10-24T02:49:00.3380166Z 2399 │ │ if (fiber !== requestFiber) return false; 2026-10-24T02:49:00.3380273Z 2400 │ │ requestChecks += 1; 2026-10-24T02:49:00.3380420Z 2401 │ │ if (requestChecks !== interruptAt) return false; 2026-10-24T02:49:00.3380541Z 2402 │ │ fiber.interruptUnsafe(); 2026-10-24T02:49:00.3380644Z 2403 │ │ return true; 2026-10-24T02:49:00.3380726Z 2404 │ │ }, 2026-10-24T02:49:00.3380806Z 2405 │ │ }; 2026-10-24T02:49:00.3380876Z 2406 │ │ 2026-10-24T02:49:00.3381000Z 2407 │ │ const input: UsageSummaryInput = { 2026-10-24T02:49:00.3381093Z 2408 │ │ ...WINDOW, 2026-10-24T02:49:00.3381223Z 2409 │ │ sinceDay: UsageDay.make("2026-09-01"), 2026-10-24T02:49:00.3381420Z 2410 │ │ untilDay: UsageDay.make(`2026-08-${String(interruptAt).padStart(2, "0")}`), 2026-10-24T02:49:00.3381499Z 2411 │ │ }; 2026-10-24T02:49:00.3381617Z 2412 │ │ const first = yield* service 2026-10-24T02:49:00.3381725Z 2413 │ │ .readSummary(input) 2026-10-24T02:49:00.3381814Z 2414 │ │ .pipe( 2026-10-24T02:49:00.3381911Z 2415 │ │ Effect.exit, 2026-10-24T02:49:00.3382073Z 2416 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T02:49:00.3382178Z 2417 │ │ Effect.forkChild, 2026-10-24T02:49:00.3382260Z 2418 │ │ ); 2026-10-24T02:49:00.3382362Z 2419 │ │ requestFiber = first; 2026-10-24T02:49:00.3382469Z 2420 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3382574Z 2421 │ │ dispatcher.flush(); 2026-10-24T02:49:00.3382644Z 2422 │ │ 2026-10-24T02:49:00.3382803Z 2423 │ │ const second = yield* service.readSummary(input).pipe( 2026-10-24T02:49:00.3382905Z 2424 │ │ Effect.match({ 2026-10-24T02:49:00.3383031Z 2425 │ │ onFailure: (error) => error.reason, 2026-10-24T02:49:00.3383156Z 2426 │ │ onSuccess: () => "success" as const, 2026-10-24T02:49:00.3383238Z 2427 │ │ }), 2026-10-24T02:49:00.3383396Z 2428 │ │ Effect.provideService(Scheduler.Scheduler, scheduler), 2026-10-24T02:49:00.3383499Z 2429 │ │ Effect.forkChild, 2026-10-24T02:49:00.3383580Z 2430 │ │ ); 2026-10-24T02:49:00.3383684Z 2431 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3383866Z 2432 │ │ dispatcher.flush(); 2026-10-24T02:49:00.3384028Z 2433 │ │ const secondExit = second.pollUnsafe(); 2026-10-24T02:49:00.3384147Z 2434 │ │ if (secondExit === undefined) { 2026-10-24T02:49:00.3384260Z 2435 │ │ second.interruptUnsafe(); 2026-10-24T02:49:00.3384372Z 2436 │ │ orphanedAt = interruptAt; 2026-10-24T02:49:00.3384459Z 2437 │ │ break; 2026-10-24T02:49:00.3384539Z 2438 │ │ } 2026-10-24T02:49:00.3384658Z 2439 │ │ if (Exit.isFailure(secondExit)) { 2026-10-24T02:49:00.3384819Z 2440 │ │ assert.fail("the matching request fiber was interrupted"); 2026-10-24T02:49:00.3384898Z 2441 │ │ } 2026-10-24T02:49:00.3385057Z 2442 │ │ assert.strictEqual(secondExit.value, "invalidWindow"); 2026-10-24T02:49:00.3385197Z 2443 │ ╰─▶ } 2026-10-24T02:49:00.3385252Z 2444 │ 2026-10-24T02:49:00.3385306Z ╰──── 2026-10-24T02:49:00.3385308Z 2026-10-24T02:49:00.3385517Z ⚠ eslint(no-unsafe-optional-chaining): Unsafe usage of optional chaining 2026-10-24T02:49:00.3385685Z ╭─[apps/server/src/orchestration-v2/ThreadLaunchService.test.ts:1783:8] 2026-10-24T02:49:00.3385751Z 1782 │ assert.equal( 2026-10-24T02:49:00.3385959Z 1783 │ (stored.context?.records[0] as { attachmentId: string }).attachmentId, 2026-10-24T02:49:00.3386065Z ·  ────────────────────────── 2026-10-24T02:49:00.3386143Z 1784 │ stored.attachments[0]?.id, 2026-10-24T02:49:00.3386203Z ╰──── 2026-10-24T02:49:00.3386384Z  help: If this short-circuits with 'undefined' the evaluation will throw TypeError 2026-10-24T02:49:00.3386387Z 2026-10-24T02:49:00.3386560Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.3386702Z ╭─[apps/server/src/process/externalLauncher.test.ts:186:12] 2026-10-24T02:49:00.3386755Z 185 │ 2026-10-24T02:49:00.3386857Z 186 │ for (const {} of ["darwin", "linux"] as const) { 2026-10-24T02:49:00.3386927Z ·  ── 2026-10-24T02:49:00.3386980Z 187 │ } 2026-10-24T02:49:00.3387033Z ╰──── 2026-10-24T02:49:00.3387276Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.3387279Z 2026-10-24T02:49:00.3387535Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.3387712Z ╭─[apps/server/src/process/externalLauncher.test.ts:189:12] 2026-10-24T02:49:00.3387764Z 188 │ 2026-10-24T02:49:00.3387830Z 189 │ for (const {} of [ 2026-10-24T02:49:00.3387899Z ·  ── 2026-10-24T02:49:00.3387989Z 190 │ { kind: "browser", folderVerb: "none" }, 2026-10-24T02:49:00.3388041Z ╰──── 2026-10-24T02:49:00.3388276Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.3388279Z 2026-10-24T02:49:00.3388448Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.3388586Z ╭─[apps/server/src/process/externalLauncher.test.ts:311:12] 2026-10-24T02:49:00.3388638Z 310 │ 2026-10-24T02:49:00.3388771Z 311 │ for (const {} of ["rejected", "spawn-error", "stalled"] as const) { 2026-10-24T02:49:00.3388843Z ·  ── 2026-10-24T02:49:00.3388894Z 312 │ } 2026-10-24T02:49:00.3388945Z ╰──── 2026-10-24T02:49:00.3389179Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.3389181Z 2026-10-24T02:49:00.3389349Z ⚠ eslint(no-empty-pattern): Empty object binding pattern 2026-10-24T02:49:00.3389488Z ╭─[apps/server/src/process/externalLauncher.test.ts:314:12] 2026-10-24T02:49:00.3389540Z 313 │ 2026-10-24T02:49:00.3389604Z 314 │ for (const {} of [ 2026-10-24T02:49:00.3389672Z ·  ── 2026-10-24T02:49:00.3389724Z 315 │ { 2026-10-24T02:49:00.3389778Z ╰──── 2026-10-24T02:49:00.3390015Z  help: Passing `null` or `undefined` will result in runtime error because `null` and `undefined` cannot be destructured. 2026-10-24T02:49:00.3390021Z 2026-10-24T02:49:00.3390300Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:49:00.3390459Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:290:50] 2026-10-24T02:49:00.3390518Z 289 │ return ( 2026-10-24T02:49:00.3390653Z 290 │ 2026-10-24T02:49:00.3390776Z ·  ───────────── 2026-10-24T02:49:00.3390843Z 291 │ {props.children} 2026-10-24T02:49:00.3390893Z ╰──── 2026-10-24T02:49:00.3391122Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:49:00.3391271Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:49:00.3391277Z 2026-10-24T02:49:00.3391522Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:49:00.3391679Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:654:44] 2026-10-24T02:49:00.3391739Z 653 │ return ( 2026-10-24T02:49:00.3391861Z 654 │ 2026-10-24T02:49:00.3391976Z ·  ───────────── 2026-10-24T02:49:00.3392042Z 655 │ {props.children} 2026-10-24T02:49:00.3392094Z ╰──── 2026-10-24T02:49:00.3392324Z  help: Wrap the `value` prop in useMemo() or useCallback(), or use a constant value to prevent unnecessary re-renders. 2026-10-24T02:49:00.3392542Z Alternatively, move the value outside the render function if it doesn't depend on props or state. 2026-10-24T02:49:00.3392577Z 2026-10-24T02:49:00.3392819Z ⚠ react(jsx-no-constructed-context-values): The Context `value` prop should not be constructed. 2026-10-24T02:49:00.3392982Z ╭─[apps/mobile/src/features/threads/ThreadSettingsSheet.tsx:1462:55] 2026-10-24T02:49:00.3393042Z 1461 │ return ( 2026-10-24T02:49:00.3393205Z 1462 │ 2026-10-24T02:49:00.3393337Z ·  ──────────────────── 2026-10-24T02:49:00.3393436Z 1463 │ { 2026-10-24T02:49:00.3399275Z ·  ────┬──── 2026-10-24T02:49:00.3399405Z · ╰── This is the containing effect 2026-10-24T02:49:00.3399487Z 106 │ clearReviewCommentTarget(); 2026-10-24T02:49:00.3399583Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T02:49:00.3399690Z ·  ────────────────┬─────────────── 2026-10-24T02:49:00.3399870Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3399952Z 108 │ }, [selectedSection?.id]); 2026-10-24T02:49:00.3400006Z ╰──── 2026-10-24T02:49:00.3400762Z  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-24T02:49:00.3401101Z  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-24T02:49:00.3401104Z 2026-10-24T02:49:00.3401370Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3401567Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:112:7] 2026-10-24T02:49:00.3401622Z 109 │ 2026-10-24T02:49:00.3401687Z 110 │ useEffect(() => { 2026-10-24T02:49:00.3401758Z ·  ────┬──── 2026-10-24T02:49:00.3401890Z · ╰── This is the containing effect 2026-10-24T02:49:00.3401975Z 111 │ if (activeCommentTarget === null) { 2026-10-24T02:49:00.3402078Z 112 │ setPendingNativeCommentSelection(null); 2026-10-24T02:49:00.3402187Z ·  ────────────────┬─────────────── 2026-10-24T02:49:00.3402369Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3402423Z 113 │ } 2026-10-24T02:49:00.3402476Z ╰──── 2026-10-24T02:49:00.3403178Z  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-24T02:49:00.3403547Z  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-24T02:49:00.3403549Z 2026-10-24T02:49:00.3403757Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3403944Z ╭─[apps/mobile/src/features/review/useReviewCommentSelectionController.ts:108:7] 2026-10-24T02:49:00.3404042Z 107 │ setPendingNativeCommentSelection(null); 2026-10-24T02:49:00.3404116Z 108 │ }, [selectedSection?.id]); 2026-10-24T02:49:00.3404203Z ·  ─────────┬───────── 2026-10-24T02:49:00.3404372Z · ╰── Unnecessary dependency `selectedSection?.id` 2026-10-24T02:49:00.3404427Z 109 │ 2026-10-24T02:49:00.3404478Z ╰──── 2026-10-24T02:49:00.3404784Z  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-24T02:49:00.3405109Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3405114Z 2026-10-24T02:49:00.3405418Z ⚠ eslint(no-unused-vars): Variable 'layerFromProviderAdapter' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3405583Z ╭─[apps/server/src/orchestration-v2/ProviderAdapterRegistry.ts:346:7] 2026-10-24T02:49:00.3405642Z 345 │ 2026-10-24T02:49:00.3405746Z 346 │ const layerFromProviderAdapter: Layer.Layer< 2026-10-24T02:49:00.3405838Z ·  ────────────┬─────────── 2026-10-24T02:49:00.3406006Z · ╰── 'layerFromProviderAdapter' is declared here 2026-10-24T02:49:00.3406084Z 347 │ ProviderAdapterRegistryV2, 2026-10-24T02:49:00.3406136Z ╰──── 2026-10-24T02:49:00.3406239Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3406242Z 2026-10-24T02:49:00.3406505Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3406683Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:60:5] 2026-10-24T02:49:00.3406737Z 55 │ 2026-10-24T02:49:00.3406806Z 56 │ useEffect(() => { 2026-10-24T02:49:00.3406881Z ·  ────┬──── 2026-10-24T02:49:00.3407013Z · ╰── This is the containing effect 2026-10-24T02:49:00.3407081Z 57 │ scheduler.reset(); 2026-10-24T02:49:00.3407179Z 58 │ highlightedRowIdsRef.current = new Set(); 2026-10-24T02:49:00.3407268Z 59 │ visibleChunkIndexRef.current = 0; 2026-10-24T02:49:00.3407387Z 60 │ setVisibleRange({ firstRowIndex: 0, lastRowIndex: 80 }); 2026-10-24T02:49:00.3407468Z ·  ───────┬─────── 2026-10-24T02:49:00.3407640Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3407757Z 61 │ setTokensPatchJson(createEmptyTokenPatch(resetKey)); 2026-10-24T02:49:00.3407813Z ╰──── 2026-10-24T02:49:00.3408510Z  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-24T02:49:00.3408884Z  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-24T02:49:00.3408886Z 2026-10-24T02:49:00.3409091Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3409267Z ╭─[apps/mobile/src/features/review/useNativeReviewDiffHighlighting.ts:63:7] 2026-10-24T02:49:00.3409348Z 62 │ return () => scheduler.cancel(); 2026-10-24T02:49:00.3409450Z 63 │ }, [enabled, resetKey, rows.length, scheduler]); 2026-10-24T02:49:00.3409580Z ·  ───┬─── ─────┬───── 2026-10-24T02:49:00.3409780Z · │ ╰── Unnecessary dependency `rows.length` 2026-10-24T02:49:00.3409918Z · ╰── Unnecessary dependency `enabled` 2026-10-24T02:49:00.3409972Z 64 │ 2026-10-24T02:49:00.3410023Z ╰──── 2026-10-24T02:49:00.3410365Z  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-24T02:49:00.3410691Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3410694Z 2026-10-24T02:49:00.3410969Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3411145Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts:10578:7] 2026-10-24T02:49:00.3411198Z 10577 │ 2026-10-24T02:49:00.3411274Z 10578 │ const layer: Layer.Layer< 2026-10-24T02:49:00.3411347Z ·  ──┬── 2026-10-24T02:49:00.3411474Z · ╰── 'layer' is declared here 2026-10-24T02:49:00.3411570Z 10579 │ ProviderAdapter.ProviderAdapterV2, 2026-10-24T02:49:00.3411624Z ╰──── 2026-10-24T02:49:00.3411730Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3411733Z 2026-10-24T02:49:00.3411938Z ⚠ eslint(no-unused-vars): Identifier 'Duration' is imported but never used. 2026-10-24T02:49:00.3412145Z ╭─[packages/provider-pi/src/server/adapter.test.ts:24:13] 2026-10-24T02:49:00.3412269Z 23 │ import * as Deferred from "effect/Deferred"; 2026-10-24T02:49:00.3412360Z 24 │ import * as Duration from "effect/Duration"; 2026-10-24T02:49:00.3412440Z ·  ────┬─── 2026-10-24T02:49:00.3412574Z · ╰── 'Duration' is imported here 2026-10-24T02:49:00.3412661Z 25 │ import * as Effect from "effect/Effect"; 2026-10-24T02:49:00.3412713Z ╰──── 2026-10-24T02:49:00.3412812Z  help: Consider removing this import. 2026-10-24T02:49:00.3412815Z 2026-10-24T02:49:00.3413085Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3413218Z ╭─[packages/provider-pi/src/server/adapter.ts:3405:7] 2026-10-24T02:49:00.3413272Z 3404 │ 2026-10-24T02:49:00.3413470Z 3405 │ const layer: Layer.Layer = 2026-10-24T02:49:00.3413544Z ·  ──┬── 2026-10-24T02:49:00.3413670Z · ╰── 'layer' is declared here 2026-10-24T02:49:00.3413735Z 3406 │ Layer.effect( 2026-10-24T02:49:00.3413790Z ╰──── 2026-10-24T02:49:00.3413893Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3413895Z 2026-10-24T02:49:00.3414127Z ⚠ unicorn(prefer-array-find): Prefer `find` over filtering and accessing the first result. 2026-10-24T02:49:00.3414302Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:1998:15] 2026-10-24T02:49:00.3414369Z 1997 │ assert.equal( 2026-10-24T02:49:00.3414518Z 1998 │ items.filter((item) => item.type === "assistant_message").at(-1)?.text, 2026-10-24T02:49:00.3414604Z ·  ────── 2026-10-24T02:49:00.3414684Z 1999 │ "authoritative answer", 2026-10-24T02:49:00.3414740Z ╰──── 2026-10-24T02:49:00.3414912Z  help: Use `find(predicate)` instead of `filter(predicate)[0]` or similar patterns. 2026-10-24T02:49:00.3414915Z 2026-10-24T02:49:00.3415404Z ⚠ 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-24T02:49:00.3415577Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:3951:7] 2026-10-24T02:49:00.3415761Z 3950 │ const closeFiber = yield* Scope.close(sessionScope, Exit.void).pipe(Effect.forkScoped); 2026-10-24T02:49:00.3415981Z 3951 │ ╭─▶ while (!responseLifecycle.includes("failed")) { 2026-10-24T02:49:00.3416092Z 3952 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3416230Z 3953 │ ╰─▶ } 2026-10-24T02:49:00.3416354Z 3954 │ const responseExit = yield* Fiber.join(responseFiber); 2026-10-24T02:49:00.3416406Z ╰──── 2026-10-24T02:49:00.3416409Z 2026-10-24T02:49:00.3416890Z ⚠ 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-24T02:49:00.3417060Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6062:9] 2026-10-24T02:49:00.3417223Z 6061 │ .pipe(Effect.forkScoped); 2026-10-24T02:49:00.3417441Z 6062 │ ╭─▶ while (promptGates.length < 1) { 2026-10-24T02:49:00.3417553Z 6063 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3417688Z 6064 │ ╰─▶ } 2026-10-24T02:49:00.3417861Z 6065 │ assert.isDefined(sessionUpdateHandler, "session update handler must be wired"); 2026-10-24T02:49:00.3417914Z ╰──── 2026-10-24T02:49:00.3417917Z 2026-10-24T02:49:00.3418397Z ⚠ 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-24T02:49:00.3418570Z ╭─[apps/server/src/orchestration-v2/Adapters/AcpAdapterV2.test.ts:6197:9] 2026-10-24T02:49:00.3418663Z 6196 │ .pipe(Effect.forkScoped); 2026-10-24T02:49:00.3418851Z 6197 │ ╭─▶ while (promptGates.length < 2) { 2026-10-24T02:49:00.3418962Z 6198 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3419096Z 6199 │ ╰─▶ } 2026-10-24T02:49:00.3419261Z 6200 │ if (sessionUpdateHandler === undefined || capturedMutation.current === null) { 2026-10-24T02:49:00.3419314Z ╰──── 2026-10-24T02:49:00.3419317Z 2026-10-24T02:49:00.3419580Z ⚠ eslint(no-unused-vars): Function 'layerClaudeAgentSdkReplayQueryRunner' is declared but never used. 2026-10-24T02:49:00.3419769Z ╭─[apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.testkit.ts:960:10] 2026-10-24T02:49:00.3419825Z 959 │ 2026-10-24T02:49:00.3419935Z 960 │ function layerClaudeAgentSdkReplayQueryRunner( 2026-10-24T02:49:00.3420089Z ·  ──────────────────┬───────────────── 2026-10-24T02:49:00.3420294Z · ╰── 'layerClaudeAgentSdkReplayQueryRunner' is declared here 2026-10-24T02:49:00.3420397Z 961 │ transcript: ClaudeAgentSdkReplayTranscript, 2026-10-24T02:49:00.3420450Z ╰──── 2026-10-24T02:49:00.3420555Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3420557Z 2026-10-24T02:49:00.3420823Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3420992Z ╭─[apps/mobile/src/features/review/ReviewCommentComposerSheet.tsx:103:7] 2026-10-24T02:49:00.3421050Z 100 │ 2026-10-24T02:49:00.3421121Z 101 │ useEffect(() => { 2026-10-24T02:49:00.3421193Z ·  ────┬──── 2026-10-24T02:49:00.3421323Z · ╰── This is the containing effect 2026-10-24T02:49:00.3421426Z 102 │ if (!target || selectedLines.length === 0) { 2026-10-24T02:49:00.3421511Z 103 │ setHighlightedLinesById({}); 2026-10-24T02:49:00.3421604Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3421782Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3421845Z 104 │ return; 2026-10-24T02:49:00.3421897Z ╰──── 2026-10-24T02:49:00.3422604Z  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-24T02:49:00.3422974Z  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-24T02:49:00.3422977Z 2026-10-24T02:49:00.3423177Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3423334Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:223:31] 2026-10-24T02:49:00.3423441Z 222 │ ? snippetTokens.map((line, lineIndex) => ( 2026-10-24T02:49:00.3423535Z 223 │ 2026-10-24T02:49:00.3423641Z ·  ─────────────── 2026-10-24T02:49:00.3423741Z 224 │ {lineIndex > 0 ? "\n" : ""} 2026-10-24T02:49:00.3423797Z ╰──── 2026-10-24T02:49:00.3423950Z  help: Use a unique data-dependent key to avoid unnecessary rerenders 2026-10-24T02:49:00.3423952Z 2026-10-24T02:49:00.3424152Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3424304Z ╭─[apps/mobile/src/features/review/ReviewCommentCard.tsx:227:25] 2026-10-24T02:49:00.3424380Z 226 │ { 2026-10-24T02:49:00.3429034Z 458 │ let result: Array = divisor.map((_) => 0); 2026-10-24T02:49:00.3429138Z ·  ┬ 2026-10-24T02:49:00.3429283Z · ╰── '_' is declared here 2026-10-24T02:49:00.3429353Z 459 │ for (const b of data) { 2026-10-24T02:49:00.3429407Z ╰──── 2026-10-24T02:49:00.3429511Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3429513Z 2026-10-24T02:49:00.3429750Z ⚠ eslint(no-unneeded-ternary): Unnecessary use of boolean literals in conditional expression 2026-10-24T02:49:00.3429875Z ╭─[packages/shared/src/serverSettings.test.ts:35:7] 2026-10-24T02:49:00.3430098Z 34 │ const fallback = fallbackTextGenerationModelSelection(providerInstances, (instanceId) => 2026-10-24T02:49:00.3430198Z 35 │ instanceId === configured ? true : false, 2026-10-24T02:49:00.3430314Z ·  ──────────────────────────────────────── 2026-10-24T02:49:00.3430368Z 36 │ ); 2026-10-24T02:49:00.3430421Z ╰──── 2026-10-24T02:49:00.3430517Z  help: Remove this ternary operator 2026-10-24T02:49:00.3430520Z 2026-10-24T02:49:00.3430735Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:49:00.3430874Z ╭─[packages/shared/src/composerContextLegacySend.ts:19:45] 2026-10-24T02:49:00.3430999Z 18 │ const occurrences = collectComposerContextReferences(text); 2026-10-24T02:49:00.3431108Z 19 │ for (const occurrence of [...occurrences].reverse()) { 2026-10-24T02:49:00.3431223Z ·  ─────── 2026-10-24T02:49:00.3431339Z 20 │ const record = recordsById.get(occurrence.contextId); 2026-10-24T02:49:00.3431389Z ╰──── 2026-10-24T02:49:00.3431662Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:49:00.3431665Z 2026-10-24T02:49:00.3431871Z ⚠ react(exhaustive-effect-dependencies): Found extra effect dependencies 2026-10-24T02:49:00.3432017Z ╭─[apps/mobile/src/state/use-thread-outbox-drain.ts:1315:5] 2026-10-24T02:49:00.3432097Z 1314 │ queuedMessagesByThreadKey, 2026-10-24T02:49:00.3432162Z 1315 │ retryTick, 2026-10-24T02:49:00.3432236Z ·  ────┬──── 2026-10-24T02:49:00.3432380Z · ╰── Unnecessary dependency `retryTick` 2026-10-24T02:49:00.3432521Z 1316 │ restoreQueuedMessage, 2026-10-24T02:49:00.3432608Z ╰──── 2026-10-24T02:49:00.3432919Z  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-24T02:49:00.3434804Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3434808Z 2026-10-24T02:49:00.3435026Z ⚠ typescript(no-extraneous-class): Unexpected class with only a constructor. 2026-10-24T02:49:00.3435155Z ╭─[apps/desktop/src/preview/Manager.test.ts:158:18] 2026-10-24T02:49:00.3435256Z 157 │ BrowserWindow: browserWindowConstructor, 2026-10-24T02:49:00.3435428Z 158 │ ╭─▶ ClipboardItem: class { 2026-10-24T02:49:00.3435562Z 159 │ │ constructor(data: Record) { 2026-10-24T02:49:00.3435682Z 160 │ │ clipboardItemConstructor(data); 2026-10-24T02:49:00.3435756Z 161 │ │ } 2026-10-24T02:49:00.3435885Z 162 │ ╰─▶ }, 2026-10-24T02:49:00.3435949Z 163 │ clipboard: { 2026-10-24T02:49:00.3436001Z ╰──── 2026-10-24T02:49:00.3436174Z  help: Try replacing this class with a standalone function or deleting it entirely 2026-10-24T02:49:00.3436177Z 2026-10-24T02:49:00.3436446Z ⚠ react(set-state-in-effect): Calling setState synchronously within an effect can trigger cascading renders 2026-10-24T02:49:00.3436584Z ╭─[apps/mobile/src/state/use-vcs-action-state.ts:86:5] 2026-10-24T02:49:00.3436693Z 83 │ const [nowMs, setNowMs] = useState(() => Date.now()); 2026-10-24T02:49:00.3436757Z 84 │ useEffect(() => { 2026-10-24T02:49:00.3436828Z ·  ────┬──── 2026-10-24T02:49:00.3436957Z · ╰── This is the containing effect 2026-10-24T02:49:00.3437042Z 85 │ if (!actionState.isRunning) return; 2026-10-24T02:49:00.3437109Z 86 │ setNowMs(Date.now()); 2026-10-24T02:49:00.3437179Z ·  ────┬─── 2026-10-24T02:49:00.3437350Z · ╰── Avoid calling setState() directly within an effect 2026-10-24T02:49:00.3437476Z 87 │ const interval = setInterval(() => setNowMs(Date.now()), 1000); 2026-10-24T02:49:00.3437527Z ╰──── 2026-10-24T02:49:00.3438244Z  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-24T02:49:00.3438704Z  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-24T02:49:00.3438707Z 2026-10-24T02:49:00.3438904Z ⚠ eslint(no-unused-vars): Identifier 'Image' is imported but never used. 2026-10-24T02:49:00.3439048Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:17:10] 2026-10-24T02:49:00.3439185Z 16 │ import type { NativeSyntheticEvent, ViewProps } from "react-native"; 2026-10-24T02:49:00.3439301Z 17 │ import { Image, Platform, StyleSheet } from "react-native"; 2026-10-24T02:49:00.3439376Z ·  ──┬── 2026-10-24T02:49:00.3439503Z · ╰── 'Image' is imported here 2026-10-24T02:49:00.3439556Z 18 │ 2026-10-24T02:49:00.3439608Z ╰──── 2026-10-24T02:49:00.3439705Z  help: Consider removing this import. 2026-10-24T02:49:00.3439709Z 2026-10-24T02:49:00.3439915Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:49:00.3440095Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:229:6] 2026-10-24T02:49:00.3440261Z 225 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T02:49:00.3440351Z 226 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3440442Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3440934Z · ╰── 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-24T02:49:00.3441008Z 227 │ mostRecentEventCount, 2026-10-24T02:49:00.3441064Z 228 │ ); 2026-10-24T02:49:00.3441187Z 229 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T02:49:00.3441323Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T02:49:00.3441527Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3441611Z 230 │ const assumedValue = props.value; 2026-10-24T02:49:00.3441661Z ╰──── 2026-10-24T02:49:00.3441833Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:49:00.3442164Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3442171Z 2026-10-24T02:49:00.3442391Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.3442535Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:237:7] 2026-10-24T02:49:00.3442680Z 236 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T02:49:00.3442769Z 237 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3442860Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3443407Z · ╰── 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-24T02:49:00.3443509Z 238 │ controlledEventCount, 2026-10-24T02:49:00.3443574Z 239 │ assumedValue, 2026-10-24T02:49:00.3443628Z 240 │ ); 2026-10-24T02:49:00.3443785Z 241 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T02:49:00.3443923Z ·  ───────────┬────────── 2026-10-24T02:49:00.3444136Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T02:49:00.3444226Z 242 │ const acceptNativeEvent = useCallback( 2026-10-24T02:49:00.3444278Z ╰──── 2026-10-24T02:49:00.3444725Z  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-24T02:49:00.3445053Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3445056Z 2026-10-24T02:49:00.3445203Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3445351Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T02:49:00.3445476Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:49:00.3445588Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:49:00.3445707Z ·  ─────────────┬──────────── 2026-10-24T02:49:00.3445880Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3445939Z 163 │ }); 2026-10-24T02:49:00.3445989Z ╰──── 2026-10-24T02:49:00.3446475Z  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-24T02:49:00.3446779Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3446782Z 2026-10-24T02:49:00.3446930Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3447077Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:162:29] 2026-10-24T02:49:00.3447202Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:49:00.3447316Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:49:00.3447434Z ·  ─────────────┬──────────── 2026-10-24T02:49:00.3447645Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3447699Z 163 │ }); 2026-10-24T02:49:00.3447750Z ╰──── 2026-10-24T02:49:00.3448237Z  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-24T02:49:00.3448611Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3448643Z 2026-10-24T02:49:00.3448790Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3448935Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:164:23] 2026-10-24T02:49:00.3448989Z 163 │ }); 2026-10-24T02:49:00.3449078Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T02:49:00.3449201Z ·  ─────────┬────────────┬─── 2026-10-24T02:49:00.3449391Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.3449510Z · ╰── This value is a ref 2026-10-24T02:49:00.3449581Z 165 │ return JSON.stringify( 2026-10-24T02:49:00.3449632Z ╰──── 2026-10-24T02:49:00.3450150Z  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-24T02:49:00.3450454Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3450457Z 2026-10-24T02:49:00.3450602Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3450746Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:206:5] 2026-10-24T02:49:00.3450816Z 205 │ mostRecentEventCount, 2026-10-24T02:49:00.3450902Z 206 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3451007Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3451204Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3451261Z 207 │ ); 2026-10-24T02:49:00.3451310Z ╰──── 2026-10-24T02:49:00.3451794Z  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-24T02:49:00.3452096Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3452099Z 2026-10-24T02:49:00.3452244Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3452385Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:212:5] 2026-10-24T02:49:00.3452458Z 211 │ mostRecentEventCount, 2026-10-24T02:49:00.3452548Z 212 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3452652Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3452840Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3452893Z 213 │ ); 2026-10-24T02:49:00.3452943Z ╰──── 2026-10-24T02:49:00.3453428Z  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-24T02:49:00.3453727Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3453729Z 2026-10-24T02:49:00.3453989Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:49:00.3454164Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:197:6] 2026-10-24T02:49:00.3454286Z 161 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:49:00.3454398Z 162 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:49:00.3454506Z ·  ─────────┬──────── 2026-10-24T02:49:00.3454988Z · ╰── 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-24T02:49:00.3455043Z 163 │ }); 2026-10-24T02:49:00.3455133Z 164 │ confirmedTokensRef.current = tokens; 2026-10-24T02:49:00.3455207Z 165 │ return JSON.stringify( 2026-10-24T02:49:00.3455374Z 166 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T02:49:00.3455441Z 167 │ const record = 2026-10-24T02:49:00.3455520Z 168 │ token.type === "context" 2026-10-24T02:49:00.3455686Z 169 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T02:49:00.3455750Z 170 │ : undefined; 2026-10-24T02:49:00.3455860Z 171 │ const presentation = contextChipPresentation( 2026-10-24T02:49:00.3455970Z 172 │ token.type === "context" ? token.kind : token.type, 2026-10-24T02:49:00.3456031Z 173 │ record, 2026-10-24T02:49:00.3456088Z 174 │ ); 2026-10-24T02:49:00.3456171Z 175 │ const icon = contextChipIcon( 2026-10-24T02:49:00.3456238Z 176 │ presentation, 2026-10-24T02:49:00.3456386Z 177 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T02:49:00.3456447Z 178 │ ); 2026-10-24T02:49:00.3456507Z 179 │ return { 2026-10-24T02:49:00.3456576Z 180 │ type: token.type, 2026-10-24T02:49:00.3456649Z 181 │ source: token.source, 2026-10-24T02:49:00.3456720Z 182 │ start: token.start, 2026-10-24T02:49:00.3456785Z 183 │ end: token.end, 2026-10-24T02:49:00.3456935Z 184 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T02:49:00.3456994Z 185 │ label: 2026-10-24T02:49:00.3457071Z 186 │ token.type === "skill" 2026-10-24T02:49:00.3457177Z 187 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T02:49:00.3457259Z 188 │ : token.type === "context" 2026-10-24T02:49:00.3457567Z 189 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T02:49:00.3457694Z 190 │ : basename(token.value), 2026-10-24T02:49:00.3457838Z 191 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T02:49:00.3457930Z 192 │ iconUri: contextChipIconUri(icon), 2026-10-24T02:49:00.3458015Z 193 │ tintsIcon: icon.kind === "chip", 2026-10-24T02:49:00.3458072Z 194 │ }; 2026-10-24T02:49:00.3458128Z 195 │ }), 2026-10-24T02:49:00.3458182Z 196 │ ); 2026-10-24T02:49:00.3458316Z 197 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T02:49:00.3458466Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T02:49:00.3458683Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3458826Z 198 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T02:49:00.3458876Z ╰──── 2026-10-24T02:49:00.3459090Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:49:00.3459414Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3459417Z 2026-10-24T02:49:00.3459608Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:49:00.3459749Z ╭─[apps/mobile/src/native/T3ComposerEditor.native.tsx:259:5] 2026-10-24T02:49:00.3459879Z 251 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T02:49:00.3459985Z 252 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T02:49:00.3460114Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3460586Z · ╰── 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-24T02:49:00.3460677Z 253 │ eventCount: acknowledgedEventCount, 2026-10-24T02:49:00.3460738Z 254 │ value, 2026-10-24T02:49:00.3460816Z 255 │ selection: nextSelection, 2026-10-24T02:49:00.3460872Z 256 │ }); 2026-10-24T02:49:00.3460955Z 257 │ return acknowledgedEventCount; 2026-10-24T02:49:00.3461010Z 258 │ }, 2026-10-24T02:49:00.3461064Z 259 │ [], 2026-10-24T02:49:00.3461131Z ·  ─┬ 2026-10-24T02:49:00.3461321Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3461378Z 260 │ ); 2026-10-24T02:49:00.3461428Z ╰──── 2026-10-24T02:49:00.3461639Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:49:00.3461964Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3461967Z 2026-10-24T02:49:00.3462234Z ⚠ unicorn(prefer-add-event-listener): Prefer `addEventListener()` over their `on`-function counterparts. 2026-10-24T02:49:00.3462378Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:12:14] 2026-10-24T02:49:00.3462603Z 11 │ addEventListener(_type: string, listener: (event: { data: string }) => void) { 2026-10-24T02:49:00.3462716Z 12 │ this.onmessage = listener; 2026-10-24T02:49:00.3462795Z ·  ───────── 2026-10-24T02:49:00.3462850Z 13 │ } 2026-10-24T02:49:00.3462901Z ╰──── 2026-10-24T02:49:00.3463228Z  help: `addEventListener()` can register multiple handlers and accepts options such as `{ once: true }`; assigning to `on` replaces any previously registered handler. 2026-10-24T02:49:00.3463230Z 2026-10-24T02:49:00.3463442Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T02:49:00.3463587Z ╭─[apps/web/src/components/device/deviceHubApi.test.ts:16:9] 2026-10-24T02:49:00.3463651Z 15 │ constructor() { 2026-10-24T02:49:00.3463715Z 16 │ source = this; 2026-10-24T02:49:00.3463792Z ·  ────── 2026-10-24T02:49:00.3463849Z 17 │ } 2026-10-24T02:49:00.3463900Z ╰──── 2026-10-24T02:49:00.3464186Z  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-24T02:49:00.3464189Z 2026-10-24T02:49:00.3464400Z ⚠ react(exhaustive-effect-dependencies): Found missing effect dependencies 2026-10-24T02:49:00.3464540Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:231:6] 2026-10-24T02:49:00.3464705Z 227 │ nativeEventSnapshotsRef.current = pruneAcknowledgedComposerNativeEvents( 2026-10-24T02:49:00.3464795Z 228 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3464885Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3465367Z · ╰── 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-24T02:49:00.3465442Z 229 │ mostRecentEventCount, 2026-10-24T02:49:00.3465496Z 230 │ ); 2026-10-24T02:49:00.3465619Z 231 │ }, [acknowledgesLatestNativeEvent, mostRecentEventCount]); 2026-10-24T02:49:00.3465753Z ·  ──────────────────────────┬────────────────────────── 2026-10-24T02:49:00.3466018Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3466100Z 232 │ const assumedValue = props.value; 2026-10-24T02:49:00.3466151Z ╰──── 2026-10-24T02:49:00.3466324Z  help: Missing dependencies can cause an effect to fire less often than it should 2026-10-24T02:49:00.3466657Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3466664Z 2026-10-24T02:49:00.3466881Z ⚠ react(exhaustive-effect-dependencies): Found missing/extra effect dependencies 2026-10-24T02:49:00.3467018Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:239:7] 2026-10-24T02:49:00.3467161Z 238 │ nativeEventSnapshotsRef.current = assumeComposerControlledState( 2026-10-24T02:49:00.3467250Z 239 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3467340Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3467897Z · ╰── 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-24T02:49:00.3468006Z 240 │ controlledEventCount, 2026-10-24T02:49:00.3468071Z 241 │ assumedValue, 2026-10-24T02:49:00.3468124Z 242 │ ); 2026-10-24T02:49:00.3468280Z 243 │ }, [assumedValue, controlledEventCount, isNativeEcho, controlledDocumentJson]); 2026-10-24T02:49:00.3468417Z ·  ───────────┬────────── 2026-10-24T02:49:00.3468629Z · ╰── Unnecessary dependency `controlledDocumentJson` 2026-10-24T02:49:00.3468717Z 244 │ const acceptNativeEvent = useCallback( 2026-10-24T02:49:00.3468768Z ╰──── 2026-10-24T02:49:00.3469212Z  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-24T02:49:00.3469542Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3469545Z 2026-10-24T02:49:00.3469691Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3469829Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T02:49:00.3469952Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:49:00.3470088Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:49:00.3470207Z ·  ─────────────┬──────────── 2026-10-24T02:49:00.3470381Z · ╰── Cannot access ref value during render 2026-10-24T02:49:00.3470440Z 165 │ }); 2026-10-24T02:49:00.3470489Z ╰──── 2026-10-24T02:49:00.3470977Z  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-24T02:49:00.3471280Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3471283Z 2026-10-24T02:49:00.3471429Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3471566Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:164:29] 2026-10-24T02:49:00.3471687Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:49:00.3471802Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:49:00.3471921Z ·  ─────────────┬──────────── 2026-10-24T02:49:00.3472131Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3472185Z 165 │ }); 2026-10-24T02:49:00.3472235Z ╰──── 2026-10-24T02:49:00.3472722Z  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-24T02:49:00.3473026Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3473093Z 2026-10-24T02:49:00.3473271Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3473408Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:166:23] 2026-10-24T02:49:00.3473463Z 165 │ }); 2026-10-24T02:49:00.3473552Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T02:49:00.3473675Z ·  ─────────┬────────────┬─── 2026-10-24T02:49:00.3473866Z · │ ╰── Cannot update ref value during render 2026-10-24T02:49:00.3473983Z · ╰── This value is a ref 2026-10-24T02:49:00.3474052Z 167 │ return JSON.stringify( 2026-10-24T02:49:00.3474102Z ╰──── 2026-10-24T02:49:00.3474594Z  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-24T02:49:00.3474897Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3474900Z 2026-10-24T02:49:00.3475046Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3475181Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:208:5] 2026-10-24T02:49:00.3475250Z 207 │ mostRecentEventCount, 2026-10-24T02:49:00.3475337Z 208 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3475441Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3475636Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3475692Z 209 │ ); 2026-10-24T02:49:00.3475742Z ╰──── 2026-10-24T02:49:00.3476226Z  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-24T02:49:00.3476525Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3476527Z 2026-10-24T02:49:00.3476673Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3476808Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:214:5] 2026-10-24T02:49:00.3476877Z 213 │ mostRecentEventCount, 2026-10-24T02:49:00.3477037Z 214 │ nativeEventSnapshotsRef.current, 2026-10-24T02:49:00.3477172Z ·  ───────────────┬─────────────── 2026-10-24T02:49:00.3477360Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3477414Z 215 │ ); 2026-10-24T02:49:00.3477464Z ╰──── 2026-10-24T02:49:00.3477950Z  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-24T02:49:00.3478250Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3478254Z 2026-10-24T02:49:00.3478448Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:49:00.3478586Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:199:6] 2026-10-24T02:49:00.3478705Z 163 │ const tokens = collectComposerInlineTokens(props.value, { 2026-10-24T02:49:00.3478817Z 164 │ preserveTrailingFrom: confirmedTokensRef.current, 2026-10-24T02:49:00.3478925Z ·  ─────────┬──────── 2026-10-24T02:49:00.3479406Z · ╰── 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-24T02:49:00.3479462Z 165 │ }); 2026-10-24T02:49:00.3479551Z 166 │ confirmedTokensRef.current = tokens; 2026-10-24T02:49:00.3479624Z 167 │ return JSON.stringify( 2026-10-24T02:49:00.3479792Z 168 │ composerContextEditorTokens(props.value, tokens, skillLabels).map((token) => { 2026-10-24T02:49:00.3479858Z 169 │ const record = 2026-10-24T02:49:00.3479938Z 170 │ token.type === "context" 2026-10-24T02:49:00.3480126Z 171 │ ? props.context?.records.find((record) => record.contextId === token.contextId) 2026-10-24T02:49:00.3480192Z 172 │ : undefined; 2026-10-24T02:49:00.3480300Z 173 │ const presentation = contextChipPresentation( 2026-10-24T02:49:00.3480410Z 174 │ token.type === "context" ? token.kind : token.type, 2026-10-24T02:49:00.3480471Z 175 │ record, 2026-10-24T02:49:00.3480528Z 176 │ ); 2026-10-24T02:49:00.3480611Z 177 │ const icon = contextChipIcon( 2026-10-24T02:49:00.3480677Z 178 │ presentation, 2026-10-24T02:49:00.3480826Z 179 │ token.type === "mention" ? token.value : contextRecordFileName(record), 2026-10-24T02:49:00.3480886Z 180 │ ); 2026-10-24T02:49:00.3480947Z 181 │ return { 2026-10-24T02:49:00.3481017Z 182 │ type: token.type, 2026-10-24T02:49:00.3481090Z 183 │ source: token.source, 2026-10-24T02:49:00.3481161Z 184 │ start: token.start, 2026-10-24T02:49:00.3481227Z 185 │ end: token.end, 2026-10-24T02:49:00.3481376Z 186 │ accent: contextChipAccent(presentation.accent, theme, chipTextColor), 2026-10-24T02:49:00.3481434Z 187 │ label: 2026-10-24T02:49:00.3481511Z 188 │ token.type === "skill" 2026-10-24T02:49:00.3481617Z 189 │ ? (skillLabels.get(token.value) ?? token.value) 2026-10-24T02:49:00.3481699Z 190 │ : token.type === "context" 2026-10-24T02:49:00.3482009Z 191 │ ? `${token.label}${props.context?.records.some((record) => record.contextId === token.contextId) ? "" : " · unavailable"}` 2026-10-24T02:49:00.3482128Z 192 │ : basename(token.value), 2026-10-24T02:49:00.3482272Z 193 │ detail: token.type === "context" ? composerChipSizeSuffix(record) : "", 2026-10-24T02:49:00.3482365Z 194 │ iconUri: contextChipIconUri(icon), 2026-10-24T02:49:00.3482450Z 195 │ tintsIcon: icon.kind === "chip", 2026-10-24T02:49:00.3482507Z 196 │ }; 2026-10-24T02:49:00.3482564Z 197 │ }), 2026-10-24T02:49:00.3482618Z 198 │ ); 2026-10-24T02:49:00.3482751Z 199 │ }, [props.value, props.context, skillLabels, theme, chipTextColor]); 2026-10-24T02:49:00.3482902Z ·  ───────────────────────────────┬─────────────────────────────── 2026-10-24T02:49:00.3483118Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3483261Z 200 │ // Every render resolves against the snapshot history, so a render whose 2026-10-24T02:49:00.3483311Z ╰──── 2026-10-24T02:49:00.3483525Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:49:00.3483850Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3483853Z 2026-10-24T02:49:00.3484043Z ⚠ react(memo-dependencies): Found missing memoization dependencies 2026-10-24T02:49:00.3484180Z ╭─[apps/mobile/src/native/T3ComposerEditor.ios.tsx:261:5] 2026-10-24T02:49:00.3484310Z 253 │ mostRecentEventCountRef.current = acknowledgedEventCount; 2026-10-24T02:49:00.3484415Z 254 │ nativeEventSnapshotsRef.current.push({ 2026-10-24T02:49:00.3484508Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3484980Z · ╰── 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-24T02:49:00.3485073Z 255 │ eventCount: acknowledgedEventCount, 2026-10-24T02:49:00.3485136Z 256 │ value, 2026-10-24T02:49:00.3485213Z 257 │ selection: nextSelection, 2026-10-24T02:49:00.3485270Z 258 │ }); 2026-10-24T02:49:00.3485352Z 259 │ return acknowledgedEventCount; 2026-10-24T02:49:00.3485406Z 260 │ }, 2026-10-24T02:49:00.3485460Z 261 │ [], 2026-10-24T02:49:00.3485526Z ·  ─┬ 2026-10-24T02:49:00.3485714Z · ╰── This dependency list is missing values used by the callback 2026-10-24T02:49:00.3485770Z 262 │ ); 2026-10-24T02:49:00.3485820Z ╰──── 2026-10-24T02:49:00.3486031Z  help: Missing dependencies can cause a value to update less often than it should, resulting in stale UI 2026-10-24T02:49:00.3486358Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/exhaustive-deps 2026-10-24T02:49:00.3486361Z 2026-10-24T02:49:00.3486575Z ⚠ eslint(no-unused-vars): Identifier 'HookForwarder' is imported but never used. 2026-10-24T02:49:00.3486679Z ╭─[infra/relay/src/http/Api.ts:69:13] 2026-10-24T02:49:00.3486821Z 68 │ import * as EnvironmentLinks from "../environments/EnvironmentLinks.ts"; 2026-10-24T02:49:00.3487004Z 69 │ import * as HookForwarder from "../hooks/HookForwarder.ts"; 2026-10-24T02:49:00.3487120Z ·  ──────┬────── 2026-10-24T02:49:00.3487265Z · ╰── 'HookForwarder' is imported here 2026-10-24T02:49:00.3487368Z 70 │ import * as HeldHooks from "../hooks/HeldHooks.ts"; 2026-10-24T02:49:00.3487417Z ╰──── 2026-10-24T02:49:00.3487514Z  help: Consider removing this import. 2026-10-24T02:49:00.3487517Z 2026-10-24T02:49:00.3488002Z ⚠ 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-24T02:49:00.3488126Z ╭─[packages/shared/src/atomicWrite.test.ts:139:5] 2026-10-24T02:49:00.3488200Z 138 │ Effect.gen(function* () { 2026-10-24T02:49:00.3488405Z 139 │ ╭─▶ while (fiber.pollUnsafe() === undefined) { 2026-10-24T02:49:00.3488532Z 140 │ │ yield* TestClock.adjust("100 millis"); 2026-10-24T02:49:00.3488864Z 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-24T02:49:00.3489053Z 142 │ │ yield* Effect.promise(() => new Promise((resolve) => setImmediate(resolve))); 2026-10-24T02:49:00.3489184Z 143 │ ╰─▶ } 2026-10-24T02:49:00.3489268Z 144 │ return yield* Fiber.join(fiber); 2026-10-24T02:49:00.3489319Z ╰──── 2026-10-24T02:49:00.3489322Z 2026-10-24T02:49:00.3489607Z ⚠ eslint(no-unused-vars): Variable 'claudeCaps' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3489718Z ╭─[packages/shared/src/model.test.ts:36:7] 2026-10-24T02:49:00.3489770Z 35 │ 2026-10-24T02:49:00.3489902Z 36 │ const claudeCaps: ModelCapabilities = createModelCapabilities({ 2026-10-24T02:49:00.3489977Z ·  ─────┬──── 2026-10-24T02:49:00.3490140Z · ╰── 'claudeCaps' is declared here 2026-10-24T02:49:00.3490210Z 37 │ optionDescriptors: [ 2026-10-24T02:49:00.3490262Z ╰──── 2026-10-24T02:49:00.3490367Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3490370Z 2026-10-24T02:49:00.3490860Z ⚠ 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-24T02:49:00.3491024Z ╭─[packages/client-runtime/src/connection/supervisor.test.ts:135:3] 2026-10-24T02:49:00.3491135Z 134 │ let lastState = yield* SubscriptionRef.get(state); 2026-10-24T02:49:00.3491353Z 135 │ ╭─▶ for (let iteration = 0; iteration < 100; iteration += 1) { 2026-10-24T02:49:00.3491489Z 136 │ │ lastState = yield* SubscriptionRef.get(state); 2026-10-24T02:49:00.3491594Z 137 │ │ if (predicate(lastState)) { 2026-10-24T02:49:00.3491692Z 138 │ │ return lastState; 2026-10-24T02:49:00.3491766Z 139 │ │ } 2026-10-24T02:49:00.3491868Z 140 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3492065Z 141 │ ╰─▶ } 2026-10-24T02:49:00.3492171Z 142 │ return yield* Effect.die( 2026-10-24T02:49:00.3492221Z ╰──── 2026-10-24T02:49:00.3492223Z 2026-10-24T02:49:00.3492435Z ⚠ eslint(no-unused-vars): Type 'ThreadRunSummary' is imported but never used. 2026-10-24T02:49:00.3492527Z ╭─[apps/web/src/types.ts:22:3] 2026-10-24T02:49:00.3492597Z 21 │ EnvironmentThreadShell, 2026-10-24T02:49:00.3492662Z 22 │ ThreadRunSummary, 2026-10-24T02:49:00.3492740Z ·  ────────┬─────── 2026-10-24T02:49:00.3492881Z · ╰── 'ThreadRunSummary' is imported here 2026-10-24T02:49:00.3492950Z 23 │ ThreadRuntimeSummary, 2026-10-24T02:49:00.3493001Z ╰──── 2026-10-24T02:49:00.3493099Z  help: Consider removing this import. 2026-10-24T02:49:00.3493103Z 2026-10-24T02:49:00.3493334Z ⚠ unicorn(no-useless-fallback-in-spread): Empty fallbacks in spreads are unnecessary 2026-10-24T02:49:00.3493455Z ╭─[packages/shared/src/serverSettings.ts:346:9] 2026-10-24T02:49:00.3493559Z 345 │ const entry: ProjectSettingsOverrides = { 2026-10-24T02:49:00.3493690Z 346 │ ...(entries.get(projectId) ?? currentEntries[projectId] ?? {}), 2026-10-24T02:49:00.3493840Z ·  ────────────────────────────────────────────────────────────── 2026-10-24T02:49:00.3493896Z 347 │ }; 2026-10-24T02:49:00.3493947Z ╰──── 2026-10-24T02:49:00.3494225Z  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-24T02:49:00.3494227Z 2026-10-24T02:49:00.3494457Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in Array.prototype.reduce() 2026-10-24T02:49:00.3494580Z ╭─[packages/shared/src/serverSettings.ts:448:24] 2026-10-24T02:49:00.3494645Z 447 │ const favorites = 2026-10-24T02:49:00.3494753Z 448 │ setModelFavorites?.reduce((current, change) => { 2026-10-24T02:49:00.3494839Z ·  ───┬── 2026-10-24T02:49:00.3494963Z · ╰── For this reduce 2026-10-24T02:49:00.3495043Z 449 │ const exists = current.some( 2026-10-24T02:49:00.3495219Z 450 │ (favorite) => favorite.provider === change.provider && favorite.model === change.model, 2026-10-24T02:49:00.3495273Z 451 │ ); 2026-10-24T02:49:00.3495345Z 452 │ return change.favorite 2026-10-24T02:49:00.3495405Z 453 │ ? exists 2026-10-24T02:49:00.3495466Z 454 │ ? current 2026-10-24T02:49:00.3495608Z 455 │ : [...current, { provider: change.provider, model: change.model }] 2026-10-24T02:49:00.3495694Z ·  ─────┬──── 2026-10-24T02:49:00.3495816Z · ╰── From this spread 2026-10-24T02:49:00.3495885Z 456 │ : current.filter( 2026-10-24T02:49:00.3495935Z ╰──── 2026-10-24T02:49:00.3496148Z  help: Consider using `Object.assign()` or `Array.prototype.push()` to mutate the accumulator instead. 2026-10-24T02:49:00.3496311Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T02:49:00.3496314Z 2026-10-24T02:49:00.3496509Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T02:49:00.3496625Z ╭─[packages/shared/src/serverSettings.ts:466:3] 2026-10-24T02:49:00.3496758Z 464 │ null; 2026-10-24T02:49:00.3496908Z 465 │ let nextModelPreferences = initialModelPreferences; 2026-10-24T02:49:00.3496997Z ·  ──────────┬───────── 2026-10-24T02:49:00.3497125Z · ╰── From this accumulator 2026-10-24T02:49:00.3497225Z 466 │ for (const change of setModelsHidden ?? []) { 2026-10-24T02:49:00.3497291Z ·  ─┬─ 2026-10-24T02:49:00.3497395Z · ╰── For this loop 2026-10-24T02:49:00.3497529Z 467 │ const preferences = nextModelPreferences?.[change.provider] ?? { 2026-10-24T02:49:00.3497597Z 468 │ hiddenModels: [], 2026-10-24T02:49:00.3497663Z 469 │ modelOrder: [], 2026-10-24T02:49:00.3497718Z 470 │ }; 2026-10-24T02:49:00.3497899Z 471 │ const hiddenModels = preferences.hiddenModels.filter((model) => model !== change.model); 2026-10-24T02:49:00.3498015Z 472 │ if (change.hidden) hiddenModels.push(change.model); 2026-10-24T02:49:00.3498091Z 473 │ nextModelPreferences = { 2026-10-24T02:49:00.3498167Z 474 │ ...nextModelPreferences, 2026-10-24T02:49:00.3498261Z ·  ───────────┬─────────── 2026-10-24T02:49:00.3498384Z · ╰── From this spread 2026-10-24T02:49:00.3498496Z 475 │ [change.provider]: { ...preferences, hiddenModels }, 2026-10-24T02:49:00.3498547Z ╰──── 2026-10-24T02:49:00.3498705Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T02:49:00.3498866Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T02:49:00.3498869Z 2026-10-24T02:49:00.3499066Z ⚠ react(capitalized-calls): Capitalized function called without JSX 2026-10-24T02:49:00.3499185Z ╭─[apps/mobile/src/lib/useHoverGesture.ts:8:15] 2026-10-24T02:49:00.3499240Z 7 │ () => 2026-10-24T02:49:00.3499306Z 8 │ Gesture.Hover() 2026-10-24T02:49:00.3499382Z ·  ──┬── 2026-10-24T02:49:00.3499516Z · ╰── `Hover` may be a component 2026-10-24T02:49:00.3499589Z 9 │ .manualActivation(true) 2026-10-24T02:49:00.3499640Z ╰──── 2026-10-24T02:49:00.3499934Z  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-24T02:49:00.3500521Z  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-24T02:49:00.3500555Z 2026-10-24T02:49:00.3500775Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:49:00.3500901Z ╭─[apps/mobile/src/lib/markdownDocument.ts:259:28] 2026-10-24T02:49:00.3501002Z 258 │ visit(parser.parse(markdown), false, false); 2026-10-24T02:49:00.3501086Z 259 │ for (const edit of edits.reverse()) 2026-10-24T02:49:00.3501181Z ·  ─────── 2026-10-24T02:49:00.3501347Z 260 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T02:49:00.3501399Z ╰──── 2026-10-24T02:49:00.3501671Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:49:00.3501674Z 2026-10-24T02:49:00.3501895Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:49:00.3502022Z ╭─[apps/mobile/src/lib/markdownDocument.ts:290:28] 2026-10-24T02:49:00.3502101Z 289 │ visit(parser.parse(markdown)); 2026-10-24T02:49:00.3502184Z 290 │ for (const edit of edits.reverse()) 2026-10-24T02:49:00.3502277Z ·  ─────── 2026-10-24T02:49:00.3502439Z 291 │ markdown = markdown.slice(0, edit.start) + edit.content + markdown.slice(edit.end); 2026-10-24T02:49:00.3502491Z ╰──── 2026-10-24T02:49:00.3502758Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:49:00.3502761Z 2026-10-24T02:49:00.3502978Z ⚠ unicorn(no-array-reverse): Use `Array#toReversed()` instead of `Array#reverse()`. 2026-10-24T02:49:00.3503103Z ╭─[apps/mobile/src/lib/markdownDocument.ts:344:38] 2026-10-24T02:49:00.3503181Z 343 │ visit(parser.parse(markdown)); 2026-10-24T02:49:00.3503286Z 344 │ for (const lineStart of lineStarts.reverse()) { 2026-10-24T02:49:00.3503389Z ·  ─────── 2026-10-24T02:49:00.3503557Z 345 │ // The header row may be a lazy line without its container markers (`>` or list indent), 2026-10-24T02:49:00.3503607Z ╰──── 2026-10-24T02:49:00.3503877Z  help: `Array#reverse()` mutates the original array. Use `Array#toReversed()` to return a new reversed array without modifying the original. 2026-10-24T02:49:00.3503880Z 2026-10-24T02:49:00.3504073Z ⚠ oxc(no-accumulating-spread): Do not spread accumulators in loops 2026-10-24T02:49:00.3504205Z ╭─[packages/client-runtime/src/state/shell.ts:189:5] 2026-10-24T02:49:00.3504317Z 186 │ let waiting = yield* Ref.get(awaitingCompletion); 2026-10-24T02:49:00.3504382Z 187 │ let next = initial; 2026-10-24T02:49:00.3504453Z ·  ──┬─ 2026-10-24T02:49:00.3504576Z · ╰── From this accumulator 2026-10-24T02:49:00.3504656Z 188 │ let receivedSnapshot = false; 2026-10-24T02:49:00.3504730Z 189 │ for (const item of items) { 2026-10-24T02:49:00.3504797Z ·  ─┬─ 2026-10-24T02:49:00.3504901Z · ╰── For this loop 2026-10-24T02:49:00.3504989Z 190 │ if (item.kind === "synchronized") { 2026-10-24T02:49:00.3505055Z 191 │ waiting = false; 2026-10-24T02:49:00.3505145Z 192 │ if (Option.isSome(next.snapshot)) { 2026-10-24T02:49:00.3505334Z 193 │ next = { ...next, status: "live", error: Option.none() }; 2026-10-24T02:49:00.3505448Z ·  ───┬─── 2026-10-24T02:49:00.3505577Z · ╰── From this spread 2026-10-24T02:49:00.3505635Z 194 │ } 2026-10-24T02:49:00.3505686Z ╰──── 2026-10-24T02:49:00.3505931Z  help: Consider using `Object.assign()` to mutate the accumulator instead. 2026-10-24T02:49:00.3506092Z  note: Using spreads within accumulators leads to `O(n^2)` time complexity. 2026-10-24T02:49:00.3506094Z 2026-10-24T02:49:00.3506303Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T02:49:00.3506438Z ╭─[packages/client-runtime/src/state/usageAccess.ts:3:8] 2026-10-24T02:49:00.3506511Z 2 │ AuthDiagnosticsReadScope, 2026-10-24T02:49:00.3506586Z 3 │ type AuthSessionState, 2026-10-24T02:49:00.3506673Z ·  ────────┬─────── 2026-10-24T02:49:00.3506818Z · ╰── 'AuthSessionState' is imported here 2026-10-24T02:49:00.3506884Z 4 │ sessionGrantsScope, 2026-10-24T02:49:00.3506935Z ╰──── 2026-10-24T02:49:00.3507033Z  help: Consider removing this import. 2026-10-24T02:49:00.3507036Z 2026-10-24T02:49:00.3507529Z ⚠ 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-24T02:49:00.3507678Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:169:7] 2026-10-24T02:49:00.3507739Z 168 │ }); 2026-10-24T02:49:00.3507946Z 169 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T02:49:00.3508146Z 170 │ │ if ((yield* SubscriptionRef.get(shellState)).status === "synchronizing") break; 2026-10-24T02:49:00.3508251Z 171 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3508385Z 172 │ ╰─▶ } 2026-10-24T02:49:00.3508438Z 173 │ 2026-10-24T02:49:00.3508489Z ╰──── 2026-10-24T02:49:00.3508491Z 2026-10-24T02:49:00.3508972Z ⚠ 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-24T02:49:00.3509125Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:178:7] 2026-10-24T02:49:00.3509237Z 177 │ yield* Deferred.succeed(releaseSave, undefined); 2026-10-24T02:49:00.3509433Z 178 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T02:49:00.3509568Z 179 │ │ if ((yield* Ref.get(saved)).length > 0) break; 2026-10-24T02:49:00.3509671Z 180 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3509805Z 181 │ ╰─▶ } 2026-10-24T02:49:00.3509858Z 182 │ 2026-10-24T02:49:00.3509909Z ╰──── 2026-10-24T02:49:00.3509911Z 2026-10-24T02:49:00.3510512Z ⚠ 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-24T02:49:00.3510701Z ╭─[packages/client-runtime/src/state/shell-sync.test.ts:307:7] 2026-10-24T02:49:00.3510828Z 306 │ yield* Deferred.succeed(releaseUnenrichedSave, undefined); 2026-10-24T02:49:00.3511023Z 307 │ ╭─▶ for (let index = 0; index < 100; index += 1) { 2026-10-24T02:49:00.3511146Z 308 │ │ const values = yield* Ref.get(saved); 2026-10-24T02:49:00.3511343Z 309 │ │ if (values.length > 0 && values.at(-1)?.projects[0]?.repositoryIdentity != null) { 2026-10-24T02:49:00.3511430Z 310 │ │ break; 2026-10-24T02:49:00.3511508Z 311 │ │ } 2026-10-24T02:49:00.3511612Z 312 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3511748Z 313 │ ╰─▶ } 2026-10-24T02:49:00.3511805Z 314 │ 2026-10-24T02:49:00.3511855Z ╰──── 2026-10-24T02:49:00.3511857Z 2026-10-24T02:49:00.3512053Z ⚠ eslint(no-unused-vars): Identifier 'Arr' is imported but never used. 2026-10-24T02:49:00.3512184Z ╭─[packages/client-runtime/src/state/threadSort.ts:4:13] 2026-10-24T02:49:00.3512301Z 3 │ import type { EnvironmentThreadShell } from "./models.ts"; 2026-10-24T02:49:00.3512380Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T02:49:00.3512451Z ·  ─┬─ 2026-10-24T02:49:00.3512575Z · ╰── 'Arr' is imported here 2026-10-24T02:49:00.3512657Z 5 │ import * as Order from "effect/Order"; 2026-10-24T02:49:00.3512708Z ╰──── 2026-10-24T02:49:00.3512810Z  help: Consider removing this import. 2026-10-24T02:49:00.3512816Z 2026-10-24T02:49:00.3513012Z ⚠ eslint(no-unused-vars): Identifier 'Order' is imported but never used. 2026-10-24T02:49:00.3513141Z ╭─[packages/client-runtime/src/state/threadSort.ts:5:13] 2026-10-24T02:49:00.3513219Z 4 │ import * as Arr from "effect/Array"; 2026-10-24T02:49:00.3513299Z 5 │ import * as Order from "effect/Order"; 2026-10-24T02:49:00.3513372Z ·  ──┬── 2026-10-24T02:49:00.3513501Z · ╰── 'Order' is imported here 2026-10-24T02:49:00.3513553Z 6 │ 2026-10-24T02:49:00.3513602Z ╰──── 2026-10-24T02:49:00.3513697Z  help: Consider removing this import. 2026-10-24T02:49:00.3513699Z 2026-10-24T02:49:00.3513912Z ⚠ typescript(no-this-alias): Unexpected aliasing of 'this' to local variable. 2026-10-24T02:49:00.3514041Z ╭─[apps/web/src/contextMenuFallback.test.ts:38:9] 2026-10-24T02:49:00.3514107Z 37 │ get isConnected() { 2026-10-24T02:49:00.3514196Z 38 │ let current: FakeElement | null = this; 2026-10-24T02:49:00.3514268Z ·  ─────── 2026-10-24T02:49:00.3514340Z 39 │ while (current?.parent) { 2026-10-24T02:49:00.3514390Z ╰──── 2026-10-24T02:49:00.3514676Z  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-24T02:49:00.3514679Z 2026-10-24T02:49:00.3514850Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3514972Z ╭─[apps/web/src/hooks/useThreadActions.ts:821:56] 2026-10-24T02:49:00.3515075Z 820 │ const resolved = resolveThreadTarget(target); 2026-10-24T02:49:00.3515393Z 821 │ if (resolved && !canSnooze(resolved.thread, { now: new Date().toISOString() })) { 2026-10-24T02:49:00.3515554Z ·  ─────┬──── 2026-10-24T02:49:00.3515724Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3515804Z 822 │ return AsyncResult.failure( 2026-10-24T02:49:00.3515852Z ╰──── 2026-10-24T02:49:00.3516142Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.3516453Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3516455Z 2026-10-24T02:49:00.3516632Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3516756Z ╭─[apps/web/src/hooks/useThreadActions.ts:709:46] 2026-10-24T02:49:00.3516825Z 708 │ const wokeAt = resolved 2026-10-24T02:49:00.3516960Z 709 │ ? threadWokeAt(resolved.thread, { now: new Date().toISOString() }) 2026-10-24T02:49:00.3517075Z ·  ─────┬──── 2026-10-24T02:49:00.3517236Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3517296Z 710 │ : null; 2026-10-24T02:49:00.3517349Z ╰──── 2026-10-24T02:49:00.3517635Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.3517947Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3517952Z 2026-10-24T02:49:00.3518150Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3518324Z ╭─[apps/web/src/components/pullRequest/PullRequestChecksPopover.tsx:88:15] 2026-10-24T02:49:00.3518385Z 87 │
  • 0 ? value : null; 2026-10-24T02:49:00.3519901Z ╰──── 2026-10-24T02:49:00.3520006Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3520009Z 2026-10-24T02:49:00.3520364Z ⚠ unicorn(prefer-set-has): should be a `Set`, and use `.has()` to check existence or non-existence. 2026-10-24T02:49:00.3520561Z ╭─[apps/web/src/components/pullRequest/pullRequestList.logic.ts:265:9] 2026-10-24T02:49:00.3520622Z 264 │ ): boolean { 2026-10-24T02:49:00.3520775Z 265 │ const labels = entry.labels.map((label) => label.name.trim().toLowerCase()); 2026-10-24T02:49:00.3520937Z ·  ───────────────────────────────────────────────────────────────────── 2026-10-24T02:49:00.3521086Z 266 │ const holds = (label: string) => labels.includes(label.trim().toLowerCase()); 2026-10-24T02:49:00.3521136Z ╰──── 2026-10-24T02:49:00.3521212Z  help: Switch to `Set` 2026-10-24T02:49:00.3521214Z 2026-10-24T02:49:00.3521416Z ⚠ eslint(no-unused-vars): Identifier 'identity' is imported but never used. 2026-10-24T02:49:00.3521526Z ╭─[apps/server/src/auth/http.ts:28:10] 2026-10-24T02:49:00.3521618Z 27 │ import * as Schema from "effect/Schema"; 2026-10-24T02:49:00.3521710Z 28 │ import { identity } from "effect/Function"; 2026-10-24T02:49:00.3521784Z ·  ────┬─── 2026-10-24T02:49:00.3521916Z · ╰── 'identity' is imported here 2026-10-24T02:49:00.3521999Z 29 │ import * as Layer from "effect/Layer"; 2026-10-24T02:49:00.3522049Z ╰──── 2026-10-24T02:49:00.3522145Z  help: Consider removing this import. 2026-10-24T02:49:00.3522148Z 2026-10-24T02:49:00.3522344Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3522490Z ╭─[apps/mobile/modules/t3-source-text/src/SourceText.tsx:36:9] 2026-10-24T02:49:00.3522577Z 35 │ rest), 2026-10-24T02:49:00.3524743Z ·  ┬ 2026-10-24T02:49:00.3524909Z · ╰── '_' is declared here 2026-10-24T02:49:00.3524974Z 556 │ [ 2026-10-24T02:49:00.3525027Z ╰──── 2026-10-24T02:49:00.3525131Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3525133Z 2026-10-24T02:49:00.3525319Z ⚠ eslint(no-unused-vars): Parameter '_' is declared but never used. 2026-10-24T02:49:00.3525500Z ╭─[apps/server/src/orchestration-v2/PullRequestSyncReactor.test.ts:1155:70] 2026-10-24T02:49:00.3525583Z 1154 │ assert.deepStrictEqual( 2026-10-24T02:49:00.3525752Z 1155 │ (yield* Ref.get(fixture.linkCommands)).map(({ commandId: _, ...rest }) => rest), 2026-10-24T02:49:00.3525875Z ·  ┬ 2026-10-24T02:49:00.3526040Z · ╰── '_' is declared here 2026-10-24T02:49:00.3526105Z 1156 │ [ 2026-10-24T02:49:00.3526160Z ╰──── 2026-10-24T02:49:00.3526263Z  help: Consider removing this parameter. 2026-10-24T02:49:00.3526265Z 2026-10-24T02:49:00.3526751Z ⚠ 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-24T02:49:00.3526921Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:566:7] 2026-10-24T02:49:00.3527021Z 565 │ let afterSequence = created[0]!.sequence; 2026-10-24T02:49:00.3527222Z 566 │ ╭─▶ for (let index = 1; index <= 32; index += 1) { 2026-10-24T02:49:00.3527324Z 567 │ │ const nextEvent = { 2026-10-24T02:49:00.3527490Z 568 │ │ id: EventId.make(`event:foundation-stream-race:${index}`), 2026-10-24T02:49:00.3527626Z 569 │ │ type: "thread.metadata-updated" as const, 2026-10-24T02:49:00.3527717Z 570 │ │ threadId, 2026-10-24T02:49:00.3527822Z 571 │ │ providerInstanceId, 2026-10-24T02:49:00.3527922Z 572 │ │ occurredAt: now, 2026-10-24T02:49:00.3528072Z 573 │ │ payload: { ...thread, title: `Race update ${index}` }, 2026-10-24T02:49:00.3528202Z 574 │ │ } satisfies OrchestrationV2DomainEvent; 2026-10-24T02:49:00.3528317Z 575 │ │ const reader = yield* eventSink 2026-10-24T02:49:00.3528440Z 576 │ │ .stream({ threadId, afterSequence }) 2026-10-24T02:49:00.3528645Z 577 │ │ .pipe(Stream.runHead, Effect.forkChild); 2026-10-24T02:49:00.3528782Z 578 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3528949Z 579 │ │ const written = yield* eventSink.write({ events: [nextEvent] }); 2026-10-24T02:49:00.3529078Z 580 │ │ const received = yield* Fiber.join(reader); 2026-10-24T02:49:00.3529192Z 581 │ │ if (Option.isNone(received)) { 2026-10-24T02:49:00.3529397Z 582 │ │ return yield* Effect.die("The event stream ended before delivering the live event."); 2026-10-24T02:49:00.3529476Z 583 │ │ } 2026-10-24T02:49:00.3529639Z 584 │ │ assert.equal(received.value.sequence, written[0]?.sequence); 2026-10-24T02:49:00.3529792Z 585 │ │ assert.equal(received.value.event.id, nextEvent.id); 2026-10-24T02:49:00.3529923Z 586 │ │ afterSequence = received.value.sequence; 2026-10-24T02:49:00.3530076Z 587 │ ╰─▶ } 2026-10-24T02:49:00.3530135Z 588 │ }), 2026-10-24T02:49:00.3530187Z ╰──── 2026-10-24T02:49:00.3530189Z 2026-10-24T02:49:00.3530675Z ⚠ 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-24T02:49:00.3530851Z ╭─[apps/server/src/orchestration-v2/FoundationPersistence.test.ts:2327:9] 2026-10-24T02:49:00.3530928Z 2326 │ let settled = false; 2026-10-24T02:49:00.3531097Z 2327 │ ╭─▶ while (!settled) { 2026-10-24T02:49:00.3531262Z 2328 │ │ settled = (yield* outbox.listByCommandId(commandId)).every( 2026-10-24T02:49:00.3531396Z 2329 │ │ (effect) => effect.status === "succeeded", 2026-10-24T02:49:00.3531478Z 2330 │ │ ); 2026-10-24T02:49:00.3531606Z 2331 │ │ if (!settled) yield* Effect.yieldNow; 2026-10-24T02:49:00.3531742Z 2332 │ ╰─▶ } 2026-10-24T02:49:00.3531858Z 2333 │ }).pipe(Effect.provide(layerWorker), Effect.scoped); 2026-10-24T02:49:00.3531910Z ╰──── 2026-10-24T02:49:00.3531913Z 2026-10-24T02:49:00.3532113Z ⚠ react(no-array-index-key): Usage of Array index in keys is not allowed 2026-10-24T02:49:00.3532288Z ╭─[apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx:814:17] 2026-10-24T02:49:00.3532353Z 813 │
    { 2026-10-24T02:49:00.3533851Z 237 │ const input = Schema.decodeUnknownSync(SettingsUpdate)(payload); 2026-10-24T02:49:00.3533957Z ·  ──────────────────────── 2026-10-24T02:49:00.3534097Z 238 │ const scopes = requiredScopesForServerSettingsPatch(input.patch); 2026-10-24T02:49:00.3534147Z ╰──── 2026-10-24T02:49:00.3534149Z 2026-10-24T02:49:00.3534527Z ⚠ 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-24T02:49:00.3534652Z ╭─[apps/server/src/auth/RpcAuthorization.ts:256:26] 2026-10-24T02:49:00.3534756Z 255 │ if (method === WS_METHODS.assetsCreateUrl) { 2026-10-24T02:49:00.3534916Z 256 │ const { resource } = Schema.decodeUnknownSync(AssetCreateUrlInput)(payload); 2026-10-24T02:49:00.3535027Z ·  ──────────────────────── 2026-10-24T02:49:00.3535088Z 257 │ return [ 2026-10-24T02:49:00.3535139Z ╰──── 2026-10-24T02:49:00.3535141Z 2026-10-24T02:49:00.3535313Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3535443Z ╭─[apps/web/src/components/CommandPalette.tsx:1996:20] 2026-10-24T02:49:00.3535561Z 1995 │ title: inferProjectTitleFromPath(destinationPath), 2026-10-24T02:49:00.3535655Z 1996 │ createdAt: new Date().toISOString(), 2026-10-24T02:49:00.3535747Z ·  ─────┬──── 2026-10-24T02:49:00.3535897Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3536008Z 1997 │ remoteUrl: addProjectCloneFlow.remoteUrl, 2026-10-24T02:49:00.3536061Z ╰──── 2026-10-24T02:49:00.3536353Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.3536664Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3536667Z 2026-10-24T02:49:00.3536960Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T02:49:00.3537132Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:473:19] 2026-10-24T02:49:00.3537192Z 472 │ onFilters, 2026-10-24T02:49:00.3537263Z 473 │ authorOptions = [], 2026-10-24T02:49:00.3537342Z ·  ── 2026-10-24T02:49:00.3537408Z 474 │ labelOptions = [], 2026-10-24T02:49:00.3537459Z ╰──── 2026-10-24T02:49:00.3537787Z  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-24T02:49:00.3537791Z 2026-10-24T02:49:00.3538079Z ⚠ react(no-object-type-as-default-prop): Do not use an array literal as default prop value. Use a stable reference instead. 2026-10-24T02:49:00.3538249Z ╭─[apps/web/src/components/pullRequest/PullRequestListFilters.tsx:474:18] 2026-10-24T02:49:00.3538315Z 473 │ authorOptions = [], 2026-10-24T02:49:00.3538380Z 474 │ labelOptions = [], 2026-10-24T02:49:00.3538454Z ·  ── 2026-10-24T02:49:00.3538591Z 475 │ optionScope, 2026-10-24T02:49:00.3538673Z ╰──── 2026-10-24T02:49:00.3539000Z  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-24T02:49:00.3539003Z 2026-10-24T02:49:00.3539210Z ⚠ eslint(no-unused-vars): Type 'AuthSessionState' is imported but never used. 2026-10-24T02:49:00.3539342Z ╭─[packages/client-runtime/src/state/filesystem.ts:3:8] 2026-10-24T02:49:00.3539414Z 2 │ AuthFilesystemReadScope, 2026-10-24T02:49:00.3539482Z 3 │ type AuthSessionState, 2026-10-24T02:49:00.3539564Z ·  ────────┬─────── 2026-10-24T02:49:00.3539710Z · ╰── 'AuthSessionState' is imported here 2026-10-24T02:49:00.3539791Z 4 │ type FilesystemBrowseEntry, 2026-10-24T02:49:00.3539844Z ╰──── 2026-10-24T02:49:00.3539940Z  help: Consider removing this import. 2026-10-24T02:49:00.3539943Z 2026-10-24T02:49:00.3540117Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3540237Z ╭─[apps/mobile/src/native/StackHeader.tsx:185:9] 2026-10-24T02:49:00.3540299Z 184 │ "options", 2026-10-24T02:49:00.3540394Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T02:49:00.3540504Z ·  ────────────────┬─────────────── 2026-10-24T02:49:00.3540702Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3540798Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T02:49:00.3540848Z ╰──── 2026-10-24T02:49:00.3541345Z  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-24T02:49:00.3541652Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3541654Z 2026-10-24T02:49:00.3541801Z ⚠ react(refs): Cannot access refs during render 2026-10-24T02:49:00.3541919Z ╭─[apps/mobile/src/native/StackHeader.tsx:186:9] 2026-10-24T02:49:00.3542011Z 185 │ latestOptionFunctionsRef.current, 2026-10-24T02:49:00.3542105Z 186 │ optionFunctionWrappersRef.current, 2026-10-24T02:49:00.3542215Z ·  ────────────────┬──────────────── 2026-10-24T02:49:00.3542477Z · ╰── Passing a ref to a function may read its value during render 2026-10-24T02:49:00.3542598Z 187 │ ) as NativeStackNavigationOptions) 2026-10-24T02:49:00.3542649Z ╰──── 2026-10-24T02:49:00.3543136Z  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-24T02:49:00.3543439Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/refs 2026-10-24T02:49:00.3543442Z 2026-10-24T02:49:00.3543688Z ⚠ unicorn(prefer-string-starts-ends-with): Prefer String#startsWith over a regex with a caret. 2026-10-24T02:49:00.3543816Z ╭─[apps/server/src/vcs/GitVcsDriverCore.ts:509:11] 2026-10-24T02:49:00.3543918Z 508 │ GIT_DIAGNOSTIC_LINE_PATTERN.test(line) || 2026-10-24T02:49:00.3544055Z 509 │ (!/^remote:/.test(line) && SSH_TRANSPORT_REFUSAL_PATTERN.test(line)), 2026-10-24T02:49:00.3544140Z ·  ─────────────── 2026-10-24T02:49:00.3544194Z 510 │ ) 2026-10-24T02:49:00.3544247Z ╰──── 2026-10-24T02:49:00.3544403Z  help: Replace `/^remote:/.test(line)` with `line.startsWith('remote:')`. 2026-10-24T02:49:00.3544406Z 2026-10-24T02:49:00.3544893Z ⚠ 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-24T02:49:00.3545052Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1228:7] 2026-10-24T02:49:00.3545147Z 1227 │ yield* harness.replaceSession; 2026-10-24T02:49:00.3545362Z 1228 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3545517Z 1229 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) { 2026-10-24T02:49:00.3545606Z 1230 │ │ break; 2026-10-24T02:49:00.3545683Z 1231 │ │ } 2026-10-24T02:49:00.3545790Z 1232 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3546014Z 1233 │ ╰─▶ } 2026-10-24T02:49:00.3546087Z 1234 │ yield* Queue.offer( 2026-10-24T02:49:00.3546138Z ╰──── 2026-10-24T02:49:00.3546141Z 2026-10-24T02:49:00.3546627Z ⚠ 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-24T02:49:00.3546784Z ╭─[packages/client-runtime/src/state/threads-sync.test.ts:1337:7] 2026-10-24T02:49:00.3546873Z 1336 │ yield* harness.replaceSession; 2026-10-24T02:49:00.3547083Z 1337 │ ╭─▶ for (let attempt = 0; attempt < 100; attempt += 1) { 2026-10-24T02:49:00.3547245Z 1338 │ │ if ((yield* Ref.get(harness.subscriptionCount)) >= 2) break; 2026-10-24T02:49:00.3547351Z 1339 │ │ yield* Effect.yieldNow; 2026-10-24T02:49:00.3547484Z 1340 │ ╰─▶ } 2026-10-24T02:49:00.3547695Z 1341 │ expect(yield* Ref.get(harness.subscriptionCount)).toBe(2); 2026-10-24T02:49:00.3547786Z ╰──── 2026-10-24T02:49:00.3547789Z 2026-10-24T02:49:00.3548159Z ⚠ 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-24T02:49:00.3548295Z ╭─[apps/server/src/vcs/GitVcsDriverCore.test.ts:1786:34] 2026-10-24T02:49:00.3548430Z 1785 │ const stat = branch.files!.find((file) => file.path === path)!; 2026-10-24T02:49:00.3548576Z 1786 │ const request = yield* Schema.decodeEffect(ReviewDiffPreviewInput)({ 2026-10-24T02:49:00.3548693Z ·  ─────────────────── 2026-10-24T02:49:00.3548757Z 1787 │ cwd, 2026-10-24T02:49:00.3548808Z ╰──── 2026-10-24T02:49:00.3548810Z 2026-10-24T02:49:00.3548987Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3549139Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:372:47] 2026-10-24T02:49:00.3549270Z 371 │ const { open, onOpenChange, onSnooze, timestampFormat } = props; 2026-10-24T02:49:00.3549424Z 372 │ const presets = open ? resolveSnoozePresets(new Date(), timestampFormat) : []; 2026-10-24T02:49:00.3549537Z ·  ─────┬──── 2026-10-24T02:49:00.3549700Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3549761Z 373 │ return ( 2026-10-24T02:49:00.3549812Z ╰──── 2026-10-24T02:49:00.3550137Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.3550449Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3550451Z 2026-10-24T02:49:00.3550622Z ⚠ react(purity): Cannot call impure function during render 2026-10-24T02:49:00.3550769Z ╭─[apps/web/src/components/sidebar/SidebarThreadRow.tsx:853:39] 2026-10-24T02:49:00.3550863Z 852 │ if (snoozeGateClock.thread !== thread) { 2026-10-24T02:49:00.3550992Z 853 │ setSnoozeGateClock({ thread, now: new Date().toISOString() }); 2026-10-24T02:49:00.3551102Z ·  ─────┬──── 2026-10-24T02:49:00.3551259Z · ╰── Cannot call impure function 2026-10-24T02:49:00.3551318Z 854 │ } 2026-10-24T02:49:00.3551372Z ╰──── 2026-10-24T02:49:00.3551657Z  help: `Date` is an impure function. Calling an impure function can produce unstable results that update unpredictably when the component re-renders 2026-10-24T02:49:00.3551966Z  note: React Compiler skipped optimizing this component or hook. Additional guidance: https://react.dev/reference/eslint-plugin-react-hooks/lints/purity 2026-10-24T02:49:00.3551968Z 2026-10-24T02:49:00.3552236Z ⚠ eslint(no-unused-vars): Variable 'layer' is declared but never used. Unused variables should start with a '_'. 2026-10-24T02:49:00.3552359Z ╭─[apps/server/src/serverRuntimeStartup.ts:728:7] 2026-10-24T02:49:00.3552412Z 727 │ 2026-10-24T02:49:00.3552493Z 728 │ const layer = layerWithOptions(); 2026-10-24T02:49:00.3552566Z ·  ──┬── 2026-10-24T02:49:00.3552757Z · ╰── 'layer' is declared here 2026-10-24T02:49:00.3552843Z ╰──── 2026-10-24T02:49:00.3552947Z  help: Consider removing this declaration. 2026-10-24T02:49:00.3552950Z 2026-10-24T02:49:00.3553033Z Found 0 errors and 362 warnings in 5407 files (5.5s, 8 threads) 2026-10-24T02:49:00.4052743Z Post job cleanup. 2026-10-24T02:49:00.4694414Z Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache. 2026-10-24T02:49:00.4774135Z Post job cleanup. 2026-10-24T02:49:00.4787742Z ##[start-action display=Cache full pnpm store;id=__5f15b9ab-6912-45a9-87ad-9ad2807b10f5.__actions_cache] 2026-10-24T02:49:00.5548137Z Post job cleanup. 2026-10-24T02:49:00.6201240Z Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-3cb0b4d7cff93dc8fe33f2ea73cac71ca25a36270fcb648b9b4a9320151012ef, not saving cache. 2026-10-24T02:49:00.6242488Z ##[end-action id=__5f15b9ab-6912-45a9-87ad-9ad2807b10f5.__actions_cache;outcome=success;conclusion=success;duration_ms=145] 2026-10-24T02:49:00.6244520Z ##[start-action display=Cache Vite+;id=__5f15b9ab-6912-45a9-87ad-9ad2807b10f5.vp_cache] 2026-10-24T02:49:00.6266415Z Post job cleanup. 2026-10-24T02:49:00.6921725Z 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-24T02:49:00.6957231Z ##[end-action id=__5f15b9ab-6912-45a9-87ad-9ad2807b10f5.vp_cache;outcome=success;conclusion=success;duration_ms=71] 2026-10-24T02:49:00.6994337Z Post job cleanup. 2026-10-24T02:49:00.7442178Z [command]/usr/local/bin/git version 2026-10-24T02:49:00.7471510Z git version 2.55.0 2026-10-24T02:49:00.7489594Z Temporarily overriding HOME='/home/runner/_work/_temp/4d798956-aa28-4760-b21a-00a76fead5b0' before making global git config changes 2026-10-24T02:49:00.7489965Z Adding repository directory to the temporary git global config as a safe directory 2026-10-24T02:49:00.7492767Z [command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code 2026-10-24T02:49:00.7514184Z Removing SSH command configuration 2026-10-24T02:49:00.7517219Z [command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand 2026-10-24T02:49:00.7539371Z [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-24T02:49:00.7674298Z fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules 2026-10-24T02:49:00.7698138Z ##[warning]The process '/usr/local/bin/git' failed with exit code 128 2026-10-24T02:49:00.7739835Z A job completed hook has been configured by the self-hosted runner administrator 2026-10-24T02:49:00.7766073Z ##[group]Run '/job_completed.sh' 2026-10-24T02:49:00.7779952Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0} 2026-10-24T02:49:00.7780224Z env: 2026-10-24T02:49:00.7780383Z BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 136 2026-10-24T02:49:00.7780608Z BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 365 2026-10-24T02:49:00.7780772Z BLACKSMITH_CHECK_RUN_ID: 120758038962 2026-10-24T02:49:00.7780920Z BLACKSMITH_JOB_DISPLAY_NAME: Lint 2026-10-24T02:49:00.7781060Z GITHUB_ACTIONS_CACHE_MODE: write 2026-10-24T02:49:00.7781196Z ##[endgroup] 2026-10-24T02:49:00.7865372Z Docker container cache not activated, skipping hash computation. 2026-10-24T02:49:00.8157989Z No active SSH sessions detected. Proceeding with shutdown immediately. 2026-10-24T02:49:00.8202690Z Cleaning up orphan processes